在公司,同事在使用teata过程中,回滚出现Can not update sharding key...,之后无限循环报错重试.无头绪,找到了我.
字面上看是其整合shardingsphere(shardingJDBC),反向生成回滚语句更新了sharding key(分片键值),触发sharding的规则约束.道理很容易理解.如果sharding key做了变更,那他所对应的分区就可能变动.
如果,主键和sharding key 不一致时,即使seata的反向回滚update的sql 将sharding key 的原值附加上去,亦会触发sharding jdbc的规则约束报错.
seata相关代码比较简单,有兴趣的可以看下MySQLUndoUpdateExecutor 和SQLUndoLog.
设想,如果我是seata的架构设计者,对这类情况势必会有相关配置处理.遂查找seata相关配置项,发现seata.client.undo.only-care-update-columns,貌似很有相关性.
增加配置seata.client.undo.only-care-update-columns=true.问题解决.
记录: seata回滚 Can not update sharding key的解决
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
推荐阅读更多精彩内容
- 一.整体搭建准备 一.1.下载seata-server服务端(地址:https://seata.io/zh-cn...
- 微服务流行的时代,解决了很多企业的业务问题,也带来的一些技术问题,例如最常见的分布式事务问题。当Seata的出现,...
- 微服务流行的时代,解决了很多企业的业务问题,也带来的一些技术问题,例如最常见的分布式事务问题。当Seata的出现,...