diff --git a/fe/fe-core/src/main/java/org/apache/doris/cloud/transaction/CloudGlobalTransactionMgr.java b/fe/fe-core/src/main/java/org/apache/doris/cloud/transaction/CloudGlobalTransactionMgr.java
index aff9458f73bda3..59c73e5b8f8ab1 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/cloud/transaction/CloudGlobalTransactionMgr.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/cloud/transaction/CloudGlobalTransactionMgr.java
@@ -425,6 +425,8 @@ public void commitTransactionWithoutLock(long dbId, List
tableList, long
}
commitTransactionWithoutLock(dbId, tableList, transactionId, tabletCommitInfos, txnCommitAttachment, false,
mowTableList, backendToPartitionInfos);
+ // clear signature after commit succeeds
+ clearTxnLastSignature(dbId, transactionId);
} catch (Exception e) {
if (!mowTableList.isEmpty()) {
LOG.warn("commit txn {} failed, release delete bitmap lock, catch exception {}", transactionId,
@@ -1491,6 +1493,8 @@ public boolean commitAndPublishTransaction(DatabaseIf db, long transactionId,
}
commitTransactionWithSubTxns(db.getId(), tableList, transactionId, subTransactionStates, mowTableList,
backendToPartitionInfos);
+ // clear signature after commit succeeds
+ clearTxnLastSignature(db.getId(), transactionId);
} catch (Exception e) {
if (!mowTableList.isEmpty()) {
LOG.warn("commit txn {} failed, release delete bitmap lock, catch exception {}", transactionId,
@@ -1671,6 +1675,8 @@ public boolean commitAndPublishTransaction(DatabaseIf db, List tableList,
beforeCommitTransaction(tableList, transactionId, timeoutMillis);
try {
commitTransactionWithoutLock(db.getId(), tableList, transactionId, tabletCommitInfos, txnCommitAttachment);
+ // Only clear signature after commit succeeds, as BE may retry on failure
+ clearTxnLastSignature(db.getId(), transactionId);
} finally {
stopWatch.stop();
long costTimeMs = stopWatch.getTime();
@@ -1738,6 +1744,7 @@ public void abortTransaction(Long dbId, Long transactionId, String reason,
abortTxnResponse = abortTransactionImpl(dbId, transactionId, reason, null);
} finally {
handleAfterAbort(abortTxnResponse, txnCommitAttachment, transactionId);
+ clearTxnLastSignature(dbId, transactionId);
}
}