[p2p-hackers] Errata in the Chord paper ?

shudo at computer.org shudo at computer.org
Sun Sep 25 13:36:21 UTC 2005


Hi all,

I have some doubt about a pseudocode in the Chord paper:

  I. Stoica, R. Morris, D. Karger, M. F. Kaashoek and H. Balakrishnan,
  Chord: A Scalable Peer-to-peer Lookup Protocol for Internet Applications.
  In Proc. ACM SIGCOMM 2001, pp.149-160, Aug. 2001.

It is a pseudocode for a basic node join operation in the Fig. 6. The
paper presents another join algorithm in the Fig. 7 and the latter one
will be implemented usually because the basic algorithm in Fig. 6 is
not tolerate concurrent joins (and failures).

So, it's not a serious problem at all if there are errata in the basic
algorithm. And, of course, my interpretation of the paper is not
correct. Please give me a comment if you know the same possible errata
have been pointed out somewhere before.


(1) A finger table entry (finger[k].node) can be the node itself which
    have the finger table. But, the pseudocode in Fig. 6 does not allow it.

A finger table is initialized by a procedure init_finger_table(). The
init_finger_table() calls find_successor() on an existing node n'.
When the init_finger_table() is called on a joining node, no existing
node knows the joining node because existing nodes can notice the
joining node only by update_others() called just after init_finger_table().
As a result, a joining node cannot have itself in its finger table,
even if the joining node itself is the most appropriate node for a
finger table entry.


(2) A joining node calls find_predecessor(n - 2^(i-1)) in a procedure
    update_finger_others() to find out nodes which should have the joining
    node in their finger tables.  The argument for the call is not correct
    and it should be find_predecessor(n - 2^(i-1) + 1).

Let's consider the case of i = 1. Suppose n is the node ID of the
joining node. In this case, the joining node should find out a node
whose ID is n-1 (of course, mod 2^m) or prior to n-1. But
find_predecessor(n - 2^(i-1)) results in n-2 or prior to n-2 because
a procedure find_predecessor(id) in Fig. 4 returns id-1 or prior to id-1.


I appreciate any comment.

Cheers,

  Kazuyuki Shudo
  Grid Technology Research Center
  National Institute of Advanced Industrial Science and Technology (AIST)



More information about the P2p-hackers mailing list