Size: a a a

2018 November 08

DR

Dmitry Russ (Aleksandrov) in pro.elixir
Alex Golubov
ну или иметь один отдельный процесс через который слать все ответы адресатам которые могут свалиться
Не есть гут создавать bottleneck-и.
источник

AG

Alex Golubov in pro.elixir
Dmitry Russ (Aleksandrov)
Не есть гут создавать bottleneck-и.
ну так а сам генсервер тот же bottleneck
источник

DR

Dmitry Russ (Aleksandrov) in pro.elixir
    try do
     GenServer.call(...)
   catch
     :exit, {:timeout, {GenServer, ...}} ->
       {:error, ...}
   end
- подобный код у нас часто встречается.
источник

Е

Евгений in pro.elixir
Ага, я о нем же
источник

Е

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

DR

Dmitry Russ (Aleksandrov) in pro.elixir
Alex Golubov
ну так а сам генсервер тот же bottleneck
Копировать данные дважды - даже если дополнительный процесс на каждый процесс.
источник

DR

Dmitry Russ (Aleksandrov) in pro.elixir
Создавать новый процесс - это однозначно не решение.
источник

DR

Dmitry Russ (Aleksandrov) in pro.elixir
А вот try catch действительно вполне адекватное решение. Но лишь потому что GenServer.call - крэшится. Было бы лучше, если бы GenServer.call! и GenServer.call был бы.
источник

Е

Евгений in pro.elixir
похоже, это единственный способ обработать такую ситуацию без падения процесса
источник

Е

Евгений in pro.elixir
Dmitry Russ (Aleksandrov)
А вот try catch действительно вполне адекватное решение. Но лишь потому что GenServer.call - крэшится. Было бы лучше, если бы GenServer.call! и GenServer.call был бы.
именно!
источник

DR

Dmitry Russ (Aleksandrov) in pro.elixir
И GenServer.call бы никогда не крэшился бы не зависимо от того, что стало с другим процессом.
источник

DR

Dmitry Russ (Aleksandrov) in pro.elixir
А до тех пор - оборачивать в try catch - это самая правильная и самая адекватная практика, что может быть. И нечего try catch-а боятся как огня в этом случае.
источник

DR

Dmitry Russ (Aleksandrov) in pro.elixir
По сути try catch - исправляет дизайн GenServer.call - там где это нужно единственно возможным способом. И к этому нужно совершенно нормально относиться.
источник

DR

Dmitry Russ (Aleksandrov) in pro.elixir
А если нужно, чтобы крэшился, как раньше, то для этого был бы GenServer.call!
источник

Е

Евгений in pro.elixir
я try/catch применяю не только для GenServer.call
оборачиваю некоторые функции на случай, если случилась какая-то странная хрень, которую по ошибке забыли обработать.
источник

AG

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

Е

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

Е

Евгений in pro.elixir
Эдакий супервизор, но в отличие от стандартного супервизора, падает только один GenServer, а не половина дерева процессов.
источник

AG

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

Е

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