NetDB: Stubs for bandwidth estimation during reseed (ticket #935)

Incomplete and may not ever be, for evaluation only.
This commit is contained in:
zzz
2015-01-10 16:51:13 +00:00
parent 7ed855b2d2
commit 45b3e44cc2

View File

@@ -151,9 +151,12 @@ public class Reseeder {
private SSLEepGet.SSLState _sslState; private SSLEepGet.SSLState _sslState;
private int _gotDate; private int _gotDate;
private long _attemptStarted; private long _attemptStarted;
/** bytes per sec for each su3 downloaded */
private final List<Long> _bandwidths;
private static final int MAX_DATE_SETS = 2; private static final int MAX_DATE_SETS = 2;
public ReseedRunner() { public ReseedRunner() {
_bandwidths = new ArrayList<Long>(4);
} }
/* /*
@@ -164,6 +167,7 @@ public class Reseeder {
run2(); run2();
} finally { } finally {
_checker.done(); _checker.done();
processBandwidths();
} }
} }
@@ -198,6 +202,22 @@ public class Reseeder {
_context.router().eventLog().addEvent(EventLog.RESEED, Integer.toString(total)); _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 // EepGet status listeners
public void attemptFailed(String url, long bytesTransferred, long bytesRemaining, int currentAttempt, int numRetries, Exception cause) { public void attemptFailed(String url, long bytesTransferred, long bytesRemaining, int currentAttempt, int numRetries, Exception cause) {
// Since readURL() runs an EepGet with 0 retries, // Since readURL() runs an EepGet with 0 retries,
@@ -466,13 +486,24 @@ public class Reseeder {
try { try {
_checker.setStatus(_("Reseeding: fetching seed URL.")); _checker.setStatus(_("Reseeding: fetching seed URL."));
System.err.println("Reseeding from " + seedURL); 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); contentRaw = fetchURL(seedURL);
long totalTime = System.currentTimeMillis() - startTime;
if (contentRaw == null) { if (contentRaw == null) {
// Logging deprecated here since attemptFailed() provides better info // Logging deprecated here since attemptFailed() provides better info
_log.warn("Failed reading seed URL: " + seedURL); _log.warn("Failed reading seed URL: " + seedURL);
System.err.println("Reseed got no router infos from " + seedURL); System.err.println("Reseed got no router infos from " + seedURL);
return 0; 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); SU3File su3 = new SU3File(_context, contentRaw);
zip = new File(_context.getTempDir(), "reseed-" + _context.random().nextInt() + ".zip"); zip = new File(_context.getTempDir(), "reseed-" + _context.random().nextInt() + ".zip");
su3.verifyAndMigrate(zip); su3.verifyAndMigrate(zip);