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;