Author: toad
Date: 2005-12-01 22:27:42 +0000 (Thu, 01 Dec 2005)
New Revision: 7650

Modified:
   trunk/freenet/src/freenet/io/xfer/BlockReceiver.java
   trunk/freenet/src/freenet/node/PeerNode.java
   trunk/freenet/src/freenet/node/Version.java
Log:
261: (mandatory)
Fix BlockReceiver bug.
We need to overhaul BlockReceiver/BlockTransmitter; they have changed 
significantly in Dijjer...
(But we don't exactly want the Dijjer code either... different assumptions... 
e.g. packet loss)
Don't backoff (or un-backoff) when backed off.


Modified: trunk/freenet/src/freenet/io/xfer/BlockReceiver.java
===================================================================
--- trunk/freenet/src/freenet/io/xfer/BlockReceiver.java        2005-12-01 
19:59:35 UTC (rev 7649)
+++ trunk/freenet/src/freenet/io/xfer/BlockReceiver.java        2005-12-01 
22:27:42 UTC (rev 7650)
@@ -67,9 +67,10 @@
                while (!_prb.allReceived()) {
                        Message m1;
             try {
-                m1 = 
_usm.waitFor(MessageFilter.create().setTimeout(RECEIPT_TIMEOUT).setType(DMT.packetTransmit)
-                               .setField(DMT.UID, 
_uid).or(MessageFilter.create().setType(DMT.allSent).setField(DMT.UID, _uid))
-                               
.or(MessageFilter.create().setType(DMT.sendAborted).setField(DMT.UID, _uid)));
+               MessageFilter mfPacketTransmit = 
MessageFilter.create().setTimeout(RECEIPT_TIMEOUT).setType(DMT.packetTransmit).setField(DMT.UID,
 _uid);
+               MessageFilter mfAllSent = 
MessageFilter.create().setType(DMT.allSent).setField(DMT.UID, _uid);
+               MessageFilter mfSendAborted = 
MessageFilter.create().setType(DMT.sendAborted).setField(DMT.UID, _uid);
+                m1 = 
_usm.waitFor(mfPacketTransmit.or(mfAllSent.or(mfSendAborted)));
             } catch (DisconnectedException e1) {
                 Logger.normal(this, "Disconnected during receive: "+_uid+" 
from "+_sender);
                 throw new 
RetrievalException(RetrievalException.SENDER_DISCONNECTED);

Modified: trunk/freenet/src/freenet/node/PeerNode.java
===================================================================
--- trunk/freenet/src/freenet/node/PeerNode.java        2005-12-01 19:59:35 UTC 
(rev 7649)
+++ trunk/freenet/src/freenet/node/PeerNode.java        2005-12-01 22:27:42 UTC 
(rev 7650)
@@ -953,10 +953,14 @@
         */
        public void localRejectedOverload() {
                synchronized(backoffSync) {
-                       backoffLength = backoffLength * BACKOFF_MULTIPLIER;
-                       if(backoffLength > MAX_BACKOFF_LENGTH)
-                               backoffLength = MAX_BACKOFF_LENGTH;
-                       backedOffUntil = System.currentTimeMillis() + 
node.random.nextInt(backoffLength);
+                       long now = System.currentTimeMillis();
+                       // Don't back off any further if we are already backed 
off
+                       if(now > backedOffUntil) {
+                               backoffLength = backoffLength * 
BACKOFF_MULTIPLIER;
+                               if(backoffLength > MAX_BACKOFF_LENGTH)
+                                       backoffLength = MAX_BACKOFF_LENGTH;
+                               backedOffUntil = now + 
node.random.nextInt(backoffLength);
+                       }
                }
        }

@@ -966,7 +970,9 @@
         */
        public void successNotOverload() {
                synchronized(backoffSync) {
-                       backoffLength = INITIAL_BACKOFF_LENGTH;
+                       // Don't un-backoff if still backed off
+                       if(System.currentTimeMillis() > backedOffUntil)
+                               backoffLength = INITIAL_BACKOFF_LENGTH;
                }
        }


Modified: trunk/freenet/src/freenet/node/Version.java
===================================================================
--- trunk/freenet/src/freenet/node/Version.java 2005-12-01 19:59:35 UTC (rev 
7649)
+++ trunk/freenet/src/freenet/node/Version.java 2005-12-01 22:27:42 UTC (rev 
7650)
@@ -20,10 +20,10 @@
        public static final String protocolVersion = "1.0";

        /** The build number of the current revision */
-       public static final int buildNumber = 260;
+       public static final int buildNumber = 261;

        /** Oldest build of Fred we will talk to */
-       public static final int lastGoodBuild = 260;
+       public static final int lastGoodBuild = 261;

        /** The highest reported build of fred */
        public static int highestSeenBuild = buildNumber;


Reply via email to