apache / incubator-seata-samples

Apache Seata(incubating) Samples for Java
https://seata.apache.org/
Apache License 2.0
2.26k stars 1.91k forks source link

脏数据处理一直报异常 #316

Open ronaldo123321 opened 4 years ago

ronaldo123321 commented 4 years ago

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服务的数据,之后就一直报这样的异常,这该怎么处理呢?现实业务中如果遇到这种情形,这条数据是不是修改不了了?

slievrly commented 4 years ago

@ronaldo123321 manually correct and delete transactions.

ronaldo123321 commented 4 years ago

How to delete transactions?delete undo log record?How to avoid the problem such as dirty data?