Author: toad
Date: 2005-11-25 16:24:23 +0000 (Fri, 25 Nov 2005)
New Revision: 7598

Modified:
   trunk/freenet/src/freenet/io/xfer/PacketThrottle.java
   trunk/freenet/src/freenet/node/InsertHandler.java
   trunk/freenet/src/freenet/node/InsertSender.java
   trunk/freenet/src/freenet/node/Version.java
Log:
217: (mandatory)
don't set the status until all sends have completed.
send InsertReply on SUCCESS in InsertHandler.
fix per-connection packet throttle.

Main end result should be that we get a much more accurate round trip time for 
inserts.

Modified: trunk/freenet/src/freenet/io/xfer/PacketThrottle.java
===================================================================
--- trunk/freenet/src/freenet/io/xfer/PacketThrottle.java       2005-11-25 
15:48:52 UTC (rev 7597)
+++ trunk/freenet/src/freenet/io/xfer/PacketThrottle.java       2005-11-25 
16:24:23 UTC (rev 7598)
@@ -22,13 +22,14 @@
 import java.util.Map;

 import freenet.io.comm.Peer;
+import freenet.support.Logger;

 public class PacketThrottle {

        protected static final float PACKET_DROP_DECREASE_MULTIPLE = 0.875f;
        protected static final float PACKET_TRANSMIT_INCREMENT = (4 * (1 - 
(PACKET_DROP_DECREASE_MULTIPLE * PACKET_DROP_DECREASE_MULTIPLE))) / 3;
        protected static final long MAX_DELAY = 1000;
-       protected static final long MIN_DELAY = 100;
+       protected static final long MIN_DELAY = 25;
        public static final String VERSION = "$Id: PacketThrottle.java,v 1.3 
2005/08/25 17:28:19 amphibian Exp $";
        public static final long DEFAULT_DELAY = 200;
        private static Map _throttles = new HashMap();
@@ -59,22 +60,24 @@
                PACKET_SIZE = packetSize;
        }

-       public void setRoundTripTime(long rtt) {
+       public synchronized void setRoundTripTime(long rtt) {
                _roundTripTime = Math.max(rtt, 10);
        }

-    public void notifyOfPacketLost() {
+    public synchronized void notifyOfPacketLost() {
                _droppedPackets++;
                _totalPackets++;
                _simulatedWindowSize *= PACKET_DROP_DECREASE_MULTIPLE;
+       Logger.minor(this, "notifyOfPacketLost(): "+this);
     }

-    public void notifyOfPacketAcknowledged() {
+    public synchronized void notifyOfPacketAcknowledged() {
         _totalPackets++;
         _simulatedWindowSize += PACKET_TRANSMIT_INCREMENT;
+       Logger.minor(this, "notifyOfPacketAcked(): "+this);
     }

-       public long getDelay() {
+       public synchronized long getDelay() {
                float winSizeForMinPacketDelay = ((float)_roundTripTime / 
MIN_DELAY);
                if (_simulatedWindowSize > winSizeForMinPacketDelay) {
                        _simulatedWindowSize = winSizeForMinPacketDelay;
@@ -89,6 +92,6 @@
        public String toString() {
                return Double.toString((((PACKET_SIZE * 1000.0 / getDelay())) / 
1024)) + " k/sec, (w: "
                                + _simulatedWindowSize + ", r:" + 
_roundTripTime + ", d:"
-                               + (((float) _droppedPackets / (float) 
_totalPackets)) + ")";
+                               + (((float) _droppedPackets / (float) 
_totalPackets)) + ") for "+_peer;
        }
 }

Modified: trunk/freenet/src/freenet/node/InsertHandler.java
===================================================================
--- trunk/freenet/src/freenet/node/InsertHandler.java   2005-11-25 15:48:52 UTC 
(rev 7597)
+++ trunk/freenet/src/freenet/node/InsertHandler.java   2005-11-25 16:24:23 UTC 
(rev 7598)
@@ -181,6 +181,8 @@
             }

             if(status == InsertSender.SUCCESS) {
+               msg = DMT.createFNPInsertReply(uid);
+               source.send(msg);
                 canCommit = true;
                 finish();
                 return;

Modified: trunk/freenet/src/freenet/node/InsertSender.java
===================================================================
--- trunk/freenet/src/freenet/node/InsertSender.java    2005-11-25 15:48:52 UTC 
(rev 7597)
+++ trunk/freenet/src/freenet/node/InsertSender.java    2005-11-25 16:24:23 UTC 
(rev 7598)
@@ -175,7 +175,6 @@
              *   inserting.
              */

-            MessageFilter mfRNF = 
MessageFilter.create().setSource(next).setField(DMT.UID, 
uid).setTimeout(PUT_TIMEOUT).setType(DMT.FNPRouteNotFound);
             MessageFilter mfInsertReply = 
MessageFilter.create().setSource(next).setField(DMT.UID, 
uid).setTimeout(PUT_TIMEOUT).setType(DMT.FNPInsertReply);
             mfRejectedOverload.setTimeout(PUT_TIMEOUT);
             mfRejectedOverload.clearOr();
@@ -183,7 +182,7 @@
             MessageFilter mfDataInsertRejected = 
MessageFilter.create().setSource(next).setField(DMT.UID, 
uid).setTimeout(PUT_TIMEOUT).setType(DMT.FNPDataInsertRejected);
             MessageFilter mfTimeout = 
MessageFilter.create().setSource(next).setField(DMT.UID, 
uid).setTimeout(PUT_TIMEOUT).setType(DMT.FNPRejectedTimeout);

-            mf = 
mfRNF.or(mfInsertReply.or(mfRouteNotFound.or(mfDataInsertRejected.or(mfTimeout.or(mfRejectedOverload)))));
+            mf = 
mfInsertReply.or(mfRouteNotFound.or(mfDataInsertRejected.or(mfTimeout.or(mfRejectedOverload))));

             Logger.minor(this, "Sending DataInsert");
             if(receiveFailed) return;
@@ -313,7 +312,6 @@
         Logger.minor(this, "Finished: "+code+" on "+this, new 
Exception("debug"));
         if(status != NOT_FINISHED)
                throw new IllegalStateException("finish() called with "+code+" 
when was already "+status);
-        status = code;

         for(Iterator i = senderThreads.iterator();i.hasNext();) {
                Thread senderThread = (Thread) i.next();
@@ -326,6 +324,7 @@
                }
         }

+        status = code;
         if(status == REJECTED_OVERLOAD) {
                node.getInsertThrottle().requestRejectedOverload();
         } else if(status == SUCCESS || status == ROUTE_NOT_FOUND) {

Modified: trunk/freenet/src/freenet/node/Version.java
===================================================================
--- trunk/freenet/src/freenet/node/Version.java 2005-11-25 15:48:52 UTC (rev 
7597)
+++ trunk/freenet/src/freenet/node/Version.java 2005-11-25 16:24:23 UTC (rev 
7598)
@@ -20,10 +20,10 @@
        public static final String protocolVersion = "1.0";

        /** The build number of the current revision */
-       public static final int buildNumber = 216;
+       public static final int buildNumber = 217;

        /** Oldest build of Fred we will talk to */
-       public static final int lastGoodBuild = 216;
+       public static final int lastGoodBuild = 217;

        /** The highest reported build of fred */
        public static int highestSeenBuild = buildNumber;


Reply via email to