http://github.com/garret-smith/gen_leader_revival
gprocの内部で使われている。- 候補ノードのリストからリーダを選択する。
- リーダの選択には死んでいないすべてのフォロワの合意が必要。
- ノード間の情報伝達はリーダを介して行う。
- リーダからフォロワへの情報伝達は到達確認なしのブロードキャスト。
- 候補ノードのリストの先頭から順にリーダの選択を試行する。(先頭に近いほどリーダになりやすい)
- リーダがフォロワに
haltを送ると、フォロワがリーダにackLeaderを返す。 - 死んでいないすべてのフォロワが
ackLeaderを返したら、リーダの選択が完了する。 - フォロワはリーダをモニタして、リーダが死んだら、再度リーダの選択を試行する。
- 自称リーダが複数現れたら(リーダが自分以外のリーダを発見したら)、再度リーダの選択を試行する。
- 候補ノードのリストは基本的に更新されない。(非公式な方法で更新できる)
- 候補ノードは相互にモニタしている。
- ノードの死活確認に
net_kernel:node_infoを使っている。(net_kernel:monitor_nodesは使っていない) net_kernel:node_infoはドキュメントには載っていない。