Author: toad
Date: 2006-04-11 17:17:36 +0000 (Tue, 11 Apr 2006)
New Revision: 8516
Modified:
trunk/freenet/src/freenet/client/async/SplitFileInserterSegment.java
trunk/freenet/src/freenet/node/Node.java
trunk/freenet/src/freenet/node/RequestThrottle.java
trunk/freenet/src/freenet/node/Version.java
Log:
632: Make inserts go fast!
Inserts still use the RTT from only completed locally started inserts.
But their window-size is updated when ANY locally originated request completes.
The problem: Inserts visit more nodes, so not only do they take longer, they
are also more likely to see a RejectedOverload.
Modified: trunk/freenet/src/freenet/client/async/SplitFileInserterSegment.java
===================================================================
--- trunk/freenet/src/freenet/client/async/SplitFileInserterSegment.java
2006-04-11 17:01:08 UTC (rev 8515)
+++ trunk/freenet/src/freenet/client/async/SplitFileInserterSegment.java
2006-04-11 17:17:36 UTC (rev 8516)
@@ -172,6 +172,7 @@
}
private boolean completed(int x) {
+ Logger.minor(this, "Completed: "+x+" on "+this+" (
completed="+blocksCompleted+",
total="+(dataBlockInserters.length+checkBlockInserters.length));
synchronized(this) {
if(finished) return true;
if(x >= dataBlocks.length) {
Modified: trunk/freenet/src/freenet/node/Node.java
===================================================================
--- trunk/freenet/src/freenet/node/Node.java 2006-04-11 17:01:08 UTC (rev
8515)
+++ trunk/freenet/src/freenet/node/Node.java 2006-04-11 17:17:36 UTC (rev
8516)
@@ -1063,7 +1063,9 @@
boolean rejectedOverload = false;
while(true) {
if(rs.waitUntilStatusChange() && (!rejectedOverload)) {
+ // See below; inserts count both
chkRequestThrottle.requestRejectedOverload();
+ chkInsertThrottle.requestRejectedOverload();
rejectedOverload = true;
}
@@ -1075,7 +1077,9 @@
if(status == RequestSender.TIMED_OUT ||
status ==
RequestSender.GENERATED_REJECTED_OVERLOAD) {
if(!rejectedOverload) {
+ // See below
chkRequestThrottle.requestRejectedOverload();
+ chkInsertThrottle.requestRejectedOverload();
rejectedOverload = true;
}
} else {
@@ -1085,6 +1089,10 @@
status == RequestSender.VERIFY_FAILURE)
{
long rtt = System.currentTimeMillis() -
startTime;
chkRequestThrottle.requestCompleted(rtt);
+ // Also report on insert throttle as inserts
use both for window
+ // Reason: inserts are excessively biased
otherwise as they
+ // visit more nodes (longer time) and are more
likely to encounter an overload.
+ chkInsertThrottle.requestCompleted();
}
}
@@ -1154,6 +1162,8 @@
while(true) {
if(rs.waitUntilStatusChange() && (!rejectedOverload)) {
sskRequestThrottle.requestRejectedOverload();
+ // See below
+ sskInsertThrottle.requestRejectedOverload();
rejectedOverload = true;
}
@@ -1166,6 +1176,7 @@
status ==
RequestSender.GENERATED_REJECTED_OVERLOAD) {
if(!rejectedOverload) {
sskRequestThrottle.requestRejectedOverload();
+ sskInsertThrottle.requestRejectedOverload();
rejectedOverload = true;
}
} else {
@@ -1175,6 +1186,10 @@
status == RequestSender.VERIFY_FAILURE)
{
long rtt = System.currentTimeMillis() -
startTime;
sskRequestThrottle.requestCompleted(rtt);
+ // Also report on insert throttle as inserts
use both for window
+ // Reason: inserts are excessively biased
otherwise as they
+ // visit more nodes (longer time) and are more
likely to encounter an overload.
+ sskInsertThrottle.requestCompleted();
}
}
Modified: trunk/freenet/src/freenet/node/RequestThrottle.java
===================================================================
--- trunk/freenet/src/freenet/node/RequestThrottle.java 2006-04-11 17:01:08 UTC
(rev 8515)
+++ trunk/freenet/src/freenet/node/RequestThrottle.java 2006-04-11 17:17:36 UTC
(rev 8516)
@@ -46,11 +46,17 @@
*/
public synchronized void requestCompleted(long time) {
setRoundTripTime(time);
+ requestCompleted();
+ Logger.minor(this, "request completed in "+time+" for "+name);
+ }
+
+ /** Report that a request completed successfully */
+ public synchronized void requestCompleted() {
_totalPackets++;
_simulatedWindowSize += PACKET_TRANSMIT_INCREMENT;
- Logger.minor(this, "request completed in "+time+" for "+name);
+ Logger.minor(this, "requestCompleted on "+this);
}
-
+
/**
* Report that a request got RejectedOverload.
* Do not report the time it took, because it is irrelevant.
Modified: trunk/freenet/src/freenet/node/Version.java
===================================================================
--- trunk/freenet/src/freenet/node/Version.java 2006-04-11 17:01:08 UTC (rev
8515)
+++ trunk/freenet/src/freenet/node/Version.java 2006-04-11 17:17:36 UTC (rev
8516)
@@ -20,7 +20,7 @@
public static final String protocolVersion = "1.0";
/** The build number of the current revision */
- private static final int buildNumber = 631;
+ private static final int buildNumber = 632;
/** Oldest build of Fred we will talk to */
private static final int lastGoodBuild = 591;