diff --git a/router/java/src/net/i2p/router/transport/FIFOBandwidthLimiter.java b/router/java/src/net/i2p/router/transport/FIFOBandwidthLimiter.java index de81ed2857cebc7e2c158e5311f40d3e477de6e9..0ed8f3e9df9cc1780d1daeea2991b92ccf87d244 100644 --- a/router/java/src/net/i2p/router/transport/FIFOBandwidthLimiter.java +++ b/router/java/src/net/i2p/router/transport/FIFOBandwidthLimiter.java @@ -35,6 +35,11 @@ public class FIFOBandwidthLimiter { private static int __id = 0; + static long now() { + // dont use the clock().now(), since that may jump + return System.currentTimeMillis(); + } + public FIFOBandwidthLimiter(I2PAppContext context) { _context = context; _log = context.logManager().getLog(FIFOBandwidthLimiter.class); @@ -50,7 +55,7 @@ public class FIFOBandwidthLimiter { _lastTotalReceived = _totalAllocatedInboundBytes; _sendBps = 0; _recvBps = 0; - _lastStatsUpdated = _context.clock().now(); + _lastStatsUpdated = now(); _lastRateUpdated = _lastStatsUpdated; _refiller = new FIFOBandwidthRefiller(_context, this); I2PThread t = new I2PThread(_refiller); @@ -152,7 +157,7 @@ public class FIFOBandwidthLimiter { } private void updateStats() { - long now = _context.clock().now(); + long now = now(); long time = now - _lastStatsUpdated; if (time >= 1000) { long totS = _totalAllocatedOutboundBytes; @@ -170,8 +175,9 @@ public class FIFOBandwidthLimiter { _recvBps = ((float)recv*time)/1000f; else _recvBps = (0.9f)*_recvBps + (0.1f)*((float)recv*time)/1000f; - if (_log.shouldLog(Log.INFO)) { - _log.info("BW: time = " + time + " sent: " + sent + " recv: " + recv); + if (_log.shouldLog(Log.WARN)) { + if (_log.shouldLog(Log.INFO)) + _log.info("BW: time = " + time + " sent: " + sent + " recv: " + recv); _context.statManager().getStatLog().addData("bw", "bw.sendBps1s", (long)_sendBps, sent); _context.statManager().getStatLog().addData("bw", "bw.recvBps1s", (long)_recvBps, recv); } @@ -229,7 +235,7 @@ public class FIFOBandwidthLimiter { if (start == -1) return 0; else - return _context.clock().now() - start; + return now() - start; } private long locked_getLongestOutboundWait() { long start = -1; @@ -242,7 +248,7 @@ public class FIFOBandwidthLimiter { if (start == -1) return 0; else - return _context.clock().now() - start; + return now() - start; } /** @@ -260,7 +266,7 @@ public class FIFOBandwidthLimiter { if (satisfied == null) satisfied = new ArrayList(2); satisfied.add(req); - long waited = _context.clock().now() - req.getRequestTime(); + long waited = now() - req.getRequestTime(); if (_log.shouldLog(Log.DEBUG)) _log.debug("Granting inbound request " + req.getRequestName() + " fully for " + req.getTotalInboundRequested() + " bytes (waited " @@ -285,7 +291,7 @@ public class FIFOBandwidthLimiter { for (int i = 0; i < _pendingInboundRequests.size(); i++) { if (_availableInboundBytes <= 0) break; SimpleRequest req = (SimpleRequest)_pendingInboundRequests.get(i); - long waited = _context.clock().now() - req.getRequestTime(); + long waited = now() - req.getRequestTime(); if (req.getAborted()) { // connection decided they dont want the data anymore if (_log.shouldLog(Log.DEBUG)) @@ -384,7 +390,7 @@ public class FIFOBandwidthLimiter { if (satisfied == null) satisfied = new ArrayList(2); satisfied.add(req); - long waited = _context.clock().now() - req.getRequestTime(); + long waited = now() - req.getRequestTime(); if (_log.shouldLog(Log.DEBUG)) _log.debug("Granting outbound request " + req.getRequestName() + " fully for " + req.getTotalOutboundRequested() + " bytes (waited " @@ -410,7 +416,7 @@ public class FIFOBandwidthLimiter { for (int i = 0; i < _pendingOutboundRequests.size(); i++) { if (_availableOutboundBytes <= 0) break; SimpleRequest req = (SimpleRequest)_pendingOutboundRequests.get(i); - long waited = _context.clock().now() - req.getRequestTime(); + long waited = now() - req.getRequestTime(); if (req.getAborted()) { // connection decided they dont want the data anymore if (_log.shouldLog(Log.DEBUG)) @@ -468,7 +474,7 @@ public class FIFOBandwidthLimiter { } public void renderStatusHTML(Writer out) throws IOException { - long now = _context.clock().now(); + long now = now(); StringBuffer buf = new StringBuffer(4096); buf.append("<br /><b>Pending bandwidth requests (with "); buf.append(_availableInboundBytes).append('/'); @@ -520,7 +526,7 @@ public class FIFOBandwidthLimiter { _aborted = false; _target = target; _requestId = ++__requestId; - _requestTime = _context.clock().now(); + _requestTime = now(); } public Object getAvailabilityMonitor() { return SimpleRequest.this; } public String getRequestName() { return "Req" + _requestId + " to " + _target; } diff --git a/router/java/src/net/i2p/router/transport/FIFOBandwidthRefiller.java b/router/java/src/net/i2p/router/transport/FIFOBandwidthRefiller.java index 6e2476548ac5c735628be50df943eb7be953524c..37f47765aeff5f3d7b894812c2ab55562b6369c3 100644 --- a/router/java/src/net/i2p/router/transport/FIFOBandwidthRefiller.java +++ b/router/java/src/net/i2p/router/transport/FIFOBandwidthRefiller.java @@ -53,12 +53,12 @@ class FIFOBandwidthRefiller implements Runnable { } public void run() { // bootstrap 'em with nothing - _lastRefillTime = _context.clock().now(); + _lastRefillTime = _limiter.now(); while (true) { - long now = _context.clock().now(); + long now = _limiter.now(); if (now >= _lastCheckConfigTime + _configCheckPeriodMs) { checkConfig(); - now = _context.clock().now(); + now = _limiter.now(); _lastCheckConfigTime = now; } @@ -72,7 +72,7 @@ class FIFOBandwidthRefiller implements Runnable { } public void reinitialize() { - _lastRefillTime = _context.clock().now(); + _lastRefillTime = _limiter.now(); checkConfig(); _lastCheckConfigTime = _lastRefillTime; } @@ -260,5 +260,5 @@ class FIFOBandwidthRefiller implements Runnable { _limiter.setMaxOutboundBytes(DEFAULT_BURST_SECONDS * _outboundKBytesPerSecond * 1024); } } - + } \ No newline at end of file