From f49277087c86b663f428a306a5dee4ef95aa97bb Mon Sep 17 00:00:00 2001 From: zzz <zzz@mail.i2p> Date: Tue, 23 Sep 2008 18:47:10 +0000 Subject: [PATCH] * TunnelPeerSelector: Avoid a peer for 20s after a reject or timeout --- .../router/peermanager/ProfileOrganizer.java | 19 +++++++++++++++++++ .../tunnel/pool/TunnelPeerSelector.java | 1 + 2 files changed, 20 insertions(+) diff --git a/router/java/src/net/i2p/router/peermanager/ProfileOrganizer.java b/router/java/src/net/i2p/router/peermanager/ProfileOrganizer.java index 660324deed..e759441d94 100644 --- a/router/java/src/net/i2p/router/peermanager/ProfileOrganizer.java +++ b/router/java/src/net/i2p/router/peermanager/ProfileOrganizer.java @@ -477,6 +477,25 @@ public class ProfileOrganizer { return l; } + /** + * Get the peers that have recently rejected us for bandwidth + * recent == last 20s + * + */ + public List selectPeersRecentlyRejecting() { + synchronized (_reorganizeLock) { + long cutoff = _context.clock().now() - (20*1000); + int count = _notFailingPeers.size(); + List l = new ArrayList(count / 128); + for (Iterator iter = _notFailingPeers.values().iterator(); iter.hasNext(); ) { + PeerProfile prof = (PeerProfile) iter.next(); + if (prof.getTunnelHistory().getLastRejectedBandwidth() > cutoff) + l.add(prof.getPeer()); + } + return l; + } + } + /** * Find the hashes for all peers we are actively profiling * diff --git a/router/java/src/net/i2p/router/tunnel/pool/TunnelPeerSelector.java b/router/java/src/net/i2p/router/tunnel/pool/TunnelPeerSelector.java index beb52ca41a..2bd6ee7aa8 100644 --- a/router/java/src/net/i2p/router/tunnel/pool/TunnelPeerSelector.java +++ b/router/java/src/net/i2p/router/tunnel/pool/TunnelPeerSelector.java @@ -176,6 +176,7 @@ public abstract class TunnelPeerSelector { // Defaults changed to true for inbound only in filterUnreachable below. Set peers = new HashSet(1); + peers.addAll(ctx.profileOrganizer().selectPeersRecentlyRejecting()); // if (false && filterUnreachable(ctx, isInbound, isExploratory)) { if (filterUnreachable(ctx, isInbound, isExploratory)) { List caps = ctx.peerManager().getPeersByCapability(Router.CAPABILITY_UNREACHABLE); -- GitLab