double-hash-spaceの挙動

s1 s2 s3 s4
rhs whs 再配置方法 rhs whs 再配置方法 rhs whs 再配置方法 rhs whs 再配置方法
1.初期状態 1,2,3,4 1,2,3,4 1,2,3,4 1,2,3,4 1,2,3,4 1,2,3,4 1,2,3,4 1,2,3,4
2.s4ダウン 1,2,3 1,2,3 1,2,3 1,2,3 1,2,3 1,2,3 x x
3.再配置開始 -> 1,2,3,4 1,2,3->1,2,3,4 -> 1,2,3,4 1,2,3->1,2,3,4 -> 1,2,3,4 1,2,3->1,2,3,4 -> 1,2,3,4 ->1,2,3,4
4.s3ダウン 1,2 1,2,4 1,2 1,2,4 x x 1,2,4
5.再配置開始 -> 1,2,3,4 1,2 ->1,2,3,4 -> 1,2,3,4 1,2 ->1,2,3,4 -> 1,2,3,4 ->1,2,3,4 -> 1,2,3,4 ->1,2,3,4
6.再配置完了 1,2,3,4 1,2,3,4 1,2,3,4 1,2,3,4 1,2,3,4 1,2,3,4 1,2,3,4 1,2,3,4
s1 s2 s3 s4
rhs whs 再配置方法 rhs whs 再配置方法 rhs whs 再配置方法 rhs whs 再配置方法
1.初期状態 1,2,3,4 1,2,3,4 1,2,3,4 1,2,3,4 1,2,3,4 1,2,3,4 1,2,3,4 1,2,3,4
2.s4ダウン 1,2,3 1,2,3 1,2,3 1,2,3 1,2,3 1,2,3 x x
3.再配置開始 -> 1,2,3,4 1,2,3->1,2,3,4 -> 1,2,3,4 1,2,3->1,2,3,4 -> 1,2,3,4 1,2,3->1,2,3,4 -> 1,2,3,4 ->1,2,3,4
4.s3ダウン 1,2,4 1,2,4 1,2,4 1,2,4 x x 1,2,4 1,2,4
5.再配置開始 -> 1,2,3,4 1,2,4->1,2,3,4 -> 1,2,3,4 1,2,4->1,2,3,4 -> 1,2,3,4 ->1,2,3,4 -> 1,2,3,4 1,2,4->1,2,3,4
6.再配置完了 1,2,3,4 1,2,3,4 1,2,3,4 1,2,3,4 1,2,3,4 1,2,3,4 1,2,3,4 1,2,3,4

ノードが落ちたときに、どうやってハッシュ表を配るか。1,2,3,4は全ノードがactiveな状態で、1,2,3はs4にfaultフラグが付けられている。
再配置を行うときに、rhsでfaultフラグが付いていないノードは、すべての担当データを持っていると扱われる。担当データを持っているノードのうちもっともアドレスが小さいノードから、担当データを持っていないが持っているべきノードへとデータがコピーされる。


問題は再配置が完了する前にノードが落ちた場合のハッシュ表の配り方。前者は「fault状態のノードを伝播する」方法で、後者は「ハッシュ表を上書きする」方法。
5.でもう一度再配置を開始するとき、比較元が異なる。後者では中断された再配置の再配置先はactiveなノードなノードとして比較される。前者では正常に再配置が完了した場合にのみ再配置先はactiveになる。


後者の方が正しい気がするけど、後者にするとテストでエラーになる。逆に前者だとうまくいく。


※後者訂正
ノードがダウンしたとき、ハッシュ表はManagerから配れれるが、Managerのrhsからfaultフラグが取り外されるのは、再配置のコピーフェーズがすべてのノードで正常に完了したときのみ。途中で中断するとManagerのrhsは更新されない。
よって後者の4.s3ダウンのときに配られるrhsでは、s4はfault状態のまま。従って正しくは↓

s1 s2 s3 s4
rhs whs 再配置方法 rhs whs 再配置方法 rhs whs 再配置方法 rhs whs 再配置方法
1.初期状態 1,2,3,4 1,2,3,4 1,2,3,4 1,2,3,4 1,2,3,4 1,2,3,4 1,2,3,4 1,2,3,4
2.s4ダウン 1,2,3 1,2,3 1,2,3 1,2,3 1,2,3 1,2,3 x x
3.再配置開始 -> 1,2,3,4 1,2,3->1,2,3,4 -> 1,2,3,4 1,2,3->1,2,3,4 -> 1,2,3,4 1,2,3->1,2,3,4 -> 1,2,3,4 ->1,2,3,4
4.s3ダウン 1,2 1,2,4 1,2 1,2,4 x x 1,2 1,2,4
5.再配置開始 -> 1,2,3,4 1,2 ->1,2,3,4 -> 1,2,3,4 1,2 ->1,2,3,4 -> 1,2,3,4 ->1,2,3,4 -> 1,2,3,4 1,2->1,2,3,4
6.再配置完了 1,2,3,4 1,2,3,4 1,2,3,4 1,2,3,4 1,2,3,4 1,2,3,4 1,2,3,4 1,2,3,4