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;


Reply via email to