Size: a a a

2018 November 08

YZ

Yuri Zhloba in pro.elixir
Try catch латает последствия пост фактум, а не решает проблему
источник

Е

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

Е

Евгений in pro.elixir
полагаю, его не исправляют из-за слишком серьезного breacking change
источник

DR

Dmitry Russ (Aleksandrov) in pro.elixir
after Timeout ->
       erlang:demonitor(Mref, [flush]),
       exit(timeout)
источник

DR

Dmitry Russ (Aleksandrov) in pro.elixir
А её создаёт сам call
источник

DR

Dmitry Russ (Aleksandrov) in pro.elixir
Проблема искуственная!
источник

DR

Dmitry Russ (Aleksandrov) in pro.elixir
{'DOWN', Mref, _, _, Reason} ->
       exit(Reason)
источник

YZ

Yuri Zhloba in pro.elixir
Решение проблемы, это когда к воркеру, завершившемуся штатным образом, никто и не пытается делать запросы.
источник

DR

Dmitry Russ (Aleksandrov) in pro.elixir
Вот вместо exit- возвращать ошибку и нет проблемы.
источник

DR

Dmitry Russ (Aleksandrov) in pro.elixir
Ты не избавишься от race condition
источник

Е

Евгений in pro.elixir
можно запилить свой GenServer, где обернуть call в try/catch :) и путать этим новых членов команды.
источник

DR

Dmitry Russ (Aleksandrov) in pro.elixir
Таким образом никогда.
источник

YZ

Yuri Zhloba in pro.elixir
Совсем избавиться от race condition нельзя, можно управлять вероятностью
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Dmitry Russ (Aleksandrov)
after Timeout ->
       erlang:demonitor(Mref, [flush]),
       exit(timeout)
Ну вот, я был не прав
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Надо почитать код генсервера
источник

DR

Dmitry Russ (Aleksandrov) in pro.elixir
Приходит левый процесс, которому только сейчас нужно знать, даже если он поставит монитор и проверит, что не завершилось - обратиться к процессу - а тот до запроса умрёт, всё равно будет race condition.
источник

DR

Dmitry Russ (Aleksandrov) in pro.elixir
А вместе с gen_server-ом будет 2 монитора.
источник

Е

Евгений in pro.elixir
try/catch сводит вероятность race condition к вероятности бага в эликсире или BEAM и сбоя железа
источник

YZ

Yuri Zhloba in pro.elixir
Проблема вашего подхода в том, что он не различает воркера, завершившегося штатно, от воркера, завершившегося аварийно.
источник

DR

Dmitry Russ (Aleksandrov) in pro.elixir
Yuri Zhloba
Совсем избавиться от race condition нельзя, можно управлять вероятностью
Можно try/catch избавляет от race condition-а.
источник