Three-Phase Commit
(1)
- 协调员和每个参与者的状态
- 满足以下两个条件:
- 没有一个状态可以直接转换到COMMIT或ABORTED状态。
- 没有哪个状态是不可能做出最终决定的,并且可以从这个状态转换到COMMIT状态。
(2)
3PC – Resolution in case of failures
- 总是可以回到已知的状态
- 如果任何参与者Q在INIT状态中:安全放弃。 这是因为只有在PRE COMMIT i中没有其他参与者的情况下,A才能在INIT中
- 如果所有参与者都处于READY:Abort。 因为如果P已经崩溃并在以后恢复,那么P和其他人都不知道P可能恢复的状态。 如果P恢复到INIT,则中止是好的。 即使PRECOMMIT,放弃也可以。
- 与2PC不同,坠毁的参与者可以恢复到COMMIT状态,而其他人则在READY状态。 在3PC中,如果操作进程处于READY状态,则其他崩溃进程不能恢复到除INIT,ABORT,PRECOMMIT之外的状态
- 如果P可以联系的进程在PRECOMMIT中,那么可以安全地执行COMMIT