From e94b47831710a4cc2b25e0e23a5512121b3c5518 Mon Sep 17 00:00:00 2001 From: zzz <zzz@mail.i2p> Date: Wed, 28 Oct 2009 18:18:21 +0000 Subject: [PATCH] * NetDb: - Generate new RI immediately at startup - Try again to not publish RI until we have been up a few minutes --- .../networkdb/PublishLocalRouterInfoJob.java | 13 ++++++++-- .../FloodfillNetworkDatabaseFacade.java | 3 ++- .../KademliaNetworkDatabaseFacade.java | 25 ++++++++++++------- 3 files changed, 29 insertions(+), 12 deletions(-) diff --git a/router/java/src/net/i2p/router/networkdb/PublishLocalRouterInfoJob.java b/router/java/src/net/i2p/router/networkdb/PublishLocalRouterInfoJob.java index 8fa729d637..c2275a90d7 100644 --- a/router/java/src/net/i2p/router/networkdb/PublishLocalRouterInfoJob.java +++ b/router/java/src/net/i2p/router/networkdb/PublishLocalRouterInfoJob.java @@ -21,11 +21,15 @@ import net.i2p.util.Log; /** * Publish the local router's RouterInfo periodically - * + * NOTE - this also creates and signs the RI */ public class PublishLocalRouterInfoJob extends JobImpl { private Log _log; final static long PUBLISH_DELAY = 20*60*1000; + /** this needs to be long enough to give us time to start up, + but less than 20m (when we start accepting tunnels and could be a IBGW) */ + final static long FIRST_TIME_DELAY = 8*60*1000; + boolean _notFirstTime; public PublishLocalRouterInfoJob(RouterContext ctx) { super(ctx); @@ -67,6 +71,11 @@ public class PublishLocalRouterInfoJob extends JobImpl { } catch (DataFormatException dfe) { _log.error("Error signing the updated local router info!", dfe); } - requeue((PUBLISH_DELAY/2) + getContext().random().nextInt((int)PUBLISH_DELAY)); + if (_notFirstTime) { + requeue((PUBLISH_DELAY/2) + getContext().random().nextInt((int)PUBLISH_DELAY)); + } else { + requeue(FIRST_TIME_DELAY); + _notFirstTime = true; + } } } diff --git a/router/java/src/net/i2p/router/networkdb/kademlia/FloodfillNetworkDatabaseFacade.java b/router/java/src/net/i2p/router/networkdb/kademlia/FloodfillNetworkDatabaseFacade.java index bb34f8dc6b..767e9f7c97 100644 --- a/router/java/src/net/i2p/router/networkdb/kademlia/FloodfillNetworkDatabaseFacade.java +++ b/router/java/src/net/i2p/router/networkdb/kademlia/FloodfillNetworkDatabaseFacade.java @@ -77,7 +77,8 @@ public class FloodfillNetworkDatabaseFacade extends KademliaNetworkDatabaseFacad if (localRouterInfo == null) throw new IllegalArgumentException("wtf, null localRouterInfo?"); if (_context.router().isHidden()) return; // DE-nied! super.publish(localRouterInfo); - sendStore(localRouterInfo.getIdentity().calculateHash(), localRouterInfo, null, null, PUBLISH_TIMEOUT, null); + if (_context.router().getUptime() > PUBLISH_JOB_DELAY) + sendStore(localRouterInfo.getIdentity().calculateHash(), localRouterInfo, null, null, PUBLISH_TIMEOUT, null); } @Override diff --git a/router/java/src/net/i2p/router/networkdb/kademlia/KademliaNetworkDatabaseFacade.java b/router/java/src/net/i2p/router/networkdb/kademlia/KademliaNetworkDatabaseFacade.java index be55c3da6d..6c55e1f994 100644 --- a/router/java/src/net/i2p/router/networkdb/kademlia/KademliaNetworkDatabaseFacade.java +++ b/router/java/src/net/i2p/router/networkdb/kademlia/KademliaNetworkDatabaseFacade.java @@ -127,7 +127,9 @@ public class KademliaNetworkDatabaseFacade extends NetworkDatabaseFacade { private final static long ROUTER_INFO_EXPIRATION_FLOODFILL = 60*60*1000l; private final static long EXPLORE_JOB_DELAY = 10*60*1000l; - private final static long PUBLISH_JOB_DELAY = 5*60*1000l; + /** this needs to be long enough to give us time to start up, + but less than 20m (when we start accepting tunnels and could be a IBGW) */ + protected final static long PUBLISH_JOB_DELAY = 5*60*1000l; public KademliaNetworkDatabaseFacade(RouterContext context) { _context = context; @@ -283,15 +285,18 @@ public class KademliaNetworkDatabaseFacade extends NetworkDatabaseFacade { // periodically update and resign the router's 'published date', which basically // serves as a version Job plrij = new PublishLocalRouterInfoJob(_context); - plrij.getTiming().setStartAfter(_context.clock().now() + PUBLISH_JOB_DELAY); + // do not delay this, as this creates the RI too, and we need a good local routerinfo right away + //plrij.getTiming().setStartAfter(_context.clock().now() + PUBLISH_JOB_DELAY); _context.jobQueue().addJob(plrij); - try { - publish(ri); - } catch (IllegalArgumentException iae) { - _context.router().rebuildRouterInfo(true); - //_log.log(Log.CRIT, "Our local router info is b0rked, clearing from scratch", iae); - //_context.router().rebuildNewIdentity(); - } + + // plrij calls publish() for us + //try { + // publish(ri); + //} catch (IllegalArgumentException iae) { + // _context.router().rebuildRouterInfo(true); + // //_log.log(Log.CRIT, "Our local router info is b0rked, clearing from scratch", iae); + // //_context.router().rebuildNewIdentity(); + //} } protected void createHandlers() { @@ -520,6 +525,8 @@ public class KademliaNetworkDatabaseFacade extends NetworkDatabaseFacade { } /** + * Stores to local db only. + * Overridden in FNDF to actually send to the floodfills. * @throws IllegalArgumentException if the local router info is invalid */ public void publish(RouterInfo localRouterInfo) throws IllegalArgumentException { -- GitLab