开发者社区 > 云原生 > 正文

数据验证和GoOn存在问题

包名:io.seata.rm.datasource.undo

类名:AbstractUndoExecutor

方法:dataValidationAndGoOn

这个方法有问题,这个方法的第二个if是这样写的

// Validate if data is dirty. TableRecords currentRecords = queryCurrentRecords(conn); // compare with current data and after image. if (!DataCompareUtils.isRecordsEquals(afterRecords, currentRecords))

逻辑是查出现在表的内容和修改后的(after image)进行比较,如果相同执行回滚, 可是这里永远不会相同,因为after镜像保存的是修改的列,而现在查出的(currentRecords)是全部的列,所以永远不会相同,所以就永远不会回滚了!

期待可以修改一下代码

环境信息

JDK version : 1.8 OS : windows Others: no

原提问者GitHub用户weibergit

展开
收起
学习娃 2023-06-14 16:41:49 37 0
1 条回答
写回答
取消 提交回答
  • 请参阅isRecordsEquals-->compareRows,仅检查更改的列。

    原回答者GitHub用户zjinlei

    2023-06-14 17:18:18
    赞同 展开评论 打赏
问答地址:

阿里云拥有国内全面的云原生产品技术以及大规模的云原生应用实践,通过全面容器化、核心技术互联网化、应用 Serverless 化三大范式,助力制造业企业高效上云,实现系统稳定、应用敏捷智能。拥抱云原生,让创新无处不在。

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载