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 8f2898dd61e branch-3.0: [fix](transaction load) transaction may 
publish stuck if fe restart #44190 (#44266)
8f2898dd61e is described below

commit 8f2898dd61e1008c4044570c4b8e022f66060808
Author: github-actions[bot] 
<41898282+github-actions[bot]@users.noreply.github.com>
AuthorDate: Tue Nov 19 20:51:58 2024 +0800

    branch-3.0: [fix](transaction load) transaction may publish stuck if fe 
restart #44190 (#44266)
    
    Cherry-picked from #44190
    
    Co-authored-by: meiyi <me...@selectdb.com>
---
 .../apache/doris/transaction/DatabaseTransactionMgr.java    | 13 +++++++++++++
 .../doris/transaction/DatabaseTransactionMgrTest.java       |  6 +++---
 .../insert_p0/transaction/txn_insert_restart_fe.groovy      |  1 +
 3 files changed, 17 insertions(+), 3 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 163830e4475..a4dcd877ac3 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
@@ -1660,6 +1660,14 @@ public class DatabaseTransactionMgr {
             if 
(idToRunningTransactionState.put(transactionState.getTransactionId(), 
transactionState) == null) {
                 runningTxnNums++;
             }
+            if (isReplay && transactionState.getSubTxnIds() != null) {
+                LOG.info("add sub transactions for txn_id={}, status={}, 
sub_txn_ids={}",
+                        transactionState.getTransactionId(), 
transactionState.getTransactionStatus(),
+                        transactionState.getSubTxnIds());
+                for (Long subTxnId : transactionState.getSubTxnIds()) {
+                    addSubTransaction(transactionState.getTransactionId(), 
subTxnId);
+                }
+            }
         } else {
             if 
(idToRunningTransactionState.remove(transactionState.getTransactionId()) != 
null) {
                 runningTxnNums--;
@@ -1670,6 +1678,11 @@ public class DatabaseTransactionMgr {
             } else {
                 finalStatusTransactionStateDequeLong.add(transactionState);
             }
+            if (transactionState.getSubTxnIds() != null) {
+                LOG.info("clean sub transactions for txn_id={}, 
sub_txn_ids={}", transactionState.getTransactionId(),
+                        transactionState.getSubTxnIds());
+                cleanSubTransactions(transactionState.getTransactionId());
+            }
         }
         updateTxnLabels(transactionState);
     }
diff --git 
a/fe/fe-core/src/test/java/org/apache/doris/transaction/DatabaseTransactionMgrTest.java
 
b/fe/fe-core/src/test/java/org/apache/doris/transaction/DatabaseTransactionMgrTest.java
index a189aba6811..82c79e9f6f0 100644
--- 
a/fe/fe-core/src/test/java/org/apache/doris/transaction/DatabaseTransactionMgrTest.java
+++ 
b/fe/fe-core/src/test/java/org/apache/doris/transaction/DatabaseTransactionMgrTest.java
@@ -357,13 +357,13 @@ public class DatabaseTransactionMgrTest {
         long subTransactionId3 = transactionState6.getSubTxnIds().get(2);
         TransactionState subTransactionState = 
masterTransMgr.getTransactionState(CatalogTestUtil.testDbId1,
                 subTransactionId3);
-        Assert.assertEquals(transactionState6, subTransactionState);
+        Assert.assertEquals(null, subTransactionState); // finished txn will 
remove sub txn map
         // test show transaction state command
-        List<List<String>> singleTranInfos = 
masterDbTransMgr.getSingleTranInfo(CatalogTestUtil.testDbId1,
+        /*List<List<String>> singleTranInfos = 
masterDbTransMgr.getSingleTranInfo(CatalogTestUtil.testDbId1,
                 subTransactionId3);
         Assert.assertEquals(1, singleTranInfos.size());
         List<String> txnInfo = singleTranInfos.get(0);
-        Assert.assertEquals(String.valueOf(transactionId6), txnInfo.get(0));
+        Assert.assertEquals(String.valueOf(transactionId6), txnInfo.get(0));*/
 
         // test get table transaction info: table_id to partition_id map
         List<List<Comparable>> tableTransInfos = 
masterDbTransMgr.getTableTransInfo(transactionId6);
diff --git 
a/regression-test/suites/insert_p0/transaction/txn_insert_restart_fe.groovy 
b/regression-test/suites/insert_p0/transaction/txn_insert_restart_fe.groovy
index bd478bc2359..9a743bfc985 100644
--- a/regression-test/suites/insert_p0/transaction/txn_insert_restart_fe.groovy
+++ b/regression-test/suites/insert_p0/transaction/txn_insert_restart_fe.groovy
@@ -44,6 +44,7 @@ suite("txn_insert_restart_fe", 'docker') {
     options.feConfigs.add('sys_log_verbose_modules=org.apache.doris')
     // options.beConfigs.add('sys_log_verbose_modules=*')
     options.beConfigs.add('enable_java_support=false')
+    options.beConfigs.add('pending_data_expire_time_sec=1')
     docker(options) {
         // ---------- test restart fe ----------
         def result = sql 'SELECT DATABASE()'


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org
For additional commands, e-mail: commits-h...@doris.apache.org

Reply via email to