Author: toad
Date: 2007-07-13 16:26:20 +0000 (Fri, 13 Jul 2007)
New Revision: 14077
Modified:
trunk/freenet/src/freenet/node/DarknetPeerNode.java
trunk/freenet/src/freenet/node/OpennetManager.java
trunk/freenet/src/freenet/node/OpennetPeerNode.java
trunk/freenet/src/freenet/node/PeerManager.java
trunk/freenet/src/freenet/node/PeerNode.java
trunk/freenet/src/freenet/node/RequestSender.java
Log:
Implement most of LRU (not the actual dumping yet)
Modified: trunk/freenet/src/freenet/node/DarknetPeerNode.java
===================================================================
--- trunk/freenet/src/freenet/node/DarknetPeerNode.java 2007-07-13 16:05:31 UTC
(rev 14076)
+++ trunk/freenet/src/freenet/node/DarknetPeerNode.java 2007-07-13 16:26:20 UTC
(rev 14077)
@@ -209,7 +209,6 @@
return fs;
}
-
public synchronized String getName() {
return myName;
}
@@ -1522,4 +1521,13 @@
public boolean isOpennet() {
return false;
}
+
+ public void onSuccess(boolean insert, boolean ssk) {
+ // Ignore it
+ }
+
+ public void onRemove() {
+ // Do nothing
+ // FIXME is there anything we should do?
+ }
}
Modified: trunk/freenet/src/freenet/node/OpennetManager.java
===================================================================
--- trunk/freenet/src/freenet/node/OpennetManager.java 2007-07-13 16:05:31 UTC
(rev 14076)
+++ trunk/freenet/src/freenet/node/OpennetManager.java 2007-07-13 16:26:20 UTC
(rev 14077)
@@ -12,6 +12,7 @@
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Arrays;
+import java.util.Comparator;
import freenet.io.comm.Peer;
import freenet.io.comm.PeerParseException;
@@ -65,6 +66,29 @@
}
peersLRU = new LRUQueue();
node.peers.tryReadPeers(new File(node.nodeDir,
"openpeers-"+crypto.portNumber).toString(), crypto, this, true);
+ OpennetPeerNode[] nodes = node.peers.getOpennetPeers();
+ Arrays.sort(nodes, new Comparator() {
+ public int compare(Object arg0, Object arg1) {
+ OpennetPeerNode pn1 = (OpennetPeerNode) arg0;
+ OpennetPeerNode pn2 = (OpennetPeerNode) arg1;
+
+ long lastSuccess1 = pn1.timeLastSuccess();
+ long lastSuccess2 = pn2.timeLastSuccess();
+
+ if(lastSuccess1 > lastSuccess2) return 1;
+ if(lastSuccess2 > lastSuccess1) return -1;
+
+ boolean neverConnected1 = pn1.neverConnected();
+ boolean neverConnected2 = pn2.neverConnected();
+ if(neverConnected1 && (!neverConnected2))
+ return -1;
+ if((!neverConnected1) && neverConnected2)
+ return 1;
+ return pn1.hashCode - pn2.hashCode;
+ }
+ });
+ for(int i=0;i<nodes.length;i++)
+ peersLRU.push(nodes[i]);
writeFile(nodeFile, backupNodeFile);
}
@@ -166,4 +190,12 @@
return true;
}
+ public synchronized void onSuccess(OpennetPeerNode pn) {
+ peersLRU.push(pn);
+ }
+
+ public synchronized void onRemove(OpennetPeerNode pn) {
+ peersLRU.remove(pn);
+ }
+
}
Modified: trunk/freenet/src/freenet/node/OpennetPeerNode.java
===================================================================
--- trunk/freenet/src/freenet/node/OpennetPeerNode.java 2007-07-13 16:05:31 UTC
(rev 14076)
+++ trunk/freenet/src/freenet/node/OpennetPeerNode.java 2007-07-13 16:26:20 UTC
(rev 14077)
@@ -7,6 +7,7 @@
public class OpennetPeerNode extends PeerNode {
final OpennetManager opennet;
+ private long timeLastSuccess;
public OpennetPeerNode(SimpleFieldSet fs, Node node2, NodeCrypto
crypto, OpennetManager opennet, PeerManager peers, boolean fromLocal,
OutgoingPacketMangler mangler) throws FSParseException, PeerParseException,
ReferenceSignatureVerificationException {
super(fs, node2, crypto, peers, fromLocal, mangler, true);
@@ -29,4 +30,24 @@
public boolean isDroppable() {
return System.currentTimeMillis() - getPeerAddedTime() >
OpennetManager.DROP_ELIGIBLE_TIME;
}
+
+ public void onSuccess(boolean insert, boolean ssk) {
+ if(insert || ssk) return;
+ timeLastSuccess = System.currentTimeMillis();
+ opennet.onSuccess(this);
+ }
+
+ public void onRemove() {
+ opennet.onRemove(this);
+ }
+
+ public synchronized SimpleFieldSet exportMetadataFieldSet() {
+ SimpleFieldSet fs = super.exportMetadataFieldSet();
+ fs.put("timeLastSuccess", timeLastSuccess);
+ return fs;
+ }
+
+ public final long timeLastSuccess() {
+ return timeLastSuccess;
+ }
}
Modified: trunk/freenet/src/freenet/node/PeerManager.java
===================================================================
--- trunk/freenet/src/freenet/node/PeerManager.java 2007-07-13 16:05:31 UTC
(rev 14076)
+++ trunk/freenet/src/freenet/node/PeerManager.java 2007-07-13 16:26:20 UTC
(rev 14077)
@@ -258,6 +258,7 @@
Logger.normal(this, "Removed "+pn);
}
+ pn.onRemove();
updatePMUserAlert();
return true;
}
Modified: trunk/freenet/src/freenet/node/PeerNode.java
===================================================================
--- trunk/freenet/src/freenet/node/PeerNode.java 2007-07-13 16:05:31 UTC
(rev 14076)
+++ trunk/freenet/src/freenet/node/PeerNode.java 2007-07-13 16:26:20 UTC
(rev 14077)
@@ -2680,4 +2680,10 @@
public boolean neverConnected() {
return neverConnected;
}
+
+ /** 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();
}
Modified: trunk/freenet/src/freenet/node/RequestSender.java
===================================================================
--- trunk/freenet/src/freenet/node/RequestSender.java 2007-07-13 16:05:31 UTC
(rev 14076)
+++ trunk/freenet/src/freenet/node/RequestSender.java 2007-07-13 16:26:20 UTC
(rev 14077)
@@ -624,8 +624,14 @@
successFrom = next;
}
- if(status == SUCCESS && key instanceof NodeCHK && next != null &&
next.isOpennet()) {
- finishOpennet(next);
+ if(status == SUCCESS) {
+ if(next != null) {
+ next.onSuccess(false, key instanceof NodeSSK);
+ }
+
+ if(key instanceof NodeCHK && next != null && next.isOpennet()) {
+ finishOpennet(next);
+ }
}
synchronized(this) {