Avviamento di uno slave



Il comando per avviare uno slave e' il seguente:

java Slave query_port master_addr master_port master_port_to_query [carico] [ag]

dove 'query_port' e' la porta base dello slave (quella che viene contattata dal master locale), 'master_addr' e 'master_port' sono l'indirizzo e la porta base del master (cioe' la porta usata dal master per le richieste dei client), 'master_port_to_query' e' la porta dei master esterni alla rete locale che lo slave deve contattare, 'carico' e' un parametro opzionale di test che fissa il carico dello slave (numero di processi attivi, contenuto nella variabile ConstantsS.slaveLoad) al valore specificato (utile per testare la rielezione del master locale caduto), e 'ag' e' il parametro opzionale che indica che lo slave e' stato avviato con la rete gia' in funzione e, quindi, deve aggiungersi.

Uno volta avviato lo slave inizializza le sue strutture dati e gli thread per la gestione delle richieste da parte del master locale, per il monitoraggio del master stesso e per la gestione della rielezione di un nuovo master in caso di malfunzionamenti di quello attuale. A seconda che il parametro 'ag' venga specificato o meno si hanno, poi, due comportamenti diversi:

Avviamento normale



In questo caso il parametro 'ag' non e' stato specificato, il che significa che la rete locale si sta avviando e che c'e' il master locale in attesa di ricevere da tutti gli slave della rete un pacchetto UDP contenente la loro porta base (quella che dovra' contattare per propagare le richieste che gli arrivano). Lo slave invia, quindi, al master la propria porta (pacchetto UDP alla porta base del master usata in questa fase iniziale per la registrazione degli slave del sistema) e attende un ack contenente la lista di tutti gli slave vivi della rete. Una volta ricevuto l'ack lo slave inizializza la lista di tutti i suoi "fratelli" ed e' pronto per ricevere delle richieste dal master.

Aggiunta dello slave alla rete locale



In questo caso e' stato specificato il parametro 'ag' e questo significa che la rete e' gia' attiva e che lo slave avviato deve aggiungersi ad essa. Per fare questo esso invia al master (allo thread AliveTread) un pacchetto UDP contenete il messaggio "aggiungi slave" e rimane in attesa della risposta che contiene la lista degli slave vivi e quella degli slave morti del sistema. Una volta venuto a conoscenza dei propri "fratelli" attivi, esso provvede ad informarli del suo inserimento nella rete inviando loro un pacchetto UDP con il messaggio "aggiungi slave" (si veda la registrazione di un nuovo slave) e lo thread AliveThread del master). Lo slave avviato rimane in attesa di un ack da parte dei propri "fratelli" come conferma della sua registrazione e se questo messaggio non arriva lo slave rimane bloccato per indicare che un qualche malfunzionamento e' avvenuto.

(Per i dettagli si veda la classe principale dello Slave)