質問

global_group モジュールを使用して、ノードをグループに分割するためのErlangサポート。 さらに、Erlangはノードネットワークへのオンザフライでのノードの追加をサポートしています。これら2つの機能は相互に使用可能ですか?
私の知る限り、グローバルグループを使用するには、起動時にすべてのノードに名前を付ける必要があります。

役に立ちましたか?

解決

global_groupソースを見る、ノードのリストは、ノードが同期するときにノードによってチェックされる構成の一部です。

ただし、エクスポートされた関数はあります global_group :global_groups_changed ノードリストの変更を処理します。

kernel:config_change <から呼び出されます Module:config_change / 3 )したがって、リリースのアップグレード中にglobal_groupに新しいノードを追加することは確かに可能です(OTP組み込みシステムスタイル)(&quot;アプリケーション仕様の更新&quot;

簡単に実行できる可能性があります

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_groupsを設定している場合。

各ノードで上記を実行する必要があり、プロセス中に同期することに決めた場合、構成の違いの行を分割します。 ( global_group source リリースアップグレード中の同期について

しかし、それがすべての人に行われると、

global_group:sync()

すべてが再び動作するはずです。

上記のレシピはテストしていませんが、おいしそうです。 ^ _ ^

他のヒント

  

ノードは実行中のErlangランタイムです   名前が付けられたシステム、   コマンドラインフラグ-nameを使用する   (ロングネーム)または-sname(ショートネーム)。

     

非表示ノードは、次で始まるノードです   コマンドラインフラグ-hidden。   非表示ノード間の接続と   他のノードは推移的ではなく、   明示的に設定する必要があります。また、   非表示ノードは表示されません   nodes()によって返されるノードのリスト。   代わりに、ノード(非表示)または   nodes(connected)を使用する必要があります。この   たとえば、隠された   ノードはのセットに追加されません   グローバルが追跡しているノード。

要するに、はい、他のノードが見つけられるように、ノードに名前を付ける必要があります。

あなたは試していないか、非常に複雑な質問をしているように感じます。おそらくあなたが達成しようとしていることの例は、より良い答えを与えることを可能にするかもしれません。

scroll top