From 1f8e61f4808abe0598ec73ba0dcf1852042c23c9 Mon Sep 17 00:00:00 2001 From: zzz <zzz@mail.i2p> Date: Tue, 10 Nov 2009 20:11:08 +0000 Subject: [PATCH] verify using closest-to-the-key --- .../kademlia/FloodfillVerifyStoreJob.java | 23 +++++++++++-------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/router/java/src/net/i2p/router/networkdb/kademlia/FloodfillVerifyStoreJob.java b/router/java/src/net/i2p/router/networkdb/kademlia/FloodfillVerifyStoreJob.java index 3706606e40..6627b0905c 100644 --- a/router/java/src/net/i2p/router/networkdb/kademlia/FloodfillVerifyStoreJob.java +++ b/router/java/src/net/i2p/router/networkdb/kademlia/FloodfillVerifyStoreJob.java @@ -1,7 +1,8 @@ package net.i2p.router.networkdb.kademlia; -import java.util.Collections; +import java.util.HashSet; import java.util.List; +import java.util.Set; import net.i2p.data.DataStructure; import net.i2p.data.Hash; @@ -83,16 +84,20 @@ public class FloodfillVerifyStoreJob extends JobImpl { getContext().tunnelDispatcher().dispatchOutbound(lookup, outTunnel.getSendTunnelId(0), _target); } - /** todo pick one close to the key */ + /** + * Pick a responsive floodfill close to the key, but not the one we sent to + */ private Hash pickTarget() { - FloodfillPeerSelector sel = (FloodfillPeerSelector)_facade.getPeerSelector(); - List<Hash> peers = sel.selectFloodfillParticipants(_facade.getKBuckets()); - Collections.shuffle(peers, getContext().random()); - for (int i = 0; i < peers.size(); i++) { - Hash rv = peers.get(i); - if (!rv.equals(_sentTo)) - return rv; + Set<Hash> ignore = null; + if (_sentTo != null) { + ignore = new HashSet(1); + ignore.add(_sentTo); } + Hash rkey = getContext().routingKeyGenerator().getRoutingKey(_key); + FloodfillPeerSelector sel = (FloodfillPeerSelector)_facade.getPeerSelector(); + List<Hash> peers = sel.selectFloodfillParticipants(rkey, 1, ignore, _facade.getKBuckets()); + if (peers.size() > 0) + return peers.get(0); if (_log.shouldLog(Log.WARN)) _log.warn("No other peers to verify floodfill with, using the one we sent to"); -- GitLab