
Kazakbay
17.04.2018
10:23:00
Вопрос отпал)

Aleksandr
17.04.2018
14:13:45

Dmitry
17.04.2018
22:22:49
@avfomin Да уж, до proper-а пока далеко

Vladimir
18.04.2018
04:37:04
А кто-нибудь заморачивался с иерархическими структурами? (хранение данных с реализацией nested set/closure table/...)

Google

Артем
18.04.2018
18:33:51
блээээээээ
ни у кого случайно нет скрипта для переноса arc из s3 в local storage?
до моего проекта доехал РКН

Taras ?
18.04.2018
18:37:00

Vladimir
18.04.2018
18:40:57

Taras ?
18.04.2018
19:43:54
А без привязки к Postgres?
наверное, так же, только составный ключик в ets/dets
( еее... тут надо будет заморочиться... и почему без постгреса? )

MrFlorius
19.04.2018
16:48:54
Можно ли дать имя воркеру, созданному через Task?
worker(Task, [Module, :function, [args]])

Dmitry
19.04.2018
17:16:41

MrFlorius
19.04.2018
17:18:21

Yuri
19.04.2018
18:37:16
Подскажите а есть возможность получить стейт в генсервере, когда выполняються другие handle_cast ?

Alexander
19.04.2018
18:37:55
Получить где?

Yuri
19.04.2018
18:38:57
Ну грубо говоря у меня в фоне handle_cast делает запросы на сторонние API, получает данные и пишет в стейт, хочеться не ждать завершения всех запросов, а получить в любой момент стейт

Alexander
19.04.2018
18:39:13
Вообще gen_server реагирует на всё строго последовательно, как любой процесс в beam. Пока на одно сообщение реагирует, остальные копятся в инбоксе.

Google

Yuri
19.04.2018
18:39:35
вот, те. тут без вариантов

Alexander
19.04.2018
18:39:50
если он вдруг в сторонние апи пишет как-то асинхронно, то можно

Артем
19.04.2018
18:40:01

Alexander
19.04.2018
18:40:20
точняк, можно асинхронность сделать отдельным процессом.

Yuri
19.04.2018
18:40:49
мммм а данные хранить тогда не в стейте
а в ets
я просто хотел данные в стейте хранить, но он ждет очереди

Alexander
19.04.2018
18:41:54
server1 -> call server2: а дай ка мне ответ от внешнего API
server2 отдаёт какой-то уникальный id
server2 идёт во внешний api
server2 -> cast server1 {уникальный id, ответ от внешнего API}

Yuri
19.04.2018
18:42:23
немного не понял )

Артем
19.04.2018
18:42:38

Yuri
19.04.2018
18:43:48
блин зачем тогда генсервер в этом контексте, только для хранения данных получается

Alexander
19.04.2018
18:44:29
а он обычно для этого и используется

Артем
19.04.2018
18:45:02
генсервер для реализации поведения

Alexander
19.04.2018
18:45:24
query_id = :erlang.make_ref()
parent = self()
spawn fn ->
result = ExternalAPI.long_call()
send parent, {query_id, result}
end
а потом где-то
handle_info({query_id, result}, state) do ...
это если таймаут не нужен и прочие понты.
и в любой момент можно получить состояние :sys.get_state, поскольку вся тяжёлая долгая работа — отдельно, и твой gen_server в любой момент может ответить на запрос состояния

Yuri
19.04.2018
18:48:01
спасибо, ща попробую

Alexander
19.04.2018
18:48:22
но лучше как-то более нормально ) чтобы был таймаут и всё такое

Yuri
19.04.2018
18:49:37
да вот тоже думаю, что такое получается, либо ets уже использовать

Google

Yuri
19.04.2018
18:57:07

Alexander
19.04.2018
18:58:30
а как здесь получать текущий стейт?
в любой момент? Для дебага или для жизни?
Для дебага — :sys.get_state(pid или registered name)
Для жизни — def handle_call(:get_state, _from, state), do: {:reply, state, state} и call его

