Class StatoRM

java.lang.Object
  |
  +--StatoRM

public class StatoRM
extends java.lang.Object

Implementa le variabili che definiscono lo stato di un RM.

Author:
Mauro Barbieri, Francesco Baschieri

Field Summary
 java.net.InetAddress[] address_table
          Array che contiene gli indirizzi dei RM noti a questo Replica Manager.
 boolean GOSSIP_BY_NEED
          Flag che indica che i thread CallMsgManager devono effettuare gossip by need.
 int GOSSIP_RATE
          Indica il tempo (in millisecondi) intercorrente tra due Gossip periodici successivi.
 int GOSSIP_SLEEP
          Rappresenta il numero di millisecondi che un thread CallMsgManager attende (se il flag GOSSIP_BY_NEED e' settato a false) prima di ritestare se puo' eseguire una query la cui esecuzione deve essere ritardata fino a che lo stato del RM non e' aggiornato tanto quanto quello del FE che l'ha richiesta.
 Inval inval
          Insieme dei call identifier che identificano le operazioni di post avvenute stabilmente e riflesse nell'insieme news.
 Log log
          Insieme log del RM.
 News news
          Insieme dei messaggi postati stabilmente sul RM dai FE.
private  int numRM
          Indica il numero di Replica Manager del sistema.
 int PORTA_FE
          Numero di porta per le connessioni con i FE.
 int PORTA_GOSSIP
          Numero di porta per connessioni di risposta al gossip di altri RM.
 MultipartTimestamp rep_ts
          Multipart timestamp del RM.
private  int rnode
          Identifica il RM, deve essere compreso tra 0 e numRM-1.
 MultipartTimestamp[] ts_table
          Array dei timestamp piu' recenti ricevuti dai RM. ts_table(p) rappresenta il piu' recente multipart timestamp ricevuto dal RM di indice p.
 MultipartTimestamp val_ts
          Multipart timestamp associato all'insieme dei messaggi postati stabilmente sul RM dai FE.
 
Constructor Summary
StatoRM(int numRM, int rnode, News news, java.net.InetAddress[] tab)
          Crea un'istanza di statoRM con rnode e news specificati.
 
Method Summary
 MultipartTimestamp advanceAndCloneLocalTimestamp()
          Incrementa di uno il local timestamp del RM, cioe' il timestamp di indice rnode di rep_ts, e restituisce una nuova istanza di MultipartTimestamp copia esatta di rep_ts.
 void advanceLocalTimestamp()
          Incrementa di uno il local timestamp del RM, cioe' il timestamp di indice rnode di rep_ts.
 int getNumRM()
          Restituisce il numero di Replica Manager del sistema.
 int getRNode()
          Restituisce l'intero che identifica il RM.
static void main(java.lang.String[] args)
          Rende la classe un'applicazione stand-alone per il testing.
 java.lang.String toString()
          Ridefinisce l'omonimo metodo della classe java.lang.Object per rappresentare come stringa uno StatoRM.
 
Methods inherited from class java.lang.Object
, clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, wait, wait, wait
 

Field Detail

numRM

private int numRM
Indica il numero di Replica Manager del sistema. E' una variabile settata dal costruttore dell'oggetto e accessibile solo in lettura mediante il metodo getNumRM().

rnode

private int rnode
Identifica il RM, deve essere compreso tra 0 e numRM-1. E' una variabile settata dal costruttore dell'oggetto e accessibile solo in lettura mediante il metodo getRNode().

log

public Log log
Insieme log del RM. Contiene le operazioni di update e gli acknoledge ottenuti dai call messages e dai gossip messages. La variabile e' public poiche' la classe Log e' gia' thread-safe.

rep_ts

public MultipartTimestamp rep_ts
Multipart timestamp del RM. La variabile e' public poiche' la classe MultipartTimestamp e' gia' thread-safe.

news

public News news
Insieme dei messaggi postati stabilmente sul RM dai FE.

val_ts

public MultipartTimestamp val_ts
Multipart timestamp associato all'insieme dei messaggi postati stabilmente sul RM dai FE. La variabile e' public poiche' la classe MultipartTimestamp e' gia' thread-safe.

inval

public Inval inval
Insieme dei call identifier che identificano le operazioni di post avvenute stabilmente e riflesse nell'insieme news. La variabile e' public poiche' la classe Inval e' gia' thread-safe.

ts_table

public MultipartTimestamp[] ts_table
Array dei timestamp piu' recenti ricevuti dai RM. ts_table(p) rappresenta il piu' recente multipart timestamp ricevuto dal RM di indice p. La variabile e' public ed e' quindi necessario sincronizzare gli accessi da parte di thread concorrenti. La sincronizzazione e' lasciata agli utilizzatori della variabile che devono utilizzarla solo dopo averla acquisita mediante il costrutto synchronized.

address_table

public java.net.InetAddress[] address_table
Array che contiene gli indirizzi dei RM noti a questo Replica Manager.

PORTA_GOSSIP

public int PORTA_GOSSIP
Numero di porta per connessioni di risposta al gossip di altri RM. Valore di default 54616.

PORTA_FE

public int PORTA_FE
Numero di porta per le connessioni con i FE. Valore di default 54950.

GOSSIP_RATE

public int GOSSIP_RATE
Indica il tempo (in millisecondi) intercorrente tra due Gossip periodici successivi.

GOSSIP_BY_NEED

public boolean GOSSIP_BY_NEED
Flag che indica che i thread CallMsgManager devono effettuare gossip by need. Se settato a true, nel caso una query non possa essere eseguita perche' lo stato del FE e' piu' aggiornato di quello del RM, il thread CallMsgManager richiede esplicitamente un aggiornamento agli altri RM mediante il protocollo di gossip. Se settato a false, nel caso una query non possa essere eseguita perche' lo stato del FE e' piu' aggiornato di quello del RM, il thread CallMsgManager si sospende per GOSSIP_SLEEP millisecondi in attesa che altri thread aggiornino lo stato del RM. Terminata l'attesa riverifica se puo' eseguire la query, in caso contrario ripete il procedimento di attesa e test. Il valore di default e' true.
See Also:
CallMsgManager, GOSSIP_SLEEP, CallMsgManager.setGossipByNeed(boolean), CallMsgManager.getGossipByNeed()

GOSSIP_SLEEP

public int GOSSIP_SLEEP
Rappresenta il numero di millisecondi che un thread CallMsgManager attende (se il flag GOSSIP_BY_NEED e' settato a false) prima di ritestare se puo' eseguire una query la cui esecuzione deve essere ritardata fino a che lo stato del RM non e' aggiornato tanto quanto quello del FE che l'ha richiesta. Il valore di default e' 1000 millisecondi.
See Also:
CallMsgManager, GOSSIP_BY_NEED, CallMsgManager.setGossipSleep(int), CallMsgManager.getGossipSleep()
Constructor Detail

StatoRM

public StatoRM(int numRM,
               int rnode,
               News news,
               java.net.InetAddress[] tab)
        throws InvalidReplicaManagerIdException
Crea un'istanza di statoRM con rnode e news specificati. Deve essere specificato anche il numero di RM del sistema. Gli insiemi log e inval sono inizialmente vuoti, rep_ts e val_ts contengono valori nulli e ts_table contiene tutti timestamp nulli.
Parameters:
numRM - numero di RM presenti nel sistema.
rnode - indice che identifica il RM. Deve essere compreso nell'intervallo [0,numRM-1] altrimenti e' sollevata un'eccezione InvalidReplicaManagerIdException.
news - riferimento all'insieme dei messaggi postati stabilmente sul RM.
Throws:
InvalidReplicaManagerIdException - se l'argomento rnode non e' compreso nell'intervallo [0,numRM-1].
Method Detail

getRNode

public int getRNode()
Restituisce l'intero che identifica il RM.
Returns:
l'intero che identifica il RM.

getNumRM

public int getNumRM()
Restituisce il numero di Replica Manager del sistema.
Returns:
il numero di Replica Manager del sistema.

advanceLocalTimestamp

public void advanceLocalTimestamp()
Incrementa di uno il local timestamp del RM, cioe' il timestamp di indice rnode di rep_ts. Lo stesso risultato e' ottenibile con (se stato e' un'istanza di StatoRM):
	stato.rep_ts.incElementAt(stato.getRNode()) 


advanceAndCloneLocalTimestamp

public MultipartTimestamp advanceAndCloneLocalTimestamp()
Incrementa di uno il local timestamp del RM, cioe' il timestamp di indice rnode di rep_ts, e restituisce una nuova istanza di MultipartTimestamp copia esatta di rep_ts.
See Also:
CallMsgManager, CallMsgManager.processPut(MultipartTimestamp), CallMsgManager.processAck()

toString

public java.lang.String toString()
Ridefinisce l'omonimo metodo della classe java.lang.Object per rappresentare come stringa uno StatoRM. Usato principalmente per il debugging. La rappresentazione scelta e' del tipo :
 numRM : <numRM> 
rnode : <rnode>
<log>
rep_ts : <rep_ts>
val_ts : <val_ts>
<inval>
ts_table : <ts_table>
address_table : <address_table>
Returns:
la stringa che rappresenta lo StatoRM.
Overrides:
toString in class java.lang.Object

main

public static void main(java.lang.String[] args)
Rende la classe un'applicazione stand-alone per il testing.