diff --git a/router/java/src/net/i2p/router/networkdb/PublishLocalRouterInfoJob.java b/router/java/src/net/i2p/router/networkdb/PublishLocalRouterInfoJob.java index 8fa729d63763dae195aa1321c2895fa8595478ce..c2275a90d7197cb98bf4ea062749ce8c50fdf15f 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 bb34f8dc6bb528813463deccae634a0052435064..767e9f7c9760a08965c3b02656099c94d79a6812 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 be55c3da6dcd10ba2705460f39a4c6cc24076a62..6c55e1f994faed9a3f9c6beac4f2f7f268415d7c 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 {