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 <[email protected]> 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) {
