Three-phase commit protocol: Difference between revisions

Content deleted Content added
Monkbot (talk | contribs)
No edit summary
Line 1:
In [[computer networking]] and [[database]]s, the '''three-phase commit protocol''' ('''3PC''')<ref name=3PC>{{cite journal
| last = Skeen
| first = Dale
Line 21:
 
===Coordinator===
# The coordinator receives a transaction request. If there is a failure at this point, the coordinator aborts the transaction (i.e. upon recovery, it will consider the transaction aborted). Otherwise, the coordinator sends a '''canCommit?''' message to the cohorts and moves to the waiting state.
# If there is a failure, timeout, or if the coordinator receives a '''No''' message in the waiting state, the coordinator aborts the transaction and sends an '''abort''' message to all cohorts. Otherwise the coordinator will receive '''Yes''' messages from all cohorts within the time window, so it sends '''preCommit''' messages to all cohorts and moves to the prepared state.
# If the coordinator succeeds in the prepared state, it will move to the commit state. However if the coordinator times out while waiting for an acknowledgement from a cohort, it will abort the transaction. In the case where all acknowledgements are received, the coordinator moves to the commit state as well.
 
===Cohort===
# The cohort receives a '''canCommit?''' message from the coordinator. If the cohort agrees it sends a '''Yes''' message to the coordinator and moves to the prepared state. Otherwise it sends a '''No''' message and aborts. If there is a failure, it moves to the abort state.
# In the prepared state, if the cohort receives an '''abort''' message from the coordinator, fails, or times out waiting for a commit, it aborts. If the cohort receives a '''preCommit''' message, it sends an '''[[acknowledgement (data networks)|ACK]]''' message back and awaits a final '''commit''' or '''abort'''.
# If, after a cohort member receives a '''preCommit''' message, the coordinator fails or times out, the cohort member goes forward with the commit.
 
==Motivation==
Line 56:
 
==References==
{{Reflist}}
 
{{reflist}}
 
==See also==