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 2c8a8b0346f Add removeTsFile for DataRegion (#12126)
2c8a8b0346f is described below

commit 2c8a8b0346f759fad0ebe8a507e8ee2ca5bd75dd
Author: Alan Choo <[email protected]>
AuthorDate: Wed Mar 6 09:36:54 2024 +0800

    Add removeTsFile for DataRegion (#12126)
---
 .../db/storageengine/dataregion/DataRegion.java    | 66 ++++++++++++++--------
 1 file changed, 43 insertions(+), 23 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 d08af91dfe3..2de67afec9d 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
@@ -2894,6 +2894,21 @@ public class DataRegion implements IDataRegionForQuery {
     return workSequenceTsFileProcessors.values();
   }
 
+  public boolean removeTsFile(File fileToBeRemoved) {
+    TsFileResource tsFileResourceToBeRemoved = 
unloadTsFileInside(fileToBeRemoved);
+    if (tsFileResourceToBeRemoved == null) {
+      return false;
+    }
+    tsFileResourceToBeRemoved.writeLock();
+    try {
+      tsFileResourceToBeRemoved.remove();
+      logger.info("Remove tsfile {} successfully.", 
tsFileResourceToBeRemoved.getTsFile());
+    } finally {
+      tsFileResourceToBeRemoved.writeUnlock();
+    }
+    return true;
+  }
+
   /**
    * Unload tsfile and move it to the target directory if it exists.
    *
@@ -2905,29 +2920,47 @@ public class DataRegion implements IDataRegionForQuery {
    * @return whether the file to be unloaded exists. @UsedBy load external 
tsfile module.
    */
   public boolean unloadTsfile(File fileToBeUnloaded, File targetDir) throws 
IOException {
-    writeLock("unloadTsfile");
-    TsFileResource tsFileResourceToBeMoved = null;
+    TsFileResource tsFileResourceToBeMoved = 
unloadTsFileInside(fileToBeUnloaded);
+    if (tsFileResourceToBeMoved == null) {
+      return false;
+    }
+    tsFileResourceToBeMoved.writeLock();
+    try {
+      tsFileResourceToBeMoved.moveTo(targetDir);
+      logger.info(
+          "Move tsfile {} to target dir {} successfully.",
+          tsFileResourceToBeMoved.getTsFile(),
+          targetDir.getPath());
+    } finally {
+      tsFileResourceToBeMoved.writeUnlock();
+    }
+    return true;
+  }
+
+  private TsFileResource unloadTsFileInside(File fileToBeUnloaded) {
+    writeLock("unloadTsFileInside");
+    TsFileResource unloadedTsFileResource = null;
     try {
       Iterator<TsFileResource> sequenceIterator = 
tsFileManager.getIterator(true);
       while (sequenceIterator.hasNext()) {
         TsFileResource sequenceResource = sequenceIterator.next();
         if 
(sequenceResource.getTsFile().getName().equals(fileToBeUnloaded.getName())) {
-          tsFileResourceToBeMoved = sequenceResource;
-          tsFileManager.remove(tsFileResourceToBeMoved, true);
+          unloadedTsFileResource = sequenceResource;
+          tsFileManager.remove(unloadedTsFileResource, true);
           FileMetrics.getInstance()
-              .deleteTsFile(true, 
Collections.singletonList(tsFileResourceToBeMoved));
+              .deleteTsFile(true, 
Collections.singletonList(unloadedTsFileResource));
           break;
         }
       }
-      if (tsFileResourceToBeMoved == null) {
+      if (unloadedTsFileResource == null) {
         Iterator<TsFileResource> unsequenceIterator = 
tsFileManager.getIterator(false);
         while (unsequenceIterator.hasNext()) {
           TsFileResource unsequenceResource = unsequenceIterator.next();
           if 
(unsequenceResource.getTsFile().getName().equals(fileToBeUnloaded.getName())) {
-            tsFileResourceToBeMoved = unsequenceResource;
-            tsFileManager.remove(tsFileResourceToBeMoved, false);
+            unloadedTsFileResource = unsequenceResource;
+            tsFileManager.remove(unloadedTsFileResource, false);
             FileMetrics.getInstance()
-                .deleteTsFile(false, 
Collections.singletonList(tsFileResourceToBeMoved));
+                .deleteTsFile(false, 
Collections.singletonList(unloadedTsFileResource));
             break;
           }
         }
@@ -2935,20 +2968,7 @@ public class DataRegion implements IDataRegionForQuery {
     } finally {
       writeUnlock();
     }
-    if (tsFileResourceToBeMoved == null) {
-      return false;
-    }
-    tsFileResourceToBeMoved.writeLock();
-    try {
-      tsFileResourceToBeMoved.moveTo(targetDir);
-      logger.info(
-          "Move tsfile {} to target dir {} successfully.",
-          tsFileResourceToBeMoved.getTsFile(),
-          targetDir.getPath());
-    } finally {
-      tsFileResourceToBeMoved.writeUnlock();
-    }
-    return true;
+    return unloadedTsFileResource;
   }
 
   /**

Reply via email to