Post on 05-Dec-2014
description
Commit a due fasi
Davide CarboniCorso di Computazione su Rete
Laurea specialistica in Tecnologie InformaticheFacoltà Scienze MM.FF.NN
Università di CagliariAA 2007/2008
A cosa serve● Il protocollo del commit a 2 fasi è un algoritmo
distribuito che impegna più attori a compiere una transazione
● I risultati possibili sono due:– o tutti gli attori partecipano alla transazione o
nessuno di loro e in questo caso la transazione fallisce
Le due fasi● Nella prima fase il coordinatore della
transazione contatta tutti i partecipanti richiedendo la transazione
● Nella seconda fase la transazione viene completata
● Una transazione è più di un semplice scambio di dati, essa produce un trasferimento di una qualche risorsa non clonabile (esempio denaro)
Ipotesi di funzionamento● Esiste un nodo detto coordinatore● Esistono N nodi partecipanti detti anche
COHORT● Ogni nodo è in grado di mantenere una
memoria di massa (es. un DB)● Ogni nodo tiene un log di ciò che scrive nella
memoria di massa
Altre ipotesi● Nessun nodo se va in crash resta in crash
all'infinito– questa ipotesi è forte e non permette l'uso del
protocollo se uno dei nodi ad esempio esplode● Due nodi possono sempre comunicare fra loro
– questa non è un'ipotesi molto forte nella commutazione a pacchetto
Request Phase1. Il coordinatore spedisce un messaggio COMMIT-REQ ad ogni
partecipante 2. Il coordinatore attende che tutti i partecipanti rispondano
A)se uno solo dei partecipanti risponde ABORT allora la transazione fallisce e si procede allo step 5
B)se tutti i partecipanti rispondono AGREED la transazione può andare avanti e si procede allo step 3
C)se dopo un certo tempo T non tutti hanno risposto allora il coordinatore può spedire ROLLBACK a tutti oppure COMMIT-REQ a quelli che devono ancora rispondere
Commit Phase● 3. Registra nel Log un messaggio COMPLETE che indica che
la transazione procede e spedisce ai partecipanti il messaggio COMMIT
● 4. Attende che ogni partecipante risponda, se dopo un certo intervallo qualcuno non ha risposto ritrasmette COMMIT a questi. Quando tutte le risposte arrivano la transazione è conclusa.
● 5. Spedisce ROLLBACK a tutti i partecipanti e la transazione fallisce e i valori precedenti vengono ripristinati da tutti i partecipanti grazie ai log
Protocollo partecipante● 1. Se riceve dal coordinatore una COMMIT-
REQ per una transazione t allora...– se t è sconosciuta o non valida per il partecipante
risponde con ABORT– se t è approvata dal partecipante vengono messe
nel log le operazioni corrispondenti e risponde al coordinatore con AGREED
Protocollo Partecipante● 2. Se riceve ROLLBACK allora rimuove lo stato
di t dai log UNDO e REDO ripristinando i precedenti valori
● 3. Se riceve COMMIT il database viene aggiornato con il nuovo valore e la transazione rilascia i lock. Se la transazione è già commited non viene fatto nulla. Risponde COMMITED in risposta.
Stati del coordinatorequery
wait
aborted
prepared
done
spedisce COMMIT-REQ
riceve un ABORT
riceve tutti gli AGREED
commiting
spedisce COMMIT
riceve tutti i COMMITED
commit phase
request phase
Stati del partecipanteready
agreed
aborted
done
riceve COMMIT-REQ valida
riceve un ROLLBACK
commiting
riceve COMMIT
riceve COMMIT-REQ non accettabile
spedisce COMMITED
Enunciato di Correttezza● En. 1: se uno dei partecipanti completa la
transazione allora tutti la completano● Dim.: se un partecipante ha completato la
transazione allora il coordinatore è nella fase di commit quindi tutti i partecipanti hanno già preparato la transazione. Un crash a questo punto è ininfluente perchè i dati sono nella memoria permanente
Svantaggi● Il protocollo a due fasi è un protocollo bloccante: un nodo resta
bloccato finche non arriva un messaggio.● Un nodo resta in attesa del commit anche se tutti gli altri nodi
hanno fallito, se il coordinatore va in crash per sempre alcuni nodi possono restare bloccati all'infinito (ma un crash infinito è contro l'ipotesi)