- Generate new RI immediately at startup
      - Try again to not publish RI until we have been up a few minutes
This commit is contained in:
zzz
2009-10-28 18:18:21 +00:00
parent 88216de42c
commit e94b478317
3 changed files with 29 additions and 12 deletions

View File

@ -21,11 +21,15 @@ import net.i2p.util.Log;
/** /**
* Publish the local router's RouterInfo periodically * Publish the local router's RouterInfo periodically
* * NOTE - this also creates and signs the RI
*/ */
public class PublishLocalRouterInfoJob extends JobImpl { public class PublishLocalRouterInfoJob extends JobImpl {
private Log _log; private Log _log;
final static long PUBLISH_DELAY = 20*60*1000; 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) { public PublishLocalRouterInfoJob(RouterContext ctx) {
super(ctx); super(ctx);
@ -67,6 +71,11 @@ public class PublishLocalRouterInfoJob extends JobImpl {
} catch (DataFormatException dfe) { } catch (DataFormatException dfe) {
_log.error("Error signing the updated local router info!", 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;
}
} }
} }

View File

@ -77,7 +77,8 @@ public class FloodfillNetworkDatabaseFacade extends KademliaNetworkDatabaseFacad
if (localRouterInfo == null) throw new IllegalArgumentException("wtf, null localRouterInfo?"); if (localRouterInfo == null) throw new IllegalArgumentException("wtf, null localRouterInfo?");
if (_context.router().isHidden()) return; // DE-nied! if (_context.router().isHidden()) return; // DE-nied!
super.publish(localRouterInfo); 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 @Override

View File

@ -127,7 +127,9 @@ public class KademliaNetworkDatabaseFacade extends NetworkDatabaseFacade {
private final static long ROUTER_INFO_EXPIRATION_FLOODFILL = 60*60*1000l; 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 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) { public KademliaNetworkDatabaseFacade(RouterContext context) {
_context = context; _context = context;
@ -283,15 +285,18 @@ public class KademliaNetworkDatabaseFacade extends NetworkDatabaseFacade {
// periodically update and resign the router's 'published date', which basically // periodically update and resign the router's 'published date', which basically
// serves as a version // serves as a version
Job plrij = new PublishLocalRouterInfoJob(_context); 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); _context.jobQueue().addJob(plrij);
try {
publish(ri); // plrij calls publish() for us
} catch (IllegalArgumentException iae) { //try {
_context.router().rebuildRouterInfo(true); // publish(ri);
//_log.log(Log.CRIT, "Our local router info is b0rked, clearing from scratch", iae); //} catch (IllegalArgumentException iae) {
//_context.router().rebuildNewIdentity(); // _context.router().rebuildRouterInfo(true);
} // //_log.log(Log.CRIT, "Our local router info is b0rked, clearing from scratch", iae);
// //_context.router().rebuildNewIdentity();
//}
} }
protected void createHandlers() { 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 * @throws IllegalArgumentException if the local router info is invalid
*/ */
public void publish(RouterInfo localRouterInfo) throws IllegalArgumentException { public void publish(RouterInfo localRouterInfo) throws IllegalArgumentException {