Author: toad
Date: 2007-09-26 12:29:52 +0000 (Wed, 26 Sep 2007)
New Revision: 15321
Modified:
trunk/freenet/src/freenet/node/OpennetManager.java
trunk/freenet/src/freenet/node/OpennetPeerNode.java
trunk/freenet/src/freenet/node/PeerNode.java
Log:
PeerNode.disconnected() returns a boolean to indicate whether it was already
connected.
If it wasn't already connected, then in OpennetPeerNode DO NOT UPDATE THE TIME
LAST DISCONNECTED.
Resulting fix: We were ignoring the don't-drop-till-disconnected-for-5-minutes
anti-churn measure, fix it!
Always call disconnected() when a peer node is removed from the master peers
list, even if it's a darknet peer. Quicker cleanup, clearer code.
Modified: trunk/freenet/src/freenet/node/OpennetManager.java
===================================================================
--- trunk/freenet/src/freenet/node/OpennetManager.java 2007-09-26 12:11:50 UTC
(rev 15320)
+++ trunk/freenet/src/freenet/node/OpennetManager.java 2007-09-26 12:29:52 UTC
(rev 15321)
@@ -402,7 +402,6 @@
while (oldPeers.size() > MAX_OLD_PEERS)
oldPeers.pop();
}
- pn.disconnected();
}
synchronized PeerNode[] getOldPeers() {
Modified: trunk/freenet/src/freenet/node/OpennetPeerNode.java
===================================================================
--- trunk/freenet/src/freenet/node/OpennetPeerNode.java 2007-09-26 12:11:50 UTC
(rev 15320)
+++ trunk/freenet/src/freenet/node/OpennetPeerNode.java 2007-09-26 12:29:52 UTC
(rev 15321)
@@ -57,6 +57,7 @@
public void onRemove() {
opennet.onRemove(this);
+ super.onRemove();
}
public synchronized SimpleFieldSet exportMetadataFieldSet() {
@@ -69,12 +70,14 @@
return timeLastSuccess;
}
- public void disconnected() {
- synchronized(this) {
- timePrevDisconnect = timeLastDisconnect;
- timeLastDisconnect = System.currentTimeMillis();
- }
- super.disconnected();
+ public boolean disconnected() {
+ if(super.disconnected()) {
+ synchronized(this) {
+ timePrevDisconnect = timeLastDisconnect;
+ timeLastDisconnect = System.currentTimeMillis();
+ }
+ return true;
+ } else return false;
}
public synchronized long timeLastDisconnect() {
Modified: trunk/freenet/src/freenet/node/PeerNode.java
===================================================================
--- trunk/freenet/src/freenet/node/PeerNode.java 2007-09-26 12:11:50 UTC
(rev 15320)
+++ trunk/freenet/src/freenet/node/PeerNode.java 2007-09-26 12:29:52 UTC
(rev 15321)
@@ -935,13 +935,16 @@
/**
* Disconnected e.g. due to not receiving a packet for ages.
+ * @return True if the node was connected, false if it was not.
*/
- public void disconnected() {
+ public boolean disconnected() {
long now = System.currentTimeMillis();
Logger.normal(this, "Disconnected "+this);
node.usm.onDisconnect(this);
node.peers.disconnected(this);
+ boolean ret;
synchronized(this) {
+ ret = isConnected;
// Force renegotiation.
isConnected = false;
isRoutable = false;
@@ -957,6 +960,7 @@
}
node.lm.lostOrRestartedNode(this);
setPeerNodeStatus(now);
+ return ret;
}
public void forceDisconnect() {
@@ -2726,9 +2730,6 @@
/** Called when a request or insert succeeds. Used by opennet. */
public abstract void onSuccess(boolean insert, boolean ssk);
- /** Called when the peer is removed from the PeerManager */
- public abstract void onRemove();
-
/** Called when a delayed disconnect is occurring. Tell the node that
it is being disconnected, but
* that the process may take a while. */
public void notifyDisconnecting() {
@@ -2746,4 +2747,9 @@
}
setPeerNodeStatus(System.currentTimeMillis());
}
+
+ /** Called when the peer is removed from the PeerManager */
+ public void onRemove() {
+ disconnected();
+ }
}