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;