From 8faeaaa1ae7b0391a8c18e8eadd81aa5c80df98d Mon Sep 17 00:00:00 2001 From: zzz Date: Mon, 5 Jan 2009 15:16:14 +0000 Subject: [PATCH] Transport: Don't shitlist a peer if we are at our connection limit --- router/java/src/net/i2p/router/transport/GetBidsJob.java | 3 ++- router/java/src/net/i2p/router/transport/TransportBid.java | 2 ++ .../java/src/net/i2p/router/transport/TransportManager.java | 5 ++++- .../src/net/i2p/router/transport/ntcp/NTCPTransport.java | 4 +++- .../java/src/net/i2p/router/transport/udp/UDPTransport.java | 4 +++- 5 files changed, 14 insertions(+), 4 deletions(-) diff --git a/router/java/src/net/i2p/router/transport/GetBidsJob.java b/router/java/src/net/i2p/router/transport/GetBidsJob.java index a60ba6ee6..46ea0601c 100644 --- a/router/java/src/net/i2p/router/transport/GetBidsJob.java +++ b/router/java/src/net/i2p/router/transport/GetBidsJob.java @@ -66,7 +66,8 @@ public class GetBidsJob extends JobImpl { int failedCount = msg.getFailedTransports().size(); if (failedCount == 0) { context.statManager().addRateData("transport.bidFailNoTransports", msg.getLifetime(), 0); - context.shitlist().shitlistRouter(to, "We share no common transports with them"); + // This used to be "no common transports" but it is almost always no transports at all + context.shitlist().shitlistRouter(to, "No transports (hidden or starting up?)"); } else if (failedCount >= facade.getTransportCount()) { context.statManager().addRateData("transport.bidFailAllTransports", msg.getLifetime(), 0); // fail after all transports were unsuccessful diff --git a/router/java/src/net/i2p/router/transport/TransportBid.java b/router/java/src/net/i2p/router/transport/TransportBid.java index 3d16dbc11..6b48ac76d 100644 --- a/router/java/src/net/i2p/router/transport/TransportBid.java +++ b/router/java/src/net/i2p/router/transport/TransportBid.java @@ -23,6 +23,8 @@ public class TransportBid { private long _bidExpiration; private Transport _transport; + public static final int TRANSIENT_FAIL = 999999; + public TransportBid() { setLatencyMs(-1); setBandwidthBytes(-1); diff --git a/router/java/src/net/i2p/router/transport/TransportManager.java b/router/java/src/net/i2p/router/transport/TransportManager.java index d993a600d..bade75913 100644 --- a/router/java/src/net/i2p/router/transport/TransportManager.java +++ b/router/java/src/net/i2p/router/transport/TransportManager.java @@ -301,7 +301,10 @@ public class TransportManager implements TransportEventListener { // to us via TCP, send via TCP) TransportBid bid = t.bid(msg.getTarget(), msg.getMessageSize()); if (bid != null) { - if ( (rv == null) || (rv.getLatencyMs() > bid.getLatencyMs()) ) + if (bid.getLatencyMs() == bid.TRANSIENT_FAIL) + // this keeps GetBids() from shitlisting for "no common transports" + msg.transportFailed(t.getStyle()); + else if ( (rv == null) || (rv.getLatencyMs() > bid.getLatencyMs()) ) rv = bid; if (_log.shouldLog(Log.DEBUG)) _log.debug("Transport " + t.getStyle() + " bid: " + bid + " currently winning? " + (rv == bid) diff --git a/router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java b/router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java index 7d78f618a..67b9296a9 100644 --- a/router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java +++ b/router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java @@ -36,6 +36,7 @@ public class NTCPTransport extends TransportImpl { private Log _log; private SharedBid _fastBid; private SharedBid _slowBid; + private SharedBid _transientFail; private Object _conLock; private Map _conByIdent; private NTCPAddress _myAddress; @@ -131,6 +132,7 @@ public class NTCPTransport extends TransportImpl { _fastBid = new SharedBid(25); // best _slowBid = new SharedBid(70); // better than ssu unestablished, but not better than ssu established + _transientFail = new SharedBid(TransportBid.TRANSIENT_FAIL); } void inboundEstablished(NTCPConnection con) { @@ -289,7 +291,7 @@ public class NTCPTransport extends TransportImpl { if (!allowConnection()) { if (_log.shouldLog(Log.WARN)) _log.warn("no bid when trying to send to " + toAddress.getIdentity().calculateHash().toBase64() + ", max connection limit reached"); - return null; + return _transientFail; } //if ( (_myAddress != null) && (_myAddress.equals(addr)) ) diff --git a/router/java/src/net/i2p/router/transport/udp/UDPTransport.java b/router/java/src/net/i2p/router/transport/udp/UDPTransport.java index 9dd328f7a..03714d7ef 100644 --- a/router/java/src/net/i2p/router/transport/udp/UDPTransport.java +++ b/router/java/src/net/i2p/router/transport/udp/UDPTransport.java @@ -86,6 +86,7 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority private TransportBid _fastPreferredBid; /** shared slow bid for unconnected peers when we want to always prefer UDP */ private TransportBid _slowPreferredBid; + private TransportBid _transientFail; /** list of RemoteHostId for peers whose packets we want to drop outright */ private List _dropList; @@ -157,6 +158,7 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority _fastPreferredBid = new SharedBid(15); _slowPreferredBid = new SharedBid(20); _slowestBid = new SharedBid(1000); + _transientFail = new SharedBid(TransportBid.TRANSIENT_FAIL); _fragments = new OutboundMessageFragments(_context, this, _activeThrottle); _inboundFragments = new InboundMessageFragments(_context, _fragments, this); @@ -891,7 +893,7 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority } } if (!allowConnection()) - return null; + return _transientFail; if (_log.shouldLog(Log.DEBUG)) _log.debug("bidding on a message to an unestablished peer: " + to.toBase64());