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

adonisling 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 918141bc7e4 [enhancement](fe-meta) Support skip specified journal to 
avoid FE can't be start due to a damaged journal (#35783)
918141bc7e4 is described below

commit 918141bc7e4d98b514f46a736d2e58f5b4875df2
Author: zxealous <zhouchang...@baidu.com>
AuthorDate: Wed Jun 5 10:22:18 2024 +0800

    [enhancement](fe-meta) Support skip specified journal to avoid FE can't be 
start due to a damaged journal (#35783)
    
    If fe meta has damaged journals, fe can't be started successfully.
    Adding a configuration to skip the damaged journals.
---
 .../main/java/org/apache/doris/common/Config.java   |  6 ++++++
 .../src/main/java/org/apache/doris/catalog/Env.java | 21 ++++++++++++++++++++-
 .../doris/journal/bdbje/BDBJournalCursor.java       |  4 ++++
 3 files changed, 30 insertions(+), 1 deletion(-)

diff --git a/fe/fe-common/src/main/java/org/apache/doris/common/Config.java 
b/fe/fe-common/src/main/java/org/apache/doris/common/Config.java
index 94ad7ea7b36..a266da356a6 100644
--- a/fe/fe-common/src/main/java/org/apache/doris/common/Config.java
+++ b/fe/fe-common/src/main/java/org/apache/doris/common/Config.java
@@ -1223,6 +1223,12 @@ public class Config extends ConfigBase {
     @ConfField(mutable = true, masterOnly = true)
     public static boolean force_do_metadata_checkpoint = false;
 
+    /**
+     * If some joural is wrong, and FE can't start, we can use this to skip it.
+     */
+    @ConfField(mutable = false, masterOnly = false)
+    public static String[] force_skip_journal_ids = {};
+
     /**
      * Decide how often to check dynamic partition
      */
diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/Env.java 
b/fe/fe-core/src/main/java/org/apache/doris/catalog/Env.java
index e5f0dcaf585..f6db594d770 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/catalog/Env.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/Env.java
@@ -307,6 +307,7 @@ import java.io.IOException;
 import java.net.HttpURLConnection;
 import java.net.InetSocketAddress;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collection;
 import java.util.Comparator;
 import java.util.HashMap;
@@ -551,6 +552,8 @@ public class Env {
 
     private final SplitSourceManager splitSourceManager;
 
+    private final List<String> forceSkipJournalIds = 
Arrays.asList(Config.force_skip_journal_ids);
+
     public List<TFrontendInfo> getFrontendInfos() {
         List<TFrontendInfo> res = new ArrayList<>();
 
@@ -963,6 +966,10 @@ public class Env {
         return dnsCache;
     }
 
+    public List<String> getForceSkipJournalIds() {
+        return forceSkipJournalIds;
+    }
+
     // Use tryLock to avoid potential dead lock
     private boolean tryLock(boolean mustLock) {
         while (true) {
@@ -2868,7 +2875,19 @@ public class Env {
             Long logId = kv.first;
             JournalEntity entity = kv.second;
             if (entity == null) {
-                break;
+                if (logId != null && 
forceSkipJournalIds.contains(String.valueOf(logId))) {
+                    replayedJournalId.incrementAndGet();
+                    String msg = "journal " + replayedJournalId + " has 
skipped by config force_skip_journal_id";
+                    LOG.info(msg);
+                    LogUtils.stdout(msg);
+                    if (MetricRepo.isInit) {
+                        // Metric repo may not init after this replay thread 
start
+                        MetricRepo.COUNTER_EDIT_LOG_READ.increase(1L);
+                    }
+                    continue;
+                } else {
+                    break;
+                }
             }
             hasLog = true;
             EditLog.loadJournal(this, logId, entity);
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/journal/bdbje/BDBJournalCursor.java 
b/fe/fe-core/src/main/java/org/apache/doris/journal/bdbje/BDBJournalCursor.java
index 8c48cab42c5..f6068d5948b 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/journal/bdbje/BDBJournalCursor.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/journal/bdbje/BDBJournalCursor.java
@@ -17,6 +17,7 @@
 
 package org.apache.doris.journal.bdbje;
 
+import org.apache.doris.catalog.Env;
 import org.apache.doris.common.Pair;
 import org.apache.doris.journal.JournalCursor;
 import org.apache.doris.journal.JournalEntity;
@@ -93,6 +94,9 @@ public class BDBJournalCursor implements JournalCursor {
             return null;
         }
 
+        if 
(Env.getCurrentEnv().getForceSkipJournalIds().contains(String.valueOf(currentKey)))
 {
+            return Pair.of(currentKey++, null);
+        }
         Long key = currentKey;
         DatabaseEntry theKey = new DatabaseEntry();
         TupleBinding<Long> myBinding = 
TupleBinding.getPrimitiveBinding(Long.class);


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

Reply via email to