On Dec 12, 2007, at 7:58 PM, Ed Tomlinson wrote:

On December 12, 2007, Robert Hailey wrote:

On Dec 11, 2007, at 5:59 PM, Matthew Toseland wrote:
Ok that could be interesting. Although ideally we'd have a
circular-keyspace-aware averager.
...
Ok. I suggest you commit, I will review post-commit.

Committed it r16508, though it has changed slightly according to my
experiments with swap-biasing (e.g. shows number of cache/store writes
as well).

Were should this appear?  Does it take a while to show up?  I have
r16509 running and am not seeing anything new (yet).

Sorry for the confusion, I thought the last message was on the list. The commit (r16509) is only for the statistics, not any routing change.

From what I have discovered (or theorized) thus far, using the
average location of the entire store to bias against is way too much
of an anchor. This is good, because it takes up way to much memory to
remember such a running average anyway. If we end up implementing such a bias, in the end, it will likely just take into account the last few
inserts or successes (a small constant amount). In this way, the
pressure of your peers can still pull you into a new location
(dragging the weight of the last few inserts with you; which will be
updated).

Keeping the average key location and standard deviation just requires
a few counters along hooks to update them when adding or deleting the
store... It also requires a single pass to get the initial numbers. Should
not be expensive except for that first pass.

Yes, but again, I suspect that using the entire store would not allow the node to change locations. Also, varying store sizes would make the network that much harder to derive solid math for.

I agree that using the average would be very restrictive. Average plus or minus standard deviation would give a much better 'limit'. I suspect that It would take a fair length of time for it to start limiting at all (e.g.
2 x standard deviation would be greater than 1).

It appears that you are interested in the routing change portion of the patch, so I've pasted it below (It will probably be wrapped terribly). I'm not sure I understand your point with regards to standard deviations, so I'll let you compare that logic to how I use the average in the not-even-proposed-yet routing change. Note that (with the recent commit) the below uses the average of all recently stored keys, and I have already said that probably wont work.

--
Robert Hailey

===================================================================
--- src/freenet/node/LocationManager.java       (revision 16462)
+++ src/freenet/node/LocationManager.java       (working copy)
@@ -378,9 +378,7 @@

// Randomise our location every 2*SWAP_RESET swap attempts, whichever way it went.
             if(node.random.nextInt(SWAP_RESET) == 0) {
-                setLocation(node.random.nextDouble());
-                announceLocChange();
-                node.writeNodeFile();
+                randomizeLocation();
             }

             SHA256.returnMessageDigest(md);
@@ -394,6 +392,12 @@

     }

+       public void randomizeLocation() {
+               setLocation(node.random.nextDouble());
+               announceLocChange();
+               node.writeNodeFile();
+       }
+       
     /**
      * Locks the LocationManager.
      * Sends an FNPSwapRequest out into the network.
@@ -646,7 +650,7 @@
      * Anyway:
* Two nodes choose each other and decide to attempt a switch. They * calculate the distance of all their edges currently (that is the - * distance between their currend ID and that of their neighbors), and + * distance between their current ID and that of their neighbors), and
      * multiply up all these values to get A. Then they calculate the
      * distance to all their neighbors as it would be if they switched
      * IDs, and multiply up these values to get B.
@@ -692,6 +696,10 @@

         if(logMINOR) Logger.minor(this, sb.toString());

+ //If storeBias is true, count the location of the store as one friend (on our side). + boolean storeBias=(node.nodeStats.avgStoreLocation.countReports()>50);
+               double 
storeLocation=node.nodeStats.avgStoreLocation.currentValue();
+               
         double A = 1.0;
         for(int i=0;i<friendLocs.length;i++) {
if(Math.abs(friendLocs[i] - myLoc) <= Double.MIN_VALUE) continue;
@@ -701,6 +709,8 @@
if(Math.abs(hisFriendLocs[i] - hisLoc) <= Double.MIN_VALUE) continue;
             A *= Location.distance(hisFriendLocs[i], hisLoc);
         }
+               if (storeBias)
+                       A *= Location.distance(storeLocation, myLoc);

         // B = the same, with our two values swapped
         double B = 1.0;
@@ -712,6 +722,8 @@
if(Math.abs(hisFriendLocs[i] - myLoc) <= Double.MIN_VALUE) continue;
             B *= Location.distance(hisFriendLocs[i], myLoc);
         }
+               if (storeBias)
+                       B *= Location.distance(storeLocation, hisLoc);

         //Logger.normal(this, "A="+A+" B="+B);

@@ -804,7 +816,7 @@
         // Either forward it or handle it
         if(htl <= 0) {
                if(logMINOR) Logger.minor(this, "Accepting?... "+oldID);
-            // Accept - handle locally
+ // MARK: Accept swap - lock, handle locally, spawn incomingSwapRequestHandler
             if(!lock()) {
if(logMINOR) Logger.minor(this, "Can't obtain lock on "+oldID+" - rejecting to "+pn);
                 // Reject

_______________________________________________
Devl mailing list
[email protected]
http://emu.freenetproject.org/cgi-bin/mailman/listinfo/devl

Reply via email to