Size: a a a

2020 April 07

AK

Aleksey Kluchnikov in ErlangRus
за редким исключением
источник

AK

Aleksey Kluchnikov in ErlangRus
когда матчишь какой нибудь #{status := redis_crash} -> do_nothing, который фиг знает как эмулировать
источник

СИ

Сергей Иванов in ErlangRus
кстати, про второй случай забираю слова назад.  какой-то артефакт в памяти, казалось что можно еще вот так написать

show(#{ prop => value }) ->  io:fwrite("prop!\n");
show(_V) -> i:fwrite("op!\n").
источник

AK

Aleksey Kluchnikov in ErlangRus
Да, точно так и делаю, последний матчиг в лог или на печать
источник

AK

Aleksey Kluchnikov in ErlangRus
но тоже не всегда
источник

СИ

Сергей Иванов in ErlangRus
Aleksey Kluchnikov
Да, точно так и делаю, последний матчиг в лог или на печать
не, я о том, что присвоение вместо матчинга можно сделать. оказывается уже не можно.
источник

AK

Aleksey Kluchnikov in ErlangRus
ага, я понял
источник

AK

Aleksey Kluchnikov in ErlangRus
это и компилятор не пустит уже
источник

EM

Evgeny M. in ErlangRus
cleverfox 🦊
ребят, кто-нибудь в курсах, как потушить distibution если он запущен при старте ноды. net_kernel:stop() говорит {error,not_allowed}.
Ноду перезапускать крайне не желательно, она запущена c shortnames, а мне надо longnames
pgrep beam | xargs kill
источник

c🦊

cleverfox 🦊 in ErlangRus
Evgeny M.
pgrep beam | xargs kill
не, так не пойдет
источник

c🦊

cleverfox 🦊 in ErlangRus
я уже иначе решил вопрос
источник
2020 April 08

x

xhajag in ErlangRus
так, вопрос...
есть супервизор, у него есть процессы - генсервера одного типа, по генсерверу на каждого подключенного клиента.
когда клиент отваливается - нужно остановить генсервер и удалить его из супервизора.
если я правильно понял для реализации нужно -
если это все происходит в cast
1) дернуть  супервизора delete_child
2) в call сервера вернуть кортеж вида {stop, normal, State}
Но блин, все равно падает(
источник

AF

Andrey Fadeev in ErlangRus
xhajag
так, вопрос...
есть супервизор, у него есть процессы - генсервера одного типа, по генсерверу на каждого подключенного клиента.
когда клиент отваливается - нужно остановить генсервер и удалить его из супервизора.
если я правильно понял для реализации нужно -
если это все происходит в cast
1) дернуть  супервизора delete_child
2) в call сервера вернуть кортеж вида {stop, normal, State}
Но блин, все равно падает(
Вопрос первый, что значит “падает”?
источник

x

xhajag in ErlangRus
источник

AF

Andrey Fadeev in ErlangRus
xhajag
так, вопрос...
есть супервизор, у него есть процессы - генсервера одного типа, по генсерверу на каждого подключенного клиента.
когда клиент отваливается - нужно остановить генсервер и удалить его из супервизора.
если я правильно понял для реализации нужно -
если это все происходит в cast
1) дернуть  супервизора delete_child
2) в call сервера вернуть кортеж вида {stop, normal, State}
Но блин, все равно падает(
Вопрос второй, а почему бы этим серверам не останавливаться самостоятльно? Напрмер посылкой сообщения в них, или их реакцией на сработавший монитор
источник

AK

Aleksey Kluchnikov in ErlangRus
надо сделать restart = transient
источник

AF

Andrey Fadeev in ErlangRus
Да, вероятно дело в {restart_type,permanent}
источник

x

xhajag in ErlangRus
вопрос о остановке самостоятельно - можно подробнее о том как это делается? можно просто ключевых слов набросать по документации, сам найду
источник

AV

Andrey Velikiy in ErlangRus
greg
все события внутри процесса встают в очередь, каст внутри init встаёт в очередь первым и сразу же выполнится
а вот если процесс при создании регистрируется в local и сторонний процесс шлет ему сообщение по имени - могут ли возникнуть гонки с первым сообщением? по идее - да
источник

AF

Andrey Fadeev in ErlangRus
Ну модуль релизующий поведение генсервера в ответ на коллбек может веруть кортеж вида {stop,Reason,Reply,NewState} | {stop,Reason,NewState}. Тогда процесс сам остановится и удалится из супервизора (если restart_type правильный там)
источник