You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by xi...@apache.org on 2022/09/27 10:24:32 UTC
[iotdb] 01/01: fix the issue that taking snapshot may stuck when waiting for flush
This is an automated email from the ASF dual-hosted git repository.
xingtanzjr pushed a commit to branch xingtanzjr/fix_snapshot_taker
in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit 2496f0932e08ed280d93ddc917943828f627d784
Author: Jinrui.Zhang <xi...@gmail.com>
AuthorDate: Tue Sep 27 18:24:18 2022 +0800
fix the issue that taking snapshot may stuck when waiting for flush
---
.../apache/iotdb/db/engine/snapshot/SnapshotTaker.java | 16 ++++++++++------
1 file changed, 10 insertions(+), 6 deletions(-)
diff --git a/server/src/main/java/org/apache/iotdb/db/engine/snapshot/SnapshotTaker.java b/server/src/main/java/org/apache/iotdb/db/engine/snapshot/SnapshotTaker.java
index 4b1f98aa4e..46bb086ff5 100644
--- a/server/src/main/java/org/apache/iotdb/db/engine/snapshot/SnapshotTaker.java
+++ b/server/src/main/java/org/apache/iotdb/db/engine/snapshot/SnapshotTaker.java
@@ -68,17 +68,21 @@ public class SnapshotTaker {
throw new IOException(String.format("Failed to create directory %s", snapshotDir));
}
- if (flushBeforeSnapshot) {
- dataRegion.syncCloseAllWorkingTsFileProcessors();
- }
-
File snapshotLog = new File(snapshotDir, SnapshotLogger.SNAPSHOT_LOG_NAME);
try {
snapshotLogger = new SnapshotLogger(snapshotLog);
- boolean success = true;
+ boolean success;
- readLockTheFile();
try {
+ readLockTheFile();
+ if (flushBeforeSnapshot) {
+ try {
+ dataRegion.writeLock("snapshotTaker");
+ dataRegion.syncCloseAllWorkingTsFileProcessors();
+ } finally {
+ dataRegion.writeUnlock();
+ }
+ }
success = createSnapshot(seqFiles, snapshotDir.getName());
success = createSnapshot(unseqFiles, snapshotDir.getName()) && success;
} finally {