This is an automated email from the ASF dual-hosted git repository.
dataroaring pushed a commit to branch branch-3.0
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/branch-3.0 by this push:
new 55305947314 [fix](commit) Fix does not skip commit if txn state is
committed or visible (#39786)
55305947314 is described below
commit 553059473148a260c4362a7f5d7f83e0a3de4a97
Author: meiyi <[email protected]>
AuthorDate: Tue Aug 27 20:19:54 2024 +0800
[fix](commit) Fix does not skip commit if txn state is committed or visible
(#39786)
introduced in #32980
if a txn is committed twice, the check txn state is committed or visible
and skip commit logic does not work
---
.../doris/transaction/DatabaseTransactionMgr.java | 18 +++++++++++++-----
1 file changed, 13 insertions(+), 5 deletions(-)
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 7752a81e850..60fedf2db31 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
@@ -690,7 +690,10 @@ public class DatabaseTransactionMgr {
return writeDetail;
}
- private void checkTransactionStateBeforeCommit(Database db, List<Table>
tableList, long transactionId,
+ /**
+ * @return true if the transaction need to commit, otherwise false
+ */
+ private boolean checkTransactionStateBeforeCommit(Database db, List<Table>
tableList, long transactionId,
boolean is2PC, TransactionState transactionState)
throws TransactionCommitFailedException {
if (transactionState == null) {
@@ -716,7 +719,7 @@ public class DatabaseTransactionMgr {
throw new TransactionCommitFailedException("transaction [" +
transactionId
+ "] is already visible, not pre-committed.");
}
- return;
+ return false;
}
if (transactionState.getTransactionStatus() ==
TransactionStatus.COMMITTED) {
if (LOG.isDebugEnabled()) {
@@ -726,7 +729,7 @@ public class DatabaseTransactionMgr {
throw new TransactionCommitFailedException("transaction [" +
transactionId
+ "] is already committed, not pre-committed.");
}
- return;
+ return false;
}
if (is2PC && transactionState.getTransactionStatus() ==
TransactionStatus.PREPARE) {
@@ -765,6 +768,7 @@ public class DatabaseTransactionMgr {
}
}
}
+ return true;
}
/**
@@ -790,7 +794,9 @@ public class DatabaseTransactionMgr {
readUnlock();
}
- checkTransactionStateBeforeCommit(db, tableList, transactionId, is2PC,
transactionState);
+ if (!checkTransactionStateBeforeCommit(db, tableList, transactionId,
is2PC, transactionState)) {
+ return;
+ }
Set<Long> errorReplicaIds = Sets.newHashSet();
Set<Long> totalInvolvedBackends = Sets.newHashSet();
@@ -846,7 +852,9 @@ public class DatabaseTransactionMgr {
"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<Long> errorReplicaIds = Sets.newHashSet();
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]