IascRaft

TODO: Add description

Installation

If available in Hex, the package can be installed by adding iasc_raft to your list of dependencies in mix.exs:

def deps do
  [
    {:iasc_raft, "~> 0.1.0"}
  ]
end

Documentation can be generated with ExDoc and published on HexDocs. Once published, the docs can be found at https://hexdocs.pm/iasc_raft.

How to run

hay que levantar los nodos y crear un actor en cada uno...

$ iex --sname a -S mix
iex(a@mymachine)> {:ok, _pid} = Raft.start_peer(KVStore, name: :peer1)

$ iex --sname b -S mix
iex(b@mymachine)> {:ok, _pid} = Raft.start_peer(KVStore, name: :peer2)

$ iex --sname c -S mix
iex(c@mymachine)> {:ok, _pid} = Raft.start_peer(KVStore, name: :peer3)
Raft.set_configuration(:peer1,
                      [{ :peer1, :a@altair },
                      { :peer2, :b@altair },
                      { :peer3, :c@altair }])

elegir un lider...

leader = Raft.leader(:peer1)

escribir/leer valores

{:ok, :foo, :bar} = KVStore.write(leader, :foo, :bar)
{:ok, :bar}       = KVStore.read(leader, :foo)
{:error, :key_not_found} = KVStore.read(leader, :baz)

y ahora.. matar al lider

Raft.stop_peer(leader)

veamos que pasa si tratamos de leer algo...

KVStore.read(leader, :foo)
{ :error, { :redirect, { :peer3, :c@altair }}}

veamos ahora si el nuevo lider es digno...

new_leader = { :peer3, :c@altair }
{:ok, :bar} = KVStore.read(new_leader, :foo)