I am currently implementing a Chord model in OPNET and am anxious to ensure my implementation is correct (as per the Chord SIGCOMM paper). I have read a lot about Chord but I still cannot work out how the ring should be constructed in a distributed manner (I understand quite well how it should work once fully formed).
I describe a scenario below (Please point out if any of my logic or the sequence is incorrect). 1. Node n wishes to join a Chord ring. There are no other nodes in the ring. 2. It sets its successor = n and its predecessor = NIL. It builds its finger table so that all finger successor entries are set to itself. 3. Subsequently node m wishes to join the network. Node m queries node n for its successor. 4. Node n replies that m’s successor is itself, n. 5. Node m sets its successor = n and its predecessor = NIL. 6. As per the Chord node joining procedure, node m then triggers the notify function informing node n of its existence so that it can update its predecessor pointer to m. At this point, Ns = n, Np = m, Ms = n, Mp = NIL. 7. Now this is where I am confused: Ordinarily, in a fully formed Chord ring, node n would at some point send a periodic stabilize function to its successor querying its predecessor. In this way it would learn about a new node that has joined in between node n and its successor, update it successor and notify the new node to update its predecessor pointer. Clearly node n’s successor should now be node m and node m’s predecessor should be node n. But node N is not going to send a stabilize packet to itself so I don’t know how the pointers will be correctly updated. 8. I also don’t understand how node m’s finger tables will be correctly constructed. Node m will construct its finger table by making node n do a lookup for each entry. But this will always return node n (as that is all that’s currently located in node n’s finger table) so node m will never be referenced either node’s finger table (which is incorrect). I would greatly appreciate if someone could clarify the above as I'm stuck in my implementation at the moment. Many thanks in advance,
_______________________________________________ p2p-hackers mailing list p2p-hackers@lists.zooko.com http://lists.zooko.com/mailman/listinfo/p2p-hackers