Pregunta

Erlang admite la partición de sus nodos en grupos utilizando el módulo global_group . Además, Erlang admite la adición de nodos sobre la marcha a la red de nodos. ¿Se pueden utilizar estas dos características entre sí?
Según tengo entendido, debe asignar un nombre a cada nodo en el inicio para usar los grupos globales.

¿Fue útil?

Solución

Mirando a fuente de grupo global , la lista de nodos es parte de la configuración verificada por los nodos a medida que se sincronizan.

Sin embargo, hay una función exportada global_group : global_groups_changed que maneja el cambio de lista de nodos.

Se llama desde kernel: config_change (Consulte Módulo: config_change / 3 ) por lo que ciertamente es posible agregar nuevos nodos a un global_group durante una actualización de la versión (estilo de sistemas embebidos OTP) (Ver " Actualización de las especificaciones de la aplicación " )

Se podría hacer simplemente:

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

Suponiendo que ya tenía una configuración global_groups, o

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

si está configurando global_groups en un clúster donde ya no existía.

Debes hacer lo anterior en cada nodo, y si deciden sincronizarse durante el proceso, dividirán las líneas de la diferencia de configuración. (Vea el comentario en fuente de grupo global sobre la sincronización durante una actualización de la versión)

Pero una vez que se ha hecho con todos ellos,

global_group:sync()

debería hacer que todo vuelva a funcionar.

No he probado la receta anterior, pero me parece sabrosa. ^ _ ^

Otros consejos

  

Un nodo es un runtime Erlang en ejecución   sistema al que se le ha dado un nombre,   usando la marca de línea de comando -nombre   (nombres largos) o -sname (nombres cortos).

     

Un nodo oculto es un nodo iniciado con   el indicador de la línea de comando - oculto.   Conexiones entre nodos ocultos y   Otros nodos no son transitivos,   debe ser configurado explícitamente. También,   Los nodos ocultos no aparecen en el   Lista de nodos devueltos por nodos ().   En cambio, los nodos (ocultos) o   Se deben utilizar nodos (conectados). Esta   Significa, por ejemplo, que lo oculto.   nodo no se añadirá al conjunto de   nodos que global está siguiendo.

En resumen, sí, debe darle a nuestro nodo un nombre para que otros nodos puedan encontrarlo.

Parece que estás preguntando sin probar o tienes una pregunta muy compleja y quizás un ejemplo de lo que estás tratando de lograr podría hacer posible dar una mejor respuesta.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top