Packages
finitomata
0.19.2
0.41.0
0.40.0
0.35.0
0.34.0
0.33.0
0.32.0
0.31.1
0.30.3
0.30.2
0.30.1
0.30.0
0.29.10
0.29.9
0.29.8
0.29.7
0.29.6
0.29.5
0.29.4
0.29.3
0.29.2
0.29.1
0.29.0
0.28.1
0.28.0
0.27.1
0.27.0
0.26.4
0.26.3
0.26.2
0.26.1
0.26.0
0.25.0
0.24.4
0.24.3
0.24.2
0.24.1
0.24.0
0.23.7
0.23.6
0.23.5
0.23.4
0.23.3
0.23.2
0.23.1
0.23.0
0.22.1
0.22.0
0.21.4
0.21.3
0.21.2
0.21.1
0.21.0
0.20.2
0.20.1
0.20.0
0.19.6
0.19.5
0.19.4
0.19.3
0.19.2
0.19.1
0.19.0
0.18.4
0.18.3
0.18.2
0.18.1
0.18.0
0.17.1
0.17.0
0.16.0
0.15.1
0.15.0
0.14.6
0.14.5
0.14.4
0.14.3
0.14.2
0.14.1
0.14.0
0.13.0
0.12.1
0.12.0
0.11.3
0.11.2
0.11.1
0.11.0
0.10.0
0.9.1
0.9.0
0.8.2
0.8.1
0.8.0
0.7.2
0.7.1
0.7.0
0.6.3
0.6.2
0.6.1
0.6.0
0.5.2
0.5.1
0.5.0
0.4.0
0.3.0
0.2.0
0.1.1
0.1.0
The FSM implementation generated from PlantUML textual representation.
Current section
Files
Jump to
Current section
Files
lib/finitomata/distributed/cluster_info.ex
defmodule Finitomata.ClusterInfo do
@moduledoc """
The behaviour to be implemented for locating the node across the cluster.
`Infinitomata` comes with a default naïve implementation, which simply responds
with a determined random value for `whois/1` and with all visible nodes list
for `nodes/0`.
The call to `Finitomata.ClusterInfo.init/1` passing the module implementing
the desired behaviour is mandatory before any call to `Infinitomata.start_fsm/4`
to preserve a determined consistency.
"""
@doc "Returns nodes available to select from"
@callback nodes :: [node()]
@doc "Returns the node “selected” for this particular `id`"
@callback whois(id :: term()) :: node() | nil
@doc "Call this function to select an implementation of a cluster lookup"
def init(impl),
do: :persistent_term.put(Finitomata.ClusterInfo, %{implementation: impl})
@doc "Delegates to the selected implementation of a cluster lookup"
def nodes, do: impl().nodes()
@doc "Delegates to the selected implementation of a cluster lookup"
def whois(id), do: impl().whois(id)
defp impl do
Finitomata.ClusterInfo
|> :persistent_term.get(%{implementation: Finitomata.ClusterInfo.Naive})
|> Map.get(:implementation)
end
end