apache / incubator-seata

:fire: Seata is an easy-to-use, high-performance, open source distributed transaction solution.
https://seata.apache.org/
Apache License 2.0
25.22k stars 8.76k forks source link

【seata-2.1.0】请问2.1.0版本在客户端启动的时候,出于什么考虑在启用AT模式下新增了undo_log 表是否存在的校验? #6871

Closed God-Gan closed 23 minutes ago

God-Gan commented 3 hours ago

Ⅰ. Issue Description

我记得2.0.0应该是没有这个校验的。目前项目是通过liquibase的changelog进行undo_log表的创建,当表还没创建完成时就提示undo_log表不存在了,请问除了手动创建表以外还有其它方式解决吗,比如通过配置什么参数?因为生产环境目前没法手动提前创建表。

Ⅱ. Describe what happened

Caused by: java.lang.IllegalStateException: in AT mode, undo_log table not exist at org.apache.seata.rm.datasource.DataSourceProxy.checkUndoLogTableExist(DataSourceProxy.java:176) at org.apache.seata.rm.datasource.DataSourceProxy.init(DataSourceProxy.java:111) at org.apache.seata.rm.datasource.DataSourceProxy.(DataSourceProxy.java:97) at org.apache.seata.rm.datasource.DataSourceProxy.(DataSourceProxy.java:82) at org.apache.seata.spring.annotation.datasource.SeataAutoDataSourceProxyCreator.buildProxy(SeataAutoDataSourceProxyCreator.java:113) at org.apache.seata.spring.annotation.datasource.SeataAutoDataSourceProxyCreator.wrapIfNecessary(SeataAutoDataSourceProxyCreator.java:87) at org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.postProcessAfterInitialization(AbstractAutoProxyCreator.java:318) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsAfterInitialization(AbstractAutowireCapableBeanFactory.java:434) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1773) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:598) ... 110 common frames omitted

Ⅲ. Describe what you expected to happen

希望可以添加参数判断是否需要校验undo_log表是否存在。

Ⅳ. How to reproduce it (as minimally and precisely as possible)

  1. xxx
  2. xxx
  3. xxx

Minimal yet complete reproducer code (or URL to code):

Ⅴ. Anything else we need to know?

Ⅵ. Environment:

funky-eyes commented 3 hours ago

如果用户生产环境忘记创建了undolog,进行了业务发布,出故障了谁负责? If the user production environment forgets to create undolog and launches a business release, who is responsible for the failure?

God-Gan commented 3 hours ago

默认检查我觉得是没有问题的,但是现在并没有额外的参数进行配置来校验,这就相当于通过liquibase这种场景来创建undo_log是没法使用的。

funky-eyes commented 3 hours ago

生产环境一般不允许自动建表等操作

God-Gan commented 2 hours ago

https://github.com/apache/incubator-seata/issues/6022 我看了是这个issue需要新增的校验,上面也提到了通过开关控制,不过最后应该还是没有通过开关控制,实现的时候应该是没有考虑到这种场景。我先看看能不能改bean的加载顺序吧,不行的话只能先临时手动创建了。(小小吐槽一句,之前那么多版本都没加这个限制,现在加了限制,感觉有点鸡肋,毕竟使用AT模式的话如果生产环境还不创建undo_log表,那心是真大hhh)。