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 |