[Erlang] логика рестарта в супервизоре
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 11.02.09 20:56
Оценка:
Hi,

сейчас стандартный supervisor реализует вот такое:

To prevent a supervisor from getting into an infinite loop of child
process terminations and restarts, a maximum restart frequency is
defined using two integer values MaxR and MaxT. If more than MaxR
restarts occur within MaxT seconds, the supervisor terminates all child
processes and then itself.


это приводит в тяжёлом случае к тому, что дохнет всё приложение, если оно сделано традиционно как "xxx_app:start() запускает xxx_sup".
Хочется же видеть логику стиля юниксового init(8): если рестарт был слишком часто (причём считается по каждому ребёнку отдельно!) — прекращаем стартовать его на некоторое время, но не дохнем.

А ещё лучше — в callback module описать хук с выбором между вариантами в зависимости от чего-то, известного этому модулю.

Кто-нибудь видел такие реализации? Непонятно, по каким словам гуглить.
The God is real, unless declared integer.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.