Рестрат чайлда с таймаутом

73 views
Skip to first unread message

Evgen Polivoda

unread,
Aug 22, 2013, 7:08:00 AM8/22/13
to erlang-i...@googlegroups.com
Здравствуйте, а как сделать сто бы супервизор делал рестарт чайлда (ген сервера) не сразу а например секунд через 10 после того как тот упал?

Например у меня в чайлде держится коннект к базе... а база может иногда и потухнуть на полчасика глубокой ночью для какого нибудь обслуживания, и соответсвено логике супервизора  - макс рестартов за опеределенное время и все приложение ложится... вот.
 

Сергій Костюшкін

unread,
Aug 22, 2013, 8:42:55 AM8/22/13
to
В супервизоре этого не сделать.

Мы сделали обертку над драйвером, который учитывает все такие ньюансы.

А о какой базе идет речь, и каким драйвером пользуетесь?


Четвер, 22 серпня 2013 р. 14:08:00 UTC+3 користувач Evgen Polivoda написав:

zheka_13

unread,
Aug 22, 2013, 8:55:39 AM8/22/13
to erlang-i...@googlegroups.com
пользуемся базой Postgresql, ерланговским epgsql





22 августа 2013 г., 15:42 пользователь Сергій Костюшкін <s.kost...@gmail.com> написал:
В супервизоре этого не сделать.

Мы сделали обертку над драйвером, который учитывает все такие ньансы.

А о какой базе идет речь, и каким драйвером пользуетесь?


Четвер, 22 серпня 2013 р. 14:08:00 UTC+3 користувач Evgen Polivoda написав:
Здравствуйте, а как сделать сто бы супервизор делал рестарт чайлда (ген сервера) не сразу а например секунд через 10 после того как тот упал?

Например у меня в чайлде держится коннект к базе... а база может иногда и потухнуть на полчасика глубокой ночью для какого нибудь обслуживания, и соответсвено логике супервизора  - макс рестартов за опеределенное время и все приложение ложится... вот.
 

--
Ви отримали це повідомлення, оскільки підписалися на групу "Erlang в Україні" Груп Google.
Щоб скасувати підписку на цю групу та не отримувати листів із неї, надішліть електронний лист на адресу erlang-in-ukra...@googlegroups.com.
Щоб залишати дописи в цій групі, надішліть електронного листа за адресою erlang-i...@googlegroups.com.
Перейдіть до цієї групи за посиланням http://groups.google.com/group/erlang-in-ukraine.

Сергій Костюшкін

unread,
Aug 22, 2013, 10:50:12 AM8/22/13
to erlang-i...@googlegroups.com
А для пула сами что-то писали или poolboy?



Четвер, 22 серпня 2013 р. 15:55:39 UTC+3 користувач Evgen Polivoda написав:

zheka_13

unread,
Aug 22, 2013, 11:05:15 AM8/22/13
to erlang-i...@googlegroups.com
У нас небольшая нагрузка, поэтому в дополнительных обвесах типа пулбоя (честно говоря не совсем понимаю для чего он нужен, типа pg_bouncer или как) не вижу надобности. Ген сервер просто делает конекшн на базу и держит его ... вот и все...Если упадет  - поднимется снова.  Подумалось можно вроде как в init ген сервера при неуспешном коннекте делать ожидание 10 сек и потом уже валиться. Я просто в ерланге вроде как новичек поэтому не знаю хорошо ли так делать... что то мне кажется что не хорошо. 

Volodymyr Stolyarchuk

unread,
Aug 22, 2013, 12:03:59 PM8/22/13
to erlang-i...@googlegroups.com

У меня была похожая проблема, процес держал тисипи конект к сервису который мог падать
Решил дополнительной логикой в процессе, не давая ему много падать если нельзя подключиться к сервису. Он падал только если разрывалось уже установленное соединение

22.08.2013 14:08 пользователь "Evgen Polivoda" <pol...@gmail.com> написал:
Здравствуйте, а как сделать сто бы супервизор делал рестарт чайлда (ген сервера) не сразу а например секунд через 10 после того как тот упал?

Например у меня в чайлде держится коннект к базе... а база может иногда и потухнуть на полчасика глубокой ночью для какого нибудь обслуживания, и соответсвено логике супервизора  - макс рестартов за опеределенное время и все приложение ложится... вот.
 

--

Игорь Проць

unread,
Nov 25, 2013, 8:03:29 AM11/25/13
to erlang-i...@googlegroups.com
Как я понял документацию, то в случае, если супервизор не успевает сделать макс рестартов за опеределенное заданное время, то он не падает, а продолжает далее делать рестарты чайлда. Из этого следует, что увеличив максимальное кол-во рестартов и уменьшив время для них, можно загнать супервизор в бесконечный цикл и он будет пытаться стартовать чайлд до того времени пока база не поднимется.
У себя в приложении я сделал макс рестарт = 100 000, а время для рестартов  10 сек. Единственное но - нагружает систему почти до отказа, но, имхо, все равно ей больше делать нечего, как ждать коннекта к базе.

четверг, 22 августа 2013 г., 14:08:00 UTC+3 пользователь Evgen Polivoda написал:

zheka_13

unread,
Dec 2, 2013, 4:02:00 AM12/2/13
to erlang-i...@googlegroups.com
Я уже вроде как  сделал более изящно

init(_Args) ->
    case ?CONN of
        {ok, C} ->
            {ok, [], []} = pgsql:squery(C, "select 1"),
            {ok, C};
        {error, _} ->
            receive
            after 5000 ->
                {stop, db_connection_error}
            end
    end.



25 ноября 2013 г., 15:03 пользователь Игорь Проць <prots...@gmail.com> написал:

--

Сергей Прохоров

unread,
Dec 2, 2013, 6:29:47 PM12/2/13
to erlang-i...@googlegroups.com
Не понимаю что этот код делает. Вижу в нём минимум 3 очень странных места...
1) Что у вас в ?CONN находится? Вызов pgsql:connect ?
2) pgsql:squery(C, "SELECT 1") совершенно точно не сматчится c {ok, [], []}
3) `receive after 5000` это самодельный timer:sleep(5000) ?
http://ferd.ca/it-s-about-the-guarantees.html
Вообще, на эту тему буквально несколько часов назад неплохая статья вышла 
понедельник, 2 декабря 2013 г., 13:02:00 UTC+4 пользователь Evgen Polivoda написал:

zheka_13

unread,
Dec 3, 2013, 12:46:17 AM12/3/13
to erlang-i...@googlegroups.com

Да, согласен. Код может быть нерабочим, копипастил и менял на ходу. Хотел показать принцип реализации.

03 дек. 2013 г. 1:29 пользователь "Сергей Прохоров" <seri...@gmail.com> написал:

zheka_13

unread,
Dec 3, 2013, 3:40:03 AM12/3/13
to erlang-i...@googlegroups.com
Статья хорошая. С ней полностью согласен. Только вот у меня просто небольшой нюанс, что если нет базы - то весь сервис на ерланге не имеет смысла, т. е. база это основа сервиса. Поэтому в моем случае и поднимать ерланг без базы не имеет смысла, лучше люди на клиентах будут получать еррор на коннекшн к сервису.
 


3 декабря 2013 г., 7:46 пользователь zheka_13 <pol...@gmail.com> написал:
Reply all
Reply to author
Forward
0 new messages