Florent Daignière (NextGen$) wrote:
* [EMAIL PROTECTED] <[EMAIL PROTECTED]> [2006-06-18 19:02:38]:
Author: zothar
Date: 2006-06-18 19:02:33 +0000 (Sun, 18 Jun 2006)
New Revision: 9304
Modified:
trunk/freenet/src/freenet/node/RequestSender.java
Log:
Mitigate "backoff hell" a bit by not routing to a peer if it's the only one not
backed off and we have a few backed off peers.
That's what we call alchemy, isn't it ? :)
Well, I do see the point of not sending our requests when we have only
one online peer (even if there is plausible deniability) but why the
"backoff throwsold" ? to allow nodes with less than 4 peers to be usable
?
I'm not sure I agree to the concept, maybe I'm missing the point though,
may you explain ? :)
When I got back to my node after being away from it for 24 hours
Saturday night, it was in what I call "backoff hell". I've seen
"backoff hell" at least one other time. It's when all of your connected
peers are backed off and every time one of them comes out of backoff, it
goes right back into back off very quickly. I assume this is because my
node is eager to send that node anything it has, no matter how misrouted
it is. I don't recall from last time, but I must admit that this time,
the reason was usually timeouts rather than overloads. You're right,
the backoff threshold is so that nodes with fewer than 4 peers don't
have this restriction.
I agree that this is alchemy, but I figure it'll give a node more of a
fighting chance of recovering from "backoff hell" and since that's the
only time it'd apply, the impact otherwise should be nil. Perhaps some
of the SoC work this summer will make such alchemy unneeded. However,
just because it's alchemy doesn't mean it can't be useful.
Modified: trunk/freenet/src/freenet/node/RequestSender.java
===================================================================
--- trunk/freenet/src/freenet/node/RequestSender.java 2006-06-18 17:35:22 UTC
(rev 9303)
+++ trunk/freenet/src/freenet/node/RequestSender.java 2006-06-18 19:02:33 UTC
(rev 9304)
@@ -113,6 +113,13 @@
return;
}
+ // Route starvation due to almost all backed off?
+ if(node.getPeerNodeStatusSize(Node.PEER_NODE_STATUS_CONNECTED) ==
1 && node.getPeerNodeStatusSize(Node.PEER_NODE_STATUS_ROUTING_BACKED_OFF) > 3) {
+ // Don't send everything to one node, that may have just come
out of backoff, hopefully preventing backoff hell (the one emerging from
backoff gets pounded back into backoff)
+ finish(ROUTE_NOT_FOUND, null);
+ return;
+ }
+
// Route it
PeerNode next;
double nextValue;
_______________________________________________
Devl mailing list
[email protected]
http://emu.freenetproject.org/cgi-bin/mailman/listinfo/devl