Добавление узлов динамически и global_groups в Erlang

StackOverflow https://stackoverflow.com/questions/215615

  •  03-07-2019
  •  | 
  •  

Вопрос

Поддержка Erlang для разделения его узлов на группы с помощью модуля global_group . Кроме того, Erlang поддерживает добавление узлов на лету в сеть узлов. Эти две функции можно использовать друг с другом?
Насколько я понимаю, вы должны назвать каждый узел при запуске, чтобы использовать глобальные группы.

Это было полезно?

Решение

Просмотр источника global_group список узлов является частью конфигурации, проверяемой узлами при синхронизации.

Однако есть экспортируемая функция global_group : global_groups_changed , которая обрабатывает изменение списка узлов.

Это вызывается из ядра: config_change (см. Модуль: config_change / 3 ) поэтому, безусловно, можно добавлять новые узлы в global_group во время обновления выпуска (стиль встроенных систем OTP) (см. " Обновление спецификаций приложений " )

Возможно, можно просто сделать:

application:set_env( kernel, global_groups, [GroupTuple|GroupTuples] ),
kernel:config_change( [ { global_groups, [GroupTuple|GroupTuples] } ], [], [] )

Предполагая, что у вас уже есть конфигурация global_groups, или

application:set_env( kernel, global_groups, [GroupTuple|GroupTuples] ),
kernel:config_change( [], [{ global_groups, [GroupTuple|GroupTuples] }], [] )

если вы настраиваете global_groups в кластере, где его еще не было.

Вы должны выполнить вышеописанное на каждом узле, и если они решат синхронизироваться во время процесса, они разделят строки различий в конфигурации. (См. Комментарий в global_group source о синхронизации во время обновления релиза)

Но как только это будет сделано для всех них,

global_group:sync()

должно снова все заработать.

Я не проверял вышеупомянутый рецепт, но он выглядит вкусно для меня. ^ _ ^

Другие советы

  

Узел - исполняющая среда исполнения Erlang.   система, которая получила имя,   используя флаг командной строки -name   (длинные имена) или -sname (короткие имена).

     

Скрытый узел - это узел, начатый с   флаг командной строки - скрыт.   Связи между скрытыми узлами и   другие узлы не являются переходными, они   должен быть установлен явно. Также,   скрытые узлы не отображаются в   список узлов, возвращаемых node ().   Вместо этого узлы (скрытые) или   узлы (подключенные) должны быть использованы. это   означает, например, что скрытый   узел не будет добавлен в набор   узлы, которые отслеживает глобальный.

Короче говоря, да, вам нужно дать нашему узлу имя, чтобы другие узлы могли его найти.

Такое чувство, что вы либо задаете вопрос, но не пытаетесь, или у вас очень сложный вопрос, и, возможно, пример того, чего вы пытаетесь достичь, может дать лучший ответ.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top