У меня есть Supervisor и его дочерний Genserver с кодом ниже:
defmodule MyApp.StatisticSupervisor do
use DynamicSupervisor
def start_link(_) do
DynamicSupervisor.start_link(__MODULE__, [], name: {:global, __MODULE__})
end
def start_statistic(team_id) do
DynamicSupervisor.start_child(global_name(), {MyApp.Statistic.Server, [team_id]})
end
def init(_) do
DynamicSupervisor.init(strategy: :one_for_one)
end
end
defmodule MyApp.Statistic.Server do
def child_spec(team_id) do
%{
id: team_id,
start: {__MODULE__, :start_link, [team_id]},
restart: :transient
}
end
def start_link(team_id) do
GenServer.start_link(__MODULE__, %{team: team_id}, name: via_tuple(team_id))
end
def init(state) do
{:ok, state}
end
defp via_tuple(team_id) do
{:via, :syn, {:team, team_id}}
end
end
Код правильный. Затем я запускаю genserver с командой:
MyApp.StatisticSupervisor.start_statistic(1)
>
{:ok, #PID<0.973.0>}
Затем я выполняю код
DynamicSupervisor.which_children({:global, MyApp.StatisticSupervisor})
И команда возвращается:
[
{:undefined, #PID<0.973.0>, :worker, [MyApp.Statistic.Server]}
]
Я запутался,Почему идентификатор возвращается неопределенным, а не 1?
Я ожидал, что будет возвращено:
[
{1, #PID<0.973.0>, :worker, [MyApp.Statistic.Server]}
]
Не имеет значения число, атом или модуль. Идентификатор всегда возвращает неопределенное значение.
Это ошибка Эликсира?