Author: zothar
Date: 2006-06-16 20:52:19 +0000 (Fri, 16 Jun 2006)
New Revision: 9233

Modified:
   trunk/freenet/src/freenet/node/ARKFetchManager.java
   trunk/freenet/src/freenet/node/ARKFetcher.java
   trunk/freenet/src/freenet/node/PeerManager.java
   trunk/freenet/src/freenet/node/PeerNode.java
   trunk/freenet/src/freenet/node/Version.java
Log:
820: Fix problem preventing ARK redirects from working (caused by typo).  
Status/routingBackoffReason related tweaks.  ARKFetcher fixes/tweaks.

Modified: trunk/freenet/src/freenet/node/ARKFetchManager.java
===================================================================
--- trunk/freenet/src/freenet/node/ARKFetchManager.java 2006-06-16 16:25:56 UTC 
(rev 9232)
+++ trunk/freenet/src/freenet/node/ARKFetchManager.java 2006-06-16 20:52:19 UTC 
(rev 9233)
@@ -30,13 +30,22 @@

        public void addReadyARKFetcher(ARKFetcher arkFetcher) {
                synchronized(readyARKFetchers) {
-                       if(readyARKFetchers.contains(arkFetcher)) {
+                       if(hasReadyARKFetcher(arkFetcher)) {
                                Logger.error(this, arkFetcher.peer.getPeer()+" 
already in readyARKFetchers");
                                return;
                        }
                        readyARKFetchers.addLast(arkFetcher);
                }
        }
+
+       public boolean hasReadyARKFetcher(ARKFetcher arkFetcher) {
+               synchronized(readyARKFetchers) {
+                       if(readyARKFetchers.contains(arkFetcher)) {
+                               return true;
+                       }
+                       return false;
+               }
+       }

        public boolean hasReadyARKFetchers() {
                if(readyARKFetchers.size() > 0) {
@@ -70,7 +79,7 @@

        public void removeReadyARKFetcher(ARKFetcher arkFetcher) {
                synchronized(readyARKFetchers) {
-                       if(!readyARKFetchers.contains(arkFetcher)) {
+                       if(!hasReadyARKFetcher(arkFetcher)) {
                                return;
                        }
                        readyARKFetchers.remove(arkFetcher);

Modified: trunk/freenet/src/freenet/node/ARKFetcher.java
===================================================================
--- trunk/freenet/src/freenet/node/ARKFetcher.java      2006-06-16 16:25:56 UTC 
(rev 9232)
+++ trunk/freenet/src/freenet/node/ARKFetcher.java      2006-06-16 20:52:19 UTC 
(rev 9233)
@@ -25,8 +25,8 @@
        private ClientGetter getter;
        private FreenetURI fetchingURI;
        private boolean shouldRun = false;
-       private static final int MAX_BACKOFF = 60*60*1000;
-       private static final int MIN_BACKOFF = 5*1000;
+       private static final int MAX_BACKOFF = 60*60*1000;  // 1 hour
+       private static final int MIN_BACKOFF = 5*1000;  // 5 seconds
        private int backoff = MIN_BACKOFF;
        private String identity;
        private boolean isFetching = false;
@@ -46,6 +46,15 @@
         * see if we can find something more recent).
         */
        public synchronized void queue() {
+               if(node.arkFetchManager.hasReadyARKFetcher(this)) {
+                       return;
+               }
+               if(peer.isConnected()) {
+                       return;
+               }
+               if(isFetching) {
+                       return;
+               }
                Logger.normal( this, "Queueing ARK Fetcher after 
"+peer.getHandshakeCount()+" failed handshakes for "+peer.getPeer()+" with 
identity '"+peer.getIdentityString()+"'");
                node.arkFetchManager.addReadyARKFetcher(this);
        }
@@ -54,6 +63,15 @@
         * Called when the ARKFetchManager says it's our turn to start fetching.
         */
        public synchronized void start() {
+               if(node.arkFetchManager.hasReadyARKFetcher(this)) {
+                       node.arkFetchManager.removeReadyARKFetcher(this);
+               }
+               if(peer.isConnected()) {
+                       return;
+               }
+               if(isFetching) {
+                       return;
+               }
                ClientGetter cg = null;
                if(started) {  // We only need one ARKFetcher per PeerNode
                  return;
@@ -104,7 +122,9 @@
                        started = false;
                        if(isFetching) {
                                node.removeARKFetcher(identity,this);
-                               
node.arkFetchManager.removeReadyARKFetcher(this);
+                               
if(node.arkFetchManager.hasReadyARKFetcher(this)) {
+                                       
node.arkFetchManager.removeReadyARKFetcher(this);
+                               }
                                isFetching = false;
                        }
                }
@@ -121,6 +141,9 @@

                        if(isFetching) {
                                node.removeARKFetcher(identity,this);
+                               
if(node.arkFetchManager.hasReadyARKFetcher(this)) {
+                                       
node.arkFetchManager.removeReadyARKFetcher(this);
+                               }
                                isFetching = false;
                        }

@@ -139,7 +162,7 @@
                SimpleFieldSet fs;
                try {
                        fs = new SimpleFieldSet(ref, true);
-                       Logger.minor(this, "Got ARK for "+peer);
+                       Logger.minor(this, "Got ARK for "+peer.getPeer());
                        peer.gotARK(fs, startedEdition);
                } catch (IOException e) {
                        // Corrupt ref.
@@ -154,6 +177,9 @@

                        if(isFetching) {
                                node.removeARKFetcher(identity,this);
+                               
if(node.arkFetchManager.hasReadyARKFetcher(this)) {
+                                       
node.arkFetchManager.removeReadyARKFetcher(this);
+                               }
                                isFetching = false;
                        }

@@ -167,11 +193,12 @@
                        }
                }
                if(e.newURI != null) {
+                       Logger.minor(this, "Failed to fetch ARK for 
"+peer.getPeer()+", "+fetchingURI+" gave redirect to "+e.newURI);
                        peer.updateARK(e.newURI);
                        queueWithBackoff();
                        return;
                }
-               Logger.minor(this, "Failed to fetch ARK for "+peer+", now 
backing off ARK fetches for "+(int) (backoff / 1000)+" seconds");
+               Logger.minor(this, "Failed to fetch ARK for "+peer.getPeer()+", 
now backing off ARK fetches for "+(int) (backoff / 1000)+" seconds");
                // We may be on the PacketSender thread.
                // FIXME should this be exponential backoff?
                queueWithBackoff();
@@ -179,14 +206,17 @@

        public void onSuccess(BaseClientPutter state) {
                // Impossible.
+               Logger.error(this, "Impossible reached in 
ARKFetcher.onSuccess(BaseClientPutter) for peer "+peer.getPeer(), new 
Exception("error"));
        }

        public void onFailure(InserterException e, BaseClientPutter state) {
                // Impossible.
+               Logger.error(this, "Impossible reached in 
ARKFetcher.onFailure(InserterException,BaseClientPutter) for peer 
"+peer.getPeer(), new Exception("error"));
        }

        public void onGeneratedURI(FreenetURI uri, BaseClientPutter state) {
                // Impossible.
+               Logger.error(this, "Impossible reached in 
ARKFetcher.onGeneratredURI(FreenetURI,BaseClientPutter) for peer 
"+peer.getPeer(), new Exception("error"));
        }

        public boolean isFetching() {

Modified: trunk/freenet/src/freenet/node/PeerManager.java
===================================================================
--- trunk/freenet/src/freenet/node/PeerManager.java     2006-06-16 16:25:56 UTC 
(rev 9232)
+++ trunk/freenet/src/freenet/node/PeerManager.java     2006-06-16 20:52:19 UTC 
(rev 9233)
@@ -122,6 +122,12 @@
         for(int i=0;i<myPeers.length;i++) {
             if(myPeers[i] == pn) isInPeers=true;
         }
+        int peerNodeStatus = pn.getPeerNodeStatus();
+        node.removePeerNodeStatus( peerNodeStatus, pn );
+        String peerNodePreviousRoutingBackoffReason = 
pn.getPreviousBackoffReason();
+        if(peerNodePreviousRoutingBackoffReason != null) {
+               
node.removePeerNodeRoutingBackoffReason(peerNodePreviousRoutingBackoffReason, 
pn);
+        }
         if(!isInPeers) return false;

         // removing from connectedPeers
@@ -145,12 +151,6 @@
                }
         }
         myPeers = newMyPeers;
-        int peerNodeStatus = pn.getPeerNodeStatus();
-        node.removePeerNodeStatus( peerNodeStatus, pn );
-        String peerNodePreviousRoutingBackoffReason = 
pn.getPreviousBackoffReason();
-        if(peerNodePreviousRoutingBackoffReason != null) {
-               
node.removePeerNodeRoutingBackoffReason(peerNodePreviousRoutingBackoffReason, 
pn);
-        }

         Logger.normal(this, "Removed "+pn);
        }

Modified: trunk/freenet/src/freenet/node/PeerNode.java
===================================================================
--- trunk/freenet/src/freenet/node/PeerNode.java        2006-06-16 16:25:56 UTC 
(rev 9232)
+++ trunk/freenet/src/freenet/node/PeerNode.java        2006-06-16 20:52:19 UTC 
(rev 9233)
@@ -280,9 +280,6 @@
         // FIXME make mandatory once everyone has upgraded
         lastGoodVersion = fs.get("lastGoodVersion");

-        // PeerNode starts life as disconnected
-        node.addPeerNodeStatus(Node.PEER_NODE_STATUS_DISCONNECTED, this);
-               
         nominalPeer=new Vector();
         nominalPeer.removeAllElements();
         try{
@@ -363,6 +360,7 @@

         // Not connected yet; need to handshake
         isConnected = false;
+        node.addPeerNodeStatus(Node.PEER_NODE_STATUS_DISCONNECTED, this);

         messagesToSendNow = new LinkedList();

@@ -1802,7 +1800,7 @@
                                Logger.error(this, "Changing ARK not supported 
(and shouldn't be possible): from "+myARK+" to "+usk+" for "+this);
                        } else if(myARK.suggestedEdition > 
usk.suggestedEdition) {
                                Logger.minor(this, "Ignoring ARK edition 
decrease: "+myARK.suggestedEdition+" to "+usk.suggestedEdition+" for "+this);
-                       } else if(myARK.suggestedEdition > 
usk.suggestedEdition) {
+                       } else if(myARK.suggestedEdition < 
usk.suggestedEdition) {
                                Logger.minor(this, "New ARK edition found");
                                myARK = usk;
                        } else if(myARK == null) {
@@ -1877,8 +1875,10 @@
                        peerNodeStatus = Node.PEER_NODE_STATUS_CONNECTED;
                        if(now < routingBackedOffUntil) {
                                peerNodeStatus = 
Node.PEER_NODE_STATUS_ROUTING_BACKED_OFF;
-                               
if(!lastRoutingBackoffReason.equals(previousRoutingBackoffReason)) {
-                                       
node.removePeerNodeRoutingBackoffReason(previousRoutingBackoffReason, this);
+                               
if(!lastRoutingBackoffReason.equals(previousRoutingBackoffReason) || 
previousRoutingBackoffReason == null) {
+                                       if(previousRoutingBackoffReason != 
null) {
+                                               
node.removePeerNodeRoutingBackoffReason(previousRoutingBackoffReason, this);
+                                       }
                                        
node.addPeerNodeRoutingBackoffReason(lastRoutingBackoffReason, this);
                                        previousRoutingBackoffReason = 
lastRoutingBackoffReason;
                                }

Modified: trunk/freenet/src/freenet/node/Version.java
===================================================================
--- trunk/freenet/src/freenet/node/Version.java 2006-06-16 16:25:56 UTC (rev 
9232)
+++ trunk/freenet/src/freenet/node/Version.java 2006-06-16 20:52:19 UTC (rev 
9233)
@@ -18,7 +18,7 @@
        public static final String protocolVersion = "1.0";

        /** The build number of the current revision */
-       private static final int buildNumber = 819;
+       private static final int buildNumber = 820;

        /** Oldest build of Fred we will talk to */
        private static final int lastGoodBuild = 765;


Reply via email to