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

Reply via email to