Author: toad
Date: 2005-11-25 21:39:37 +0000 (Fri, 25 Nov 2005)
New Revision: 7612
Modified:
trunk/freenet/src/freenet/node/PeerNode.java
trunk/freenet/src/freenet/node/Version.java
Log:
231:
Requests are not evenly distributed across the keyspace.
So do some provably convergent alchemy for load management. :)
Modified: trunk/freenet/src/freenet/node/PeerNode.java
===================================================================
--- trunk/freenet/src/freenet/node/PeerNode.java 2005-11-25 21:07:56 UTC
(rev 7611)
+++ trunk/freenet/src/freenet/node/PeerNode.java 2005-11-25 21:39:37 UTC
(rev 7612)
@@ -166,6 +166,16 @@
*/
private final RunningAverage pInsertRejectOverload;
+ private final Object biasLock = new Object();
+
+ private double biasValue = 1.0;
+
+ /** Sensitivity of bias computations */
+ private double BIAS_SENSITIVITY = 0.01;
+
+ /** Target pRO for bias computations */
+ private double BIAS_TARGET = 0.02;
+
/**
* Create a PeerNode from a SimpleFieldSet containing a
* node reference for one. This must contain the following
@@ -948,13 +958,29 @@
public void rejectedOverload() {
pRejectOverload.report(1.0);
pDataRequestRejectOverload.report(1.0);
+ increaseBias();
}
public void insertRejectedOverload() {
pRejectOverload.report(1.0);
pInsertRejectOverload.report(1.0);
+ increaseBias();
}
+ private void increaseBias() {
+ synchronized(biasLock) {
+ if(biasValue < 1.0) biasValue = 1.0;
+ biasValue += BIAS_SENSITIVITY / BIAS_TARGET;
+ }
+ }
+
+ private void decreaseBias() {
+ synchronized(biasLock) {
+ biasValue -= BIAS_SENSITIVITY;
+ if(biasValue < 1.0) biasValue = 1.0;
+ }
+ }
+
/**
* Record the fact that the node did not reject a request
* due to overload.
@@ -962,11 +988,13 @@
public void didNotRejectOverload() {
pRejectOverload.report(0.0);
pDataRequestRejectOverload.report(0.0);
+ decreaseBias();
}
public void insertDidNotRejectOverload() {
pRejectOverload.report(0.0);
pInsertRejectOverload.report(0.0);
+ decreaseBias();
}
public double getPRejectedOverload() {
@@ -984,16 +1012,19 @@
* Essentially this is 1.0-P(RejectedOverload or timeout).
*/
public double getBias() {
- double pSummaryFailure = pRejectOverload.currentValue();
- long hits = pRejectOverload.countReports();
- if(hits > 10) {
- double max = ((double) hits) / ((double) (hits+1));
- double denom = 1.0 - pSummaryFailure;
- if(denom == 0.0) denom = 0.000001;
- return denom;
- } else {
- return 1.0;
- }
+ synchronized(biasLock) {
+ return biasValue;
+ }
+// double pSummaryFailure = pRejectOverload.currentValue();
+// long hits = pRejectOverload.countReports();
+// if(hits > 10) {
+// double max = ((double) hits) / ((double) (hits+1));
+// double denom = 1.0 - pSummaryFailure;
+// if(denom == 0.0) denom = 0.000001;
+// return denom;
+// } else {
+// return 1.0;
+// }
}
public void throttledSend(Message message) throws NotConnectedException
{
Modified: trunk/freenet/src/freenet/node/Version.java
===================================================================
--- trunk/freenet/src/freenet/node/Version.java 2005-11-25 21:07:56 UTC (rev
7611)
+++ trunk/freenet/src/freenet/node/Version.java 2005-11-25 21:39:37 UTC (rev
7612)
@@ -20,10 +20,10 @@
public static final String protocolVersion = "1.0";
/** The build number of the current revision */
- public static final int buildNumber = 230;
+ public static final int buildNumber = 231;
/** Oldest build of Fred we will talk to */
- public static final int lastGoodBuild = 230;
+ public static final int lastGoodBuild = 231;
/** The highest reported build of fred */
public static int highestSeenBuild = buildNumber;