Интервал перезапуска супервизора Erlang
У меня есть супервизор со стратегией перезапуска one_for_one. Можно ли установить некоторый интервал времени между перезапуском дочернего процесса?
F. E. удаленный db раздавлен, и я хочу подождать 10 секунд между попыткой восстановления соединения.
1 ответов
на самом деле, вы можете позволить супервизору немедленно перезапустить своих детей и реализовать то, что называется ленивая инициализация:
- супервизор (re)запускает (немедленно) ребенка (скажем, gen_server)
- gen_server возвращает тайм-аут 0 в своей функции init
- в handle_info вы делаете активное ожидание (ваши 10 секунд), чтобы убедиться, что БД правильно инициализирована
таким образом, вы гарантируете, что все запросы к gen_server обрабатываются после правильной инициализации БД.