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/08/23 12:41:42 UTC
[iotdb] branch master updated: [IOTDB-4210] Fix deadlock during WALNode recover if there's another one already running (#7091)
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 c90be56685 [IOTDB-4210] Fix deadlock during WALNode recover if there's another one already running (#7091)
c90be56685 is described below
commit c90be56685b5d21518d856b1d2ed821489c4c7e9
Author: BaiJian <er...@hotmail.com>
AuthorDate: Tue Aug 23 20:41:33 2022 +0800
[IOTDB-4210] Fix deadlock during WALNode recover if there's another one already running (#7091)
---
.../java/org/apache/iotdb/db/engine/storagegroup/DataRegion.java | 8 ++++++--
.../apache/iotdb/db/metadata/schemaregion/SchemaRegionUtils.java | 7 +++----
.../java/org/apache/iotdb/db/wal/recover/WALRecoverManager.java | 1 +
3 files changed, 10 insertions(+), 6 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/metadata/schemaregion/SchemaRegionUtils.java b/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/SchemaRegionUtils.java
index 7b43d86c20..f9049481eb 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/SchemaRegionUtils.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/SchemaRegionUtils.java
@@ -45,12 +45,11 @@ public class SchemaRegionUtils {
}
for (File file : sgFiles) {
if (file.delete()) {
- logger.info("delete schema region folder {}", schemaRegionDir.getAbsolutePath());
+ logger.info("delete schema region file {}", file.getAbsolutePath());
} else {
- logger.info("delete schema region folder {} failed.", schemaRegionDir.getAbsolutePath());
+ logger.info("delete schema region file {} failed.", file.getAbsolutePath());
throw new MetadataException(
- String.format(
- "Failed to delete schema region folder %s", schemaRegionDir.getAbsolutePath()));
+ String.format("Failed to delete schema region file %s", file.getAbsolutePath()));
}
}
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();