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;