Question

Erlang prend en charge la partition de ses nœuds en groupes en utilisant le module global_group . En outre, Erlang prend en charge l’ajout de nœuds à la volée au réseau de nœuds. Ces deux fonctionnalités sont-elles utilisables l'une avec l'autre?
Pour autant que je sache, vous devez nommer chaque nœud au démarrage pour utiliser les groupes globaux.

Était-ce utile?

La solution

Consultation de la source du groupe_national . , la liste des noeuds fait partie de la configuration vérifiée par les noeuds lors de leur synchronisation.

Il existe toutefois une fonction exportée global_group : global_groups_changed qui gère la modification de la liste de noeuds.

Cela est appelé à partir de kernel: config_change (Voir Module: config_change / 3 ) il est donc certainement possible d’ajouter de nouveaux nœuds à un groupe global lors d’une mise à niveau de version (style OTP embedded-systems) (voir " Mise à jour des spécifications de l'application ")

Il est possible de faire simplement:

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

En supposant que vous ayez déjà eu une configuration global_groups, ou

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

si vous configurez global_groups dans un cluster où il n'existait pas déjà.

Vous devez effectuer la procédure ci-dessus sur chaque nœud. S'ils décident de se synchroniser au cours du processus, ils sépareront les lignes de la différence de configuration. (Voir le commentaire dans la source global_group à propos de la synchronisation lors d’une mise à niveau)

Mais une fois que cela a été fait à tous,

global_group:sync()

devrait tout faire fonctionner à nouveau.

Je n’ai pas testé la recette ci-dessus, mais elle m’apparaît savoureuse. ^ _ ^

Autres conseils

  

Un nœud est un environnement d'exécution Erlang en cours d'exécution   système qui a été donné un nom,   en utilisant l'indicateur de ligne de commande -name   (noms longs) ou -sname (noms abrégés).

     

Un nœud caché est un nœud avec lequel vous avez démarré.   l'indicateur de ligne de commande -hidden.   Connexions entre les nœuds cachés et   les autres nœuds ne sont pas transitifs, ils   doit être configuré explicitement. Également,   les nœuds cachés n'apparaissent pas dans le   liste des noeuds retournés par noeuds ().   Au lieu de cela, les nœuds (masqués) ou   les nœuds (connectés) doivent être utilisés. Ce   signifie, par exemple, que le caché   noeud ne sera pas ajouté à l'ensemble des   les nœuds que Global surveille.

En bref, oui, vous devez attribuer un nom à notre nœud pour que d'autres nœuds puissent le trouver.

Vous avez l’impression que vous posez la question sans essayer ou vous avez une question très complexe. Peut-être qu'un exemple de ce que vous essayez d'accomplir pourrait permettre de donner une meilleure réponse.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top