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

Reply via email to