Author: toad
Date: 2008-04-08 14:38:48 +0000 (Tue, 08 Apr 2008)
New Revision: 19075
Modified:
trunk/freenet/src/freenet/node/Announcer.java
trunk/freenet/src/freenet/node/PacketSender.java
trunk/freenet/src/freenet/node/PeerNode.java
trunk/freenet/src/freenet/node/SeedServerPeerNode.java
Log:
Disconnect from seednode connections once we have had enough opennet peers for
at least 5 minutes.
Hopefully this will reduce the load on the seednodes; my seednode had 140 seed
client connections on Saturday!
Modified: trunk/freenet/src/freenet/node/Announcer.java
===================================================================
--- trunk/freenet/src/freenet/node/Announcer.java 2008-04-08 14:27:58 UTC
(rev 19074)
+++ trunk/freenet/src/freenet/node/Announcer.java 2008-04-08 14:38:48 UTC
(rev 19075)
@@ -240,6 +240,8 @@
// Do nothing at present
}
+ private long timeGotEnoughPeers = -1;
+
/** @return True if we have enough peers that we don't need to
announce. */
boolean enoughPeers() {
// Do we want to send an announcement to the node?
@@ -249,10 +251,25 @@
if(opennetCount >= target) {
if(logMINOR)
Logger.minor(this, "We have enough opennet
peers: "+opennetCount+" > "+target);
+ synchronized(this) {
+ if(timeGotEnoughPeers <= 0)
+ timeGotEnoughPeers =
System.currentTimeMillis();
+ }
return true;
}
+ synchronized(this) {
+ timeGotEnoughPeers = -1;
+ }
return false;
}
+
+ /**
+ * Get the earliest time at which we had enough opennet peers. This is
reset when we drop
+ * below the threshold.
+ */
+ synchronized long timeGotEnoughPeers() {
+ return timeGotEnoughPeers;
+ }
private boolean ignoreIPUndetected;
static final int FORCE_ANNOUNCEMENT_NO_IP = 120*1000;
Modified: trunk/freenet/src/freenet/node/PacketSender.java
===================================================================
--- trunk/freenet/src/freenet/node/PacketSender.java 2008-04-08 14:27:58 UTC
(rev 19074)
+++ trunk/freenet/src/freenet/node/PacketSender.java 2008-04-08 14:38:48 UTC
(rev 19075)
@@ -227,6 +227,10 @@
Logger.normal(this,
"shouldDisconnectNow has returned true : marking the peer as incompatible");
continue;
}
+
+ if(pn.shouldDisconnectAndRemoveNow() &&
!pn.isDisconnecting()) {
+ node.peers.disconnect(pn, true, false);
+ }
boolean mustSend = false;
Modified: trunk/freenet/src/freenet/node/PeerNode.java
===================================================================
--- trunk/freenet/src/freenet/node/PeerNode.java 2008-04-08 14:27:58 UTC
(rev 19074)
+++ trunk/freenet/src/freenet/node/PeerNode.java 2008-04-08 14:38:48 UTC
(rev 19075)
@@ -3883,4 +3883,11 @@
Logger.error(this, "Peer constantly changes its IP address!!:
"+shortToString());
forceDisconnect(true);
}
+
+ /**
+ * Should this peer be disconnected and removed immediately?
+ */
+ public boolean shouldDisconnectAndRemoveNow() {
+ return false;
+ }
}
Modified: trunk/freenet/src/freenet/node/SeedServerPeerNode.java
===================================================================
--- trunk/freenet/src/freenet/node/SeedServerPeerNode.java 2008-04-08
14:27:58 UTC (rev 19074)
+++ trunk/freenet/src/freenet/node/SeedServerPeerNode.java 2008-04-08
14:38:48 UTC (rev 19075)
@@ -98,4 +98,13 @@
protected boolean generateIdentityFromPubkey() {
return false;
}
+
+ public boolean shouldDisconnectAndRemoveNow() {
+ OpennetManager om = node.getOpennet();
+ if(om == null) return true;
+ if(om.announcer.enoughPeers()) return false;
+ // We have enough peers, but we might fluctuate a bit.
+ // Drop the connection once we have consistently had enough
opennet peers for 5 minutes.
+ return System.currentTimeMillis() -
om.announcer.timeGotEnoughPeers() > 5*60*1000;
+ }
}