Size: a a a

2019 November 21

DF

Denis Fakhrtdinov in ErlangRus
Так здесь ведь суть в том, что вместо вложенных кейсов использовать try..catch чтобы быстро упасть.
источник

DF

Denis Fakhrtdinov in ErlangRus
Можно написать свой пайп и пользовать его, я предпочитаю такой подход.
источник

ŹR

Źmićer Rubinštejn in ErlangRus
Если быстро и кучеряво - то вроде норм такой инит
источник

DF

Denis Fakhrtdinov in ErlangRus
Denis Fakhrtdinov
Можно написать свой пайп и пользовать его, я предпочитаю такой подход.
chain(_Name, [], Value) ->
   {ok, Value};

chain(Name, [Fun | Funs], InitialValue)
when is_function(Fun, 1) ->
   try Fun(InitialValue) of
       {ok, NewValue} ->
           chain(Name, Funs, NewValue);
       {skip, Reason} ->
           {skip, Reason};
       {stop, Reason} ->
           {stop, Reason};
       {error, Reason} ->
           {error, Reason}
   catch
       _Type:Reason:Stacktrace ->
           {error, Reason}
   end.
источник

DF

Denis Fakhrtdinov in ErlangRus
Опустил логи.
источник

DF

Denis Fakhrtdinov in ErlangRus
Задаешь цепь функций, можешь упать на любом шаге.
источник

AB

Alexander Bogosyan in ErlangRus
Denis Fakhrtdinov
chain(_Name, [], Value) ->
   {ok, Value};

chain(Name, [Fun | Funs], InitialValue)
when is_function(Fun, 1) ->
   try Fun(InitialValue) of
       {ok, NewValue} ->
           chain(Name, Funs, NewValue);
       {skip, Reason} ->
           {skip, Reason};
       {stop, Reason} ->
           {stop, Reason};
       {error, Reason} ->
           {error, Reason}
   catch
       _Type:Reason:Stacktrace ->
           {error, Reason}
   end.
ага, знаю такое, но тут есть момент что функции это внешние разнородные API
источник

TH

Taras Halturin in ErlangRus
когда супервизор запускает дерево воркеров, он запускает каждый воркер последовательно дожидаясь выполнения Init. если кучерявый init, то это может заступорить супервизор и он просто свалится по таймауту не успев стартануть все дерево воркеров. ну и потащит за собой аппликейшн... в общем, вся гирлянда будет сверкать рестартами несколько раз и погаснет
источник

DF

Denis Fakhrtdinov in ErlangRus
Я для них пишу короткие врапперы.
источник

AB

Alexander Bogosyan in ErlangRus
то есть их надо оборачивать будет чтобы chain сделать
источник

TH

Taras Halturin in ErlangRus
хотя, там уже выше тоже ответили
источник

AB

Alexander Bogosyan in ErlangRus
Taras Halturin
когда супервизор запускает дерево воркеров, он запускает каждый воркер последовательно дожидаясь выполнения Init. если кучерявый init, то это может заступорить супервизор и он просто свалится по таймауту не успев стартануть все дерево воркеров. ну и потащит за собой аппликейшн... в общем, вся гирлянда будет сверкать рестартами несколько раз и погаснет
у меня simple_one_for_one супервизор
источник

TH

Taras Halturin in ErlangRus
вопрос не о частно случае, а в целом
источник

AB

Alexander Bogosyan in ErlangRus
хотя он тоже наверное сихронный...
источник

DF

Denis Fakhrtdinov in ErlangRus
Конечно синхронный.
источник

TH

Taras Halturin in ErlangRus
Alexander Bogosyan
хотя он тоже наверное сихронный...
не, он не так работает
источник

TH

Taras Halturin in ErlangRus
он чилды не стартует при своем старте
источник

DF

Denis Fakhrtdinov in ErlangRus
Твой start_child не вернется пока не закончится init.
источник

AB

Alexander Bogosyan in ErlangRus
Denis Fakhrtdinov
Твой start_child не вернется пока не закончится init.
меня это устраивает, главное чтобы другие процессы могли сделать start_child
источник

DF

Denis Fakhrtdinov in ErlangRus
Они не смогут этого сделать пока первый start_child не закончится.
источник