From 2a08fc7a343ae1d6ccd82e36a6bb630e427498b8 Mon Sep 17 00:00:00 2001 From: zzz Date: Sun, 26 Oct 2008 18:08:20 +0000 Subject: [PATCH] * FloodfillMonitor: - Fix ff count (we forgot ourselves) - Don't become ff if hidden --- .../networkdb/kademlia/FloodfillMonitorJob.java | 12 ++++++++---- .../kademlia/FloodfillNetworkDatabaseFacade.java | 6 ++++-- .../networkdb/kademlia/FloodfillPeerSelector.java | 1 + 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/router/java/src/net/i2p/router/networkdb/kademlia/FloodfillMonitorJob.java b/router/java/src/net/i2p/router/networkdb/kademlia/FloodfillMonitorJob.java index ec44d35d6..26eaa2fad 100644 --- a/router/java/src/net/i2p/router/networkdb/kademlia/FloodfillMonitorJob.java +++ b/router/java/src/net/i2p/router/networkdb/kademlia/FloodfillMonitorJob.java @@ -54,6 +54,10 @@ class FloodfillMonitorJob extends JobImpl { if (getContext().getProperty(Router.PROP_SHUTDOWN_IN_PROGRESS) != null) return false; + // Hidden trumps netDb.floodfillParticipant=true + if (getContext().router().isHidden()) + return false; + String enabled = getContext().getProperty(PROP_FLOODFILL_PARTICIPANT, "auto"); if ("true".equals(enabled)) return true; @@ -70,7 +74,7 @@ class FloodfillMonitorJob extends JobImpl { if (getContext().router().getRouterInfo().getCapabilities().indexOf("O") < 0) return false; - // This list may include ourselves... + // This list will not include ourselves... List floodfillPeers = _facade.getFloodfillPeers(); long now = getContext().clock().now(); // We know none at all! Must be our turn... @@ -99,10 +103,8 @@ class FloodfillMonitorJob extends JobImpl { int ffcount = floodfillPeers.size(); int failcount = 0; long before = now - 60*60*1000; - for (int i = 0; i < floodfillPeers.size(); i++) { + for (int i = 0; i < ffcount; i++) { Hash peer = (Hash)floodfillPeers.get(i); - if (peer.equals(getContext().routerHash())) - continue; PeerProfile profile = getContext().profileOrganizer().getProfile(peer); if (profile == null || profile.getLastHeardFrom() < before || profile.getIsFailing() || getContext().shitlist().isShitlisted(peer) || @@ -110,6 +112,8 @@ class FloodfillMonitorJob extends JobImpl { failcount++; } + if (wasFF) + ffcount++; int good = ffcount - failcount; boolean happy = getContext().router().getRouterInfo().getCapabilities().indexOf("R") >= 0; // Use the same job lag test as in RouterThrottleImpl 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 26ef1586a..ad9ed45bf 100644 --- a/router/java/src/net/i2p/router/networkdb/kademlia/FloodfillNetworkDatabaseFacade.java +++ b/router/java/src/net/i2p/router/networkdb/kademlia/FloodfillNetworkDatabaseFacade.java @@ -67,7 +67,7 @@ public class FloodfillNetworkDatabaseFacade extends KademliaNetworkDatabaseFacad */ public void publish(RouterInfo localRouterInfo) throws IllegalArgumentException { if (localRouterInfo == null) throw new IllegalArgumentException("wtf, null localRouterInfo?"); - if (localRouterInfo.isHidden()) return; // DE-nied! + if (_context.router().isHidden()) return; // DE-nied! super.publish(localRouterInfo); sendStore(localRouterInfo.getIdentity().calculateHash(), localRouterInfo, null, null, PUBLISH_TIMEOUT, null); } @@ -248,7 +248,9 @@ public class FloodfillNetworkDatabaseFacade extends KademliaNetworkDatabaseFacad synchronized (_activeFloodQueries) { _activeFloodQueries.remove(key); } } - /** list of the Hashes of currently known floodfill peers */ + /** list of the Hashes of currently known floodfill peers; + * Returned list will not include our own hash. + */ public List getFloodfillPeers() { FloodfillPeerSelector sel = (FloodfillPeerSelector)getPeerSelector(); return sel.selectFloodfillParticipants(getKBuckets()); diff --git a/router/java/src/net/i2p/router/networkdb/kademlia/FloodfillPeerSelector.java b/router/java/src/net/i2p/router/networkdb/kademlia/FloodfillPeerSelector.java index 2b5995b22..1e73e3037 100644 --- a/router/java/src/net/i2p/router/networkdb/kademlia/FloodfillPeerSelector.java +++ b/router/java/src/net/i2p/router/networkdb/kademlia/FloodfillPeerSelector.java @@ -54,6 +54,7 @@ class FloodfillPeerSelector extends PeerSelector { return rv; } + /** Returned list will not include our own hash */ public List selectFloodfillParticipants(KBucketSet kbuckets) { if (kbuckets == null) return new ArrayList(); FloodfillSelectionCollector matches = new FloodfillSelectionCollector(null, null, 0);