Size: a a a

2020 September 09

PG

Pig Greenest in pro.elixir
Отдельный супервизор с соответствующей стратегией
источник

AP

Andrey Pavlov in pro.elixir
Это решается отдельным супервизором с соответствующей стратегией
источник

AP

Andrey Pavlov in pro.elixir
Опоздал
источник

PG

Pig Greenest in pro.elixir
one_for_all
источник

V

VDimir in pro.elixir
А, ок, кажется понял. Нужно просто написать правильно child_spec для этого супервизора?
источник

LL

Lama Lover in pro.elixir
VDimir
А, ок, кажется понял. Нужно просто написать правильно child_spec для этого супервизора?
Нужно запустить супервизор с опцией strategy: :one_for_all
типа Supervisor.start_link(children, name: :my_supervisor, strategy: :one_for_all)
источник

V

VDimir in pro.elixir
Ну это дочерний. А рутовый остается с one_for_one
источник

PG

Pig Greenest in pro.elixir
+
источник

V

VDimir in pro.elixir
Что-то типа такого? https://pastebin.com/zwu5rBeV
источник

V

VDimir in pro.elixir
Proc0 работает отдельно, процессы запускаемые по spec1, spec2  вместе
источник

PG

Pig Greenest in pro.elixir
ага
источник

V

VDimir in pro.elixir
Вроде работает как надо. Единсвенное смущает что в рутовом children первый элемент tuple, запускает child_spec спрятанный в Proc0, а второй явный spec, заданный мапой, немного на разных уровнях
источник

PG

Pig Greenest in pro.elixir
можно и второй туплом записать
источник

V

VDimir in pro.elixir
Pig Greenest
можно и второй туплом записать
Для этого нужно завести отдельный модуль, в котором определить child_spec и вынести туда?
источник

PG

Pig Greenest in pro.elixir
{Supervisor, [[spec1, spec2], [strategy: :one_for_all, name: SupSup]]}
источник

LL

Lama Lover in pro.elixir
Я, кстати, видел различные виды оформления такого кода, но лично я внутренних супервизоров определяю в отдельной функции, типа
def start_link(...) do
 [
   inner_sup(children),
   other_proc
 ]
 |> Superviso.start_link(strategy: :one_for_one)
end

def inner_sup(children) do
 %{
   type: :supervisor,
   id: :inner_sup,
   start: {Supervisor, :start_link, [children, [strategy: :one_for_all]]}
 }
end
источник

PG

Pig Greenest in pro.elixir
нет, у супервизора уже есть чайлд спек, насколько я помню
источник

V

VDimir in pro.elixir
Lama Lover
Я, кстати, видел различные виды оформления такого кода, но лично я внутренних супервизоров определяю в отдельной функции, типа
def start_link(...) do
 [
   inner_sup(children),
   other_proc
 ]
 |> Superviso.start_link(strategy: :one_for_one)
end

def inner_sup(children) do
 %{
   type: :supervisor,
   id: :inner_sup,
   start: {Supervisor, :start_link, [children, [strategy: :one_for_all]]}
 }
end
Ага, так получше выглядит
источник

V

VDimir in pro.elixir
Pig Greenest
нет, у супервизора уже есть чайлд спек, насколько я помню
Кажется что нет (  
** (ArgumentError) The module Supervisor was given as a child to a supervisor
but it does not implement child_spec/1.
источник

PG

Pig Greenest in pro.elixir
Показалось значит
источник