Size: a a a

2020 March 13

AB

Alex Bubnov in pro.elixir
мне сейчас вообще думается, что в коде генсервера не должно быть в явном виде манипуляций с данными, не связанными с процессами/мониторами/etc
источник

AB

Alex Bubnov in pro.elixir
Михаил Лёсин
хрен с ним с каналом, есть один генсервер-воркер, и он должен быть одним, обрабатывая кучу разных по типам сообщений в порядке их поступления, и вот я хочу разделить их по типу
как обрабатывая? и почему он должен быть один?
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Михаил Лёсин
хрен с ним с каналом, есть один генсервер-воркер, и он должен быть одним, обрабатывая кучу разных по типам сообщений в порядке их поступления, и вот я хочу разделить их по типу
Ну если у сообщений есть типы, то в чем проблема разделить?
источник

МЛ

Михаил Лёсин in pro.elixir
он изменяет файловую структуру на диске, и мне позарез надо чтобы в один момент времени только один процесс ее изменял
источник

МЛ

Михаил Лёсин in pro.elixir
можно наверное и разные сделать, но тогда получается нужно как-то организовать блокировку
источник

AB

Alex Bubnov in pro.elixir
ок, что нужно сделать, чтобы один процесс обрабатывал входящие ивенты, а второй - работал с диском?
источник

МЛ

Михаил Лёсин in pro.elixir
Alex Bubnov
ок, что нужно сделать, чтобы один процесс обрабатывал входящие ивенты, а второй - работал с диском?
так оно так и сделано, но операции с диском - разные, и друг от друга зависят, и их много
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Вот пример: есть foo.bar, foo.baz и bar.baz

def handle_call(msg, from, state) do
 case String.split(msg, “.”) do
   [“foo” | command] -> Foo.handle_call(command, from, state)
   [“bar” | command ] -> Bar.handle_call(command, from state)
 end
end
источник

AB

Alex Bubnov in pro.elixir
А всё, что общее между модулями - унести в Utils
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Так сложно роутинг сделать чтоле...
источник

AB

Alex Bubnov in pro.elixir
Źmićer Rubinštejn
Так сложно роутинг сделать чтоле...
Да тут скорее "как бы не рефакторить всё, но сделать код попроще"
источник

МЛ

Михаил Лёсин in pro.elixir
я так понял из доков что handle_call потеряет сообщения, которые придут пока он висит раздумывая над сообщением? или я неправ? у меня потенциально долгие операции, и сейчас я их все отлавливаю castом и просто отправляю каст обратно когда готово
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Михаил Лёсин
я так понял из доков что handle_call потеряет сообщения, которые придут пока он висит раздумывая над сообщением? или я неправ? у меня потенциально долгие операции, и сейчас я их все отлавливаю castом и просто отправляю каст обратно когда готово
Где такое написано то? Конечно нет
источник

AB

Alex Bubnov in pro.elixir
Михаил Лёсин
я так понял из доков что handle_call потеряет сообщения, которые придут пока он висит раздумывая над сообщением? или я неправ? у меня потенциально долгие операции, и сейчас я их все отлавливаю castом и просто отправляю каст обратно когда готово
Нет, не потеряет. Но есть нюансы всё же.
источник

AB

Alex Bubnov in pro.elixir
В принципе, идея с кастом терпимая, некоторый запас на будущее есть
источник

AB

Alex Bubnov in pro.elixir
А что там всё-таки на диске? Хотя бы, один файл или много?
источник

МЛ

Михаил Лёсин in pro.elixir
много, изменяется структура, это внешняя утилита будет делать
источник

AB

Alex Bubnov in pro.elixir
Михаил Лёсин
много, изменяется структура, это внешняя утилита будет делать
А в коде типа параметры для неё собираются?
источник

МЛ

Михаил Лёсин in pro.elixir
ну например есть часть сообщений про то что нужно создать/переименовать/изменить структуру проекта, а также отдельно создать/переименовать/изменить отдельную подструктуру в проекте, и так далее вложенно. хочу отделить их по работе со структурой/подструктурой/подподструктурой
источник

МЛ

Михаил Лёсин in pro.elixir
и получается в канал приходит сообщение, в его handle_in, и если я вызову там долгий call, получается этот handle_in подвиснет пока call не вернется
источник