1. Commit a due fasi
Davide Carboni
Corso di Computazione su Rete
Laurea specialistica in Tecnologie Informatiche
Facoltà Scienze MM.FF.NN
Università di Cagliari
AA 2007/2008
2. 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
3. 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)
4. 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
5. 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
6. Request Phase
1. 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
7. 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
8. 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
9. 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.
10. Stati del coordinatore
request phase
query commit phase
spedisce COMMIT-REQ
wait prepared
riceve tutti gli AGREED
riceve un ABORT spedisce COMMIT
commiting
riceve tutti i COMMITED
aborted
done
11. Stati del partecipante
ready riceve COMMIT-REQ non accettabile
aborted
riceve COMMIT-REQ valida
riceve un ROLLBACK
agreed
riceve COMMIT
spedisce COMMITED
commiting done
12. 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
13. 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)