You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by ma...@apache.org on 2022/11/25 06:54:31 UTC

[iotdb] 01/01: correct the size of deleted tsfile in compaction

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

marklau99 pushed a commit to branch IOTDB-5004
in repository https://gitbox.apache.org/repos/asf/iotdb.git

commit eaff3cd77cb777e4be6eb9131a18c486289eee56
Author: LiuXuxin <li...@outlook.com>
AuthorDate: Fri Nov 25 14:54:09 2022 +0800

    correct the size of deleted tsfile in compaction
---
 .../compaction/cross/CrossSpaceCompactionTask.java      | 17 ++++++++---------
 .../compaction/inner/InnerSpaceCompactionTask.java      |  8 +++++---
 2 files changed, 13 insertions(+), 12 deletions(-)

diff --git a/server/src/main/java/org/apache/iotdb/db/engine/compaction/cross/CrossSpaceCompactionTask.java b/server/src/main/java/org/apache/iotdb/db/engine/compaction/cross/CrossSpaceCompactionTask.java
index a966c93f7f..d4aa2db32d 100644
--- a/server/src/main/java/org/apache/iotdb/db/engine/compaction/cross/CrossSpaceCompactionTask.java
+++ b/server/src/main/java/org/apache/iotdb/db/engine/compaction/cross/CrossSpaceCompactionTask.java
@@ -168,15 +168,11 @@ public class CrossSpaceCompactionTask extends AbstractCompactionTask {
         releaseReadAndLockWrite(selectedSequenceFiles);
         releaseReadAndLockWrite(selectedUnsequenceFiles);
 
-        deleteOldFiles(selectedSequenceFiles);
-        deleteOldFiles(selectedUnsequenceFiles);
+        long sequenceFileSize = deleteOldFiles(selectedSequenceFiles);
+        long unsequenceFileSize = deleteOldFiles(selectedUnsequenceFiles);
+        TsFileMetricManager.getInstance().deleteFile(sequenceFileSize, true);
+        TsFileMetricManager.getInstance().deleteFile(unsequenceFileSize, false);
 
-        for (TsFileResource seqResource : selectedSequenceFiles) {
-          TsFileMetricManager.getInstance().deleteFile(seqResource.getTsFileSize(), true);
-        }
-        for (TsFileResource unseqResource : selectedUnsequenceFiles) {
-          TsFileMetricManager.getInstance().deleteFile(unseqResource.getTsFileSize(), false);
-        }
         for (TsFileResource targetResource : targetTsfileResourceList) {
           TsFileMetricManager.getInstance().addFile(targetResource.getTsFileSize(), true);
         }
@@ -299,14 +295,17 @@ public class CrossSpaceCompactionTask extends AbstractCompactionTask {
     selectedUnsequenceFiles.forEach(x -> x.setStatus(TsFileResourceStatus.CLOSED));
   }
 
-  private void deleteOldFiles(List<TsFileResource> tsFileResourceList) throws IOException {
+  private long deleteOldFiles(List<TsFileResource> tsFileResourceList) throws IOException {
+    long totalSize = 0;
     for (TsFileResource tsFileResource : tsFileResourceList) {
       FileReaderManager.getInstance().closeFileAndRemoveReader(tsFileResource.getTsFilePath());
+      totalSize += tsFileResource.getTsFileSize();
       tsFileResource.remove();
       LOGGER.info(
           "[CrossSpaceCompaction] Delete TsFile :{}.",
           tsFileResource.getTsFile().getAbsolutePath());
     }
+    return totalSize;
   }
 
   private void releaseReadAndLockWrite(List<TsFileResource> tsFileResourceList) {
diff --git a/server/src/main/java/org/apache/iotdb/db/engine/compaction/inner/InnerSpaceCompactionTask.java b/server/src/main/java/org/apache/iotdb/db/engine/compaction/inner/InnerSpaceCompactionTask.java
index 13e68bdea8..a3c911cf13 100644
--- a/server/src/main/java/org/apache/iotdb/db/engine/compaction/inner/InnerSpaceCompactionTask.java
+++ b/server/src/main/java/org/apache/iotdb/db/engine/compaction/inner/InnerSpaceCompactionTask.java
@@ -203,13 +203,15 @@ public class InnerSpaceCompactionTask extends AbstractCompactionTask {
           storageGroupName,
           dataRegionId);
       // delete the old files
+      long totalSizeOfDeletedFile = 0L;
+      for (TsFileResource resource : selectedTsFileResourceList) {
+        totalSizeOfDeletedFile += resource.getTsFileSize();
+      }
       CompactionUtils.deleteTsFilesInDisk(
           selectedTsFileResourceList, storageGroupName + "-" + dataRegionId);
       CompactionUtils.deleteModificationForSourceFile(
           selectedTsFileResourceList, storageGroupName + "-" + dataRegionId);
-      for (TsFileResource resource : selectedTsFileResourceList) {
-        TsFileMetricManager.getInstance().deleteFile(resource.getTsFile().length(), sequence);
-      }
+      TsFileMetricManager.getInstance().deleteFile(totalSizeOfDeletedFile, sequence);
       // inner space compaction task has only one target file
       if (targetTsFileList.size() > 0) {
         // if the target tsfile is empty file, it will be removed