Size: a a a

2018 November 08

FM

Fey Martynov in pro.elixir
процесс может упасть между Process.alive? и GenServer.call
источник

FM

Fey Martynov in pro.elixir
можно через Registry эту проблему решить
источник

Е

Евгений in pro.elixir
каким образом?
источник

Е

Евгений in pro.elixir
чем нам поможет Registry?
источник

FM

Fey Martynov in pro.elixir
можно делать call через via
источник

FM

Fey Martynov in pro.elixir
если генсервер сдох, реджистри ответит ошибкой
источник

Е

Евгений in pro.elixir
если Registry ответит ошибкой, то GenServer.call падает, ЕМНИП
источник

Е

Евгений in pro.elixir
Кроме того Registry мониторит процессы при помощи все тех же сообщений, поэтому на момент GenServer.call, Registry может еще "не знать", что процесс сдох
источник

AG

Alex Golubov in pro.elixir
Евгений
тому кто вызвал GenServer.call, очевидно
так если адресат здох то как ему вернуть ошибку? или может я че не так понял..
источник

AG

Alex Golubov in pro.elixir
а понял
источник

Е

Евгений in pro.elixir
Alex Golubov
так если адресат здох то как ему вернуть ошибку? или может я че не так понял..
Проще говоря, нужен некий вариант GenServer.call, который бы в случае умершего адресата возвращал бы что-то вроде {:error, :адресат_сдох}, а не тупо валил свой процесс
источник

AG

Alex Golubov in pro.elixir
можно в handle_call ответить {noreply, NewState,{continue,Continue}}, и запустить отдельный процесс в котором послать адресату ответ
источник

AG

Alex Golubov in pro.elixir
ну или иметь один отдельный процесс через который слать все ответы адресатам которые могут свалиться
источник

AG

Alex Golubov in pro.elixir
If {noreply,NewState} is returned, {noreply,NewState,Timeout}, or {noreply,NewState,hibernate}, the gen_server process continues executing with NewState. Any reply to From must be specified explicitly using reply/2.
источник

Е

Евгений in pro.elixir
не понял, адресат умер, какой handle_call?
источник

Е

Евгений in pro.elixir
тут даже мониторинг адресата не поможет, так как сообщение о смерти может прийти слишком поздно.
источник

AG

Alex Golubov in pro.elixir
Евгений
не понял, адресат умер, какой handle_call?
так адресат это процесс генсервера?
источник

Е

Евгений in pro.elixir
Конечно, GenServer.call подразумевает, что адресат - генсервер
источник

AG

Alex Golubov in pro.elixir
а, че timeout не помогает?
источник

Е

Евгений in pro.elixir
Причем тут timeout? Он работает, если адресат жив, но тянет с ответом.
источник