DynamicSupervisor.Proxy (DynamicSupervisor Proxy v0.1.63)

Copy Markdown View Source

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.

Summary

Functions

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 DynamicSupervisor.init/1 callback.

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.

Functions

__using__(options)

(macro)

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 DynamicSupervisor.init/1 callback.

Examples

use DynamicSupervisor.Proxy, alias: Proxy

use DynamicSupervisor.Proxy

start_link(module, init_arg \\ nil, opts)

(macro)

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.

To start the supervisor, the DynamicSupervisor.init/1 callback will be invoked in the given module, with init_arg as its argument. The 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