Packages

Loner provides a simple method for creating a registered, supervised singleton process within a multi-node cluster with the help of Horde.

Current section

Files

Jump to
loner lib loner.ex
Raw

lib/loner.ex

defmodule Loner do
@moduledoc """
A system for starting and supervising a cluster-wide singleton process
using Horde.
"""
@type child_spec() :: module() | {module(), term()} | module()
@registry Loner.Registry
@supervisor Loner.DynamicSupervisor
def name(name), do: {:via, Horde.Registry, {@registry, name}}
def start(module, name) do
Horde.DynamicSupervisor.start_child(@supervisor, {module, name: name(name)})
end
def stop(name) do
Horde.DynamicSupervisor.which_children(@supervisor)
case whereis_name(name) do
:undefined ->
:ok
pid when is_pid(pid) ->
Horde.DynamicSupervisor.terminate_child(@supervisor, pid)
end
end
def whereis_name(name), do: Horde.Registry.whereis_name({@registry, name})
end