Author: toad
Date: 2007-03-20 22:23:18 +0000 (Tue, 20 Mar 2007)
New Revision: 12243

Modified:
   trunk/freenet/src/freenet/clients/http/StatisticsToadlet.java
   trunk/freenet/src/freenet/node/NodeClientCore.java
   trunk/freenet/src/freenet/node/RequestStarterGroup.java
Log:
Collect a throttle window for purely statistical purposes for CHKs vs SSKs, 
requests vs inserts

Modified: trunk/freenet/src/freenet/clients/http/StatisticsToadlet.java
===================================================================
--- trunk/freenet/src/freenet/clients/http/StatisticsToadlet.java       
2007-03-20 22:02:09 UTC (rev 12242)
+++ trunk/freenet/src/freenet/clients/http/StatisticsToadlet.java       
2007-03-20 22:23:18 UTC (rev 12243)
@@ -523,6 +523,8 @@
                                loadStatsList.addChild("li", 
starters.statsPageLine(true, false));
                                loadStatsList.addChild("li", 
starters.statsPageLine(false, true));
                                loadStatsList.addChild("li", 
starters.statsPageLine(true, true));
+                               loadStatsList.addChild("li", 
starters.diagnosticThrottlesLine(false));
+                               loadStatsList.addChild("li", 
starters.diagnosticThrottlesLine(true));
                                nextTableCell = overviewTableRow.addChild("td");

                                // node version information box

Modified: trunk/freenet/src/freenet/node/NodeClientCore.java
===================================================================
--- trunk/freenet/src/freenet/node/NodeClientCore.java  2007-03-20 22:02:09 UTC 
(rev 12242)
+++ trunk/freenet/src/freenet/node/NodeClientCore.java  2007-03-20 22:23:18 UTC 
(rev 12243)
@@ -417,7 +417,7 @@
                        waitStatus = rs.waitUntilStatusChange(waitStatus);
                        if((!rejectedOverload) && (waitStatus & 
RequestSender.WAIT_REJECTED_OVERLOAD) != 0) {
                                // See below; inserts count both
-                               
requestStarters.throttleWindow.rejectedOverload();
+                               requestStarters.rejectedOverload(false, false);
                                rejectedOverload = true;
                        }

@@ -436,7 +436,7 @@
                                        (status == 
RequestSender.GENERATED_REJECTED_OVERLOAD)) {
                                if(!rejectedOverload) {
                                        // See below
-                                       
requestStarters.throttleWindow.rejectedOverload();
+                                       requestStarters.rejectedOverload(false, 
false);
                                        rejectedOverload = true;
                                }
                        } else {
@@ -447,7 +447,7 @@
                                                (status == 
RequestSender.VERIFY_FAILURE))) {
                                        long rtt = System.currentTimeMillis() - 
startTime;
                                        if(!rejectedOverload)
-                                               
requestStarters.throttleWindow.requestCompleted();
+                                               
requestStarters.requestCompleted(false, false);
                                        
requestStarters.chkRequestThrottle.successfulCompletion(rtt);
                                }
                        }
@@ -516,7 +516,7 @@
                while(true) {
                        waitStatus = rs.waitUntilStatusChange(waitStatus);
                        if((!rejectedOverload) && (waitStatus & 
RequestSender.WAIT_REJECTED_OVERLOAD) != 0) {
-                               
requestStarters.throttleWindow.rejectedOverload();
+                               requestStarters.rejectedOverload(true, false);
                                rejectedOverload = true;
                        }

@@ -534,7 +534,7 @@
                        if((status == RequestSender.TIMED_OUT) ||
                                        (status == 
RequestSender.GENERATED_REJECTED_OVERLOAD)) {
                                if(!rejectedOverload) {
-                                       
requestStarters.throttleWindow.rejectedOverload();
+                                       requestStarters.rejectedOverload(true, 
false);
                                        rejectedOverload = true;
                                }
                        } else {
@@ -546,7 +546,7 @@
                                        long rtt = System.currentTimeMillis() - 
startTime;

                                        if(!rejectedOverload)
-                                               
requestStarters.throttleWindow.requestCompleted();
+                                               
requestStarters.requestCompleted(true, false);
                                        
requestStarters.sskRequestThrottle.successfulCompletion(rtt);
                                }
                        }
@@ -627,7 +627,7 @@
                        }
                        if((!hasReceivedRejectedOverload) && 
is.receivedRejectedOverload()) {
                                hasReceivedRejectedOverload = true;
-                               
requestStarters.throttleWindow.rejectedOverload();
+                               requestStarters.rejectedOverload(false, true);
                        }
                }

@@ -643,7 +643,7 @@
                        }
                        if(is.anyTransfersFailed() && 
(!hasReceivedRejectedOverload)) {
                                hasReceivedRejectedOverload = true; // not 
strictly true but same effect
-                               
requestStarters.throttleWindow.rejectedOverload();
+                               requestStarters.rejectedOverload(false, true);
                        }
                }

@@ -660,7 +660,7 @@

                                
requestStarters.chkInsertThrottle.successfulCompletion(len);
                                if(!hasReceivedRejectedOverload)
-                                       
requestStarters.throttleWindow.requestCompleted();
+                                       requestStarters.requestCompleted(false, 
true);
                        }
                }

