You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by ha...@apache.org on 2022/04/13 07:15:22 UTC

[iotdb] branch master updated: [IOTDB-2897] Fix wal recover deadlock (#5499)

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

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


The following commit(s) were added to refs/heads/master by this push:
     new 9e1a508be4 [IOTDB-2897] Fix wal recover deadlock (#5499)
9e1a508be4 is described below

commit 9e1a508be4d335d9ccac6f90b7c568bc5c5fe182
Author: Alan Choo <43...@users.noreply.github.com>
AuthorDate: Wed Apr 13 15:15:16 2022 +0800

    [IOTDB-2897] Fix wal recover deadlock (#5499)
---
 .../src/main/java/org/apache/iotdb/commons/concurrent/ThreadName.java | 1 +
 server/src/main/java/org/apache/iotdb/db/engine/StorageEngine.java    | 4 ++--
 .../main/java/org/apache/iotdb/db/wal/recover/WALNodeRecoverTask.java | 4 +++-
 3 files changed, 6 insertions(+), 3 deletions(-)

diff --git a/node-commons/src/main/java/org/apache/iotdb/commons/concurrent/ThreadName.java b/node-commons/src/main/java/org/apache/iotdb/commons/concurrent/ThreadName.java
index 2c86778dfa..6e76e05556 100644
--- a/node-commons/src/main/java/org/apache/iotdb/commons/concurrent/ThreadName.java
+++ b/node-commons/src/main/java/org/apache/iotdb/commons/concurrent/ThreadName.java
@@ -34,6 +34,7 @@ public enum ThreadName {
   FLUSH_PARTIAL_POLICY("FlushPartialPolicy"),
   FORCE_FLUSH_ALL_POLICY("ForceFlushAllPolicy"),
   STAT_MONITOR("StatMonitor"),
+  DATA_REGION_RECOVER_SERVICE("Data-Region-Recover"),
   FLUSH_SERVICE("Flush"),
   FLUSH_SUB_TASK_SERVICE("Flush-SubTask"),
   COMPACTION_SERVICE("Compaction"),
diff --git a/server/src/main/java/org/apache/iotdb/db/engine/StorageEngine.java b/server/src/main/java/org/apache/iotdb/db/engine/StorageEngine.java
index 16d8fd5680..f589d8f402 100644
--- a/server/src/main/java/org/apache/iotdb/db/engine/StorageEngine.java
+++ b/server/src/main/java/org/apache/iotdb/db/engine/StorageEngine.java
@@ -232,8 +232,8 @@ public class StorageEngine implements IService {
   public void recover() {
     setAllSgReady(false);
     recoveryThreadPool =
-        IoTDBThreadPoolFactory.newFixedThreadPool(
-            Runtime.getRuntime().availableProcessors(), "Recovery-Thread-Pool");
+        IoTDBThreadPoolFactory.newCachedThreadPool(
+            ThreadName.DATA_REGION_RECOVER_SERVICE.getName());
 
     List<IStorageGroupMNode> sgNodes = IoTDB.schemaProcessor.getAllStorageGroupNodes();
     // init wal recover manager
diff --git a/server/src/main/java/org/apache/iotdb/db/wal/recover/WALNodeRecoverTask.java b/server/src/main/java/org/apache/iotdb/db/wal/recover/WALNodeRecoverTask.java
index 0620c5b25d..b5dad827e8 100644
--- a/server/src/main/java/org/apache/iotdb/db/wal/recover/WALNodeRecoverTask.java
+++ b/server/src/main/java/org/apache/iotdb/db/wal/recover/WALNodeRecoverTask.java
@@ -91,7 +91,9 @@ public class WALNodeRecoverTask implements Runnable {
       File tsFile = new File(memTableInfo.getTsFilePath());
       UnsealedTsFileRecoverPerformer recoverPerformer =
           walRecoverManger.removeRecoverPerformer(tsFile.getAbsolutePath());
-      memTableId2RecoverPerformer.put(memTableInfo.getMemTableId(), recoverPerformer);
+      if (recoverPerformer != null) {
+        memTableId2RecoverPerformer.put(memTableInfo.getMemTableId(), recoverPerformer);
+      }
     }
   }