Matthew Toseland wrote: > Two different failure modes. RNF means we ran out of nodes, DNF means we ran > out of HTL (randomly chose to end the request).
Right, sorry, at one stage I was thinking they should be merged if we switched to a weighted coin, so I lumped them together. I'm not sure whether I still think so (maybe RNF carries some useful information for the requester?) but I do think they should be treated identically in terms of branching (see below). > Per node failure tables would probably be a > good solution: When we get a DNF, we don't route to that node the next time; Sounds sensible. > Firstly, why is this useful? Can't we just kill the request on getting a DNF, > and route differently next time? We could - I hadn't thought of using failure tables, I was just trying to get as close as possible to the current search behaviour (ie limited branching). > When we receive a request, we have a pDrop chance of killing it at that > point. > If we don't, we route it. Just to check: "at that point" means after checking the local cache and store, right? > If a node gives us RejectedLoop, we move on; if a > node gives us a RejectedOverload, we evaluate pDrop again (we don't want to > keep searching for a non-overloaded node forever, do we?). Maybe we should adjust the probability as we would with a DNF - counting overloaded nodes as visited will automatically adjust the load produced by each request to the amount of overload in the network. > If we get a RouteNotFound, we evaluate pDrop again and continue. So we move on without adjusting the probability? I'm not sure that's a good idea - an RNF visits at least one new node, so it should be counted. > If we get a > DataNotFound, we drop the request unless random(1.0) < pDrop. We move on to > the next node, and if that also gives us a DataNotFound, we do the same. > > So the probability of trying at least one peer is 1-pDrop, the probability of > trying at least two peers is pDrop*(1-pDrop), a third is > pDrop^2*(1-pDrop) ... (if we assume that almost all requests we do give > DNFs). Sounds good - I think we should so the same for RejectedOverload and RNF, though. Cheers, Michael
