gen_paxos のコードを読み始めた
Kai 以外で gen_fsm を使ってる例を久しぶりに見た。素敵。
状態ごとの説明は、勉強会で教えてもらえるかもしれないので
今のうちに疑問点を洗い出す。
まずは、ディクレクトリ構成の変更と
coordinator を gen_server 化する事から始める予定。
議題ごとに gen_fsm を使い捨てているので
どっかにプロセスをストックしておいて
再利用できないもんかなぁ?(優先度低)
nil
preparing
proposing
acceptor
learner
decided
実際に動かしてみた
幾つかのノードを起動し、幾つかの議題を出してみた。
その後、過半数のノードを除去し、議題を出すと、ひたすら合意を取り続ける。
この状態で、除去したノードと同じ名前のノードを復活させ、net_adm_ping/1 で繋ぐ。
予想では、ここで合意が取れると思ったが、駄目だった。
ノードの追加・除去に対応できるよう、ノードの一覧は外だしにした方が良いかも。
あとは、合意を取る最大回数も欲しい。
合意の間隔と回数は、起動時のグローバル値と、合意単位で設定するローカル値に分割すると使いやすいかも?