You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@seata.apache.org by "iAmClever (via GitHub)" <gi...@apache.org> on 2024/07/04 08:06:26 UTC
[I] AT模式,在同一个分支事务里面,更新两条不同的记录,如果主键包含特殊字符 ; ,会报【branch register failed for key 'lock_table.PRIMARY'】 [incubator-seata]
iAmClever opened a new issue, #6641:
URL: https://github.com/apache/incubator-seata/issues/6641
### Ⅰ. Issue Description
AT模式,在同一个分支事务里面,更新两条不同的记录,如果主键包含特殊字符 ; ,会报【branch register failed for key 'lock_table.PRIMARY'】
### Ⅱ. Describe what happened
客户端往seata-server注册分支事务时,会触发seata-server的【io.seata.server.coordinator.DefaultCoordinator#doBranchRegister】方法,该方法会往【lock_table】插入记录(每锁定一行就插入一条),但是在为每一行锁记录生成该表的 row_key时(详见io.seata.server.lock.AbstractLockManager#collectRowLocks(java.lang.String, java.lang.String, java.lang.String, java.lang.Long, java.lang.Long)),由于有特殊字符【;】,导致主键生成错误,造成锁冲突
业务系统服务错误栈如下:
```
org.springframework.jdbc.UncategorizedSQLException:
### Error updating database. Cause: java.sql.SQLException: io.seata.core.exception.RmTransactionException: branch register failed, xid: 10.244.137.109:8091:8944687993232800363, errMsg: TransactionException[branch register request failed. xid=10.244.137.109:8091:8944687993232800363, msg=Duplicate entry 'jdbc:mysql://192.168.2.170:13306/erp_biz_1^^^oln_sku^^^AE1005007' for key 'lock_table.PRIMARY']
### The error may exist in file [C:\IdeaProjects\acerp\acerp-goods\acerp-goods-service\target\classes\mapper\online\OnlineGoodsDao.xml]
### The error may involve defaultParameterMap
### The error occurred while setting parameters
### SQL: insert into `oln_sku` set `oln_sku_id` = ?, `sys_shop` = ?, `oln_item_id` = ?, `com_uid` = ?, `oln_sku_name` = ?, `oln_price` = ?, `oln_properties` = ?, `oln_outer_sku` = ?, `ASIN` = ?, `oln_sku_prop` = ?, `syn_status` = 0, `oln_pic` = ?, `oln_upload` = ?, `virtual_ratio` = ?, `OLN_SKU_STATUS` = ?, `quantity` = ?
### Cause: java.sql.SQLException: io.seata.core.exception.RmTransactionException: branch register failed, xid: 10.244.137.109:8091:8944687993232800363, errMsg: TransactionException[branch register request failed. xid=10.244.137.109:8091:8944687993232800363, msg=Duplicate entry 'jdbc:mysql://192.168.2.170:13306/erp_biz_1^^^oln_sku^^^AE1005007' for key 'lock_table.PRIMARY']
; uncategorized SQLException; SQL state [null]; error code [0]; io.seata.core.exception.RmTransactionException: branch register failed, xid: 10.244.137.109:8091:8944687993232800363, errMsg: TransactionException[branch register request failed. xid=10.244.137.109:8091:8944687993232800363, msg=Duplicate entry 'jdbc:mysql://192.168.2.170:13306/erp_biz_1^^^oln_sku^^^AE1005007' for key 'lock_table.PRIMARY'] ; nested exception is java.sql.SQLException: io.seata.core.exception.RmTransactionException: branch register failed, xid: 10.244.137.109:8091:8944687993232800363, errMsg: TransactionException[branch register request failed. xid=10.244.137.109:8091:8944687993232800363, msg=Duplicate entry 'jdbc:mysql://192.168.2.170:13306/erp_biz_1^^^oln_sku^^^AE1005007' for key 'lock_table.PRIMARY']
at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:93)
at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:439)
at com.sun.proxy.$Proxy196.insert(Unknown Source)
at org.mybatis.spring.SqlSessionTemplate.insert(SqlSessionTemplate.java:272)
at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:59)
at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:149)
at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:90)
at com.sun.proxy.$Proxy199.insertSku(Unknown Source)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:344)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:198)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:215)
at com.sun.proxy.$Proxy200.insertSku(Unknown Source)
at com.anycubic.cerp.goods.service.online.action.item.OnlineGoodsSaveAction.saveGoods(OnlineGoodsSaveAction.java:35)
at com.anycubic.cerp.goods.service.online.CalfOnlineGoodsServiceImpl.saveOnlineGoods(CalfOnlineGoodsServiceImpl.java:139)
at com.anycubic.cerp.goods.service.online.action.OlnGoodsSyncAction.lambda$sync$0(OlnGoodsSyncAction.java:89)
at com.anycubic.cerp.components.database.transaction.AbstractTransactions.execute(AbstractTransactions.java:15)
at com.anycubic.cerp.components.database.transaction.SeataDistributedTransactions.required(SeataDistributedTransactions.java:29)
at com.anycubic.cerp.components.database.transaction.SeataDistributedTransactions$$FastClassBySpringCGLIB$$c9550ef2.invoke(<generated>)
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:793)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763)
at io.seata.spring.annotation.GlobalTransactionalInterceptor$2.execute(GlobalTransactionalInterceptor.java:208)
at io.seata.tm.api.TransactionalTemplate.execute(TransactionalTemplate.java:128)
at io.seata.spring.annotation.GlobalTransactionalInterceptor.handleGlobalTransaction(GlobalTransactionalInterceptor.java:205)
at io.seata.spring.annotation.GlobalTransactionalInterceptor.invoke(GlobalTransactionalInterceptor.java:175)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763)
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:708)
at com.anycubic.cerp.components.database.transaction.SeataDistributedTransactions$$EnhancerBySpringCGLIB$$f011ca01.required(<generated>)
at com.hupun.calf.db.transaction.TransactionExecutor.execute(TransactionExecutor.java:31)
at com.anycubic.cerp.goods.service.online.action.OlnGoodsSyncAction.sync(OlnGoodsSyncAction.java:87)
at com.anycubic.cerp.goods.service.online.OnlineGoodsServiceImpl.syncOlnGoods(OnlineGoodsServiceImpl.java:433)
at com.anycubic.cerp.goods.service.online.OnlineGoodsServiceImpl$$FastClassBySpringCGLIB$$6c11bbd1.invoke(<generated>)
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
at org.springframework.aop.framework.CglibAopProxy.invokeMethod(CglibAopProxy.java:386)
at org.springframework.aop.framework.CglibAopProxy.access$000(CglibAopProxy.java:85)
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:704)
at com.anycubic.cerp.goods.service.online.OnlineGoodsServiceImpl$$EnhancerBySpringCGLIB$$98728980.syncOlnGoods(<generated>)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1070)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:681)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:764)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at com.anycubic.cerp.components.authentication.service.ServiceAuthenticationFilter.doFilterInternal(ServiceAuthenticationFilter.java:36)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:360)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:399)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:890)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1789)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)
at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.base/java.lang.Thread.run(Thread.java:834)
Caused by: java.sql.SQLException: io.seata.core.exception.RmTransactionException: branch register failed, xid: 10.244.137.109:8091:8944687993232800363, errMsg: TransactionException[branch register request failed. xid=10.244.137.109:8091:8944687993232800363, msg=Duplicate entry 'jdbc:mysql://192.168.2.170:13306/erp_biz_1^^^oln_sku^^^AE1005007' for key 'lock_table.PRIMARY']
at io.seata.rm.datasource.ConnectionProxy.recognizeLockKeyConflictException(ConnectionProxy.java:161)
at io.seata.rm.datasource.ConnectionProxy.processGlobalTransactionCommit(ConnectionProxy.java:252)
at io.seata.rm.datasource.ConnectionProxy.doCommit(ConnectionProxy.java:230)
at io.seata.rm.datasource.ConnectionProxy.lambda$commit$0(ConnectionProxy.java:188)
at io.seata.rm.datasource.ConnectionProxy$LockRetryPolicy.execute(ConnectionProxy.java:344)
at io.seata.rm.datasource.ConnectionProxy.commit(ConnectionProxy.java:187)
at io.seata.rm.datasource.exec.AbstractDMLBaseExecutor.lambda$executeAutoCommitTrue$2(AbstractDMLBaseExecutor.java:146)
at io.seata.rm.datasource.ConnectionProxy$LockRetryPolicy.doRetryOnLockConflict(ConnectionProxy.java:356)
at io.seata.rm.datasource.exec.AbstractDMLBaseExecutor$LockRetryPolicy.execute(AbstractDMLBaseExecutor.java:188)
at io.seata.rm.datasource.exec.AbstractDMLBaseExecutor.executeAutoCommitTrue(AbstractDMLBaseExecutor.java:144)
at io.seata.rm.datasource.exec.AbstractDMLBaseExecutor.doExecute(AbstractDMLBaseExecutor.java:83)
at io.seata.rm.datasource.exec.BaseTransactionalExecutor.execute(BaseTransactionalExecutor.java:126)
at io.seata.rm.datasource.exec.ExecuteTemplate.execute(ExecuteTemplate.java:153)
at io.seata.rm.datasource.exec.ExecuteTemplate.execute(ExecuteTemplate.java:60)
at io.seata.rm.datasource.PreparedStatementProxy.execute(PreparedStatementProxy.java:55)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.apache.ibatis.logging.jdbc.PreparedStatementLogger.invoke(PreparedStatementLogger.java:58)
at com.sun.proxy.$Proxy312.execute(Unknown Source)
at org.apache.ibatis.executor.statement.PreparedStatementHandler.update(PreparedStatementHandler.java:48)
at org.apache.ibatis.executor.statement.RoutingStatementHandler.update(RoutingStatementHandler.java:75)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:61)
at com.sun.proxy.$Proxy310.update(Unknown Source)
at org.apache.ibatis.executor.SimpleExecutor.doUpdate(SimpleExecutor.java:50)
at org.apache.ibatis.executor.BaseExecutor.update(BaseExecutor.java:117)
at org.apache.ibatis.executor.CachingExecutor.update(CachingExecutor.java:76)
at jdk.internal.reflect.GeneratedMethodAccessor233.invoke(Unknown Source)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.apache.ibatis.plugin.Invocation.proceed(Invocation.java:61)
at com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor.intercept(MybatisPlusInterceptor.java:106)
at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:59)
at com.sun.proxy.$Proxy309.update(Unknown Source)
at jdk.internal.reflect.GeneratedMethodAccessor233.invoke(Unknown Source)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:61)
at com.sun.proxy.$Proxy309.update(Unknown Source)
at jdk.internal.reflect.GeneratedMethodAccessor233.invoke(Unknown Source)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.apache.ibatis.plugin.Invocation.proceed(Invocation.java:61)
at com.anycubic.cerp.components.sentry.SentryMybatisInterceptor.intercept(SentryMybatisInterceptor.java:40)
at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:59)
at com.sun.proxy.$Proxy309.update(Unknown Source)
at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:197)
at org.apache.ibatis.session.defaults.DefaultSqlSession.insert(DefaultSqlSession.java:184)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:425)
... 102 common frames omitted
Caused by: io.seata.core.exception.RmTransactionException: branch register failed, xid: 10.244.137.109:8091:8944687993232800363, errMsg: TransactionException[branch register request failed. xid=10.244.137.109:8091:8944687993232800363, msg=Duplicate entry 'jdbc:mysql://192.168.2.170:13306/erp_biz_1^^^oln_sku^^^AE1005007' for key 'lock_table.PRIMARY']
at io.seata.rm.AbstractResourceManager.branchRegister(AbstractResourceManager.java:70)
at io.seata.rm.DefaultResourceManager.branchRegister(DefaultResourceManager.java:96)
at io.seata.rm.datasource.ConnectionProxy.register(ConnectionProxy.java:273)
at io.seata.rm.datasource.ConnectionProxy.processGlobalTransactionCommit(ConnectionProxy.java:250)
... 158 common frames omitted
```
### Ⅲ. Describe what you expected to happen
如果表主键包含关键字符【;】也能兼容,最后整个事务提交成功
### Ⅳ. How to reproduce it (as minimally and precisely as possible)
1. seata设置为AT模式
2. 开启一个分布式事务,在事务中,试图往同一个表里面插入两条记录,并且主动设置主键分别为【AE14:10;200007763:201336098】、【AE14:10;200007763:201336099】
3. 报错:Duplicate entry for key 'lock_table.PRIMARY'
### Ⅴ. Anything else we need to know?
建议方案:
方案一(推荐):客户端在生成锁记录的key时(详见【io.seata.rm.datasource.exec.BaseTransactionalExecutor#buildLockKey】),处理下seata-server的关键字【;】,该方案改动较小,只需要升级下seata-rm-datasource即可,而且不会影响到已经在lock_table锁住的数据(没有动server端代码,针对需要升级的客户端来进行升级
方案二:在seata-server端,针对新版本,对seata-server的关键字【;】做兼容,改动较大,影响全局,且会影响到已经在lock_table锁住的数据
如果认定这是一个 bug,我可以尝试提交修改的 PR ~~~
### Ⅵ. Environment:
Database version:
- JDK version(e.g. `java -version`): 11
- Seata client/server version: 1.8.0
- Database version: 8.0.29
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: notifications-unsubscribe@seata.apache.org.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@seata.apache.org
For additional commands, e-mail: notifications-help@seata.apache.org
Re: [I] AT模式,在同一个分支事务里面,更新两条不同的记录,如果主键包含特殊字符 ; ,会报【branch register failed for key 'lock_table.PRIMARY'】 [incubator-seata]
Posted by "iAmClever (via GitHub)" <gi...@apache.org>.
iAmClever commented on issue #6641:
URL: https://github.com/apache/incubator-seata/issues/6641#issuecomment-2208428097
> 已知问题,待2.2版本修复 Known issues, to be fixed in version 2.2
好,感谢回复
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: notifications-unsubscribe@seata.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@seata.apache.org
For additional commands, e-mail: notifications-help@seata.apache.org
Re: [I] AT模式,在同一个分支事务里面,更新两条不同的记录,如果主键包含特殊字符 ; ,会报【branch register failed for key 'lock_table.PRIMARY'】 [incubator-seata]
Posted by "funky-eyes (via GitHub)" <gi...@apache.org>.
funky-eyes commented on issue #6641:
URL: https://github.com/apache/incubator-seata/issues/6641#issuecomment-2208409704
已知问题,待2.2版本修复
Known issues, to be fixed in version 2.2
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: notifications-unsubscribe@seata.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@seata.apache.org
For additional commands, e-mail: notifications-help@seata.apache.org