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 2024/03/14 08:53:47 UTC
(iotdb) 01/01: Fix deadlock when flush an empty TsFile and query concurrently
This is an automated email from the ASF dual-hosted git repository.
haonan pushed a commit to branch fix_flush_query_deadlock
in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit 860566a71acf6a0fe678c9d916ac8c1b46af131c
Author: HTHou <hh...@outlook.com>
AuthorDate: Thu Mar 14 16:53:24 2024 +0800
Fix deadlock when flush an empty TsFile and query concurrently
---
.../org/apache/iotdb/db/storageengine/dataregion/DataRegion.java | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/DataRegion.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/DataRegion.java
index 15864cc9d80..c7d071f6004 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/DataRegion.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/DataRegion.java
@@ -2356,19 +2356,21 @@ public class DataRegion implements IDataRegionForQuery {
tsFileProcessor.close();
if (isEmptyFile) {
tsFileProcessor.getTsFileResource().remove();
- tsFileManager.remove(tsFileProcessor.getTsFileResource(), tsFileProcessor.isSequence());
} else if (isValidateTsFileFailed) {
String tsFilePath = tsFileProcessor.getTsFileResource().getTsFile().getAbsolutePath();
renameAndHandleError(tsFilePath, tsFilePath + BROKEN_SUFFIX);
renameAndHandleError(
tsFilePath + RESOURCE_SUFFIX, tsFilePath + RESOURCE_SUFFIX + BROKEN_SUFFIX);
- tsFileManager.remove(tsFileProcessor.getTsFileResource(), tsFileProcessor.isSequence());
} else {
tsFileResourceManager.registerSealedTsFileResource(tsFileProcessor.getTsFileResource());
}
} finally {
closeQueryLock.writeLock().unlock();
}
+ if (isEmptyFile || isValidateTsFileFailed) {
+ tsFileManager.remove(tsFileProcessor.getTsFileResource(), tsFileProcessor.isSequence());
+ }
+
// closingSequenceTsFileProcessor is a thread safety class.
synchronized (closeStorageGroupCondition) {