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;