diff --git a/router/java/src/net/i2p/router/peermanager/ProfileOrganizer.java b/router/java/src/net/i2p/router/peermanager/ProfileOrganizer.java index 660324deed260afe4850a3c95fdcd3a772be6f19..e759441d943ce96f45f80f58e86028cf6e4dcf93 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 beb52ca41adc0515de73f300d4e93e6413f562d7..2bd6ee7aa80c81bdb392796d34f6de7f34f80dcc 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);