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();