I2P Address: [http://git.idk.i2p]

Skip to content
Snippets Groups Projects
Commit 1793b057 authored by zzz's avatar zzz
Browse files

* NetDb: Don't drop routerInfos if we have connectivity issues or other problems

parent f95c3248
No related branches found
No related tags found
No related merge requests found
...@@ -20,6 +20,7 @@ import net.i2p.router.JobImpl; ...@@ -20,6 +20,7 @@ import net.i2p.router.JobImpl;
import net.i2p.router.MessageSelector; import net.i2p.router.MessageSelector;
import net.i2p.router.OutNetMessage; import net.i2p.router.OutNetMessage;
import net.i2p.router.ReplyJob; import net.i2p.router.ReplyJob;
import net.i2p.router.Router;
import net.i2p.router.RouterContext; import net.i2p.router.RouterContext;
import net.i2p.router.TunnelInfo; import net.i2p.router.TunnelInfo;
import net.i2p.util.Log; import net.i2p.util.Log;
...@@ -256,7 +257,27 @@ public class FloodfillNetworkDatabaseFacade extends KademliaNetworkDatabaseFacad ...@@ -256,7 +257,27 @@ public class FloodfillNetworkDatabaseFacade extends KademliaNetworkDatabaseFacad
return sel.selectFloodfillParticipants(getKBuckets()); return sel.selectFloodfillParticipants(getKBuckets());
} }
/** NTCP cons drop quickly but SSU takes a while, so it's prudent to keep this
* a little higher than 1 or 2. */
protected final static int MIN_ACTIVE_PEERS = 5;
/**
* Search for a newer router info, drop it from the db if the search fails,
* unless just started up or have bigger problems.
*/
protected void lookupBeforeDropping(Hash peer, RouterInfo info) { protected void lookupBeforeDropping(Hash peer, RouterInfo info) {
// following are some special situations, we don't want to
// drop the peer in these cases
// yikes don't do this - stack overflow // getFloodfillPeers().size() == 0 ||
if (info.getNetworkId() == Router.NETWORK_ID &&
(getKnownRouters() < MIN_REMAINING_ROUTERS ||
_context.router().getUptime() < DONT_FAIL_PERIOD ||
_context.commSystem().countActivePeers() <= MIN_ACTIVE_PEERS)) {
if (_log.shouldLog(Log.WARN))
_log.warn("Not failing " + peer.toBase64() + " as we are just starting up or have problems");
return;
}
if (_context.jobQueue().getMaxLag() > 500) { if (_context.jobQueue().getMaxLag() > 500) {
// don't try to overload ourselves (e.g. failing 3000 router refs at // don't try to overload ourselves (e.g. failing 3000 router refs at
// once, and then firing off 3000 netDb lookup tasks) // once, and then firing off 3000 netDb lookup tasks)
......
...@@ -99,7 +99,7 @@ public class KademliaNetworkDatabaseFacade extends NetworkDatabaseFacade { ...@@ -99,7 +99,7 @@ public class KademliaNetworkDatabaseFacade extends NetworkDatabaseFacade {
* offline for a while, we'll have a chance of finding some live peers with the * offline for a while, we'll have a chance of finding some live peers with the
* previous references * previous references
*/ */
private final static long DONT_FAIL_PERIOD = 10*60*1000; protected final static long DONT_FAIL_PERIOD = 10*60*1000;
/** don't probe or broadcast data, just respond and search when explicitly needed */ /** don't probe or broadcast data, just respond and search when explicitly needed */
private boolean _quiet = false; private boolean _quiet = false;
...@@ -111,8 +111,10 @@ public class KademliaNetworkDatabaseFacade extends NetworkDatabaseFacade { ...@@ -111,8 +111,10 @@ public class KademliaNetworkDatabaseFacade extends NetworkDatabaseFacade {
public final static String PROP_DB_DIR = "router.networkDatabase.dbDir"; public final static String PROP_DB_DIR = "router.networkDatabase.dbDir";
public final static String DEFAULT_DB_DIR = "netDb"; public final static String DEFAULT_DB_DIR = "netDb";
/** if we have less than 5 routers left, don't drop any more, even if they're failing or doing bad shit */ /** if we have less than this many routers left, don't drop any more,
private final static int MIN_REMAINING_ROUTERS = 5; * even if they're failing or doing bad shit.
*/
protected final static int MIN_REMAINING_ROUTERS = 25;
/** /**
* dont accept any dbDtore of a router over 24 hours old (unless we dont * dont accept any dbDtore of a router over 24 hours old (unless we dont
...@@ -756,24 +758,6 @@ public class KademliaNetworkDatabaseFacade extends NetworkDatabaseFacade { ...@@ -756,24 +758,6 @@ public class KademliaNetworkDatabaseFacade extends NetworkDatabaseFacade {
isRouterInfo = true; isRouterInfo = true;
if (isRouterInfo) { if (isRouterInfo) {
if (((RouterInfo)o).getNetworkId() != Router.NETWORK_ID) {
// definitely drop them
} else {
int remaining = _kb.size();
if (remaining < MIN_REMAINING_ROUTERS) {
if (_log.shouldLog(Log.WARN))
_log.warn("Not removing " + dbEntry + " because we have so few routers left ("
+ remaining + ") - perhaps a reseed is necessary?");
return;
}
if (System.currentTimeMillis() < _started + DONT_FAIL_PERIOD) {
if (_log.shouldLog(Log.WARN))
_log.warn("Not failing the key " + dbEntry.toBase64()
+ " since we've just started up and don't want to drop /everyone/");
return;
}
}
lookupBeforeDropping(dbEntry, (RouterInfo)o); lookupBeforeDropping(dbEntry, (RouterInfo)o);
return; return;
} else { } else {
...@@ -806,6 +790,7 @@ public class KademliaNetworkDatabaseFacade extends NetworkDatabaseFacade { ...@@ -806,6 +790,7 @@ public class KademliaNetworkDatabaseFacade extends NetworkDatabaseFacade {
} }
} }
/** don't use directly - see F.N.D.F. override */
protected void lookupBeforeDropping(Hash peer, RouterInfo info) { protected void lookupBeforeDropping(Hash peer, RouterInfo info) {
//bah, humbug. //bah, humbug.
dropAfterLookupFailed(peer, info); dropAfterLookupFailed(peer, info);
......
...@@ -311,8 +311,11 @@ public class TransportManager implements TransportEventListener { ...@@ -311,8 +311,11 @@ public class TransportManager implements TransportEventListener {
} }
} }
if (unreachableTransports >= _transports.size()) { if (unreachableTransports >= _transports.size()) {
_context.statManager().addRateData("transport.shitlistOnUnreachable", msg.getLifetime(), msg.getLifetime()); // Don't shitlist if we aren't talking to anybody, as we may have a network connection issue
_context.shitlist().shitlistRouter(peer, "Unreachable on any transport"); if (unreachableTransports >= _transports.size() && countActivePeers() > 0) {
_context.statManager().addRateData("transport.shitlistOnUnreachable", msg.getLifetime(), msg.getLifetime());
_context.shitlist().shitlistRouter(peer, "Unreachable on any transport");
}
} else if (rv == null) { } else if (rv == null) {
_context.statManager().addRateData("transport.noBidsYetNotAllUnreachable", unreachableTransports, msg.getLifetime()); _context.statManager().addRateData("transport.noBidsYetNotAllUnreachable", unreachableTransports, msg.getLifetime());
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment