Author: toad
Date: 2005-11-26 19:41:34 +0000 (Sat, 26 Nov 2005)
New Revision: 7622

Modified:
   trunk/freenet/src/freenet/node/InsertSender.java
   trunk/freenet/src/freenet/node/NodeDispatcher.java
   trunk/freenet/src/freenet/node/PeerManager.java
   trunk/freenet/src/freenet/node/RequestSender.java
   trunk/freenet/src/freenet/node/Version.java
Log:
236:
Different approach to load balancing:
Randomly (p=pRO) don't route to nodes which have high pRO.
Make this decision once for a given request for each node.


Modified: trunk/freenet/src/freenet/node/InsertSender.java
===================================================================
--- trunk/freenet/src/freenet/node/InsertSender.java    2005-11-26 18:08:24 UTC 
(rev 7621)
+++ trunk/freenet/src/freenet/node/InsertSender.java    2005-11-26 19:41:34 UTC 
(rev 7622)
@@ -87,6 +87,7 @@
         short origHTL = htl;
         try {
         HashSet nodesRoutedTo = new HashSet();
+        HashSet nodesNotIgnored = new HashSet();

         while(true) {
             if(receiveFailed) return; // don't need to set status as killed by 
InsertHandler
@@ -102,7 +103,7 @@
             // Can backtrack, so only route to nodes closer than we are to 
target.
             double nextValue;
             synchronized(node.peers) {
-                next = node.peers.closerPeer(source, nodesRoutedTo, target, 
true);
+                next = node.peers.closerPeer(source, nodesRoutedTo, 
nodesNotIgnored, target, true);
                 if(next != null)
                     nextValue = next.getLocation().getValue();
                 else

Modified: trunk/freenet/src/freenet/node/NodeDispatcher.java
===================================================================
--- trunk/freenet/src/freenet/node/NodeDispatcher.java  2005-11-26 18:08:24 UTC 
(rev 7621)
+++ trunk/freenet/src/freenet/node/NodeDispatcher.java  2005-11-26 19:41:34 UTC 
(rev 7622)
@@ -146,7 +146,8 @@
         long createdTime;
         long accessTime;
         PeerNode source;
-        HashSet routedTo;
+        final HashSet routedTo;
+        final HashSet notIgnored;
         Message msg;
         short lastHtl;

@@ -154,6 +155,7 @@
             createdTime = accessTime = System.currentTimeMillis();
             source = (PeerNode)msg.getSource();
             routedTo = new HashSet();
+            notIgnored = new HashSet();
             this.msg = msg;
             lastHtl = msg.getShort(DMT.HTL);
         }
@@ -259,7 +261,7 @@
         // Forward
         m = preForward(m, htl);
         while(true) {
-            PeerNode next = node.peers.closerPeer(pn, ctx.routedTo, target, 
true);
+            PeerNode next = node.peers.closerPeer(pn, ctx.routedTo, 
ctx.notIgnored, target, true);
             Logger.minor(this, "Next: "+next+" message: "+m);
             if(next != null) {
                 Logger.minor(this, "Forwarding "+m.getSpec()+" to 
"+next.getPeer().getPort());

Modified: trunk/freenet/src/freenet/node/PeerManager.java
===================================================================
--- trunk/freenet/src/freenet/node/PeerManager.java     2005-11-26 18:08:24 UTC 
(rev 7621)
+++ trunk/freenet/src/freenet/node/PeerManager.java     2005-11-26 19:41:34 UTC 
(rev 7622)
@@ -265,7 +265,8 @@

     static double distance(PeerNode p, double loc) {
        double d = distance(p.getLocation().getValue(), loc);
-       return d * p.getBias();
+       return d;
+       //return d * p.getBias();
     }

     /**
@@ -284,7 +285,7 @@
      * Find the peer, if any, which is closer to the target location
      * than we are, and is not included in the provided set.
      */
-    public PeerNode closerPeer(PeerNode pn, HashSet routedTo, double loc, 
boolean ignoreSelf) {
+    public PeerNode closerPeer(PeerNode pn, HashSet routedTo, HashSet 
notIgnored, double loc, boolean ignoreSelf) {
         PeerNode[] peers = connectedPeers;
         Logger.minor(this, "Choosing closest peer: 
connectedPeers="+peers.length);
         double bestDiff = Double.MAX_VALUE;
@@ -301,6 +302,15 @@
             if(!p.isConnected()) continue;
             count++;
             any = p;
+            double pRO = p.getPRejectedOverload();
+            double random = node.random.nextDouble();
+            if(!notIgnored.contains(p)) {
+               if(random < pRO) {
+                       Logger.minor(this, "Ignoring "+p+": pRO="+pRO+", 
random="+random);
+                       routedTo.add(p);
+                       continue;
+               } else notIgnored.add(p);
+            }
             double diff = distance(p, loc);
             Logger.minor(this, "p.loc="+p.getLocation().getValue()+", 
loc="+loc+", d="+distance(p.getLocation().getValue(), loc)+" usedD="+diff+", 
bias="+p.getBias());
             if((!ignoreSelf) && diff > maxDiff) continue;

Modified: trunk/freenet/src/freenet/node/RequestSender.java
===================================================================
--- trunk/freenet/src/freenet/node/RequestSender.java   2005-11-26 18:08:24 UTC 
(rev 7621)
+++ trunk/freenet/src/freenet/node/RequestSender.java   2005-11-26 19:41:34 UTC 
(rev 7622)
@@ -84,6 +84,7 @@
         short origHTL = htl;
         node.addSender(key, htl, this);
         HashSet nodesRoutedTo = new HashSet();
+        HashSet nodesNotIgnored = new HashSet();
         try {
         while(true) {
             Logger.minor(this, "htl="+htl);
@@ -99,7 +100,7 @@
             PeerNode next;
             double nextValue;
             synchronized(node.peers) {
-                next = node.peers.closerPeer(source, nodesRoutedTo, target, 
true);
+                next = node.peers.closerPeer(source, nodesRoutedTo, 
nodesNotIgnored, target, true);
                 if(next != null)
                     nextValue = next.getLocation().getValue();
                 else

Modified: trunk/freenet/src/freenet/node/Version.java
===================================================================
--- trunk/freenet/src/freenet/node/Version.java 2005-11-26 18:08:24 UTC (rev 
7621)
+++ trunk/freenet/src/freenet/node/Version.java 2005-11-26 19:41:34 UTC (rev 
7622)
@@ -20,10 +20,10 @@
        public static final String protocolVersion = "1.0";

        /** The build number of the current revision */
-       public static final int buildNumber = 235;
+       public static final int buildNumber = 236;

        /** Oldest build of Fred we will talk to */
-       public static final int lastGoodBuild = 235;
+       public static final int lastGoodBuild = 236;

        /** The highest reported build of fred */
        public static int highestSeenBuild = buildNumber;


Reply via email to