Domanda

Supporto di Erlang per partizionare i suoi nodi in gruppi usando il modulo global_group . Inoltre, Erlang supporta l'aggiunta di nodi al volo alla rete di nodi. Queste due funzioni sono utilizzabili l'una con l'altra?
Per quanto ho capito, devi nominare ogni nodo all'avvio per usare i gruppi globali.

È stato utile?

Soluzione

Guardando la global_group source , l'elenco dei nodi fa parte della configurazione controllata dai nodi durante la sincronizzazione.

Esiste tuttavia una funzione esportata global_group : global_groups_changed che gestisce la modifica dell'elenco dei nodi.

Viene chiamato da kernel: config_change (Vedi Modulo: config_change / 3 ) quindi è certamente possibile aggiungere nuovi nodi a un global_group durante un aggiornamento di versione (stile di sistemi embedded OTP) (Vedi " Aggiornamento delle specifiche dell'applicazione " )

potrebbe essere semplicemente possibile:

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

Supponendo che tu avessi già una configurazione global_groups o

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

se si stanno configurando global_groups in un cluster in cui non esisteva già.

Devi fare quanto sopra su ciascun nodo e se decidono di sincronizzarsi durante il processo, divideranno le linee della differenza di configurazione. (Vedi il commento nella global_group source sulla sincronizzazione durante l'aggiornamento di una versione)

Ma una volta che è stato fatto a tutti loro,

global_group:sync()

dovrebbe far funzionare di nuovo tutto.

Non ho provato la ricetta sopra, ma mi sembra gustosa. ^ _ ^

Altri suggerimenti

  

Un nodo è un runtime di Erlang in esecuzione   sistema a cui è stato dato un nome,   usando la riga di comando flag -name   (nomi lunghi) o -sname (nomi brevi).

     

Un nodo nascosto è un nodo iniziato con   il flag della riga di comando è nascosto.   Connessioni tra nodi nascosti e   altri nodi non sono transitivi, loro   deve essere impostato esplicitamente. Anche,   i nodi nascosti non vengono visualizzati in   elenco di nodi restituiti da nodes ().   Invece, nodi (nascosti) o   i nodi (connessi) devono essere utilizzati. Questo   significa, ad esempio, che il nascosto   il nodo non verrà aggiunto all'insieme di   nodi di cui Global sta tenendo traccia.

Quindi in breve, sì, devi dare un nome al nostro nodo per poterlo trovare da altri nodi.

Sembra che tu lo stia facendo senza provare o che tu abbia una domanda molto complessa e forse un esempio di ciò che stai cercando di realizzare potrebbe rendere possibile dare una risposta migliore.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top