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;


Reply via email to