Packages
cloister
0.8.0
0.18.1
0.18.0
0.17.3
0.17.2
0.17.1
0.17.0
0.16.0
0.15.0
0.14.0
0.13.0
0.12.5
0.12.4
0.12.3
0.12.2
0.12.1
0.12.0
0.11.0
0.10.3
0.10.2
0.10.1
0.10.0
0.9.0
0.8.0
0.7.5
0.7.4
0.7.3
0.7.2
0.7.1
0.7.0
0.6.5
0.6.4
0.6.3
retired
0.6.2
retired
0.6.1
retired
0.6.0
retired
0.5.0
0.4.4
0.4.3
0.4.2
0.4.1
0.4.0
0.3.9
0.3.8
0.3.7
0.3.6
0.3.5
0.3.4
0.3.3
0.3.2
0.3.1
0.3.0
0.2.2
0.2.1
0.2.0
0.1.4
0.1.3
0.1.2
0.1.1
0.1.0
The helper application to manage cluster, that uses hash ring to route requests to nodes. Automatically keeps track of connected nodes, provides helpers to determine where the term is to be executed, to multicast to all the nodes in the cluster and to retrieve current state of the cluster.
Current section
Files
Jump to
Current section
Files
lib/cloister/node.ex
defmodule Cloister.Node do
@moduledoc """
The abstraction level allowing milticalls and multicasts across the whole cluster.
"""
use GenServer
use Boundary, deps: [], exports: []
@doc false
def start_link(opts \\ []) do
{state, opts} = Keyword.pop(opts, :state, [])
GenServer.start_link(
__MODULE__,
state,
Keyword.put_new(opts, :name, __MODULE__)
)
end
@impl GenServer
@doc false
def init(state), do: {:ok, state}
@spec multicast(name :: GenServer.name(), request :: term()) :: :abcast
@doc """
Casts the request to all the nodes connected to this node
"""
def multicast(name, request),
do: GenServer.abcast(name, request)
@spec multicall(nodes :: [node()], name :: GenServer.name(), request :: term()) ::
{replies :: [{node(), term()}], bad_nodes :: [node()]}
@doc """
Casts the request to all the nodes passed as a parameter.
"""
def multicall(nodes \\ [node() | Node.list()], name, request),
do: GenServer.multi_call(nodes, name, request)
end