Avviamento del master
Il master puo' essere avviato in due modi:
Avviamento normale
Questo e' l'avviamento standard del master e consiste nel comando:
java Master client_listen_port
dove 'client_listen_port' e' la porta base partendo dalla quale vengono conteggiate tutte le altre porte.
Una volta avviato, il master inizializza le sue strutture dati, i suoi thread e attende che gli slave locali si registrino inviando un pacchetto
UDP contenente la porta di ascolto dello slave corrispondente. Il numero di slave da attendere e' fissato dalla costante ConstantsM.numSlaves.
Una volta ricevuti tutti i pacchetti dagli slave, il master invia ad essi un ack contenente l'intera lista degli slave, in modo che anche questi abbiamo una
conoscenza completa della rete locale.
Fatto cio', il master e' pronto per accettare delle richieste.
Nota1: se uno o piu' slave attesi dal master nella fase di acquisizione delle loro porte non manda il proprio messaggio, il master rimane bloccato
per indicare che si e' verificato un malfunzionamento nella rete.
Nota2: il numero degli slave puo' variare durante il funzionamento del master. E', infatti, possibile registrare un nuovo slave locale mediante lo
thread AliveThread.
Avviamento in seguito a una rielezione
In questo caso, oltre alle operazioni elencate in precedenza, visto che il master e' stato avviato su un nodo slave in seguito a una rielezione
(mediante il comando: java Master client_listen_port rieletto), e' necessario ripristinare lo stato del master
guasto. Per fare questo la cache e la lista degli slave della rete locale (sia vivi che morti) vengono inizializzate leggendo i file cachem.txt
e slavelst.txt, file salvati dallo slave che ha riavviato il master.
Una volta ripristinate le richieste pendenti nella cache, vengono avviati gli thread che devono gestirle (si cerca cosi' di ripristinare anche i processi
che erano presenti nel vecchio master). Infine viene avvisato il name server del sistema (mediante TCP e la lettura del file ip_old.txt che contiene il vecchio indirizzo
del master caduto) per aggiornare l'indirizzo del master sostituito
(si veda il Name Server) e si avvisano gli slave locali dell'avvenuta rielezione.
(Per i dettagli si veda la classe principale del Master)