apache / apache/incubator-seata-samples

脏数据处理一直报异常

Open
#316 2 comments 0 reactions 0 assignees View on GitHub
Dominant language
Java
Stars
2.4k
Forks
2k
PR merge metrics
No merged PRs in 30d

Description

`io.seata.core.exception.BranchTransactionException: Branch session rollback failed and try again later xid = 192.168.7.83:8091:2038071926 branchId = 2038071938 Has dirty records when undo.
at io.seata.rm.datasource.undo.AbstractUndoLogManager.undo(AbstractUndoLogManager.java:335) ~[seata-all-1.1.0.jar:1.1.0]
at io.seata.rm.datasource.DataSourceManager.branchRollback(DataSourceManager.java:181) ~[seata-all-1.1.0.jar:1.1.0]
at io.seata.rm.AbstractRMHandler.doBranchRollback(AbstractRMHandler.java:124) [seata-all-1.1.0.jar:1.1.0]
at io.seata.rm.AbstractRMHandler$2.execute(AbstractRMHandler.java:68) [seata-all-1.1.0.jar:1.1.0]
at io.seata.rm.AbstractRMHandler$2.execute(AbstractRMHandler.java:64) [seata-all-1.1.0.jar:1.1.0]
at io.seata.core.exception.AbstractExceptionHandler.exceptionHandleTemplate(AbstractExceptionHandler.java:117) [seata-all-1.1.0.jar:1.1.0]
at io.seata.rm.AbstractRMHandler.handle(AbstractRMHandler.java:64) [seata-all-1.1.0.jar:1.1.0]
at io.seata.rm.DefaultRMHandler.handle(DefaultRMHandler.java:63) [seata-all-1.1.0.jar:1.1.0]
at io.seata.core.protocol.transaction.BranchRollbackRequest.handle(BranchRollbackRequest.java:35) [seata-all-1.1.0.jar:1.1.0]
at io.seata.rm.AbstractRMHandler.onRequest(AbstractRMHandler.java:149) [seata-all-1.1.0.jar:1.1.0]
at io.seata.core.rpc.netty.RmMessageListener.handleBranchRollback(RmMessageListener.java:93) [seata-all-1.1.0.jar:1.1.0]
at io.seata.core.rpc.netty.RmMessageListener.onMessage(RmMessageListener.java:84) [seata-all-1.1.0.jar:1.1.0]
at io.seata.core.rpc.netty.AbstractRpcRemotingClient$ClientHandler.dispatch(AbstractRpcRemotingClient.java:284) [seata-all-1.1.0.jar:1.1.0]
at io.seata.core.rpc.netty.AbstractRpcRemoting$AbstractHandler$1.run(AbstractRpcRemoting.java:452) [seata-all-1.1.0.jar:1.1.0]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [na:1.8.0_161]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [na:1.8.0_161]
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) [netty-common-4.1.29.Final.jar:4.1.29.Final]
at java.lang.Thread.run(Thread.java:748) [na:1.8.0_161]
Caused by: java.sql.SQLException: Has dirty records when undo.
at io.seata.rm.datasource.undo.AbstractUndoExecutor.dataValidationAndGoOn(AbstractUndoExecutor.java:247) ~[seata-all-1.1.0.jar:1.1.0]
at io.seata.rm.datasource.undo.AbstractUndoExecutor.executeOn(AbstractUndoExecutor.java:109) ~[seata-all-1.1.0.jar:1.1.0]
at io.seata.rm.datasource.undo.AbstractUndoLogManager.undo(AbstractUndoLogManager.java:287) ~[seata-all-1.1.0.jar:1.1.0]
... 17 common frames omitted`

在spring-cloud-eureka中,当服务调用顺序是order ->stotage -> account时,account服务模拟抛出异常,当请求调用到第三个服务未完成时,手动修改了第二个stotage服务的数据,之后就一直报这样的异常,这该怎么处理呢?现实业务中如果遇到这种情形,这条数据是不是修改不了了?

Contributor guide

Open the contributing guide

Research direction

Start with the reported stack path in AbstractUndoExecutor.java, especially dataValidationAndGoOn, then trace the call into AbstractUndoLogManager.java. Reproduce the spring-cloud-eureka order→storage→account scenario with a manual data change during rollback. Done means documenting the expected handling and whether the affected record can be recovered, with evidence from the reproduced behavior.

Written by the indexing model from the issue text.

Assessment

Tech stack
java, spring
Domain
backend, distributed-systems
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.