apache / apache/incubator-seata
1.3 AT模式下, 删除数据失败导致回滚时,表内有虚拟列导致回滚失败怎么处理?
- Dominant language
- Java
- Stars
- 26k
- Forks
- 8.8k
- Avg merge
- 1d 8h
- Merged PRs (30d)
- 4
Description
2024-05-09 14:24:39.738 [] INFO 19881 --- [h_RMROLE_1_2_16] i.s.r.d.DataSourceManager 39 : [stacktrace]branchRollback failed. branchType:[[AT, 192.168.3.71:8091:531490182712815616, 531490207564066817, jdbc:mysql://192.168.3.70:3306/yl_common, null, Branch session rollback failed and try again later xid = 192.168.3.71:8091:531490182712815616 branchId = 531490207564066817 The value specified for generated column 'businessId' in table 'schedule' is not allowed.]], xid:[{}], branchId:[{}], resourceId:[{}], applicationData:[{}]. reason:[{}]
io.seata.core.exception.BranchTransactionException: Branch session rollback failed and try again later xid = 192.168.3.71:8091:531490182712815616 branchId = 531490207564066817 The value specified for generated column 'businessId' in table 'schedule' is not allowed.
at io.seata.rm.datasource.undo.AbstractUndoLogManager.undo(AbstractUndoLogManager.java:339)
at io.seata.rm.datasource.DataSourceManager.branchRollback(DataSourceManager.java:178)
at io.seata.rm.AbstractRMHandler.doBranchRollback(AbstractRMHandler.java:125)
at io.seata.rm.AbstractRMHandler$2.execute(AbstractRMHandler.java:67)
at io.seata.rm.AbstractRMHandler$2.execute(AbstractRMHandler.java:63)
at io.seata.core.exception.AbstractExceptionHandler.exceptionHandleTemplate(AbstractExceptionHandler.java:116)
at io.seata.rm.AbstractRMHandler.handle(AbstractRMHandler.java:63)
at io.seata.rm.DefaultRMHandler.handle(DefaultRMHandler.java:63)
at io.seata.core.protocol.transaction.BranchRollbackRequest.handle(BranchRollbackRequest.java:35)
at io.seata.rm.AbstractRMHandler.onRequest(AbstractRMHandler.java:150)
at io.seata.core.rpc.processor.client.RmBranchRollbackProcessor.handleBranchRollback(RmBranchRollbackProcessor.java:63)
at io.seata.core.rpc.processor.client.RmBranchRollbackProcessor.process(RmBranchRollbackProcessor.java:58)
at io.seata.core.rpc.netty.AbstractNettyRemoting.lambda$processMessage$2(AbstractNettyRemoting.java:265)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
at java.lang.Thread.run(Thread.java:748)
Caused by: java.sql.SQLException: The value specified for generated column 'businessId' in table 'schedule' is not allowed.
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129)
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97)
at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122)
at com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:975)
at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdateInternal(ClientPreparedStatement.java:1114)
at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdateInternal(ClientPreparedStatement.java:1062)
at com.mysql.cj.jdbc.ClientPreparedStatement.executeLargeUpdate(ClientPreparedStatement.java:1383)
at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdate(ClientPreparedStatement.java:1047)
at com.zaxxer.hikari.pool.ProxyPreparedStatement.executeUpdate(ProxyPreparedStatement.java:61)
at com.zaxxer.hikari.pool.HikariProxyPreparedStatement.executeUpdate(HikariProxyPreparedStatement.java)
at io.seata.rm.datasource.undo.AbstractUndoExecutor.executeOn(AbstractUndoExecutor.java:134)
at io.seata.rm.datasource.undo.AbstractUndoLogManager.undo(AbstractUndoLogManager.java:291)
... 16 common frames omitted
Contributor guide
Research direction
Start with the failure path in io.seata.rm.datasource.undo.AbstractUndoLogManager and io.seata.rm.datasource.undo.AbstractUndoExecutor, using the MySQL error for generated column businessId in table schedule as the reproduction clue. Trace how AT branch rollback handles the undo data, then verify that rollback no longer fails for this schema and add or update a regression test if the repository provides one.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- java, mysql
- Domain
- databases, distributed-systems
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 28/100