Author: toad
Date: 2007-12-18 18:02:56 +0000 (Tue, 18 Dec 2007)
New Revision: 16696

Modified:
   trunk/freenet/src/freenet/node/Announcer.java
Log:
Don't leave disconnected seednodes lying around. Purge them 1 minute after 
success. OTOH if we don't have enough nodes, reannounce after a further minute.

Modified: trunk/freenet/src/freenet/node/Announcer.java
===================================================================
--- trunk/freenet/src/freenet/node/Announcer.java       2007-12-18 17:52:43 UTC 
(rev 16695)
+++ trunk/freenet/src/freenet/node/Announcer.java       2007-12-18 18:02:56 UTC 
(rev 16696)
@@ -257,13 +257,41 @@

        private boolean ignoreIPUndetected;
        static final int FORCE_ANNOUNCEMENT_NO_IP = 120*1000;
+       /** 1 minute after we have enough peers, remove all seednodes left 
(presumably disconnected ones) */
+       static final int FINAL_DELAY = 60*1000;
+       /** But if we don't have enough peers at that point, wait another 
minute and if the situation has not improved, reannounce. */
+       static final int RETRY_DELAY = 60*1000;

+       
        public void maybeSendAnnouncement() {
                logMINOR = Logger.shouldLog(Logger.MINOR, this);
                if(logMINOR)
                        Logger.minor(this, "maybeSendAnnouncement()");
                long now = System.currentTimeMillis();
-               if(enoughPeers()) return;
+               if(enoughPeers()) {
+                       node.getTicker().queueTimedJob(new Runnable() {
+                               public void run() {
+                                       synchronized(Announcer.this) {
+                                               if(runningAnnouncements > 0) 
return;
+                                       }
+                                       if(enoughPeers()) {
+                                               Vector seeds = 
node.peers.getConnectedSeedServerPeersVector(null);
+                                               for(int i=0;i<seeds.size();i++) 
{
+                                                       SeedServerPeerNode pn = 
(SeedServerPeerNode) seeds.get(i);
+                                                       
node.peers.disconnect(pn, true, true);
+                                               }
+                                       } else {
+                                               
node.getTicker().queueTimedJob(new Runnable() {
+                                                       public void run() {
+                                                               
maybeSendAnnouncement();
+                                                       }
+                                               }, RETRY_DELAY);
+                                               maybeSendAnnouncement();
+                                       }
+                               }
+                       }, FINAL_DELAY);
+                       return;
+               }
                if((!ignoreIPUndetected) && (!node.ipDetector.hasValidIP())) {
                        if(node.ipDetector.ipDetectorManager.hasDetectors()) {
                                // Wait a bit


Reply via email to