[seata]回滚的时候afterImage与当前值很大可能不一致

2024-02-21 742 views
8

没有并发,单个更新语句,每次对值 +1,比如执行第一次之后的值为2,记录的afterImage是2,执行第二次之后的值为3,记录的afterImage是3,回滚的时候通过dataValidationAndGoOn方法比较,第一次的afterImage(2)跟当前值(3)肯定对不上啊? 请问下这个是我理解有误还是用法不对呢?最终会一直报错脏写Has dirty records when undo.,无法回滚 image

seata版本:1.6.1

回答

9

日志拿出来,多次更新是在一个全局事务里多个分支,还是多个全局事务中一个分支,都要讲清楚

6

强烈怀疑是全局事务里多个分支,然后tc的branchtable中的时间戳没有指定长度,导致回滚的时候顺序错乱,自行对比最新的branch table去校准,而不是拿网上哪些落后的branch table去建表

2

确实是一个全局事务里多个分支,我只发送了一次请求,就出现回滚问题。详细日志我明天查一下

8

感谢,确认了,确实是我们这边之前的同学没有对gmt_create, gmt_modified 字段设置精度,但还有其他问题导致脏写,我需要继续排查是什么原因引起的,本issue我关掉