请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

在本参与者cancommit返回yes,其他参与者有返回失败的情况下,本参与者没有收到协调者的预提交指令,是会提交事务还是回滚事务呢?

图片描述!](http://img1.sycdn.imooc.com//szimg/642af32109df986e14300803.jpg)图片描述这两页ppt超时的情况应该是一样的。
但是在第一张ppt中,视频中说参与者2会超时提交。参与者1中断事务,参与者2超时不是也会中断事务吗?所以也就没有一致性的问题了。
第二张ppt中,视频中说参与者b会中断事务。
这两张ppt的说法产生了冲突,帮忙看看吗?

正在回答 回答被采纳积分+3

1回答

大能老师 2023-04-10 01:02:42

我们看第一张图,这里主要表达的场景是在特殊的场景下,会出现不一致的情况:

在完成征集投票之后,协调者发出了「终止事务」的命令,

对于参与者1,它正常收到了该命令,所以参与者1要执行rollback

对于参与者2,它没有正常收到该命令,但由于有超时机制,所以参与者2会按征集投票阶段反馈的结果去执行。也就是说,如果参与者2在征集投票阶段反馈的是「yes」,那么这时它会commit,也就出现了不一致的结果;反之,如果参与者2在征集投票阶段反馈的是「no」,那么这时它也会rollback,刚好两者一致。

所以,从上面的分析我们可以看到,对于参与者2来说,当出现接收指令超时的时候,它该commit还是rollback,并不是固定的,而是取决于它第一步反馈的是什么。


0 回复 有任何疑惑可以回复我~
  • 在第二张ppt中,参与者B在征集投票阶段反馈的是[yes],按照以上的说法,参与者B应该是commit而不是中断,这里和视频中的表述有点冲突。还是我哪里理解有误。
    回复 有任何疑惑可以回复我~ 2023-04-10 08:35:27
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信