私は現在Chordプロトコルを扱っています。
各ノードには 2 つの関数がfindSuccessor
あり、closestPrecedingNode
これらは疑似コードとして提供されます。
findSuccessor
は:
n.findSuccessor(id)
if(id is.in (n, successor])
return successor;
else
n' = closestPrecedingNode(id);
return n'.findSuccessor(id);
closestPrecedingNode
は:
n.closestPrecedingNode(id)
for i = m downto 1
if(finger[i] is.in (n, id))
return finger[i];
return n;
ノードが作成されると、そのサクセサは最初にノード自体に設定され、finger テーブルは空になります。
ここで私の質問は、ノードが 1 つしかない場合に何が起こるかということです。ノード自体の ID 以外の ID を要求されます。次に、ブロックをfindSuccessor
実行してを呼び出します。finger テーブルが空なので、ノード自体は に戻されます。したがって、 は に等しくなります。else
closestPrecedingNode
findSuccessor
n'
n
その後、自分自身への再帰呼び出しであるfindSuccessor
on が呼び出されます。n'
そして、無限ループが発生します...または何か不足していますか?
注: 疑似コードは、Chord: A Scalable Peer-to-peer Lookup Protocol for Internet Applications、ページ 5 から取得したものです。