我试图了解三阶段提交如何避免阻塞
考虑以下两种失败情况:
场景 1:在第 2 阶段,协调器向所有群组发送 preCommit 消息,并且已从群组 A 之外的所有群组获得确认。网络问题阻止群组 A 接收协调器的 preCommit 消息。队列 A 等待 preCommit 消息超时并选择中止。然后协调者和队列 A 都崩溃了。
场景 2:协议到达阶段 3。协调器向队列 A 发送一个 doCommit 消息。但在它可以发送更多的 doCommit 消息之前,协调器崩溃了。群组 A 提交其部分事务然后崩溃。
据我所知,其余队列在场景 1 和场景 2 结束时具有完全相同的状态。因此,当恢复协调员介入时,它如何从剩余队列中找出我们是否处于场景 1 并中止或我们在场景 2 中并提交,从而避免阻塞?