在本参与者cancommit返回yes,其他参与者有返回失败的情况下,本参与者没有收到协调者的预提交指令,是会提交事务还是回滚事务呢?
来源:5-3 二阶段提交的缺陷与三阶段提交的改善与不足

是个么有感情的杀手
2023-04-03
!](http://img.mukewang.com/szimg/642af32109df986e14300803.jpg)
这两页ppt超时的情况应该是一样的。
但是在第一张ppt中,视频中说参与者2会超时提交。参与者1中断事务,参与者2超时不是也会中断事务吗?所以也就没有一致性的问题了。
第二张ppt中,视频中说参与者b会中断事务。
这两张ppt的说法产生了冲突,帮忙看看吗?
写回答
1回答
-
大能老师
2023-04-10
我们看第一张图,这里主要表达的场景是在特殊的场景下,会出现不一致的情况:
在完成征集投票之后,协调者发出了「终止事务」的命令,
对于参与者1,它正常收到了该命令,所以参与者1要执行rollback
对于参与者2,它没有正常收到该命令,但由于有超时机制,所以参与者2会按征集投票阶段反馈的结果去执行。也就是说,如果参与者2在征集投票阶段反馈的是「yes」,那么这时它会commit,也就出现了不一致的结果;反之,如果参与者2在征集投票阶段反馈的是「no」,那么这时它也会rollback,刚好两者一致。
所以,从上面的分析我们可以看到,对于参与者2来说,当出现接收指令超时的时候,它该commit还是rollback,并不是固定的,而是取决于它第一步反馈的是什么。
012023-04-10
相似问题