On 2010/11/04 (Nov), at 11:06 AM, Matthew Toseland wrote:

On Wednesday 03 November 2010 20:00:48 Robert Hailey wrote:

Example patch attached. Small, but untested!

Could you please explain what it is that you think is going on, and what the patch will do to fix it?

For all this, I presume the correctness principals concerning destination sampling. Specifically the "small worldness" of making a connection at the end point of a route builds a more routable network.

As best I can see, then, there may be major problems with the current announcement and path folding implementations: (1) announcements gather at non-destination points (in fact, shallow first), (2) the RequestSender logic will always eat an incoming path folding request if we want a peer (often for very short paths), (3) the RequestHandler logic will probabilistically drop an incoming path folding request (about once every HTL) (4) if path folding request is dropped (or not wanted), an intermediate node might forward it's reference instead

I think the behavior of 2, 3, & 4 are more likely to be making the peer-clumps, which (as you said) might not be a horrible thing. But I think all of these points go against the original intent of destination sampling.

I think the behavior of 1 (this patch) is forming a specialized "backbone" of routability around the seed nodes.

In theory, announcements are routed to a specific random keyspace location (expressed as a number), starting from the seednode.

In code, announcements are routed to the node's current location only (one thing modified in my experiments), and only to the seed nodes (even if we have connected peers).

I would expect them to run (approximately) the same paths each time, therefore.

They rapidly approach the target location, and thus having the opportunity to connect on each node should roughly give us the 1/d distribution that theory tells us is necessary: A few long links and a lot of short links.
...
This is plausible given that I'd expect the nodes close to the seednodes, where you might get your few long links from, to be overloaded.

Yea, by announcing shallow-first, all the nodes around the seed nodes will (nearly always) not want a peer. If we go depth first we could even count the number of forwarded refs, and only send our ref if that count is too low.

I'm not sure we can realistically expect to get any specific proportion of short/long links with announcement only. And even if we could, they would all fall along the common announcement-path (not to a more deserving node at the same location).

What is d? or what does 1/d come out to? Should I expect one long link among 12 peer connections?

As far as I can see, your theory is that 1) announcements are making up a large proportion of a node's connections,

Judging by one of my nodes, announcements make up for about 1/3 of connections. And because a node currently announces to it's location, these will almost surely be all short links (because I am not a seed node), and reachable from the perspective of the seed node.

and 2) announcements are tending to get a bunch of noderefs that are *all* very close to the target, rather than getting the 1/d distribution which we need, which would include lots of short links but also some long links. Which results in all your peer locations being clustered together, with apparently no long links, as you've shown.

In theory, shouldn't it be just as correct to announce to one of our peers (instead of a seednode)? Depth-first/shallow-first, our-location/ random-location... I think it makes a big difference!

I think it needs to be depth-first to our-location to be generally correct, and I think it would be much improved to use our peers over seed nodes [[seed nodes breath a sigh of relief across the network]].

What can we do to further investigate this theory? It would be good to gather some more data before applying potentially major changes.

Compare routability statistics of seednodes to "normal" nodes (or "leaf" / far from seed nodes).

What exactly does your patch do,

Instead of sending our ref once we accept an announcement, it sends the ref just-before sending the completion message (that is, after we have routed the deeper replies).

and what is it intended to do (not necessarily the same thing)?

It is intended to deliver the announcement replies in a depth-first order to the originator, in practice out-of-order messages might make them only "roughly" depth first.

--
Robert Hailey


_______________________________________________
Devl mailing list
Devl@freenetproject.org
http://freenetproject.org/cgi-bin/mailman/listinfo/devl

Reply via email to