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