[1][2][3] However, it is not resilient to all possible failure configurations, and in rare cases, manual intervention is needed to remedy an outcome.
Log records, which are typically slow to generate but survive failures, are used by the protocol's recovery procedures.
If the coordinator received an agreement message from all participants during the commit-request phase: If any participant votes No during the commit-request phase (or the coordinator's timeout expires): An * next to the record type means that the record is forced to stable storage.
The relevant TMs communicate among themselves to execute the 2PC protocol schema above, "representing" the respective participants, for terminating that transaction.
[2][3][5] An assumption about the outcome of transactions, either commit, or abort, can save both messages and logging operations by the participants during the 2PC protocol's execution.
Typically a penalty of additional operations is paid during recovery from failure, depending on optimization type.
The Tree 2PC protocol[2] (also called Nested 2PC, or Recursive 2PC) is a common variant of 2PC in a computer network, which better utilizes the underlying communication infrastructure.
Agreement messages (Yes votes) start to propagate from all the leaves, each leaf when completing its tasks on behalf of the transaction (becoming ready).
The coordinator is determined dynamically by racing agreement messages over the transaction tree, at the place where they collide.