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();
+ }
}