diff --git a/fe/fe-core/src/main/java/org/apache/doris/transaction/DatabaseTransactionMgr.java b/fe/fe-core/src/main/java/org/apache/doris/transaction/DatabaseTransactionMgr.java index 6b338d7f827f43..89aa4c2e47c507 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/transaction/DatabaseTransactionMgr.java +++ b/fe/fe-core/src/main/java/org/apache/doris/transaction/DatabaseTransactionMgr.java @@ -680,7 +680,10 @@ private String getTabletWriteDetail(List tabletSuccReplicas, List tableList, long transactionId, + /** + * @return true if the transaction need to commit, otherwise false + */ + private boolean checkTransactionStateBeforeCommit(Database db, List tableList, long transactionId, boolean is2PC, TransactionState transactionState) throws TransactionCommitFailedException { if (transactionState == null) { @@ -706,7 +709,7 @@ private void checkTransactionStateBeforeCommit(Database db, List
tableLis throw new TransactionCommitFailedException("transaction [" + transactionId + "] is already visible, not pre-committed."); } - return; + return false; } if (transactionState.getTransactionStatus() == TransactionStatus.COMMITTED) { if (LOG.isDebugEnabled()) { @@ -716,7 +719,7 @@ private void checkTransactionStateBeforeCommit(Database db, List
tableLis throw new TransactionCommitFailedException("transaction [" + transactionId + "] is already committed, not pre-committed."); } - return; + return false; } if (is2PC && transactionState.getTransactionStatus() == TransactionStatus.PREPARE) { @@ -755,6 +758,7 @@ private void checkTransactionStateBeforeCommit(Database db, List
tableLis } } } + return true; } /** @@ -780,7 +784,9 @@ public void commitTransaction(List
tableList, long transactionId, List errorReplicaIds = Sets.newHashSet(); Set totalInvolvedBackends = Sets.newHashSet(); @@ -836,7 +842,9 @@ public void commitTransaction(long transactionId, List
tableList, "DebugPoint: DatabaseTransactionMgr.commitTransaction.failed"); } - checkTransactionStateBeforeCommit(db, tableList, transactionId, false, transactionState); + if (!checkTransactionStateBeforeCommit(db, tableList, transactionId, false, transactionState)) { + return; + } // error replica may be duplicated for different sub transaction, but it's ok Set errorReplicaIds = Sets.newHashSet();