From acb4bac5e654f1317e061f1f2bbc06ad40fd43c9 Mon Sep 17 00:00:00 2001
From: zzz <zzz@mail.i2p>
Date: Mon, 30 May 2011 16:29:33 +0000
Subject: [PATCH]     * netDb: Don't refetch expiring router infos if we have
 enough

---
 .../FloodfillNetworkDatabaseFacade.java       | 21 ++++++++++++++++++-
 1 file changed, 20 insertions(+), 1 deletion(-)

diff --git a/router/java/src/net/i2p/router/networkdb/kademlia/FloodfillNetworkDatabaseFacade.java b/router/java/src/net/i2p/router/networkdb/kademlia/FloodfillNetworkDatabaseFacade.java
index 8268ace7b..1d108c3f8 100644
--- a/router/java/src/net/i2p/router/networkdb/kademlia/FloodfillNetworkDatabaseFacade.java
+++ b/router/java/src/net/i2p/router/networkdb/kademlia/FloodfillNetworkDatabaseFacade.java
@@ -361,6 +361,20 @@ public class FloodfillNetworkDatabaseFacade extends KademliaNetworkDatabaseFacad
      *  a little higher than 1 or 2. */
     protected final static int MIN_ACTIVE_PEERS = 5;
 
+    /** @since 0.8.7 */
+    private static final int MAX_DB_BEFORE_SKIPPING_SEARCH;
+    static {
+        long maxMemory = Runtime.getRuntime().maxMemory();
+        if (maxMemory == Long.MAX_VALUE)
+            maxMemory = 128*1024*1024l;
+        if (maxMemory < 64*1024*1024)
+            MAX_DB_BEFORE_SKIPPING_SEARCH = 600;
+        else if (maxMemory < 128*1024*1024)
+            MAX_DB_BEFORE_SKIPPING_SEARCH = 900;
+        else
+            MAX_DB_BEFORE_SKIPPING_SEARCH = 1250;
+    }
+
     /** 
       * Search for a newer router info, drop it from the db if the search fails,
       * unless just started up or have bigger problems.
@@ -380,9 +394,14 @@ public class FloodfillNetworkDatabaseFacade extends KademliaNetworkDatabaseFacad
             return;
         }
 
-        if (_context.jobQueue().getMaxLag() > 500) {
+        // should we skip the search?
+        if (_floodfillEnabled ||
+            _context.jobQueue().getMaxLag() > 500 ||
+            getKBucketSetSize() > MAX_DB_BEFORE_SKIPPING_SEARCH) {
             // don't try to overload ourselves (e.g. failing 3000 router refs at
             // once, and then firing off 3000 netDb lookup tasks)
+            // Also don't queue a search if we have plenty of routerinfos
+            // (KBucketSetSize() includes leasesets but avoids locking)
             super.lookupBeforeDropping(peer, info);
             return; 
         }
-- 
GitLab