[seata]rm注册成功后,提交本地事务,发现本地事务数据库那块提交失败或者事务体积成功然而后面方法结束前程序有报错

2022-12-30 611 views
2

rm注册成功后,提交本地事务,发现本地事务数据库那块提交失败或者事务体积成功然而后面方法结束前程序有报错, 那么是rm向tc报告吗,还是抛出异常给tm,tm捕获异常后,发起回滚决议给tc,tc再通知rm回滚?

回答

0

注册完成后提交本地事务失败,会触发本地事务自动回滚,同时会告知这个tc这个分支已经失败了,不需要二阶段驱动回滚了。 但如果是因为rm网络问题提交本地事务失败,那么report到tc也可能失败,如果失败就会导致如下可能 由于已经注册了分支,tm向tc发起回滚决议时会下发到此rm进行回滚动作,但由于rm侧本地事务已经回滚,所以不存在undolog,导致会误认为本地事务可能存在悬挂,会插入一条status=1的undolog做防悬挂使用(默认7天后自动删除),不影响数据一致性

4

如果本地事务提交成功,分支走到方法最后报错了呢,这个时候还会上报tc吗,还是由tm抓取上报

5

本地事务提交成功,方法报错就抛异常让tm感知到,决议为回滚让tc去驱动分支事务的回滚

0

如果本地事务提交成功,这时候向tm去report,结果中途失败,假设最后其他分支没有错误,那么最后tc会下发全局二阶段提交report中途失败的那个分支吗

9

会有重试,如果多次决议重试依旧失败,那么会执行超时回滚