This is an automated email from the ASF dual-hosted git repository.

caiconghui pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/master by this push:
     new 4f2d54d462a [fix](DatabaseTransactionMgr) Fix clean label bug which 
may cause inconsitent editlog operation (#29198)
4f2d54d462a is described below

commit 4f2d54d462a680268349e8b167bdab96ed6eef2c
Author: caiconghui <55968745+caicong...@users.noreply.github.com>
AuthorDate: Thu Dec 28 14:17:35 2023 +0800

    [fix](DatabaseTransactionMgr) Fix clean label bug which may cause 
inconsitent editlog operation (#29198)
---
 .../main/java/org/apache/doris/load/loadv2/LoadManager.java  | 12 +++---------
 .../org/apache/doris/transaction/DatabaseTransactionMgr.java | 10 +++++++---
 .../org/apache/doris/transaction/GlobalTransactionMgr.java   |  4 ++--
 3 files changed, 12 insertions(+), 14 deletions(-)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/load/loadv2/LoadManager.java 
b/fe/fe-core/src/main/java/org/apache/doris/load/loadv2/LoadManager.java
index 3909ff5d784..35968139ec8 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/load/loadv2/LoadManager.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/load/loadv2/LoadManager.java
@@ -786,22 +786,16 @@ public class LoadManager implements Writable {
         } finally {
             writeUnlock();
         }
-        LOG.info("clean {} labels on db {} with label '{}' in load mgr.", 
counter, dbId, label);
-
         // 2. Remove from DatabaseTransactionMgr
         try {
-            Env.getCurrentGlobalTransactionMgr().cleanLabel(dbId, label);
+            Env.getCurrentGlobalTransactionMgr().cleanLabel(dbId, label, 
isReplay);
         } catch (AnalysisException e) {
             // just ignore, because we don't want to throw any exception here.
             LOG.warn("Exception:", e);
         }
 
-        // 3. Log
-        if (!isReplay) {
-            CleanLabelOperationLog log = new CleanLabelOperationLog(dbId, 
label);
-            Env.getCurrentEnv().getEditLog().logCleanLabel(log);
-        }
-        LOG.info("finished to clean label on db {} with label {}. is replay: 
{}", dbId, label, isReplay);
+        LOG.info("finished to clean {} labels on db {} with label '{}' in load 
mgr. is replay: {}",
+                counter, dbId, label, isReplay);
     }
 
     private void readLock() {
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 29471255f29..5bb954289cc 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
@@ -50,6 +50,7 @@ import org.apache.doris.common.util.TimeUtils;
 import org.apache.doris.metric.MetricRepo;
 import org.apache.doris.mysql.privilege.PrivPredicate;
 import org.apache.doris.persist.BatchRemoveTransactionsOperationV2;
+import org.apache.doris.persist.CleanLabelOperationLog;
 import org.apache.doris.persist.EditLog;
 import org.apache.doris.qe.ConnectContext;
 import org.apache.doris.statistics.AnalysisManager;
@@ -2072,7 +2073,7 @@ public class DatabaseTransactionMgr {
         }
     }
 
-    protected void cleanLabel(String label) {
+    protected void cleanLabel(String label, boolean isReplay) {
         Set<Long> removedTxnIds = Sets.newHashSet();
         writeLock();
         try {
@@ -2113,11 +2114,14 @@ public class DatabaseTransactionMgr {
             // So that we can keep consistency in meta image
             finalStatusTransactionStateDequeShort.removeIf(txn -> 
removedTxnIds.contains(txn.getTransactionId()));
             finalStatusTransactionStateDequeLong.removeIf(txn -> 
removedTxnIds.contains(txn.getTransactionId()));
+
+            if (!isReplay) {
+                CleanLabelOperationLog log = new CleanLabelOperationLog(dbId, 
label);
+                Env.getCurrentEnv().getEditLog().logCleanLabel(log);
+            }
         } finally {
             writeUnlock();
         }
-        LOG.info("clean {} labels on db {} with label '{}' in database 
transaction mgr.", removedTxnIds.size(), dbId,
-                label);
     }
 
     public long getTxnNumByStatus(TransactionStatus status) {
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/transaction/GlobalTransactionMgr.java
 
b/fe/fe-core/src/main/java/org/apache/doris/transaction/GlobalTransactionMgr.java
index ee228a10fc8..4832d66bedb 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/transaction/GlobalTransactionMgr.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/transaction/GlobalTransactionMgr.java
@@ -754,8 +754,8 @@ public class GlobalTransactionMgr implements Writable {
         return getDatabaseTransactionMgr(dbId).getPreCommittedTxnList();
     }
 
-    public void cleanLabel(Long dbId, String label) throws AnalysisException {
-        getDatabaseTransactionMgr(dbId).cleanLabel(label);
+    public void cleanLabel(Long dbId, String label, boolean isReplay) throws 
AnalysisException {
+        getDatabaseTransactionMgr(dbId).cleanLabel(label, isReplay);
     }
 
     public Long getTransactionIdByLabel(Long dbId, String label, 
List<TransactionStatus> statusList)


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

Reply via email to