Class Log

java.lang.Object
  |
  +--Log

public class Log
extends java.lang.Object
implements java.io.Serializable

Implementa l'insieme log che fa parte dello stato di ogni RM.

Author:
Matteo Albini, Mauro Barbieri, Francesco Baschieri
See Also:
Serialized Form

Field Summary
private  java.util.Set log
          Implementa l'insieme log con un oggetto compatibile con l'interfaccia java.util.Set.
 
Constructor Summary
Log()
          Crea un'istanza di Log vuoto.
 
Method Summary
 void addRecord(LogRecord lr)
          Aggiunge un log-record all'insieme log.
 boolean addUpdateRecord(UpdateRecord ur)
          Aggiunge un UpdateRecord all'insieme se non e' gia' presente un LogRecord con lo stesso cid.
 java.util.SortedSet compare(MultipartTimestamp ts)
          Ritorna Un insieme ORDINATO che contiene tutte le occorrenze di UpdateRecord contenute nel log che hanno il campo prev minore o uguale al MultipartTimestamp passato come argomento
 boolean containsAckWithCid(Cid cid)
          Ritorna true se esiste nell'insieme log un record di tipo ack e il cui cid e' uguale a quello passato come argomento.
 boolean containsUpdateWithCid(Cid cid)
          Ritorna true se esiste nell'insieme log un record di tipo update e il cui cid e' uguale a quello passato come argomento.
private  boolean isKnown(LogRecord r, MultipartTimestamp[] ts_table)
          Ritorna true se il log-record passato come argomento è conosciuto da tutti i RM.
 void logAckGC(MultipartTimestamp[] ts_table, Inval inv)
          Elimina dall'insieme log i log-record di tipo ack conosciuti da tutti i RM.
 void logUpdateGC(MultipartTimestamp[] ts_table)
          Elimina dall'insieme log i log-record di tipo update conosciuti da tutti i RM.
static void main(java.lang.String[] args)
          Rende la classe un'applicazione stand-alone per il testing.
 void merge(Log l, MultipartTimestamp rep_ts)
          Effettua il merge con l'insieme Log passato come argomento.
 java.lang.String toString()
          Ridefinisce l'omonimo metodo della classe java.lang.Object per rappresentare come stringa un'istanza di Log.
 
Methods inherited from class java.lang.Object
, clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, wait, wait, wait
 

Field Detail

log

private java.util.Set log
Implementa l'insieme log con un oggetto compatibile con l'interfaccia java.util.Set. In questo modo è possibile usare i metodi dell'interfaccia java.util.Set indipendentemente dall'implementazione effettivamente scelta in fase di istanziazione dell'oggetto.
Constructor Detail

Log

public Log()
Crea un'istanza di Log vuoto. L'implementazione scelta attualmente e' un'istanza della classe java.util.HashSet sincronizzata nell'accesso per rendere il log thread-safe.
Method Detail

addRecord

public void addRecord(LogRecord lr)
Aggiunge un log-record all'insieme log.
Parameters:
lr - LogRecord da aggiungere all'insieme log.

addUpdateRecord

public boolean addUpdateRecord(UpdateRecord ur)
Aggiunge un UpdateRecord all'insieme se non e' gia' presente un LogRecord con lo stesso cid.
Parameters:
ur - UpdateRecord da aggiungere all'insieme.
Returns:
true se l'UpdateRecord e' stato aggiunto, false se e' gia' presente un LogRecord con lo stesso cid.

merge

public void merge(Log l,
                  MultipartTimestamp rep_ts)
Effettua il merge con l'insieme Log passato come argomento.
Parameters:
l - Log con cui fare il merge.
rep_ts - timestamp del RM che effettua il merge.

logUpdateGC

public void logUpdateGC(MultipartTimestamp[] ts_table)
Elimina dall'insieme log i log-record di tipo update conosciuti da tutti i RM.
Parameters:
ts_table - array dei multipart timestamp noti dei RM.

logAckGC

public void logAckGC(MultipartTimestamp[] ts_table,
                     Inval inv)
Elimina dall'insieme log i log-record di tipo ack conosciuti da tutti i RM.
Parameters:
ts_table - array dei multipart timestamp noti dei RM.
inv - insieme inval dello stato del RM.

containsAckWithCid

public boolean containsAckWithCid(Cid cid)
Ritorna true se esiste nell'insieme log un record di tipo ack e il cui cid e' uguale a quello passato come argomento.
Parameters:
cid - cid da controllare.
Returns:
true se esiste nell'insieme log un record di tipo ack e il cui cid e' uguale a quello passato come argomento.

containsUpdateWithCid

public boolean containsUpdateWithCid(Cid cid)
Ritorna true se esiste nell'insieme log un record di tipo update e il cui cid e' uguale a quello passato come argomento.
Parameters:
cid - cid da controllare.
Returns:
true se esiste nell'insieme log un record di tipo update e il cui cid e' uguale a quello passato come argomento.

isKnown

private boolean isKnown(LogRecord r,
                        MultipartTimestamp[] ts_table)
Ritorna true se il log-record passato come argomento è conosciuto da tutti i RM.
Parameters:
r - log-record da verificare.
ts_table - array dei multipart timestamp noti dei RM.
Returns:
true se il log-record passato come argomento è conosciuto da tutti i RM.

compare

public java.util.SortedSet compare(MultipartTimestamp ts)
Ritorna Un insieme ORDINATO che contiene tutte le occorrenze di UpdateRecord contenute nel log che hanno il campo prev minore o uguale al MultipartTimestamp passato come argomento
Parameters:
ts - MultipartTimestamp su cui effettuare il controllo
Returns:
comp Sottoinsieme del Log contenente gli update che hanno il campo prev <= ts

toString

public java.lang.String toString()
Ridefinisce l'omonimo metodo della classe java.lang.Object per rappresentare come stringa un'istanza di Log. Usato principalmente per il debugging. La rappresentazione scelta e' del tipo :
 	log : <num_el> elementi :
logRecord_1
logRecord_2
...
logRecord_n
Returns:
la stringa che rappresenta l'istanza di Log.
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.