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;


Reply via email to