A final decision derives terminal participant states.

highlighted = computed this step

Participant terminal states

After a final decision, every participant in this model reaches the same terminal state. The commit and abort traces show the two terminal outcomes side by side.

terminal states are derived\text{terminal states are derived}

Commit versus abort

The commit replay has 2 committed participants. The abort replay has 3 aborted participants.

committed=2,aborted=3\text{committed}=2,\quad \text{aborted}=3

two-phase commit is rendered here as a tiny exact FSM trace; timeouts, recovery, network partitions, availability, and database-product behavior are out of scope.

All yes commitseventcoordinatordecisionvotesparticipantsinitialinitpendingnoneP1:init, P2:initprepare CwaitingpendingnoneP1:prepared, P2:preparedvote P1 yeswaitingpendingP1:yesP1:voted_yes, P2:preparedvote P2 yeswaitingpendingP1:yes, P2:yesP1:voted_yes, P2:voted_yesdecide commitcommittedcommitP1:yes, P2:yesP1:committed, P2:committed participant statesparticipantvotestateP1yescommittedP2yescommitted compiled summaryfactvaluedecisioncommitoutcomecommitcoordinatorcommittedcommitAllowedyesabortReasonnone
No vote abortseventcoordinatordecisionvotesparticipantsinitialinitpendingnoneP1:init, P2:init, P3:initprepare CwaitingpendingnoneP1:prepared, P2:prepared, P3:preparedvote P1 yeswaitingpendingP1:yesP1:voted_yes, P2:prepared, P3:preparedvote P2 nowaitingpendingP1:yes, P2:noP1:voted_yes, P2:voted_no, P3:prepareddecide abortabortedabortP1:yes, P2:noP1:aborted, P2:aborted, P3:aborted participant statesparticipantvotestateP1yesabortedP2noabortedP3noneaborted compiled summaryfactvaluedecisionabortoutcomeabortcoordinatorabortedcommitAllowednoabortReasonno_vote

Summary

Terminal participant states are outputs of the replay, not handwritten labels. Note: partial failures after decision are outside this book.

terminal labels are recomputed\text{terminal labels are recomputed}