Packages
horde
0.8.4
0.10.0
0.9.1
0.9.0
0.8.7
0.8.6
0.8.5
0.8.4
0.8.3
0.8.2
0.8.1
0.8.0
0.8.0-rc.1
0.7.1
0.7.0
0.6.1
0.6.0
0.6.0-rc.1
0.5.0
0.5.0-rc.12
0.5.0-rc.11
0.5.0-rc.10
0.5.0-rc.9
0.5.0-rc.8
0.5.0-rc.7
0.5.0-rc.6
0.5.0-rc.5
0.5.0-rc.4
0.5.0-rc.3
0.5.0-rc.2
0.5.0-rc.1
0.4.0-rc.2
0.4.0-rc.1
0.3.0
0.3.0-rc1
0.2.3
0.2.2
0.2.1
0.2.0
0.1.5
0.1.4
0.1.3
0.1.2
0.1.1
0.1.0
Distributed supervisor & process registry built with DELTA-CRDTs
Current section
Files
Jump to
Current section
Files
lib/horde/cluster.ex
defmodule Horde.Cluster do
require Logger
@moduledoc """
Public functions to join and leave hordes.
Calling `Horde.Cluster.set_members/2` will join the given members in a cluster. Cluster membership is propagated via a CRDT, so setting it once on a single node is sufficient.
```elixir
{:ok, sup1} = Horde.DynamicSupervisor.start_link([], name: :supervisor_1, strategy: :one_for_one)
{:ok, sup2} = Horde.DynamicSupervisor.start_link([], name: :supervisor_2, strategy: :one_for_one)
{:ok, sup3} = Horde.DynamicSupervisor.start_link([], name: :supervisor_3, strategy: :one_for_one)
:ok = Horde.Cluster.set_members(:supervisor_1, [:supervisor_1, :supervisor_2, :supervisor_3])
```
"""
@type name :: atom()
@type member :: name() | {name(), node()}
@spec set_members(horde :: GenServer.server(), members :: [member()], timeout :: timeout()) ::
:ok | {:error, term()}
def set_members(horde, members, timeout \\ 5000) do
GenServer.call(horde, {:set_members, members}, timeout)
end
@doc """
Get the members (nodes) of the horde
"""
@spec members(horde :: GenServer.server()) :: [member()]
def members(horde) do
GenServer.call(horde, :members)
end
end