From 04a596899a4bca23c744dbccefd3d2e25275f1d0 Mon Sep 17 00:00:00 2001 From: zzz Date: Thu, 19 Dec 2013 12:23:29 +0000 Subject: [PATCH] NetDB: Fixes for ExpireRoutersJob - Don't expire if too few routers - Don't expire if net is disconnected - Don't run in VMCommSystem --- .../router/networkdb/kademlia/ExpireRoutersJob.java | 11 ++++++++--- .../kademlia/KademliaNetworkDatabaseFacade.java | 8 +++++--- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/router/java/src/net/i2p/router/networkdb/kademlia/ExpireRoutersJob.java b/router/java/src/net/i2p/router/networkdb/kademlia/ExpireRoutersJob.java index d84914ea70..c2ea790a5a 100644 --- a/router/java/src/net/i2p/router/networkdb/kademlia/ExpireRoutersJob.java +++ b/router/java/src/net/i2p/router/networkdb/kademlia/ExpireRoutersJob.java @@ -13,6 +13,7 @@ import java.util.Set; import net.i2p.data.DatabaseEntry; import net.i2p.data.Hash; import net.i2p.data.RouterInfo; +import net.i2p.router.CommSystemFacade; import net.i2p.router.JobImpl; import net.i2p.router.RouterContext; import net.i2p.util.Log; @@ -42,9 +43,11 @@ class ExpireRoutersJob extends JobImpl { public String getName() { return "Expire Routers Job"; } public void runJob() { - int removed = expireKeys(); - if (_log.shouldLog(Log.INFO)) - _log.info("Routers expired: " + removed); + if (getContext().commSystem().getReachabilityStatus() != CommSystemFacade.STATUS_DISCONNECTED) { + int removed = expireKeys(); + if (_log.shouldLog(Log.INFO)) + _log.info("Routers expired: " + removed); + } requeue(RERUN_DELAY_MS); } @@ -59,6 +62,8 @@ class ExpireRoutersJob extends JobImpl { private int expireKeys() { Set keys = _facade.getAllRouters(); keys.remove(getContext().routerHash()); + if (keys.size() < 150) + return 0; int removed = 0; for (Hash key : keys) { // Don't expire anybody we are connected to diff --git a/router/java/src/net/i2p/router/networkdb/kademlia/KademliaNetworkDatabaseFacade.java b/router/java/src/net/i2p/router/networkdb/kademlia/KademliaNetworkDatabaseFacade.java index 6fa3cebf32..757cee9b8b 100644 --- a/router/java/src/net/i2p/router/networkdb/kademlia/KademliaNetworkDatabaseFacade.java +++ b/router/java/src/net/i2p/router/networkdb/kademlia/KademliaNetworkDatabaseFacade.java @@ -275,9 +275,11 @@ public class KademliaNetworkDatabaseFacade extends NetworkDatabaseFacade { //// expire some routers // Don't run until after RefreshRoutersJob has run, and after validate() will return invalid for old routers. - Job erj = new ExpireRoutersJob(_context, this); - erj.getTiming().setStartAfter(_context.clock().now() + ROUTER_INFO_EXPIRATION_FLOODFILL + 10*60*1000); - _context.jobQueue().addJob(erj); + if (!_context.commSystem().isDummy()) { + Job erj = new ExpireRoutersJob(_context, this); + erj.getTiming().setStartAfter(_context.clock().now() + ROUTER_INFO_EXPIRATION_FLOODFILL + 10*60*1000); + _context.jobQueue().addJob(erj); + } if (!QUIET) { // fill the search queue with random keys in buckets that are too small