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:57 UTC

[iotdb] branch bugfix/iotdb-4210 created (now e81a9c518d)

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

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


      at e81a9c518d [IOTDB-4210] Fix deadlock during WALNode recover if there's another one already running

This branch includes the following new commits:

     new e81a9c518d [IOTDB-4210] Fix deadlock during WALNode recover if there's another one already running

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



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

Posted by er...@apache.org.
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();