Author: toad
Date: 2008-12-13 00:01:40 +0000 (Sat, 13 Dec 2008)
New Revision: 24290
Modified:
trunk/freenet/src/freenet/node/OpennetManager.java
trunk/freenet/src/freenet/node/OpennetPeerNode.java
Log:
Allow TOO OLD opennet peers to connect for 15 minutes. Do not count them
towards the opennet connections limit.
Modified: trunk/freenet/src/freenet/node/OpennetManager.java
===================================================================
--- trunk/freenet/src/freenet/node/OpennetManager.java 2008-12-12 23:09:26 UTC
(rev 24289)
+++ trunk/freenet/src/freenet/node/OpennetManager.java 2008-12-13 00:01:40 UTC
(rev 24290)
@@ -14,6 +14,7 @@
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
+import java.util.Enumeration;
import freenet.io.comm.ByteCounter;
import freenet.io.comm.DMT;
@@ -301,7 +302,7 @@
Logger.minor(this, "Opennet peer
already present in LRU: "+nodeToAddNow);
return true;
}
- if(peersLRU.size() < getNumberOfConnectedPeersToAim()) {
+ if(getSize() < getNumberOfConnectedPeersToAim()) {
if(nodeToAddNow != null) {
if(logMINOR) Logger.minor(this, "Added
opennet peer "+nodeToAddNow+" as opennet peers list not full");
if(addAtLRU)
@@ -332,11 +333,11 @@
int maxPeers = getNumberOfConnectedPeersToAim();
// If we have dropped a disconnected peer, then the
inter-peer offer cooldown doesn't apply: we can accept immediately.
boolean hasDisconnected = false;
- if(peersLRU.size() == maxPeers && nodeToAddNow == null)
{
+ if(getSize() == maxPeers && nodeToAddNow == null) {
PeerNode toDrop = peerToDrop(true, false);
if(toDrop != null)
hasDisconnected = !toDrop.isConnected();
- } else while(peersLRU.size() > maxPeers - (nodeToAddNow
== null ? 0 : 1)) {
+ } else while(getSize() > maxPeers - (nodeToAddNow ==
null ? 0 : 1)) {
OpennetPeerNode toDrop;
// can drop peers which are over the limit
toDrop = peerToDrop(noDisconnect ||
nodeToAddNow == null, false);
@@ -347,7 +348,7 @@
break;
}
if(logMINOR)
- Logger.minor(this, "Drop opennet peer:
"+toDrop+" (connected="+toDrop.isConnected()+") of "+peersLRU.size());
+ Logger.minor(this, "Drop opennet peer:
"+toDrop+" (connected="+toDrop.isConnected()+") of
"+peersLRU.size()+":"+getSize());
if(!toDrop.isConnected())
hasDisconnected = true;
peersLRU.remove(toDrop);
@@ -403,7 +404,7 @@
}
void dropExcessPeers() {
- while(peersLRU.size() > getNumberOfConnectedPeersToAim()) {
+ while(getSize() > getNumberOfConnectedPeersToAim()) {
if(logMINOR)
Logger.minor(this, "Dropping opennet peers:
currently "+peersLRU.size());
PeerNode toDrop;
@@ -417,8 +418,23 @@
}
}
+ /**
+ * How many opennet peers do we have?
+ * Connected but out of date nodes don't count towards the connection
limit. Let them connect for
+ * long enough to auto-update. They will be disconnected eventually,
and then removed:
+ * @see OpennetPeerNode.shouldDisconnectAndRemoveNow()
+ */
+ synchronized public int getSize() {
+ int x = 0;
+ for(Enumeration e = peersLRU.elements();e.hasMoreElements();) {
+ PeerNode pn = (PeerNode) e.nextElement();
+ if(!(pn.isConnected() &&
pn.isUnroutableOlderVersion())) x++;
+ }
+ return x;
+ }
+
synchronized OpennetPeerNode peerToDrop(boolean noDisconnect, boolean
force) {
- if(peersLRU.size() < getNumberOfConnectedPeersToAim()) {
+ if(getSize() < getNumberOfConnectedPeersToAim()) {
// Don't drop any peers
return null;
} else {
@@ -426,6 +442,10 @@
OpennetPeerNode[] peers = (OpennetPeerNode[])
peersLRU.toArrayOrdered(new OpennetPeerNode[peersLRU.size()]);
for(int i=0;i<peers.length;i++) {
OpennetPeerNode pn = peers[i];
+ if(pn.isConnected() &&
pn.isUnroutableOlderVersion()) {
+ // Doesn't count anyway.
+ continue;
+ }
if(pn == null) continue;
if((!pn.isDroppable(false)) && !force) continue;
// LOCKING: Always take the OpennetManager lock
first
@@ -442,6 +462,10 @@
for(int i=0;i<peers.length;i++) {
OpennetPeerNode pn = peers[i];
if(pn == null) continue;
+ if(pn.isConnected() &&
pn.isUnroutableOlderVersion()) {
+ // Doesn't count anyway.
+ continue;
+ }
if((!pn.isDroppable(false)) && !force) continue;
if(Logger.shouldLog(Logger.MINOR, this))
Logger.minor(this, "Possibly dropping
opennet peer "+pn+" "+
@@ -480,7 +504,7 @@
}
}
}
-
+
synchronized PeerNode[] getOldPeers() {
return (PeerNode[]) oldPeers.toArrayOrdered(new
PeerNode[oldPeers.size()]);
}
Modified: trunk/freenet/src/freenet/node/OpennetPeerNode.java
===================================================================
--- trunk/freenet/src/freenet/node/OpennetPeerNode.java 2008-12-12 23:09:26 UTC
(rev 24289)
+++ trunk/freenet/src/freenet/node/OpennetPeerNode.java 2008-12-13 00:01:40 UTC
(rev 24290)
@@ -113,6 +113,9 @@
@Override
public final boolean shouldDisconnectAndRemoveNow() {
+ // Allow announced peers 15 minutes to download the auto-update.
+ if(isConnected() && isUnroutableOlderVersion() &&
System.currentTimeMillis() - timeLastConnectionCompleted() > 15*60*1000)
+ return true;
return false;
}
_______________________________________________
cvs mailing list
[email protected]
http://emu.freenetproject.org/cgi-bin/mailman/listinfo/cvs