Я пытаюсь понять, что здесь происходит:
У меня есть супервизор, который циклически перезапускает одного клиента без запуска механизма MaxR, MaxT
. Клиент просто падает достаточно медленно, чтобы не вызвать ограничение скорости.
Был бы другой механизм, использующий supervisor:which_children/1
и delete_child/2, start_child/2
для адаптации набора детей к реальности (его сканирование для USB-устройств, пытающихся найти одного ребенка-супервизора на каждое устройство).
Обычно это ведет себя как защитная сетка для ограничения скорости, но странно выглядит, что механизм, который удаляет и запускает дочерние элементы, вообще не вызывается.
Чтобы узнать, что происходит, я позвонил supervisor:which_children/1
из оболочки, и похоже, что вызов просто блокирует и никогда не возвращается.
Может ли быть так, что вызовы супервизору блокируются, когда он занят попыткой перезапустить ребенка?
Добавление:
похоже, что сбой происходит при запуске ребенка:
=SUPERVISOR REPORT==== 29-Mar-2011::21:36:20 ===
Supervisor: {local,gateway_sup}
Context: start_error
Reason: {'EXIT',{timeout,{gen_server,call,[<0.155.0>,late_init]}}}
Offender: [{pid,<0.76.0>},
{name,gw_3_5},
{mfa,{channel,start_link,
[[{gateways,[{left,108},{right,103}]}],
{3,5}]}},
{restart_type,transient},
{shutdown,10000},
{child_type,worker}]