From a542b182ea60df2d69df12ee80b81596bdfca4a5 Mon Sep 17 00:00:00 2001 From: zzz <zzz@mail.i2p> Date: Sun, 16 Jun 2019 14:59:55 +0000 Subject: [PATCH] i2psnark: Increase DHT blacklist time (ticket #2275) Update time if already blacklisted Prune blacklist if too big --- .../java/src/org/klomp/snark/dht/KRPC.java | 21 ++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/apps/i2psnark/java/src/org/klomp/snark/dht/KRPC.java b/apps/i2psnark/java/src/org/klomp/snark/dht/KRPC.java index 0a409a5407..071796b346 100644 --- a/apps/i2psnark/java/src/org/klomp/snark/dht/KRPC.java +++ b/apps/i2psnark/java/src/org/klomp/snark/dht/KRPC.java @@ -156,7 +156,8 @@ public class KRPC implements I2PSessionMuxedListener, DHT { /** stagger with other cleaners */ private static final long CLEAN_TIME = 63*1000; private static final long EXPLORE_TIME = 877*1000; - private static final long BLACKLIST_CLEAN_TIME = 17*60*1000; + private static final long BLACKLIST_CLEAN_TIME = 67*60*1000; + private static final int BLACKLIST_MAX_PEERS = 500; private static final long NODES_SAVE_TIME = 3*60*60*1000; public static final String DHT_FILE_SUFFIX = ".dht.dat"; @@ -1232,10 +1233,12 @@ public class KRPC implements I2PSessionMuxedListener, DHT { if (_log.shouldLog(Log.INFO)) _log.info("Removed after consecutive timeouts: " + nInfo); } - if (!_blacklist.contains(nid)) { - // used as when-added time - nid.setLastSeen(); - _blacklist.add(nid); + // remove and add back with new date, may not be same object + // used as when-added time + nid.setLastSeen(); + boolean already = _blacklist.remove(nid); + _blacklist.add(nid); + if (!already) { if (_log.shouldLog(Log.INFO)) _log.info("Blacklisted: " + nid); } @@ -1686,6 +1689,14 @@ public class KRPC implements I2PSessionMuxedListener, DHT { if (nid.lastSeen() < expire) iter.remove(); } + int sz = _blacklist.size(); + if (sz > BLACKLIST_MAX_PEERS) { + // just remove random peers + for (Iterator<NID> iter = _blacklist.iterator(); iter.hasNext() && sz > BLACKLIST_MAX_PEERS; sz--) { + iter.next(); + iter.remove(); + } + } if (now - _nodesLastSaved > NODES_SAVE_TIME) { PersistDHT.saveDHT(_knownNodes, false, _dhtFile); _nodesLastSaved = now; -- GitLab