Author: zothar
Date: 2006-05-29 04:55:59 +0000 (Mon, 29 May 2006)
New Revision: 8913
Modified:
trunk/freenet/src/freenet/node/PeerNode.java
Log:
Introduce 'slow start' to the routing backoff algorithm, as discussed with
nextgens on #freenet earlier today. Increment routing backoff by 7 seconds
until it reaches 2 hours, then use the previously existing 2x multiplier. I'm
committing this in part because it seems to help. Perhaps this will be
reverted after the PacketSender waiting on DNS problem is resolved.
Modified: trunk/freenet/src/freenet/node/PeerNode.java
===================================================================
--- trunk/freenet/src/freenet/node/PeerNode.java 2006-05-29 04:31:30 UTC
(rev 8912)
+++ trunk/freenet/src/freenet/node/PeerNode.java 2006-05-29 04:55:59 UTC
(rev 8913)
@@ -1392,11 +1392,15 @@
long routingBackedOffUntil = -1;
/** Initial nominal routing backoff length */
- final int INITIAL_ROUTING_BACKOFF_LENGTH = 5000;
- /** Double every time */
- final int ROUTING_BACKOFF_MULTIPLIER = 2;
- /** Maximum: 24 hours */
- final int MAX_ROUTING_BACKOFF_LENGTH = 24*60*60*1000;
+ final int INITIAL_ROUTING_BACKOFF_LENGTH = 5000; // 5 seconds
+ /** How much to add during slow routing backoff */
+ final int SLOW_ROUTING_BACKOFF_ADDER = 7000; // 7 seconds
+ /** How much to multiply by during fast routing backoff */
+ final int FAST_ROUTING_BACKOFF_MULTIPLIER = 2;
+ /** After what routing backoff length do we use fast routing backoff
(slow before this) */
+ final int FAST_ROUTING_BACKOFF_LOW_THRESHOLD = 2*60*60*1000; // 2 hours
+ /** Maximum upper limit to routing backoff slow or fast */
+ final int MAX_ROUTING_BACKOFF_LENGTH = 24*60*60*1000; // 24 hours
/** Current nominal routing backoff length */
int routingBackoffLength = INITIAL_ROUTING_BACKOFF_LENGTH;
/** Last backoff reason */
@@ -1420,7 +1424,10 @@
long now = System.currentTimeMillis();
// Don't back off any further if we are already backed
off
if(now > routingBackedOffUntil) {
- routingBackoffLength = routingBackoffLength *
ROUTING_BACKOFF_MULTIPLIER;
+ if(routingBackoffLength <
FAST_ROUTING_BACKOFF_LOW_THRESHOLD)
+ routingBackoffLength =
routingBackoffLength + SLOW_ROUTING_BACKOFF_ADDER;
+ else
+ routingBackoffLength =
routingBackoffLength * FAST_ROUTING_BACKOFF_MULTIPLIER;
if(routingBackoffLength >
MAX_ROUTING_BACKOFF_LENGTH)
routingBackoffLength =
MAX_ROUTING_BACKOFF_LENGTH;
int x =
node.random.nextInt(routingBackoffLength);