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)
This commit is contained in:
jrandom
2006-04-15 07:15:19 +00:00
committed by zzz
parent de83944486
commit 23d8c01ce7
3 changed files with 25 additions and 16 deletions

View File

@ -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 2006-04-14 jrandom
* 0 isn't very random * 0 isn't very random

View File

@ -15,9 +15,9 @@ import net.i2p.CoreVersion;
* *
*/ */
public class RouterVersion { 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 String VERSION = "0.6.1.15";
public final static long BUILD = 3; public final static long BUILD = 4;
public static void main(String args[]) { public static void main(String args[]) {
System.out.println("I2P Router version: " + VERSION + "-" + BUILD); System.out.println("I2P Router version: " + VERSION + "-" + BUILD);
System.out.println("Router ID: " + RouterVersion.ID); System.out.println("Router ID: " + RouterVersion.ID);

View File

@ -414,15 +414,19 @@ class BuildHandler {
int proactiveDrops = countProactiveDrops(); int proactiveDrops = countProactiveDrops();
long recvDelay = System.currentTimeMillis()-state.recvTime; long recvDelay = System.currentTimeMillis()-state.recvTime;
if ( (response == 0) && ( (recvDelay > BuildRequestor.REQUEST_TIMEOUT) || (proactiveDrops > MAX_PROACTIVE_DROPS) ) ) { 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); _context.statManager().addRateData("tunnel.rejectOverloaded", recvDelay, proactiveDrops);
if (true || (proactiveDrops < MAX_PROACTIVE_DROPS*2)) if (true || (proactiveDrops < MAX_PROACTIVE_DROPS*2))
response = TunnelHistory.TUNNEL_REJECT_TRANSIENT_OVERLOAD; response = TunnelHistory.TUNNEL_REJECT_TRANSIENT_OVERLOAD;
else else
response = TunnelHistory.TUNNEL_REJECT_BANDWIDTH; response = TunnelHistory.TUNNEL_REJECT_BANDWIDTH;
} else if (response == 0) { } else {
_context.statManager().addRateData("tunnel.acceptLoad", recvDelay, recvDelay); _context.statManager().addRateData("tunnel.acceptLoad", recvDelay, recvDelay);
} }
}
if (_log.shouldLog(Log.DEBUG)) if (_log.shouldLog(Log.DEBUG))
_log.debug("Responding to " + state.msg.getUniqueId() + "/" + ourId _log.debug("Responding to " + state.msg.getUniqueId() + "/" + ourId
@ -592,7 +596,7 @@ class BuildHandler {
for (int i = 0; i < _inboundBuildMessages.size(); i++) { for (int i = 0; i < _inboundBuildMessages.size(); i++) {
BuildMessageState cur = (BuildMessageState)_inboundBuildMessages.get(i); BuildMessageState cur = (BuildMessageState)_inboundBuildMessages.get(i);
long age = System.currentTimeMillis() - cur.recvTime; long age = System.currentTimeMillis() - cur.recvTime;
if (age >= BuildRequestor.REQUEST_TIMEOUT/2) { if (age >= BuildRequestor.REQUEST_TIMEOUT) {
_inboundBuildMessages.remove(i); _inboundBuildMessages.remove(i);
i--; i--;
dropped++; dropped++;
@ -605,7 +609,7 @@ class BuildHandler {
} else { } else {
int queueTime = estimateQueueTime(_inboundBuildMessages.size()); int queueTime = estimateQueueTime(_inboundBuildMessages.size());
float pDrop = queueTime/((float)BuildRequestor.REQUEST_TIMEOUT/2); float pDrop = queueTime/((float)BuildRequestor.REQUEST_TIMEOUT/2);
pDrop = pDrop * pDrop * pDrop; pDrop = (float)Math.pow(pDrop, 16); // steeeep
float f = _context.random().nextFloat(); float f = _context.random().nextFloat();
if ( (pDrop > f) && (allowProactiveDrop()) ) { if ( (pDrop > f) && (allowProactiveDrop()) ) {
_context.statManager().addRateData("tunnel.dropLoadProactive", queueTime, _inboundBuildMessages.size()); _context.statManager().addRateData("tunnel.dropLoadProactive", queueTime, _inboundBuildMessages.size());
@ -647,9 +651,9 @@ class BuildHandler {
decryptTime = (int)avg; decryptTime = (int)avg;
} }
} }
int estimatedQueueTime = numPendingMessages * decryptTime; float estimatedQueueTime = numPendingMessages * decryptTime;
estimatedQueueTime *= 2; // lets leave some cpu to spare, 'eh? estimatedQueueTime *= 1.2f; // lets leave some cpu to spare, 'eh?
return estimatedQueueTime; return (int)estimatedQueueTime;
} }