forked from I2P_Developers/i2p.i2p
Merge branch 'publish2' into 'master'
NetDB: RI Publish improvements part 2 See merge request i2p-hackers/i2p.i2p!226
This commit is contained in:
@@ -47,6 +47,7 @@ import net.i2p.data.router.RouterInfo;
|
|||||||
import net.i2p.router.CommSystemFacade.Status;
|
import net.i2p.router.CommSystemFacade.Status;
|
||||||
import net.i2p.router.crypto.FamilyKeyCrypto;
|
import net.i2p.router.crypto.FamilyKeyCrypto;
|
||||||
import net.i2p.router.message.GarlicMessageHandler;
|
import net.i2p.router.message.GarlicMessageHandler;
|
||||||
|
import net.i2p.router.networkdb.PublishLocalRouterInfoJob;
|
||||||
import net.i2p.router.networkdb.kademlia.FloodfillNetworkDatabaseFacade;
|
import net.i2p.router.networkdb.kademlia.FloodfillNetworkDatabaseFacade;
|
||||||
import net.i2p.router.startup.CreateRouterInfoJob;
|
import net.i2p.router.startup.CreateRouterInfoJob;
|
||||||
import net.i2p.router.startup.PortableWorkingDir;
|
import net.i2p.router.startup.PortableWorkingDir;
|
||||||
@@ -936,6 +937,11 @@ public class Router implements RouterClock.ClockShiftListener {
|
|||||||
// so we probably don't need to throw it to the timer queue,
|
// so we probably don't need to throw it to the timer queue,
|
||||||
// but just to be safe
|
// but just to be safe
|
||||||
_context.simpleTimer2().addEvent(r, 0);
|
_context.simpleTimer2().addEvent(r, 0);
|
||||||
|
|
||||||
|
// periodically update our RI and republish it to the flooodfills
|
||||||
|
PublishLocalRouterInfoJob plrij = new PublishLocalRouterInfoJob(_context);
|
||||||
|
plrij.getTiming().setStartAfter(_context.clock().now() + plrij.getDelay());
|
||||||
|
_context.jobQueue().addJob(plrij);
|
||||||
}
|
}
|
||||||
if (changed) {
|
if (changed) {
|
||||||
_context.commSystem().initGeoIP();
|
_context.commSystem().initGeoIP();
|
||||||
|
@@ -58,7 +58,6 @@ public class PublishLocalRouterInfoJob extends JobImpl {
|
|||||||
* in Router.setNetDbReady(), so we probably don't need this anymore
|
* in Router.setNetDbReady(), so we probably don't need this anymore
|
||||||
*/
|
*/
|
||||||
private static final long FIRST_TIME_DELAY = 90*1000;
|
private static final long FIRST_TIME_DELAY = 90*1000;
|
||||||
private volatile boolean _notFirstTime;
|
|
||||||
private final AtomicInteger _runCount = new AtomicInteger();
|
private final AtomicInteger _runCount = new AtomicInteger();
|
||||||
|
|
||||||
public PublishLocalRouterInfoJob(RouterContext ctx) {
|
public PublishLocalRouterInfoJob(RouterContext ctx) {
|
||||||
@@ -92,7 +91,9 @@ public class PublishLocalRouterInfoJob extends JobImpl {
|
|||||||
List<RouterAddress> newAddrs = getContext().commSystem().createAddresses();
|
List<RouterAddress> newAddrs = getContext().commSystem().createAddresses();
|
||||||
int count = _runCount.incrementAndGet();
|
int count = _runCount.incrementAndGet();
|
||||||
RouterInfo ri = new RouterInfo(oldRI);
|
RouterInfo ri = new RouterInfo(oldRI);
|
||||||
if (_notFirstTime && (count % 4) != 0 && oldAddrs.size() == newAddrs.size()) {
|
if ((count % 4) != 0 &&
|
||||||
|
oldAddrs.size() == newAddrs.size() &&
|
||||||
|
getContext().random().nextInt(32) != 0) {
|
||||||
// 3 times out of 4, we don't republish if everything is the same...
|
// 3 times out of 4, we don't republish if everything is the same...
|
||||||
// If something changed, including the cost, then publish,
|
// If something changed, including the cost, then publish,
|
||||||
// otherwise don't.
|
// otherwise don't.
|
||||||
@@ -149,19 +150,15 @@ 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);
|
||||||
}
|
}
|
||||||
if (_notFirstTime) {
|
_runCount.set(0);
|
||||||
requeue(getDelay());
|
requeue(getDelay());
|
||||||
} else {
|
|
||||||
// First publish after netdb ready is now done via state machine
|
|
||||||
// in Router.setNetDbReady(), so we probably don't need this anymore
|
|
||||||
// but leave it in for now, a router may have trouble publishing right away
|
|
||||||
requeue(FIRST_TIME_DELAY);
|
|
||||||
_notFirstTime = true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private long getDelay() {
|
/**
|
||||||
long rv = (PUBLISH_DELAY * 3 / 4) + getContext().random().nextLong(PUBLISH_DELAY / 4);
|
* @since public since 0.9.65 for use by Router
|
||||||
|
*/
|
||||||
|
public long getDelay() {
|
||||||
|
long rv = (PUBLISH_DELAY * 2 / 3) + getContext().random().nextLong(PUBLISH_DELAY / 3);
|
||||||
// run 4x as often as usual publish time (see above)
|
// run 4x as often as usual publish time (see above)
|
||||||
rv /= 4;
|
rv /= 4;
|
||||||
return rv;
|
return rv;
|
||||||
|
@@ -429,23 +429,9 @@ public abstract class KademliaNetworkDatabaseFacade extends NetworkDatabaseFacad
|
|||||||
_log.warn("Operating in quiet mode - not exploring or pushing data proactively, simply reactively");
|
_log.warn("Operating in quiet mode - not exploring or pushing data proactively, simply reactively");
|
||||||
_log.warn("This should NOT be used in production");
|
_log.warn("This should NOT be used in production");
|
||||||
}
|
}
|
||||||
if (!isClientDb()) {
|
//
|
||||||
// periodically update and resign the router's 'published date', which basically
|
// PublishLocalRouterInfoJob is now started from Router.setNetDbReady()
|
||||||
// serves as a version
|
//
|
||||||
Job plrij = new PublishLocalRouterInfoJob(_context);
|
|
||||||
// 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);
|
|
||||||
|
|
||||||
// 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();
|
|
||||||
//}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** unused, see override */
|
/** unused, see override */
|
||||||
|
Reference in New Issue
Block a user