Author: toad
Date: 2007-08-09 13:19:35 +0000 (Thu, 09 Aug 2007)
New Revision: 14560

Modified:
   trunk/freenet/src/freenet/node/NodeStats.java
Log:
Bandwidth liability: SSK vs CHK balancing: Just increment all the counts before 
calculating liability. This is exactly the same as the old behaviour only 
clearer. Also add comments explaining it better.

Modified: trunk/freenet/src/freenet/node/NodeStats.java
===================================================================
--- trunk/freenet/src/freenet/node/NodeStats.java       2007-08-09 10:43:17 UTC 
(rev 14559)
+++ trunk/freenet/src/freenet/node/NodeStats.java       2007-08-09 13:19:35 UTC 
(rev 14560)
@@ -408,20 +408,24 @@
                // Reject request if the result of all our current requests 
completing simultaneously would be that
                // some of them timeout.

-               // Increment each running count unless it is the one we are 
currently processing.
-               // Purpose: Don't allow an SSK request (e.g.) unless there is 
space for a CHK insert *as well*.
+               // Never reject a CHK and accept an SSK. Because if we do that, 
we would be constantly accepting SSKs, as there
+               // would never be enough space for a CHK. So we add 1 to each 
type of request's count before computing the 
+               // bandwidth liability. Thus, if we have exactly enough space 
for 1 SSK and 1 CHK, we can accept either, and
+               // when one of either type completes, we can accept one of 
either type again: We never let SSKs drain the 
+               // "bucket" and block CHKs.

-               int numCHKRequests = node.getNumCHKRequests() + ((!isInsert) && 
(!isSSK) ? 0 : 1);
-               int numSSKRequests = node.getNumSSKRequests() + ((!isInsert) && 
isSSK ? 0 : 1);
-               int numCHKInserts = node.getNumCHKInserts() + (isInsert && 
(!isSSK) ? 0 : 1);
-               int numSSKInserts = node.getNumSSKInserts() + (isInsert && 
isSSK ? 0 : 1);
+               int numCHKRequests = node.getNumCHKRequests() + 1;
+               int numSSKRequests = node.getNumSSKRequests() + 1;
+               int numCHKInserts = node.getNumCHKInserts() + 1;
+               int numSSKInserts = node.getNumSSKInserts() + 1;
+               if(logMINOR)
+                       Logger.minor(this, "Running (adjusted): CHK fetch 
"+numCHKRequests+" SSK fetch "+numSSKRequests+" CHK insert "+numCHKInserts+" 
SSK insert "+numSSKInserts);

                double bandwidthLiabilityOutput =
                        successfulChkFetchBytesSentAverage.currentValue() * 
numCHKRequests +
                        successfulSskFetchBytesSentAverage.currentValue() * 
numSSKRequests +
                        successfulChkInsertBytesSentAverage.currentValue() * 
numCHKInserts +
                        successfulSskInsertBytesSentAverage.currentValue() * 
numSSKInserts;
-               bandwidthLiabilityOutput += getSuccessfulBytes(isSSK, isInsert, 
false).currentValue();
                double bandwidthAvailableOutput =
                        node.getOutputBandwidthLimit() * 90; // 90 seconds at 
full power; we have to leave some time for the search as well
                bandwidthAvailableOutput *= 
NodeStats.FRACTION_OF_BANDWIDTH_USED_BY_REQUESTS;
@@ -436,7 +440,6 @@
                        successfulSskFetchBytesReceivedAverage.currentValue() * 
numSSKRequests +
                        successfulChkInsertBytesReceivedAverage.currentValue() 
* numCHKInserts +
                        successfulSskInsertBytesReceivedAverage.currentValue() 
* numSSKInserts;
-               bandwidthLiabilityInput += getSuccessfulBytes(isSSK, isInsert, 
true).currentValue();
                double bandwidthAvailableInput =
                        node.getInputBandwidthLimit() * 90; // 90 seconds at 
full power
                bandwidthAvailableInput *= 
NodeStats.FRACTION_OF_BANDWIDTH_USED_BY_REQUESTS;


Reply via email to