Packages
dynamic_supervisor_proxy
0.1.71
0.1.71
0.1.70
0.1.69
0.1.68
0.1.67
0.1.66
0.1.64
0.1.63
0.1.62
0.1.61
0.1.60
0.1.57
0.1.56
0.1.55
0.1.54
0.1.53
0.1.52
0.1.51
0.1.49
0.1.48
0.1.47
0.1.46
0.1.45
0.1.44
0.1.43
0.1.42
0.1.41
0.1.40
0.1.39
0.1.38
0.1.37
0.1.36
0.1.35
0.1.34
0.1.33
0.1.32
0.1.31
0.1.30
0.1.29
0.1.28
0.1.27
0.1.26
0.1.25
0.1.24
0.1.23
0.1.22
0.1.21
0.1.20
0.1.19
0.1.18
0.1.17
0.1.16
0.1.15
0.1.14
0.1.13
0.1.12
0.1.11
0.1.10
0.1.9
0.1.8
0.1.7
0.1.6
0.1.5
0.1.4
0.1.3
0.1.2
0.1.1
0.1.0
Starts a module-based dynamic supervisor process with a registered name. Will wait a bit if the supervisor name is still registered on restarts.
Current section
Files
Jump to
Current section
Files
lib/dynamic_supervisor/proxy.ex
defmodule DynamicSupervisor.Proxy do
use PersistConfig
@supervisor_restart_backoff get_env(:supervisor_restart_backoff)
@moduledoc """
Starts a module-based dynamic supervisor process with a registered name.
Will wait a bit if the supervisor name is still registered on restarts.
See [Supervisor restart backoff](#{@supervisor_restart_backoff}).
"""
@doc """
Uses `DynamicSupervisor`. Also either aliases `DynamicSupervisor.Proxy` (this
module) and requires the alias or imports `DynamicSupervisor.Proxy`. Finally,
it will inject the default implementation of the `c:DynamicSupervisor.init/1`
callback.
## Examples
use DynamicSupervisor.Proxy, alias: Proxy
use DynamicSupervisor.Proxy
"""
defmacro __using__(options) do
alias = options[:alias]
if alias do
quote do
use DynamicSupervisor
alias unquote(__MODULE__), as: unquote(alias)
require unquote(alias)
@impl DynamicSupervisor
@spec init(term) :: {:ok, DynamicSupervisor.sup_flags()} | :ignore
def init(_arg), do: DynamicSupervisor.init(strategy: :one_for_one)
defoverridable init: 1
end
else
quote do
use DynamicSupervisor
import unquote(__MODULE__)
@impl DynamicSupervisor
@spec init(term) :: {:ok, DynamicSupervisor.sup_flags()} | :ignore
def init(_arg), do: DynamicSupervisor.init(strategy: :one_for_one)
defoverridable init: 1
end
end
end
@doc """
Starts a module-based dynamic supervisor process with the given `module` and
`init_arg`. The `:name` option _must_ be specified in order to register a
supervisor name. Will wait a bit if the supervisor name is still registered
on restarts. See [Supervisor restart backoff](#{@supervisor_restart_backoff}).
To start the supervisor, the `c:DynamicSupervisor.init/1` callback will be
invoked in the given `module`, with `init_arg` as its argument. The
`c:DynamicSupervisor.init/1` callback must return a supervisor specification
which can be created with the help of the `DynamicSupervisor.init/1` function.
## Examples
iex> defmodule DynSupOne do
iex> use DynamicSupervisor.Proxy
iex>
iex> def start_link(:ok), do: start_link(DynSupOne, name: DynSupOne)
iex> end
iex>
iex> children = [{DynSupOne, :ok}]
iex> options = [name: Sup, strategy: :one_for_one]
iex> {:ok, _pid} = Supervisor.start_link(children, options)
iex>
iex> %{active: 1, supervisors: 1} = Supervisor.count_children(Sup)
iex> [{name, pid, :supervisor, [name]}] = Supervisor.which_children(Sup)
iex>
iex> name == DynSupOne and pid == Process.whereis(DynSupOne)
true
iex> defmodule DynSupTwo do
iex> use DynamicSupervisor.Proxy
iex>
iex> def start_link(_), do: start_link(DynSupTwo, ??, name: DynSupTwo)
iex> end
iex>
iex> defmodule DynSupThree do
iex> use DynamicSupervisor.Proxy, alias: Proxy
iex>
iex> def start_link(OK) do
iex> Proxy.start_link(__MODULE__, name: :three)
iex> end
iex> end
iex>
iex> children = [DynSupTwo, {DynSupThree, OK}]
iex> options = [name: Sup, strategy: :one_for_one]
iex> {:ok, _pid} = Supervisor.start_link(children, options)
iex>
iex> %{active: 2, supervisors: 2} = Supervisor.count_children(Sup)
iex> children = Supervisor.which_children(Sup)
iex> pid_two = Process.whereis(DynSupTwo)
iex> pid_three = Process.whereis(:three)
iex>
iex> {DynSupTwo, pid_two, :supervisor, [DynSupTwo]} in children and
...> {DynSupThree, pid_three, :supervisor, [DynSupThree]} in children
true
"""
defmacro start_link(module, init_arg \\ nil, opts) do
quote bind_quoted: [mod: module, arg: init_arg, opts: opts] do
DynamicSupervisor.Proxy.Starter.start_link(mod, arg, opts)
end
end
end