You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by er...@apache.org on 2022/08/23 08:31:58 UTC

[iotdb] 01/01: [IOTDB-4210] Fix deadlock during WALNode recover if there's another one already running

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

ericpai pushed a commit to branch bugfix/iotdb-4210
in repository https://gitbox.apache.org/repos/asf/iotdb.git

commit e81a9c518dfe778127f3717f4624c80e26684dae
Author: ericpai <er...@hotmail.com>
AuthorDate: Tue Aug 23 16:31:41 2022 +0800

    [IOTDB-4210] Fix deadlock during WALNode recover if there's another one already running
---
 .../java/org/apache/iotdb/db/engine/storagegroup/DataRegion.java  | 8 ++++++--
 .../java/org/apache/iotdb/db/wal/recover/WALRecoverManager.java   | 1 +
 2 files changed, 7 insertions(+), 2 deletions(-)

diff --git a/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/DataRegion.java b/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/DataRegion.java
index 6169901c29..7a8a891104 100755
--- a/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/DataRegion.java
+++ b/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/DataRegion.java
@@ -475,7 +475,9 @@ public class DataRegion {
             value.remove(value.size() - 1);
             WALRecoverListener recoverListener =
                 recoverUnsealedTsFile(tsFileResource, DataRegionRecoveryContext, true);
-            recoverListeners.add(recoverListener);
+            if (recoverListener != null) {
+              recoverListeners.add(recoverListener);
+            }
           }
         }
       }
@@ -489,7 +491,9 @@ public class DataRegion {
             value.remove(value.size() - 1);
             WALRecoverListener recoverListener =
                 recoverUnsealedTsFile(tsFileResource, DataRegionRecoveryContext, false);
-            recoverListeners.add(recoverListener);
+            if (recoverListener != null) {
+              recoverListeners.add(recoverListener);
+            }
           }
         }
       }
diff --git a/server/src/main/java/org/apache/iotdb/db/wal/recover/WALRecoverManager.java b/server/src/main/java/org/apache/iotdb/db/wal/recover/WALRecoverManager.java
index 27e54202ca..7ff0a186d8 100644
--- a/server/src/main/java/org/apache/iotdb/db/wal/recover/WALRecoverManager.java
+++ b/server/src/main/java/org/apache/iotdb/db/wal/recover/WALRecoverManager.java
@@ -175,6 +175,7 @@ public class WALRecoverManager {
   public WALRecoverListener addRecoverPerformer(UnsealedTsFileRecoverPerformer recoverPerformer) {
     if (hasStarted) {
       logger.error("Cannot recover tsfile from wal because wal recovery has already started");
+      return null;
     } else {
       try {
         String canonicalPath = recoverPerformer.getTsFileResource().getTsFile().getCanonicalPath();