This is an automated email from the ASF dual-hosted git repository.

jackietien 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 1969f7e18b3 Fix deadlock when flush an empty TsFile and query 
concurrently
1969f7e18b3 is described below

commit 1969f7e18b3fae85afa04cd9ed21bec1536b7b73
Author: Haonan <[email protected]>
AuthorDate: Mon Mar 18 11:30:44 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) {

Reply via email to