Author: toad
Date: 2007-12-10 19:53:14 +0000 (Mon, 10 Dec 2007)
New Revision: 16453

Modified:
   trunk/freenet/src/freenet/node/Announcer.java
Log:
Fix announcement:
- byte[] cannot be put into a HashSet directly. If they are they will be 
compared by pointer not by value. This was preventing us from reannouncing if 
we don't get enough nodes.
- Reannounce immediately after resetting announcedTo, if we are already 
connected to all the nodes we are going to get connected to.

Modified: trunk/freenet/src/freenet/node/Announcer.java
===================================================================
--- trunk/freenet/src/freenet/node/Announcer.java       2007-12-10 18:58:38 UTC 
(rev 16452)
+++ trunk/freenet/src/freenet/node/Announcer.java       2007-12-10 19:53:14 UTC 
(rev 16453)
@@ -18,6 +18,7 @@
 import freenet.io.comm.ReferenceSignatureVerificationException;
 import freenet.l10n.L10n;
 import freenet.node.useralerts.UserAlert;
+import freenet.support.ByteArrayWrapper;
 import freenet.support.HTMLNode;
 import freenet.support.Logger;
 import freenet.support.SimpleFieldSet;
@@ -105,6 +106,7 @@
        }

        private void connectSomeSeednodes() {
+               boolean announceNow = false;
                if(logMINOR)
                        Logger.minor(this, "Connecting some seednodes...");
                Vector/*<SimpleFieldSet>*/ seeds = readSeednodes();
@@ -129,6 +131,12 @@
                                announcedToIPs.clear();
                        }
                        count = connectSomeNodesInner(seeds);
+                       if(count == 0)
+                               announceNow = true; // Announce immediately if 
we're already connected to all our seednodes.
+               } else {
+                       if(logMINOR)
+                               Logger.minor(this, "count = "+count+" connected 
= "+connectedToIdentities.size()+
+                                               " announced = 
"+announcedToIdentities.size()+" running = "+runningAnnouncements);
                }
                // If none connect in a minute, try some more.
                node.getTicker().queueTimedJob(new Runnable() {
@@ -139,7 +147,7 @@
                                        Logger.error(this, "Caught "+t+" trying 
to send announcements", t);
                                }
                        }
-               }, MIN_ADDED_SEEDS_INTERVAL);
+               }, announceNow ? 0 : MIN_ADDED_SEEDS_INTERVAL);
        }

        private int connectSomeNodesInner(Vector seeds) {
@@ -159,7 +167,7 @@
                                }
                                if(node.peers.addPeer(seed)) {
                                        count++;
-                                       
connectedToIdentities.add(seed.identity);
+                                       connectedToIdentities.add(new 
ByteArrayWrapper(seed.identity));
                                        if(logMINOR)
                                                Logger.minor(this, "Connecting 
to seednode "+seed);
                                } else {


Reply via email to