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) {


Reply via email to