View Source Infinitomata (Finitomata v0.25.0)
The sibling of Finitomata
, but runs transparently in the cluster.
If you want to use a stateful consistent hash ring like libring
,
implement the behaviour Finitomata.ClusterInfo
wrapping calls to it and
invoke Finitomata.ClusterInfo.init(Impl)
before using Infinitomata.start_fsm/4
.
The example of such an implementation for libring
(assuming the named ring @ring
has been started in the supervision tree) follows.
defmodule MyApp.ClusterInfo do
@moduledoc false
@behaviour Finitomata.ClusterInfo
@impl Finitomata.ClusterInfo
def nodes, do: HashRing.nodes(@ring)
@impl Finitomata.ClusterInfo
def whois(id), do: HashRing.key_to_node(@ring, id)
end
Summary
Functions
The full state with all the children acrosss the cluster, might be a heavy map
Count of children
Returns the random FSM from the pool
Starts the FSM somewhere in the cluster.
The state of the FSM in the cluster.
Synchronizes the local Infinitomata
instance with the cluster
Initiates the transition in the cluster.
Functions
@spec all(Finitomata.id()) :: %{ optional(Finitomata.fsm_name()) => %{ pid: pid(), node: node(), reference: reference() } }
The full state with all the children acrosss the cluster, might be a heavy map
Count of children
Returns the random FSM from the pool
start_fsm(id \\ nil, target, implementation, payload)
View Source (since 0.15.0)@spec start_fsm(Finitomata.id(), Finitomata.fsm_name(), module(), any()) :: DynamicSupervisor.on_start_child()
Starts the FSM somewhere in the cluster.
The state of the FSM in the cluster.
See Finitomata.state/3
.
Synchronizes the local Infinitomata
instance with the cluster
transition(id \\ nil, target, event_payload, delay \\ 0)
View Source (since 0.15.0)@spec transition( Finitomata.id(), Finitomata.fsm_name(), Finitomata.Transition.event() | {Finitomata.Transition.event(), Finitomata.State.payload()}, non_neg_integer() ) :: :ok
Initiates the transition in the cluster.