From 45b3e44cc2b35dbf7ecb46140eef20f64bfcb7fb Mon Sep 17 00:00:00 2001 From: zzz <zzz@mail.i2p> Date: Sat, 10 Jan 2015 16:51:13 +0000 Subject: [PATCH] NetDB: Stubs for bandwidth estimation during reseed (ticket #935) Incomplete and may not ever be, for evaluation only. --- .../i2p/router/networkdb/reseed/Reseeder.java | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/router/java/src/net/i2p/router/networkdb/reseed/Reseeder.java b/router/java/src/net/i2p/router/networkdb/reseed/Reseeder.java index 729e457187..47f653a783 100644 --- a/router/java/src/net/i2p/router/networkdb/reseed/Reseeder.java +++ b/router/java/src/net/i2p/router/networkdb/reseed/Reseeder.java @@ -151,9 +151,12 @@ public class Reseeder { private SSLEepGet.SSLState _sslState; private int _gotDate; private long _attemptStarted; + /** bytes per sec for each su3 downloaded */ + private final List<Long> _bandwidths; private static final int MAX_DATE_SETS = 2; public ReseedRunner() { + _bandwidths = new ArrayList<Long>(4); } /* @@ -164,6 +167,7 @@ public class Reseeder { run2(); } finally { _checker.done(); + processBandwidths(); } } @@ -198,6 +202,22 @@ public class Reseeder { _context.router().eventLog().addEvent(EventLog.RESEED, Integer.toString(total)); } + /** + * @since 0.9.18 + */ + private void processBandwidths() { + if (_bandwidths.isEmpty()) + return; + long tot = 0; + for (Long sample : _bandwidths) { + tot += sample.longValue(); + } + long avg = tot / _bandwidths.size(); + if (_log.shouldLog(Log.INFO)) + _log.info("Bandwidth average: " + avg + " KBps from " + _bandwidths.size() + " samples"); + // TODO _context.bandwidthLimiter()..... + } + // EepGet status listeners public void attemptFailed(String url, long bytesTransferred, long bytesRemaining, int currentAttempt, int numRetries, Exception cause) { // Since readURL() runs an EepGet with 0 retries, @@ -466,13 +486,24 @@ public class Reseeder { try { _checker.setStatus(_("Reseeding: fetching seed URL.")); System.err.println("Reseeding from " + seedURL); + // don't use context time, as we may be step-changing it + // from the server header + long startTime = System.currentTimeMillis(); contentRaw = fetchURL(seedURL); + long totalTime = System.currentTimeMillis() - startTime; if (contentRaw == null) { // Logging deprecated here since attemptFailed() provides better info _log.warn("Failed reading seed URL: " + seedURL); System.err.println("Reseed got no router infos from " + seedURL); return 0; } + if (totalTime > 0) { + long sz = contentRaw.length(); + long bw = 1000 * sz / totalTime; + _bandwidths.add(Long.valueOf(bw)); + if (_log.shouldLog(Log.DEBUG)) + _log.debug("Rcvd " + sz + " bytes in " + totalTime + " ms from " + seedURL); + } SU3File su3 = new SU3File(_context, contentRaw); zip = new File(_context.getTempDir(), "reseed-" + _context.random().nextInt() + ".zip"); su3.verifyAndMigrate(zip); -- GitLab