[seata]在AT模式下没有任何使用tcc的相关注解时,SpringFenceHandler也会被加载并启用,由于没有tcc_fence_log表进而报错;以及SqlServer语法兼容问题

2024-05-09 636 views
7
Ⅰ. Issue Description

SqlServer是不支持limit关键词的。默认为AT模式下,在启动后会主动查询tcc_fence_log这张在TCC模式下才使用的表 image image

Ⅱ. Describe what happened

image

Ⅵ. Environment:
  • JDK version(e.g. java -version): 1.8
  • Seata client/server version: 1.6.1
  • Database version: SqlServer
  • SpringBoot:2.7.10
  • Springcloud:2021.0.6

回答

6

1.tcc的SpringFenceConfig(实际上最后是SpringFenceHandler) 这块在业务代码上没有任何使用tcc的相关注解时也会被加载并启用,这个时候只用xa,at,saga的用户是没有防悬挂的表的会报错 2.sqlserver的pr就先不做tcc的防悬挂支持,等at的pr合并后再做额外适配 at之前也有一样的问题,是靠启动的时候查一下,报错了说明表不存在,就不再进行相关删除undolog里的防悬挂记录,tcc的话可以用bean扫描结果,或者也跟at一样适配下吧

7

https://github.com/seata/seata/pull/5089 中应该已经修复了这个没有使用tcc时还进行定时清理fence表的bug,可能你拉取的分支sqlserver还没同步到这个pr,请帮忙确认下你这个分支是否不包含5089pr中的代码

7

应该是这个pr #3994

我大概看了下pr#3994提交的代码,我在我本地sqlserver分支中我没有找到如TCCBeanParserUtils、TCCFenceConfig这些类。所以有可能如你所说没有把pr#3994的改动merge到sqlserver的分支中