2 phase-commit

13
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

description

 

Transcript of 2 phase-commit

Page 1: 2 phase-commit

Commit a due fasi

Davide CarboniCorso di Computazione su Rete

Laurea specialistica in Tecnologie InformaticheFacoltà Scienze MM.FF.NN

Università di CagliariAA 2007/2008

Page 2: 2 phase-commit

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

Page 3: 2 phase-commit

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)

Page 4: 2 phase-commit

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

Page 5: 2 phase-commit

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

Page 6: 2 phase-commit

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

Page 7: 2 phase-commit

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

Page 8: 2 phase-commit

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

Page 9: 2 phase-commit

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.

Page 10: 2 phase-commit

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

Page 11: 2 phase-commit

Stati del partecipanteready

agreed

aborted

done

riceve COMMIT-REQ valida

riceve un ROLLBACK

commiting

riceve COMMIT

riceve COMMIT-REQ non accettabile

spedisce COMMITED

Page 12: 2 phase-commit

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

Page 13: 2 phase-commit

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)