Yuri
19.04.2018
18:59:06
ааа понял, спасибо

MrFlorius
19.04.2018
19:12:55
А как дочерним процессом Task.Supervisor сделать другой Task.Supervisor

Alexander
19.04.2018
19:21:14
точно такой же вызов к genserver'у как и остальное
мы это поведение в тестах handle_cast юзаем, когда нужно дождаться когда handle_cast выполнится

Alexander
19.04.2018
19:22:39
Вообще-то, gen_server это такой же процесс как другие
С заранее запрограммированным поведением
Которым я предложил воспользоваться

Alexander
19.04.2018
19:23:11
ага

Alexander
19.04.2018
19:23:12
А бред тут только ты.

Alexander
19.04.2018
19:24:42
вопрос был:
Подскажите а есть возможность получить стейт в генсервере, когда выполняються другие handle_cast ?
твой ответ некорректен, в любой момент ты не получишь его стейт, только когда дойдет очередь.
хотя да сорян. tldr

Alexander
19.04.2018
19:27:10
Я рассказал об этом, а потом, предложив решение, позволяющее отдать дорогие запросы к внешним апи другому генсерверу, рассказал как получить состояние
А теперь как дебил защищаю репутацию в интернете. Доктора мне.

Alexander
19.04.2018
19:28:05
?

Dmitry
19.04.2018
19:28:46
Так очередь на системные сообщения доходит сразу, или только в самом конце?

Alexander
19.04.2018
19:28:53
Я жду завтрашнего дня, хецнер и овш блокнули и кучу других хостеров, будет весело похоже...

Alexander
19.04.2018
19:29:02

Google

Dmitry
19.04.2018
19:29:11
А почему?
Ну, всмысле, по коду то понятно что вс] по порядку

Alexander
19.04.2018
19:29:40
Они такие же как все остальные, отп - надстройка над логикой, которая говорит что все по порядку

Dmitry
19.04.2018
19:29:54
Но почему нельзя было сделать 2 ресива

Alexander
19.04.2018
19:29:59
Чтоб не ломать наверное
То что и так работает

Dmitry
19.04.2018
19:30:29
Впринципе в ОТП почему так не сделали
Везде 2 ресива
Сперва выгребаем системные
А потом - любые

Alexander
19.04.2018
19:31:04
Если системных нет, а любых много - будет дорого
И бесполезно

Alexander
19.04.2018
19:31:42
ну вот какраз чтобы не было ситуаций, когда ты послал 3 эвента в процесс 2 обычных и 1 системный, ожидаешь что они по порядку обработаются, а выполнятся не по порядку, будет сюрприз

Dmitry
19.04.2018
19:32:22
Так а если у тебя загруженный под орех мэилбокс
То как обзервер смотрит на генсервер
висит неопредел]нное время?

Alexander
19.04.2018
19:33:01
обсервер висит да

Alexander
19.04.2018
19:33:05
Таймаутит

Alexander
19.04.2018
19:33:12
у загруженного процесса cложно стейт посмотреть, таймауты летят

Dmitry
19.04.2018
19:33:36
Точно, таймаутит...

Google

Yuri
19.04.2018
19:33:39
окей, а как увеличить тогда таймаут ?

Dmitry
19.04.2018
19:34:03
В обзервре - хз

Yuri
19.04.2018
19:34:12
в init ?
в генсервере именно)

Dmitry
19.04.2018
19:34:40
В api
def get_state(pid), do: GenServer.call(pid, :get_state, 1000000)

Артем
19.04.2018
19:46:22
только таскам

Igor
19.04.2018
21:07:13
Сходил пообщался с ребятами из AEON кстати. Напрасно их тут обосрали, более чем адекватные ребята. И проект в принципе получше и уж точно поинтереснее многих. Стэк опять таки огонь, все хайп слова собрали. Но конечно стартапчик. Был бы лет на 5 помоложе, да денег бы побольше давали, может и сам пошёл бы. Сори за рекламу, но чувствую себя причастным к необоснованному скептицизму в их адрес (типа извинился).