Author: toad
Date: 2006-04-07 17:10:34 +0000 (Fri, 07 Apr 2006)
New Revision: 8494

Modified:
   trunk/freenet/src/freenet/node/PeerNode.java
   trunk/freenet/src/freenet/node/Version.java
Log:
624: Prevent oscillation in pre-emptive rejects. We were using a 
SimpleRunningAverage (which has a window), with the result that we get 
oscillations (spike happens, spike drops out end, another spike happens...).
Change to a BDRA (a smoother kind of average; i think it's called a something 
filter) with 50 instead of 20 reports equivalent sensitivity (though actually 
it's sensitive to all requests ever).

Modified: trunk/freenet/src/freenet/node/PeerNode.java
===================================================================
--- trunk/freenet/src/freenet/node/PeerNode.java        2006-04-07 15:57:19 UTC 
(rev 8493)
+++ trunk/freenet/src/freenet/node/PeerNode.java        2006-04-07 17:10:34 UTC 
(rev 8494)
@@ -35,6 +35,7 @@
 import freenet.support.Logger;
 import freenet.support.SimpleFieldSet;
 import freenet.support.WouldBlockException;
+import freenet.support.math.BootstrappingDecayingRunningAverage;
 import freenet.support.math.RunningAverage;
 import freenet.support.math.SimpleRunningAverage;

@@ -302,10 +303,12 @@
         decrementHTLAtMaximum = node.random.nextFloat() < 
Node.DECREMENT_AT_MAX_PROB;
         decrementHTLAtMinimum = node.random.nextFloat() < 
Node.DECREMENT_AT_MIN_PROB;

-        // FIXME maybe a simple binary RA would be better?
         pingNumber = node.random.nextLong();
-        pingAverage = new SimpleRunningAverage(20, 1);
-        throttledPacketSendAverage = new SimpleRunningAverage(20, 1);
+        
+        // A SimpleRunningAverage would be a bad choice because it would cause 
oscillations.
+        // So go for a filter.
+        pingAverage = new BootstrappingDecayingRunningAverage(1, 0, 
Long.MAX_VALUE, 50);
+        throttledPacketSendAverage = new 
BootstrappingDecayingRunningAverage(1, 0, Long.MAX_VALUE, 50);
     }

     private void randomizeMaxTimeBetweenPacketSends() {

Modified: trunk/freenet/src/freenet/node/Version.java
===================================================================
--- trunk/freenet/src/freenet/node/Version.java 2006-04-07 15:57:19 UTC (rev 
8493)
+++ trunk/freenet/src/freenet/node/Version.java 2006-04-07 17:10:34 UTC (rev 
8494)
@@ -20,7 +20,7 @@
        public static final String protocolVersion = "1.0";

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

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


Reply via email to