同一条记录多次修改分支回滚时执行顺序异常导致update time不一致出现脏写回滚失败 #7866
|
**环境说明:**生产环境中业务服务和seata server都是单节点部署,业务表中存在update time时间戳(6),使用postgresql 15数据库。 2025-12-10 11:13:57.729 INFO 1 TID:N/A --- [rpcDispatch_RMROLE_1_2_16] o.a.s.r.d.u.AbstractUndoExecutor : Field not equals, name update_datetime, old value 2025-12-10 11:13:57.671, new value 2025-12-10 11:13:57.7 2025-12-10 11:13:57.730 ERROR 1 TID:N/A --- [rpcDispatch_RMROLE_1_2_16] o.a.s.r.d.DataSourceManager : branchRollback failed. branchType:[AT], xid:[10.232.68.199:8091:5567173722488930773], branchId:[5567173722488930775], resourceId:[jdbc:postgresql://xxxxx:54321/haic], applicationData:[null]. reason:[Branch session rollback failed because of dirty undo log, please delete the relevant undolog after manually calibrating the data. xid = 10.232.68.199:8091:5567173722488930773 branchId = 5567173722488930775] 问题说明:业务服务A更新同一条记录2次,对应注册2个branch id,业务库中undo log表中存在2条log,branch id不同。日志显示update_datetime, old value 2025-12-10 11:13:57.671, new value 2025-12-10 11:13:57.7不一致,与undo log表对比,可以确认是rm回滚时,先回滚了最早修改的第一条记录,导致update time与当前记录不一致; 但是seata server未启用并行发送消息,branchsession 也做了逆序循环,理论上rm端应该是先收到最后一条branch才对,但是现象是发生了乱序。请问还有什么问题可能导致tc发送给rm的2条branch乱序? seata 客户端配置: |
Replies: 2 comments 5 replies
|
Is the time precision set by |
|
seata server是2.2.0,客户端sdk 2.2.0,因为不太确认是不是问题,所以提了一个公开讨论话题 |


Please provide the logs showing the rollback sequence on the server side. There should be no rollback sequence issues in version 2.2.0.