@@ -739,7 +739,7 @@
                        }
                        if((!hasReceivedRejectedOverload) && 
is.receivedRejectedOverload()) {
                                hasReceivedRejectedOverload = true;
-                               
requestStarters.throttleWindow.rejectedOverload();
+                               requestStarters.rejectedOverload(true, true);
                        }
                }

@@ -765,7 +765,7 @@
                                // It worked!
                                long endTime = System.currentTimeMillis();
                                long rtt = endTime - startTime;
-                               
requestStarters.throttleWindow.requestCompleted();
+                               requestStarters.requestCompleted(true, true);
                                
requestStarters.sskInsertThrottle.successfulCompletion(rtt);
                        }
                }

Modified: trunk/freenet/src/freenet/node/RequestStarterGroup.java
===================================================================
--- trunk/freenet/src/freenet/node/RequestStarterGroup.java     2007-03-20 
22:02:09 UTC (rev 12242)
+++ trunk/freenet/src/freenet/node/RequestStarterGroup.java     2007-03-20 
22:23:18 UTC (rev 12243)
@@ -14,7 +14,12 @@

 public class RequestStarterGroup {

-       final ThrottleWindowManager throttleWindow;
+       private final ThrottleWindowManager throttleWindow;
+       // These are for diagnostic purposes
+       private final ThrottleWindowManager throttleWindowCHK;
+       private final ThrottleWindowManager throttleWindowSSK;
+       private final ThrottleWindowManager throttleWindowInsert;
+       private final ThrottleWindowManager throttleWindowRequest;
        final MyRequestThrottle chkRequestThrottle;
        final RequestStarter chkRequestStarter;
        final MyRequestThrottle chkInsertThrottle;
@@ -33,6 +38,10 @@
                SubConfig schedulerConfig = new SubConfig("node.scheduler", 
config);

                throttleWindow = new ThrottleWindowManager(2.0, fs == null ? 
null : fs.subset("ThrottleWindow"), node);
+               throttleWindowCHK = new ThrottleWindowManager(2.0, fs == null ? 
null : fs.subset("ThrottleWindowCHK"), node);
+               throttleWindowSSK = new ThrottleWindowManager(2.0, fs == null ? 
null : fs.subset("ThrottleWindowSSK"), node);
+               throttleWindowInsert = new ThrottleWindowManager(2.0, fs == 
null ? null : fs.subset("ThrottleWindowInsert"), node);
+               throttleWindowRequest = new ThrottleWindowManager(2.0, fs == 
null ? null : fs.subset("ThrottleWindowRequest"), node);
                chkRequestThrottle = new MyRequestThrottle(throttleWindow, 
5000, "CHK Request", fs == null ? null : fs.subset("CHKRequestThrottle"), 
32768);
                chkRequestStarter = new RequestStarter(core, 
chkRequestThrottle, "CHK Request starter ("+portNumber+ ')', 
node.requestOutputThrottle, node.requestInputThrottle, 
node.localChkFetchBytesSentAverage, node.localChkFetchBytesReceivedAverage, 
false);
                chkFetchScheduler = new ClientRequestScheduler(false, false, 
random, chkRequestStarter, node, schedulerConfig, "CHKrequester");
@@ -129,12 +138,26 @@
                return sskInsertThrottle;
        }

+       public void requestCompleted(boolean isSSK, boolean isInsert) {
+               throttleWindow.requestCompleted();
+               (isSSK ? throttleWindowSSK : 
throttleWindowCHK).requestCompleted();
+               (isInsert ? throttleWindowInsert : 
throttleWindowRequest).requestCompleted();
+       }
+       
+       public void rejectedOverload(boolean isSSK, boolean isInsert) {
+               throttleWindow.rejectedOverload();
+               (isSSK ? throttleWindowSSK : 
throttleWindowCHK).rejectedOverload();
+               (isInsert ? throttleWindowInsert : 
throttleWindowRequest).rejectedOverload();
+       }
+       
        /**
         * Persist the throttle data to a SimpleFieldSet.
         */
        SimpleFieldSet persistToFieldSet() {
                SimpleFieldSet fs = new SimpleFieldSet(false);
                fs.put("ThrottleWindow", throttleWindow.exportFieldSet(false));
+               fs.put("ThrottleWindowCHK", 
throttleWindowCHK.exportFieldSet(false));
+               fs.put("ThrottleWindowSSK", 
throttleWindowCHK.exportFieldSet(false));
                fs.put("CHKRequestThrottle", 
chkRequestThrottle.exportFieldSet());
                fs.put("SSKRequestThrottle", 
sskRequestThrottle.exportFieldSet());
                fs.put("CHKInsertThrottle", chkInsertThrottle.exportFieldSet());
@@ -179,5 +202,21 @@
                sb.append("B/sec");
                return sb.toString();
        }
+
+       public String diagnosticThrottlesLine(boolean mode) {
+               StringBuffer sb = new StringBuffer();
+               if(mode) {
+                       sb.append("Request window: ");
+                       sb.append(throttleWindowCHK.toString());
+                       sb.append(", Insert window: ");
+                       sb.append(throttleWindowSSK.toString());
+               } else {
+                       sb.append("CHK window: ");
+                       sb.append(throttleWindowCHK.toString());
+                       sb.append(", SSK window: ");
+                       sb.append(throttleWindowSSK.toString());
+               }
+               return sb.toString();
+       }

 }


Reply via email to