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)