Class FrontEndThread

java.lang.Object
  |
  +--java.lang.Thread
        |
        +--FrontEndThread

class FrontEndThread
extends java.lang.Thread

Thread servitore, creato da FrontEnd. Implementa il protocollo Client-FrontEnd lato server.

Author:
Matteo Albini

Field Summary
(package private)  Cid cid
          Cid generato dall'ultimo comando PUT eseguito.
(package private)  java.net.Socket clienteSocket
           
(package private)  int comando
          Ultimo comando richiesto dall'utente.
private static boolean DEBUG
          Flag per abilitare stampe di debugging su standard output e standard error.
(package private)  MsgHeader header
           
(package private)  java.net.InetAddress hostAttualeRm
          Host relativo all'attuale Replica Manager.
(package private)  java.net.InetAddress hostIniziale
          Host relativo al Replica Manager a cui si e' connessi prima di una serie di put.
(package private)  java.io.ObjectInputStream inClienteStream
          "ingresso" della socket, canale di comunicazione con il server (FE).
(package private)  int index
           
(package private)  java.io.ObjectInputStream inRmStream
          "ingresso" della socket, canale di comunicazione con il server (FE).
(package private)  Messaggio msg
           
(package private)  java.io.ObjectOutputStream outClienteStream
          "uscita" della socket, canale di comunicazione con il server (FE).
(package private)  java.io.ObjectOutputStream outRmStream
          "uscita" della socket, canale di comunicazione con il server (FE).
private  FrontEnd padre
          Riferimento all'oggetto "padre".
(package private)  java.net.Socket replicaManagerSocket
           
(package private)  java.util.Set rmSuccess
          Insieme dei Replica Manager in cui si e' postato con successo uno stesso messaggio.
(package private)  java.util.Set rmVisitati
          Insieme dei replica manager gia' visitati.
(package private)  boolean success
          Indica la terminazione con successo o meno dell'ultimo comando eseguito.
 
Fields inherited from class java.lang.Thread
contextClassLoader, daemon, eetop, group, inheritedAccessControlContext, MAX_PRIORITY, MIN_PRIORITY, name, NORM_PRIORITY, priority, single_step, stillborn, stopThreadPermission, target, threadInitNumber, threadQ, values
 
Constructor Summary
FrontEndThread(java.net.Socket clienteSocket, FrontEnd padre)
          Invoca il costruttore della classe Thread e crea un'istanza di FrontEndThread data la socket di connessione con il Client e un riferimento al FrontEnd "padre".
 
Method Summary
(package private)  void ackAction()
          Invio al ReplicaManager un segnale di "acknoledge" ACK.
(package private)  void cambiaReplicaManager(java.util.Set rmV)
          Viene scelto in base ad una delle diverse politiche possibili un nuovo ReplicaManager che continui a fornire il servizio iniziato dal precedente servitore.
(package private)  void chiudiConnessioneCliente()
          Invocato in seguito a problemi di connessione lato client, o terminazione volontaria dell'applicazione del client stesso.
(package private)  void chiudiConnessioneReplicaManager()
          Vengono chiusi i precedenti stream e invocato il metodo cambiaReplicaManager(java.util.Set), nel tentativo di fornire una certa fault-tolerance.
(package private)  void chiudiTutto()
          Fa "pulizia", chiudendo tutti gli stream, client-socket compresa.
(package private)  void errorAction(int errorType)
          Gestisce i casi d'errore.
(package private)  void getAction()
          Realizza la parte di protocollo Client-FrontEnd FrontEnd-ReplicaManager relativa ad una operazione di tipo GET.
(package private)  void listAction()
          Realizza la parte di protocollo Client-FrontEnd FrontEnd-ReplicaManager relativa ad una operazione di tipo LIST.
private  void lookupAction()
          Richiede al ReplicaManager corrente gli host degli altri Replica Manager ad esso noti.
(package private)  void putAction()
          Realizza la parte di protocollo Client-FrontEnd FrontEnd-ReplicaManager relativa ad una operazione di tipo PUT.
 void run()
          "start" del thread.
 
Methods inherited from class java.lang.Thread
, activeCount, checkAccess, countStackFrames, currentThread, destroy, dumpStack, enumerate, exit, getContextClassLoader, getName, getPriority, getThreadGroup, init, interrupt, interrupt0, interrupted, isAlive, isDaemon, isInterrupted, isInterrupted, join, join, join, nextThreadNum, registerNatives, resume, resume0, setContextClassLoader, setDaemon, setName, setPriority, setPriority0, sleep, sleep, start, stop, stop, stop0, suspend, suspend0, toString, yield
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

