From 05516f3260fd35839710d2dcb8dd355d0a740518 Mon Sep 17 00:00:00 2001 From: zzz Date: Mon, 20 Aug 2012 12:09:20 +0000 Subject: [PATCH] * i2psnark: Add minimum tracker and DHT announce intervals --- .../src/org/klomp/snark/TrackerClient.java | 18 +++++++++++------- .../java/src/org/klomp/snark/TrackerInfo.java | 3 ++- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/apps/i2psnark/java/src/org/klomp/snark/TrackerClient.java b/apps/i2psnark/java/src/org/klomp/snark/TrackerClient.java index 4f08e7bb2..487165ca9 100644 --- a/apps/i2psnark/java/src/org/klomp/snark/TrackerClient.java +++ b/apps/i2psnark/java/src/org/klomp/snark/TrackerClient.java @@ -39,7 +39,6 @@ import java.util.Set; import net.i2p.I2PAppContext; import net.i2p.data.DataHelper; import net.i2p.data.Hash; -import net.i2p.util.Clock; import net.i2p.util.I2PAppThread; import net.i2p.util.Log; import net.i2p.util.SimpleTimer2; @@ -79,6 +78,8 @@ public class TrackerClient implements Runnable { private final static int INITIAL_SLEEP = 90*1000; private final static int MAX_CONSEC_FAILS = 5; // slow down after this private final static int LONG_SLEEP = 30*60*1000; // sleep a while after lots of fails + private final static long MIN_TRACKER_ANNOUNCE_INTERVAL = 10*60*1000; + private final static long MIN_DHT_ANNOUNCE_INTERVAL = 10*60*1000; private final I2PSnarkUtil _util; private final MetaInfo meta; @@ -103,7 +104,7 @@ public class TrackerClient implements Runnable { private volatile int consecutiveFails; private boolean completed; private volatile boolean _fastUnannounce; - + private long lastDHTAnnounce; private final List trackers; /** @@ -214,7 +215,7 @@ public class TrackerClient implements Runnable { * This will take several seconds to several minutes. */ public void run() { - long begin = Clock.getInstance().now(); + long begin = _util.getContext().clock().now(); if (_log.shouldLog(Log.DEBUG)) _log.debug("Start " + Thread.currentThread().getName()); try { @@ -243,7 +244,7 @@ public class TrackerClient implements Runnable { _thread = null; if (_log.shouldLog(Log.DEBUG)) _log.debug("Finish " + Thread.currentThread().getName() + - " after " + DataHelper.formatDuration(Clock.getInstance().now() - begin)); + " after " + DataHelper.formatDuration(_util.getContext().clock().now() - begin)); } } @@ -459,15 +460,18 @@ public class TrackerClient implements Runnable { // Get peers from DHT // FIXME this needs to be in its own thread dht = _util.getDHT(); - if (dht != null && (meta == null || !meta.isPrivate()) && !stop) { + if (dht != null && (meta == null || !meta.isPrivate()) && (!stop) && + _util.getContext().clock().now() > lastDHTAnnounce + MIN_DHT_ANNOUNCE_INTERVAL) { int numwant; if (event.equals(STOPPED_EVENT) || !coordinator.needOutboundPeers()) numwant = 1; else numwant = _util.getMaxConnections(); Collection hashes = dht.getPeers(snark.getInfoHash(), numwant, 2*60*1000); - if (!hashes.isEmpty()) + if (!hashes.isEmpty()) { runStarted = true; + lastDHTAnnounce = _util.getContext().clock().now(); + } if (_log.shouldLog(Log.INFO)) _log.info("Got " + hashes + " from DHT"); // announce ourselves while the token is still good @@ -655,7 +659,7 @@ public class TrackerClient implements Runnable { if (failure != null) throw new IOException(failure); - tr.interval = info.getInterval() * 1000; + tr.interval = Math.max(MIN_TRACKER_ANNOUNCE_INTERVAL, info.getInterval() * 1000l); return info; } finally { if (in != null) try { in.close(); } catch (IOException ioe) {} diff --git a/apps/i2psnark/java/src/org/klomp/snark/TrackerInfo.java b/apps/i2psnark/java/src/org/klomp/snark/TrackerInfo.java index 1b829d0ee..abcd61bf5 100644 --- a/apps/i2psnark/java/src/org/klomp/snark/TrackerInfo.java +++ b/apps/i2psnark/java/src/org/klomp/snark/TrackerInfo.java @@ -38,7 +38,7 @@ import org.klomp.snark.bencode.InvalidBEncodingException; * Compact format 1 - a list of hashes - early format for testing * Compact format 2 - One big string of concatenated hashes - official format */ -public class TrackerInfo +class TrackerInfo { private final String failure_reason; private final int interval; @@ -195,6 +195,7 @@ public class TrackerInfo return failure_reason; } + /** in seconds */ public int getInterval() { return interval;