diff --git a/history.txt b/history.txt index 3c2d65756..96c4160c6 100644 --- a/history.txt +++ b/history.txt @@ -1,4 +1,9 @@ -$Id: history.txt,v 1.457 2006/04/14 13:07:15 jrandom Exp $ +$Id: history.txt,v 1.458 2006/04/14 15:24:07 jrandom Exp $ + +2006-04-15 jrandom + * Adjust the proactive tunnel request dropping so we will reject what we + can instead of dropping so much (but still dropping if we get too far + overloaded) 2006-04-14 jrandom * 0 isn't very random diff --git a/router/java/src/net/i2p/router/RouterVersion.java b/router/java/src/net/i2p/router/RouterVersion.java index 8b0ce62a8..523039c79 100644 --- a/router/java/src/net/i2p/router/RouterVersion.java +++ b/router/java/src/net/i2p/router/RouterVersion.java @@ -15,9 +15,9 @@ import net.i2p.CoreVersion; * */ public class RouterVersion { - public final static String ID = "$Revision: 1.397 $ $Date: 2006/04/14 13:06:40 $"; + public final static String ID = "$Revision: 1.398 $ $Date: 2006/04/14 15:24:53 $"; public final static String VERSION = "0.6.1.15"; - public final static long BUILD = 3; + public final static long BUILD = 4; public static void main(String args[]) { System.out.println("I2P Router version: " + VERSION + "-" + BUILD); System.out.println("Router ID: " + RouterVersion.ID); diff --git a/router/java/src/net/i2p/router/tunnel/pool/BuildHandler.java b/router/java/src/net/i2p/router/tunnel/pool/BuildHandler.java index 17de61a21..aa426c51a 100644 --- a/router/java/src/net/i2p/router/tunnel/pool/BuildHandler.java +++ b/router/java/src/net/i2p/router/tunnel/pool/BuildHandler.java @@ -414,14 +414,18 @@ class BuildHandler { int proactiveDrops = countProactiveDrops(); long recvDelay = System.currentTimeMillis()-state.recvTime; - if ( (response == 0) && ( (recvDelay > BuildRequestor.REQUEST_TIMEOUT) || (proactiveDrops > MAX_PROACTIVE_DROPS) ) ) { - _context.statManager().addRateData("tunnel.rejectOverloaded", recvDelay, proactiveDrops); - if (true || (proactiveDrops < MAX_PROACTIVE_DROPS*2)) - response = TunnelHistory.TUNNEL_REJECT_TRANSIENT_OVERLOAD; - else - response = TunnelHistory.TUNNEL_REJECT_BANDWIDTH; - } else if (response == 0) { - _context.statManager().addRateData("tunnel.acceptLoad", recvDelay, recvDelay); + if (response == 0) { + float pDrop = recvDelay / (BuildRequestor.REQUEST_TIMEOUT/2); + pDrop = (float)Math.pow(pDrop, 16); + if (_context.random().nextFloat() < pDrop) { // || (proactiveDrops > MAX_PROACTIVE_DROPS) ) ) { + _context.statManager().addRateData("tunnel.rejectOverloaded", recvDelay, proactiveDrops); + if (true || (proactiveDrops < MAX_PROACTIVE_DROPS*2)) + response = TunnelHistory.TUNNEL_REJECT_TRANSIENT_OVERLOAD; + else + response = TunnelHistory.TUNNEL_REJECT_BANDWIDTH; + } else { + _context.statManager().addRateData("tunnel.acceptLoad", recvDelay, recvDelay); + } } if (_log.shouldLog(Log.DEBUG)) @@ -592,7 +596,7 @@ class BuildHandler { for (int i = 0; i < _inboundBuildMessages.size(); i++) { BuildMessageState cur = (BuildMessageState)_inboundBuildMessages.get(i); long age = System.currentTimeMillis() - cur.recvTime; - if (age >= BuildRequestor.REQUEST_TIMEOUT/2) { + if (age >= BuildRequestor.REQUEST_TIMEOUT) { _inboundBuildMessages.remove(i); i--; dropped++; @@ -605,7 +609,7 @@ class BuildHandler { } else { int queueTime = estimateQueueTime(_inboundBuildMessages.size()); float pDrop = queueTime/((float)BuildRequestor.REQUEST_TIMEOUT/2); - pDrop = pDrop * pDrop * pDrop; + pDrop = (float)Math.pow(pDrop, 16); // steeeep float f = _context.random().nextFloat(); if ( (pDrop > f) && (allowProactiveDrop()) ) { _context.statManager().addRateData("tunnel.dropLoadProactive", queueTime, _inboundBuildMessages.size()); @@ -647,9 +651,9 @@ class BuildHandler { decryptTime = (int)avg; } } - int estimatedQueueTime = numPendingMessages * decryptTime; - estimatedQueueTime *= 2; // lets leave some cpu to spare, 'eh? - return estimatedQueueTime; + float estimatedQueueTime = numPendingMessages * decryptTime; + estimatedQueueTime *= 1.2f; // lets leave some cpu to spare, 'eh? + return (int)estimatedQueueTime; }