diff --git a/fe/src/main/java/org/apache/doris/transaction/DatabaseTransactionMgr.java b/fe/src/main/java/org/apache/doris/transaction/DatabaseTransactionMgr.java index ac2764efb08863..8f10fa0348d1c3 100644 --- a/fe/src/main/java/org/apache/doris/transaction/DatabaseTransactionMgr.java +++ b/fe/src/main/java/org/apache/doris/transaction/DatabaseTransactionMgr.java @@ -814,16 +814,26 @@ protected void unprotectUpsertTransactionState(TransactionState transactionState editLog.logInsertTransactionState(transactionState); } } - // for commit transaction, there is nothing to do - if (transactionState.getTransactionStatus() == TransactionStatus.PREPARE) { - idToRunningTransactionState.put(transactionState.getTransactionId(), transactionState); - } else if (transactionState.getTransactionStatus().isFinalStatus()) { - idToRunningTransactionState.remove(transactionState.getTransactionId()); + if (!transactionState.getTransactionStatus().isFinalStatus()) { + if (idToRunningTransactionState.put(transactionState.getTransactionId(), transactionState) == null) { + if (transactionState.getSourceType() == TransactionState.LoadJobSourceType.ROUTINE_LOAD_TASK) { + runningRoutineLoadTxnNums++; + } else { + runningTxnNums++; + } + } + } else { + if (idToRunningTransactionState.remove(transactionState.getTransactionId()) != null) { + if (transactionState.getSourceType() == TransactionState.LoadJobSourceType.ROUTINE_LOAD_TASK) { + runningRoutineLoadTxnNums--; + } else { + runningTxnNums--; + } + } idToFinalStatusTransactionState.put(transactionState.getTransactionId(), transactionState); finalStatusTransactionStateDeque.add(transactionState); } updateTxnLabels(transactionState); - updateDbRunningTxnNum(transactionState.getPreStatus(), transactionState); } private void updateTxnLabels(TransactionState transactionState) { @@ -835,27 +845,6 @@ private void updateTxnLabels(TransactionState transactionState) { txnIds.add(transactionState.getTransactionId()); } - private void updateDbRunningTxnNum(TransactionStatus preStatus, TransactionState curTxnState) { - if (preStatus == null - && (curTxnState.getTransactionStatus() == TransactionStatus.PREPARE - || curTxnState.getTransactionStatus() == TransactionStatus.COMMITTED)) { - if (curTxnState.getSourceType() == TransactionState.LoadJobSourceType.ROUTINE_LOAD_TASK) { - runningRoutineLoadTxnNums++; - } else { - runningTxnNums++; - } - } else if ((preStatus == TransactionStatus.PREPARE - || preStatus == TransactionStatus.COMMITTED) - && (curTxnState.getTransactionStatus() == TransactionStatus.VISIBLE - || curTxnState.getTransactionStatus() == TransactionStatus.ABORTED)) { - if (curTxnState.getSourceType() == TransactionState.LoadJobSourceType.ROUTINE_LOAD_TASK) { - runningRoutineLoadTxnNums--; - } else { - runningTxnNums--; - } - } - } - public void abortTransaction(String label, String reason) throws UserException { Preconditions.checkNotNull(label); long transactionId = -1; @@ -1362,8 +1351,6 @@ public void replayUpsertTransactionState(TransactionState transactionState) { } } - - public List> getDbTransStateInfo() { List> infos = Lists.newArrayList(); readLock();