From e0c8eb7640ea7cea58eb0c41190a859e1f8b97b8 Mon Sep 17 00:00:00 2001 From: zzz Date: Mon, 12 Sep 2011 13:08:50 +0000 Subject: [PATCH] * NetDB: Disable floodfill at shutdown time if enabled --- .../FloodfillNetworkDatabaseFacade.java | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) 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 937dcc244..3cda00ee9 100644 --- a/router/java/src/net/i2p/router/networkdb/kademlia/FloodfillNetworkDatabaseFacade.java +++ b/router/java/src/net/i2p/router/networkdb/kademlia/FloodfillNetworkDatabaseFacade.java @@ -79,6 +79,31 @@ public class FloodfillNetworkDatabaseFacade extends KademliaNetworkDatabaseFacad _context.inNetMessagePool().registerHandlerJobBuilder(DatabaseStoreMessage.MESSAGE_TYPE, new FloodfillDatabaseStoreMessageHandler(_context, this)); } + /** + * If we are floodfill, turn it off and tell everybody. + * @since 0.8.9 + */ + @Override + public void shutdown() { + if (_floodfillEnabled) { + // turn off to build a new RI... + _floodfillEnabled = false; + // true -> publish inline + // but job queue is already shut down, so sendStore() called by rebuildRouterInfo() won't work... + _context.router().rebuildRouterInfo(true); + // ...so force a flood here + RouterInfo local = _context.router().getRouterInfo(); + if (local != null && _context.router().getUptime() > PUBLISH_JOB_DELAY) { + flood(local); + // let the messages get out... + try { + Thread.sleep(3000); + } catch (InterruptedException ie) {} + } + } + super.shutdown(); + } + /** * This maybe could be shorter than RepublishLeaseSetJob.REPUBLISH_LEASESET_TIMEOUT, * because we are sending direct, but unresponsive floodfills may take a while due to timeouts.