Author: toad
Date: 2006-07-08 20:29:27 +0000 (Sat, 08 Jul 2006)
New Revision: 9515
Modified:
trunk/freenet/src/freenet/node/CHKInsertSender.java
trunk/freenet/src/freenet/node/Node.java
trunk/freenet/src/freenet/node/Version.java
trunk/freenet/src/freenet/support/TokenBucket.java
Log:
868: More work on inserts and bandwidth limiting
Modified: trunk/freenet/src/freenet/node/CHKInsertSender.java
===================================================================
--- trunk/freenet/src/freenet/node/CHKInsertSender.java 2006-07-08 20:25:22 UTC
(rev 9514)
+++ trunk/freenet/src/freenet/node/CHKInsertSender.java 2006-07-08 20:29:27 UTC
(rev 9515)
@@ -516,22 +516,21 @@
if(status != NOT_FINISHED)
throw new IllegalStateException("finish() called with "+code+"
when was already "+status);
- setStatusTime = System.currentTimeMillis();
+ synchronized(this) {
- if(code == ROUTE_NOT_FOUND && !sentRequest)
- code = ROUTE_REALLY_NOT_FOUND;
+ setStatusTime = System.currentTimeMillis();
+
+ if(code == ROUTE_NOT_FOUND && !sentRequest)
+ code = ROUTE_REALLY_NOT_FOUND;
+
+ status = code;
- status = code;
-
- synchronized(this) {
notifyAll();
- }
- Logger.minor(this, "Set status code: "+getStatusString()+" on "+uid);
+ Logger.minor(this, "Set status code: "+getStatusString()+" on
"+uid);
- // Now wait for transfers, or for downstream transfer notifications.
+ // Now wait for transfers, or for downstream transfer
notifications.
- synchronized(this) {
if(cw != null) {
while(!allTransfersCompleted) {
try {
@@ -629,18 +628,20 @@
int timeout;
boolean noTimeLeft = false;
- long now = System.currentTimeMillis();
- if(status == NOT_FINISHED) {
- // Wait 5 seconds, then try again
- timeout = 5000;
- } else {
- // Completed, wait for everything
- timeout = (int)Math.min(Integer.MAX_VALUE,
(setStatusTime + TRANSFER_COMPLETION_TIMEOUT) - now);
+ synchronized(this) {
+ long now = System.currentTimeMillis();
+ if(status == NOT_FINISHED || setStatusTime ==
-1) {
+ // Wait 5 seconds, then try again
+ timeout = 5000;
+ } else {
+ // Completed, wait for everything
+ timeout =
(int)Math.min(Integer.MAX_VALUE, (setStatusTime + TRANSFER_COMPLETION_TIMEOUT)
- now);
+ }
+ if(timeout <= 0) {
+ noTimeLeft = true;
+ timeout = 1;
+ }
}
- if(timeout <= 0) {
- noTimeLeft = true;
- timeout = 1;
- }
MessageFilter mf = null;
for(int i=0;i<waiters.length;i++) {
Modified: trunk/freenet/src/freenet/node/Node.java
===================================================================
--- trunk/freenet/src/freenet/node/Node.java 2006-07-08 20:25:22 UTC (rev
9514)
+++ trunk/freenet/src/freenet/node/Node.java 2006-07-08 20:29:27 UTC (rev
9515)
@@ -1231,6 +1231,7 @@
public void set(int obwLimit) throws
InvalidConfigValueException {
if(obwLimit <= 0) throw new
InvalidConfigValueException("Bandwidth limit must be positive");
outputThrottle.changeNanosAndBucketSizes((1000L * 1000L * 1000L) / obwLimit,
obwLimit/2, (obwLimit * 2) / 5);
+ obwLimit = (obwLimit * 4) / 5;
// fudge factor; take into account non-request activity
requestOutputThrottle.changeNanosAndBucketSize((1000L*1000L*1000L) / obwLimit,
Math.max(obwLimit*60, 32768*20));
if(inputLimitDefault) {
int ibwLimit = obwLimit
* 4;
@@ -1241,6 +1242,7 @@
int obwLimit = nodeConfig.getInt("outputBandwidthLimit");
outputThrottle = new DoubleTokenBucket(obwLimit/2,
(1000L*1000L*1000L) / obwLimit, obwLimit, (obwLimit * 2) / 5);
+ obwLimit = (obwLimit * 4) / 5; // fudge factor; take into
account non-request activity
requestOutputThrottle =
new TokenBucket(Math.max(obwLimit*60, 32768*20),
(1000L*1000L*1000L) / obwLimit, 0);
@@ -1249,7 +1251,7 @@
new IntCallback() {
public int get() {
if(inputLimitDefault) return -1;
- return (int) ((1000L * 1000L *
1000L) / requestInputThrottle.getNanosPerTick());
+ return (((int) ((1000L * 1000L
* 1000L) / requestInputThrottle.getNanosPerTick())) * 5) / 4;
}
public void set(int ibwLimit) throws
InvalidConfigValueException {
if(ibwLimit == -1) {
@@ -1257,11 +1259,13 @@
ibwLimit = (int)
((1000L * 1000L * 1000L) / outputThrottle.getNanosPerTick()) * 4;
}
if(ibwLimit <= 0) throw new
InvalidConfigValueException("Bandwidth limit must be positive or -1");
+ ibwLimit = ibwLimit * 4 / 5; //
fudge factor; take into account non-request activity
requestInputThrottle.changeNanosAndBucketSize((1000L*1000L*1000L) / ibwLimit,
Math.max(ibwLimit*60, 32768*20));
}
});
int ibwLimit = nodeConfig.getInt("inputBandwidthLimit");
+ ibwLimit = ibwLimit * 4 / 5;
requestInputThrottle =
new TokenBucket(Math.max(ibwLimit*60, 32768*20),
(1000L*1000L*1000L) / ibwLimit, 0);
Modified: trunk/freenet/src/freenet/node/Version.java
===================================================================
--- trunk/freenet/src/freenet/node/Version.java 2006-07-08 20:25:22 UTC (rev
9514)
+++ trunk/freenet/src/freenet/node/Version.java 2006-07-08 20:29:27 UTC (rev
9515)
@@ -18,12 +18,12 @@
public static final String protocolVersion = "1.0";
/** The build number of the current revision */
- private static final int buildNumber = 867;
+ private static final int buildNumber = 868;
/** Oldest build of Fred we will talk to */
private static final int oldLastGoodBuild = 844;
- private static final int newLastGoodBuild = 866;
- private static final long transitionTime = 1152403200000L; // 0:00 GMT
30/06/06
+ private static final int newLastGoodBuild = 868;
+ private static final long transitionTime = 1152324000000L; // 2:00 GMT
9/07/06
public static final int buildNumber() {
return buildNumber;
Modified: trunk/freenet/src/freenet/support/TokenBucket.java
===================================================================
--- trunk/freenet/src/freenet/support/TokenBucket.java 2006-07-08 20:25:22 UTC
(rev 9514)
+++ trunk/freenet/src/freenet/support/TokenBucket.java 2006-07-08 20:29:27 UTC
(rev 9515)
@@ -86,6 +86,7 @@
Logger.minor(this, "current="+current);
if(current > tokens) {
current -= tokens;
+ Logger.minor(this, "Got tokens instantly,
current="+current);
return;
}
long extra = 0;