Author: zothar
Date: 2006-06-08 04:42:51 +0000 (Thu, 08 Jun 2006)
New Revision: 9081

Modified:
   trunk/freenet/src/freenet/node/ARKFetcher.java
   trunk/freenet/src/freenet/node/PeerNode.java
Log:
Limit the node to 30 simultaneous ARK Fetch Requests since we UserAlert at 20 
disconnected peers anyway.  Don't continue the ARKFetcher.start() routine if 
it's already been started and hasn't stopped yet.

Modified: trunk/freenet/src/freenet/node/ARKFetcher.java
===================================================================
--- trunk/freenet/src/freenet/node/ARKFetcher.java      2006-06-08 04:06:33 UTC 
(rev 9080)
+++ trunk/freenet/src/freenet/node/ARKFetcher.java      2006-06-08 04:42:51 UTC 
(rev 9081)
@@ -30,6 +30,7 @@
        private int backoff = MIN_BACKOFF;
        private String identity;
        private boolean isFetching = false;
+       private boolean started = false;

        public ARKFetcher(PeerNode peer, Node node) {
                this.peer = peer;
@@ -46,6 +47,10 @@
         */
        public synchronized void start() {
                ClientGetter cg = null;
+               if(started) {  // We only need one ARKFetcher per PeerNode
+                 return;
+               }
+               started = true;
                // Start fetch
                shouldRun = true;
                if(getter == null) {
@@ -83,6 +88,7 @@
                Logger.minor(this, "Cancelling ARK fetch for "+peer);
                shouldRun = false;
                synchronized(this){
+                       started = false;
                        if(isFetching) {
                                node.removeARKFetcher(identity,this);
                                isFetching = false;
@@ -94,6 +100,7 @@

        public synchronized void onSuccess(FetchResult result, ClientGetter 
state) {
                Logger.minor(this, "Fetched ARK for "+peer, new 
Exception("debug"));
+               started = false;
                // Fetcher context specifies an upper bound on size.
                backoff = MIN_BACKOFF;

@@ -124,6 +131,7 @@
        }

        public synchronized void onFailure(FetchException e, ClientGetter 
state) {
+               started = false;
                Logger.minor(this, "Failed to fetch ARK for "+peer+" : "+e, e);

                if(isFetching) {
@@ -145,7 +153,7 @@
                Logger.minor(this, "Failed to fetch ARK for "+peer+", now 
backing off ARK fetches for "+(int) (backoff / 1000)+" seconds");
                // We may be on the PacketSender thread.
                // FIXME should this be exponential backoff?
-               node.ps.queueTimedJob(new FastRunnable() { public void run() { 
start(); }}, backoff);
+               node.ps.queueTimedJob(new Runnable() { public void run() { 
start(); }}, backoff);  // Runnable rather than FastRunnable so we don't put 
ourselves on the PacketSender thread anyway
        }

        public void onSuccess(BaseClientPutter state) {

Modified: trunk/freenet/src/freenet/node/PeerNode.java
===================================================================
--- trunk/freenet/src/freenet/node/PeerNode.java        2006-06-08 04:06:33 UTC 
(rev 9080)
+++ trunk/freenet/src/freenet/node/PeerNode.java        2006-06-08 04:42:51 UTC 
(rev 9081)
@@ -843,13 +843,19 @@
             this.handshakeCount++;
         }
         // Don't fetch ARKs for peers we have verified (through handshake) to 
be incompatible with us
-        if(handshakeCount == MAX_HANDSHAKE_COUNT && 
!(verifiedIncompatibleOlderVersion || verifiedIncompatibleNewerVersion)) {
-               Logger.normal( this, "Starting ARK Fetcher after 
"+handshakeCount+" failed handshakes for "+getPeer()+" with identity 
'"+getIdentityString()+"'");
-               long arkFetcherStartTime1 = System.currentTimeMillis();
-               arkFetcher.start();
-               long arkFetcherStartTime2 = System.currentTimeMillis();
-               if((arkFetcherStartTime2 - arkFetcherStartTime1) > 500)
-                       Logger.normal(this, "arkFetcherStartTime2 is more than 
half a second after arkFetcherStartTime1 ("+(arkFetcherStartTime2 - 
arkFetcherStartTime1)+") working on "+myName);
+        if(handshakeCount >= MAX_HANDSHAKE_COUNT && 
!(verifiedIncompatibleOlderVersion || verifiedIncompatibleNewerVersion)) {
+               int numARKFetchers = node.getNumARKFetchers();
+               if( numARKFetchers >= 30 ) {  // Limit concurrent ARK Fetch 
Requests to 30 since we UserAlert at 20 disconnected peers anyway
+                               Logger.minor( this, "Not starting ARK Fetcher 
after "+handshakeCount+" failed handshakes for "+getPeer()+" with identity 
'"+getIdentityString()+"' because there are already 30 ARK Fetchers running.");
+               } else {
+                               Logger.normal( this, "Starting ARK Fetcher 
after "+handshakeCount+" failed handshakes for "+getPeer()+" with identity 
'"+getIdentityString()+"'");
+                               long arkFetcherStartTime1 = 
System.currentTimeMillis();
+                               arkFetcher.start();
+                               long arkFetcherStartTime2 = 
System.currentTimeMillis();
+                               if((arkFetcherStartTime2 - 
arkFetcherStartTime1) > 500) {
+                                       Logger.normal(this, 
"arkFetcherStartTime2 is more than half a second after arkFetcherStartTime1 
("+(arkFetcherStartTime2 - arkFetcherStartTime1)+") working on "+myName);
+                               }
+                       }
         }
     }



Reply via email to