Author: toad
Date: 2008-12-06 15:24:00 +0000 (Sat, 06 Dec 2008)
New Revision: 24094

Modified:
   trunk/freenet/src/freenet/node/FNPPacketMangler.java
   trunk/freenet/src/freenet/node/OpennetManager.java
   trunk/freenet/src/freenet/node/RequestHandler.java
Log:
Throttle old-opennet-peer reconnections.


Modified: trunk/freenet/src/freenet/node/FNPPacketMangler.java
===================================================================
--- trunk/freenet/src/freenet/node/FNPPacketMangler.java        2008-12-06 
15:10:11 UTC (rev 24093)
+++ trunk/freenet/src/freenet/node/FNPPacketMangler.java        2008-12-06 
15:24:00 UTC (rev 24094)
@@ -303,7 +303,7 @@
                OpennetManager opennet = node.getOpennet();
                if(opennet != null) {
                        // Try old opennet connections.
-                       if(opennet.wantPeer(null, false, true)) {
+                       if(opennet.wantPeer(null, false, true, true)) {
                                // We want a peer.
                                // Try old connections.
                                PeerNode[] oldPeers = opennet.getOldPeers();
@@ -1201,7 +1201,7 @@
                                Logger.normal(this, "Dumping incoming 
old-opennet peer as opennet just turned off: "+pn+".");
                                return;
                        }
-                       if(!opennet.wantPeer(pn, true, false)) {
+                       if(!opennet.wantPeer(pn, true, false, true)) {
                                Logger.normal(this, "No longer want peer "+pn+" 
- dumping it after connecting");
                                dontWant = true;
                        }
@@ -1417,7 +1417,7 @@
                                Logger.normal(this, "Dumping incoming 
old-opennet peer as opennet just turned off: "+pn+".");
                                return true;
                        }
-                       if(!opennet.wantPeer(pn, true, false)) {
+                       if(!opennet.wantPeer(pn, true, false, true)) {
                                Logger.normal(this, "No longer want peer "+pn+" 
- dumping it after connecting");
                                dontWant = true;
                        }

Modified: trunk/freenet/src/freenet/node/OpennetManager.java
===================================================================
--- trunk/freenet/src/freenet/node/OpennetManager.java  2008-12-06 15:10:11 UTC 
(rev 24093)
+++ trunk/freenet/src/freenet/node/OpennetManager.java  2008-12-06 15:24:00 UTC 
(rev 24094)
@@ -246,7 +246,7 @@
                        if(logMINOR) Logger.minor(this, "Not adding 
"+pn.userToString()+" to opennet list as already there");
                        return null;
                }
-               if(wantPeer(pn, true, false)) return pn;
+               if(wantPeer(pn, true, false, false)) return pn;
                else return null;
                // Start at bottom. Node must prove itself.
        }
@@ -265,6 +265,10 @@
                dropExcessPeers();
        }
        
+       private long timeLastAddedOldOpennetPeer = -1;
+       
+       private static final int OLD_OPENNET_PEER_INTERVAL = 30*1000;
+       
        /**
         * Trim the peers list and possibly add a new node. Note that if we are 
not adding a new node,
         * we will only return true every MIN_TIME_BETWEEN_OFFERS, to prevent 
problems caused by many
@@ -277,9 +281,15 @@
         * RIGHT NOW. If false, the normal behaviour applies: if nodeToAddNow 
is passed in, we decide
         * whether to add that node, if it's null, we decide whether to send an 
offer subject to the
         * inter-offer time.
+        * @param oldOpennetPeer If true, we are trying to add an 
old-opennet-peer which has reconnected.
+        * There is a throttle, we accept no more than one old-opennet-peer 
every 30 seconds. On receiving
+        * a packet, we call once to decide whether to try to parse it against 
the old-opennet-peers, and
+        * then again to decide whether it is worth keeping; in the latter case 
if we decide not, the
+        * old-opennet-peer will be told to disconnect and go away, but 
normally we don't reach that point
+        * because of the first check.
         * @return True if the node was added / should be added.
         */
-       public boolean wantPeer(PeerNode nodeToAddNow, boolean addAtLRU, 
boolean justChecking) {
+       public boolean wantPeer(PeerNode nodeToAddNow, boolean addAtLRU, 
boolean justChecking, boolean oldOpennetPeer) {
                boolean notMany = false;
                boolean noDisconnect;
                synchronized(this) {
@@ -303,6 +313,9 @@
                                if(nodeToAddNow != null || !justChecking)
                                        timeLastOffered = 
System.currentTimeMillis();
                                notMany = true;
+                               // Don't check timeLastAddedOldOpennetPeer, 
since we want it anyway. But do update it.
+                               if(oldOpennetPeer)
+                                       timeLastAddedOldOpennetPeer = 
System.currentTimeMillis();
                        }
                        noDisconnect = successCount < 
MIN_SUCCESS_BETWEEN_DROP_CONNS;
                }
@@ -338,8 +351,12 @@
                                peersLRU.remove(toDrop);
                                dropList.add(toDrop);
                        }
+                       long now = System.currentTimeMillis();
+                       if(canAdd && oldOpennetPeer) {
+                               if(timeLastAddedOldOpennetPeer > 0 && now - 
timeLastAddedOldOpennetPeer > OLD_OPENNET_PEER_INTERVAL)
+                                       canAdd = false;
+                       }
                        if(canAdd && !justChecking) {
-                               long now = System.currentTimeMillis();
                                if(nodeToAddNow != null) {
                                        successCount = 0;
                                        if(addAtLRU)
@@ -350,6 +367,8 @@
                                        oldPeers.remove(nodeToAddNow);
                                        if(!dropList.isEmpty())
                                                timeLastDropped = now;
+                                       if(oldOpennetPeer)
+                                               timeLastAddedOldOpennetPeer = 
now;
                                } else {
                                        if(now - timeLastOffered <= 
MIN_TIME_BETWEEN_OFFERS && !hasDisconnected) {
                                                if(logMINOR)
@@ -441,7 +460,7 @@
                                // Re-add it: nasty race condition when we have 
few peers
                        }
                }
-               if(!wantPeer(pn, false, false)) // Start at top as it just 
succeeded
+               if(!wantPeer(pn, false, false, false)) // Start at top as it 
just succeeded
                        node.peers.disconnect(pn, true, false);
        }
 

Modified: trunk/freenet/src/freenet/node/RequestHandler.java
===================================================================
--- trunk/freenet/src/freenet/node/RequestHandler.java  2008-12-06 15:10:11 UTC 
(rev 24093)
+++ trunk/freenet/src/freenet/node/RequestHandler.java  2008-12-06 15:24:00 UTC 
(rev 24094)
@@ -558,7 +558,7 @@
        private boolean finishOpennetNoRelayInner(OpennetManager om) {
                if(logMINOR)
                        Logger.minor(this, "Finishing opennet: sending own 
reference");
-               if(!om.wantPeer(null, false, false))
+               if(!om.wantPeer(null, false, false, false))
                        return false; // Don't want a reference
 
                try {

_______________________________________________
cvs mailing list
[email protected]
http://emu.freenetproject.org/cgi-bin/mailman/listinfo/cvs

Reply via email to