clienteSocket

java.net.Socket clienteSocket

replicaManagerSocket

java.net.Socket replicaManagerSocket

hostAttualeRm

java.net.InetAddress hostAttualeRm
Host relativo all'attuale Replica Manager.

hostIniziale

java.net.InetAddress hostIniziale
Host relativo al Replica Manager a cui si e' connessi prima di una serie di put.

padre

private FrontEnd padre
Riferimento all'oggetto "padre".

outClienteStream

java.io.ObjectOutputStream outClienteStream
"uscita" della socket, canale di comunicazione con il server (FE).

inClienteStream

java.io.ObjectInputStream inClienteStream
"ingresso" della socket, canale di comunicazione con il server (FE).

outRmStream

java.io.ObjectOutputStream outRmStream
"uscita" della socket, canale di comunicazione con il server (FE).

inRmStream

java.io.ObjectInputStream inRmStream
"ingresso" della socket, canale di comunicazione con il server (FE).

rmVisitati

java.util.Set rmVisitati
Insieme dei replica manager gia' visitati.

comando

int comando
Ultimo comando richiesto dall'utente. Insieme alla variabile success determina lo stato dello thread.

success

boolean success
Indica la terminazione con successo o meno dell'ultimo comando eseguito.

index

int index

msg

Messaggio msg

header

MsgHeader header

cid

Cid cid
Cid generato dall'ultimo comando PUT eseguito.

rmSuccess

java.util.Set rmSuccess
Insieme dei Replica Manager in cui si e' postato con successo uno stesso messaggio.

DEBUG

private static final boolean DEBUG
Flag per abilitare stampe di debugging su standard output e standard error.
Constructor Detail

FrontEndThread

public FrontEndThread(java.net.Socket clienteSocket,
                      FrontEnd padre)
Invoca il costruttore della classe Thread e crea un'istanza di FrontEndThread data la socket di connessione con il Client e un riferimento al FrontEnd "padre". Inizializza la variabile hostAttualeRm.
Parameters:
clienteSocket - socket di connessione con il cliente.
padre - riferimento al FrontEnd "padre".
Method Detail

listAction

void listAction()
          throws java.io.IOException,
                 java.lang.ClassNotFoundException
Realizza la parte di protocollo Client-FrontEnd FrontEnd-ReplicaManager relativa ad una operazione di tipo LIST.

getAction

void getAction()
         throws java.io.IOException,
                java.lang.ClassNotFoundException
Realizza la parte di protocollo Client-FrontEnd FrontEnd-ReplicaManager relativa ad una operazione di tipo GET.

putAction

void putAction()
         throws java.io.IOException,
                java.lang.ClassNotFoundException
Realizza la parte di protocollo Client-FrontEnd FrontEnd-ReplicaManager relativa ad una operazione di tipo PUT.

ackAction

void ackAction()
         throws java.io.IOException,
                java.lang.ClassNotFoundException
Invio al ReplicaManager un segnale di "acknoledge" ACK.

lookupAction

private void lookupAction()
Richiede al ReplicaManager corrente gli host degli altri Replica Manager ad esso noti. Tali host vengono aggiunti all'insieme di quelli noti in FrontEnd.hostsReplicaManager.

errorAction

void errorAction(int errorType)
Gestisce i casi d'errore.
Parameters:
errorType - identifica il tipo di errore che si e' verificato. Viene inviato al client Client che si comporterà di conseguenza.

cambiaReplicaManager

void cambiaReplicaManager(java.util.Set rmV)
Viene scelto in base ad una delle diverse politiche possibili un nuovo ReplicaManager che continui a fornire il servizio iniziato dal precedente servitore. Si crea una nuova connessione e si riparte dallo stato iniziale dello thread stesso. La scelta del nuovo Replica Manager può essere: - basata sull'ordine mantenuto nella rmTable del Front End; - random; - secondo criteri di valutazione del carico dei servitori noti.

chiudiConnessioneCliente

void chiudiConnessioneCliente()
Invocato in seguito a problemi di connessione lato client, o terminazione volontaria dell'applicazione del client stesso. Il thread termina senza eseguire nessun'altra istruzione, mentre il Front End si pone in attesa di altri client.

chiudiConnessioneReplicaManager

void chiudiConnessioneReplicaManager()
Vengono chiusi i precedenti stream e invocato il metodo cambiaReplicaManager(java.util.Set), nel tentativo di fornire una certa fault-tolerance.

chiudiTutto

void chiudiTutto()
Fa "pulizia", chiudendo tutti gli stream, client-socket compresa.

run

public void run()
"start" del thread.
Overrides:
run in class java.lang.Thread