apache / apache/incubator-seata

1.3 AT模式下, 删除数据失败导致回滚时,表内有虚拟列导致回滚失败怎么处理?

Open
#6,525 0 comments 0 reactions 0 assignees View on GitHub
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

Open the contributing 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.