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