Size: a a a

2021 January 14

AB

Alexey Bolshakov in pro.elixir
erts: A received SIGTERM signal to beam will generate a 'stop' message to the init process and terminate the Erlang VM nicely. This is equivalent to calling init:stop/0.
источник

AB

Alexey Bolshakov in pro.elixir
То есть, он должен корректно сообщение stop прислать
источник

AN

Alexey Novoselov in pro.elixir
unkmas
Привет! Я не очень опытен с эликсиром, возник затуп, надеюсь, вы мне поможете)

У меня есть пул GenServer под управлением пуллбоя.  Я хочу сделать graceful shutdown по sigterm. Проблема вот в чём - если на момент вызова terminate в инбоксе процесса есть какие-то сообщения - то они теряются. Есть ли какой-то способ в этот момент достать все сообщения, обработать, а потом уже выйти?

Или как вообще принято делать? Ничего внятного нагуглить не смог
в trrminate колбэке вызвать рекурсивный receive do m -> process(m) after 0 -> : ok end
источник

VP

Vladimir Potapev in pro.elixir
unkmas
Привет! Я не очень опытен с эликсиром, возник затуп, надеюсь, вы мне поможете)

У меня есть пул GenServer под управлением пуллбоя.  Я хочу сделать graceful shutdown по sigterm. Проблема вот в чём - если на момент вызова terminate в инбоксе процесса есть какие-то сообщения - то они теряются. Есть ли какой-то способ в этот момент достать все сообщения, обработать, а потом уже выйти?

Или как вообще принято делать? Ничего внятного нагуглить не смог
Навскидку погуглил: https://github.com/botsquad/graceful_stop
источник

u

unkmas in pro.elixir
Что-то я плох в гуглении >_<
источник

u

unkmas in pro.elixir
Спасибо ребят, буду эти варианты смотреть
источник

IK

Ihor Katkov in pro.elixir
Alexey Novoselov
в trrminate колбэке вызвать рекурсивный receive do m -> process(m) after 0 -> : ok end
класс 👍
источник

IK

Ihor Katkov in pro.elixir
статью бы запилить по этому поводу
источник

AN

Alexey Novoselov in pro.elixir
Ihor Katkov
класс 👍
да это хреновый подход так-то) не должны сообщения в инбоксе копиться в идеале
источник

AN

Alexey Novoselov in pro.elixir
но как говорится, "так делать нельзя, но если очень хочется, то иногда можно"
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Alexey Novoselov
в trrminate колбэке вызвать рекурсивный receive do m -> process(m) after 0 -> : ok end
Я даже боюсь представить что будет, если случайно внутри этого process посылаются сообщения на еще один подобный генсервер, который тоже заблочился в terminate
источник

IK

Ihor Katkov in pro.elixir
Źmićer Rubinštejn
Я даже боюсь представить что будет, если случайно внутри этого process посылаются сообщения на еще один подобный генсервер, который тоже заблочился в terminate
можно запустить другой процесс, который по истечении таймаута, сделает hard kill
источник

ML

Maksim Lapshin in pro.elixir
тут надо менять подход
если процесс пошел помирать, а от него что-то ждут, значит надо смириться с этим и выстроить процесс посылки сообщений с пониманием этого факта


На terminate рассчитывать нельзя. Во-первых, он всегда вызывается, во-вторых не обязан он вообще вызываться
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Я думаю что система с gracefull stop вся должна строится на внешних процессах и зависеть от бизнес логики
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Т.е. мы сперва делаем так, чтобы в системе не появлялось энтропии в виде новой инфы - это часть номер один
источник

ŹR

Źmićer Rubinštejn in pro.elixir
А вторая часть - понять что все кто разгребал - освободились
источник

ML

Maksim Lapshin in pro.elixir
Źmićer Rubinštejn
Я думаю что система с gracefull stop вся должна строится на внешних процессах и зависеть от бизнес логики
>  система с gracefull stop вся должна строится

система с gracefull stop в 21-м году не должна строиться =)

это как бы пройденный этап из тех древних времен, когда ещё полагали, что такое сделать можно и нужно
источник

IK

Ihor Katkov in pro.elixir
еще как вариант, можно вынести message inbox из системы к какую-нибудь queue, что само собой напрашивается раз сообщения нельзя терять
источник

IK

Ihor Katkov in pro.elixir
Alexey Novoselov
да это хреновый подход так-то) не должны сообщения в инбоксе копиться в идеале
я не знал что это возможно)
источник

AN

Alexey Novoselov in pro.elixir
складывать все необработанные сообщения в :dets и на старте ее процессить, потом попытаться сделать нормальную очеред к своему пулбою и через два года обнаружить, что вы переизобрели кролика)
источник