Elixir / Horde : DynamicSupervisor.start_child() блокируется загадочным предупреждающим сообщением

#elixir

#elixir

Вопрос:

Я использую Elixir 1.10.1 с Horde 0.8.3 в качестве серверного API для мобильного и веб-приложения. По сути, пользователь представлен a UserAgent , сокращенно UA (реализован с помощью a GenServer ), который уникален для всего кластера и который существует до тех пор, пока существует хотя бы одно оперативное соединение от клиентского приложения. Клиенты могут подключаться много раз (телефон, планшет, Интернет, из дома, с работы и т. Д.); Каждое соединение представлено ConnectionAgent сокращенно CA, которое уникально. CA работают до тех пор, пока пользователь не вышел из системы или срок действия сеанса не истек. По сути, у меня есть только уникальный UA, но у меня может быть несколько CA.

login Процедура состоит из трех шагов

  1. После получения HTTP-запроса на вход (содержимое JSON) login() вызывается контроллер. После некоторых проверок он вызывает Horde.DynamicSupervisor.start_child(...) создание и регистрацию нового центра сертификации.
  2. Вызывается супервизор ConnectionAgent.start_link() , который, в свою очередь, вызывает GenServer.start_link() с соответствующими параметрами и, в конечном итоге ConnectionAgent.init() , вызывается
  3. Предполагается, что CA либо создаст новый UA, либо подключится к существующему, поэтому он вызывает `Horde.DynamicSupervisor.start_child(…)

В этот момент программа зависает, и я навсегда получаю следующие предупреждающие сообщения в консоли, и я определенно не знаю, что с ними делать:

 [warn] Exit while fetching metrics from AlaaarmApi.DSup.
Skip poll action. Reason: {:timeout, {GenServer, :call, [AlaaarmApi.DSup, :get_telemetry, 5000]}}.
 

Я просто застрял, поэтому любой намек был бы полезен…

Ответ №1:

Вы проверили текущие и прошлые проблемы в библиотеке Horde?

Похоже, это проблема, связанная с Ордой. Это была, по крайней мере, известная проблема в Horde 0.8.2, которая должна была быть решена в 0.8.3 (см. Здесь и здесь тоже).

Откройте проблему в GitHub, и разработчики / пользователи обязательно помогут вам!

Комментарии:

1. Нет, я этого не делал, но по вашему совету я это сделал, и я добавил комментарий к делу (которое было закрыто). Сопровождающий определил проблему как тупиковую и посоветовал создать второго супервизора . Это фактически решило проблему.