在公司,同事在使用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的出现,...