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

qiaojialin pushed a commit to branch rel/1.2
in repository https://gitbox.apache.org/repos/asf/iotdb.git


The following commit(s) were added to refs/heads/rel/1.2 by this push:
     new 2b268d46f30 [To rel/1.2][IOTDB-6016]Release file num cost after cross 
compaction task (#10246)
2b268d46f30 is described below

commit 2b268d46f3081a7dcb4fc7e13fd69de0641e8ad3
Author: 周沛辰 <[email protected]>
AuthorDate: Tue Jun 20 21:28:44 2023 +0800

    [To rel/1.2][IOTDB-6016]Release file num cost after cross compaction task 
(#10246)
---
 .../execute/task/CrossSpaceCompactionTask.java     |  3 ++
 .../FastCrossCompactionPerformerTest.java          | 37 ++++++++++++++++++++++
 .../db/engine/compaction/MemoryControlTest.java    | 11 +++++++
 .../cross/CrossSpaceCompactionSelectorTest.java    |  2 ++
 4 files changed, 53 insertions(+)

diff --git 
a/server/src/main/java/org/apache/iotdb/db/engine/compaction/execute/task/CrossSpaceCompactionTask.java
 
b/server/src/main/java/org/apache/iotdb/db/engine/compaction/execute/task/CrossSpaceCompactionTask.java
index 7ce24e887cb..8d80ef45e25 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/engine/compaction/execute/task/CrossSpaceCompactionTask.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/engine/compaction/execute/task/CrossSpaceCompactionTask.java
@@ -274,6 +274,9 @@ public class CrossSpaceCompactionTask extends 
AbstractCompactionTask {
           true);
     } finally {
       SystemInfo.getInstance().resetCompactionMemoryCost(memoryCost);
+      SystemInfo.getInstance()
+          .decreaseCompactionFileNumCost(
+              selectedSequenceFiles.size() + selectedUnsequenceFiles.size());
       releaseAllLocksAndResetStatus();
       return isSuccess;
     }
diff --git 
a/server/src/test/java/org/apache/iotdb/db/engine/compaction/FastCrossCompactionPerformerTest.java
 
b/server/src/test/java/org/apache/iotdb/db/engine/compaction/FastCrossCompactionPerformerTest.java
index fa236ea2da4..831e194d423 100644
--- 
a/server/src/test/java/org/apache/iotdb/db/engine/compaction/FastCrossCompactionPerformerTest.java
+++ 
b/server/src/test/java/org/apache/iotdb/db/engine/compaction/FastCrossCompactionPerformerTest.java
@@ -25,6 +25,7 @@ import org.apache.iotdb.commons.path.PartialPath;
 import org.apache.iotdb.db.conf.IoTDBDescriptor;
 import 
org.apache.iotdb.db.engine.compaction.execute.performer.ICompactionPerformer;
 import 
org.apache.iotdb.db.engine.compaction.execute.performer.impl.FastCompactionPerformer;
+import 
org.apache.iotdb.db.engine.compaction.execute.task.CrossSpaceCompactionTask;
 import 
org.apache.iotdb.db.engine.compaction.execute.task.subtask.FastCompactionTaskSummary;
 import org.apache.iotdb.db.engine.compaction.execute.utils.CompactionUtils;
 import 
org.apache.iotdb.db.engine.compaction.execute.utils.reader.IDataBlockReader;
@@ -34,6 +35,7 @@ import org.apache.iotdb.db.engine.storagegroup.TsFileResource;
 import org.apache.iotdb.db.exception.StorageEngineException;
 import org.apache.iotdb.db.mpp.execution.fragment.FragmentInstanceContext;
 import org.apache.iotdb.db.query.control.FileReaderManager;
+import org.apache.iotdb.db.rescon.SystemInfo;
 import org.apache.iotdb.db.tools.validate.TsFileValidationTool;
 import org.apache.iotdb.db.utils.EnvironmentUtils;
 import org.apache.iotdb.tsfile.common.conf.TSFileDescriptor;
@@ -58,6 +60,7 @@ import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.concurrent.atomic.AtomicInteger;
 
 import static org.apache.iotdb.commons.conf.IoTDBConstant.PATH_SEPARATOR;
 import static org.apache.iotdb.db.utils.EnvironmentUtils.TEST_QUERY_JOB_ID;
@@ -4025,6 +4028,40 @@ public class FastCrossCompactionPerformerTest extends 
AbstractCompactionTest {
     }
   }
 
+  @Test
+  public void testReleaseFileNumAndMemoryAfterCrossTask()
+      throws IOException, MetadataException, WriteProcessException {
+    int oldMaxCrossCompactionCandidateFileNum =
+        SystemInfo.getInstance().getTotalFileLimitForCrossTask();
+    SystemInfo.getInstance().setTotalFileLimitForCrossTask(15);
+    SystemInfo.getInstance().getCompactionFileNumCost().set(0);
+    SystemInfo.getInstance().getCompactionMemoryCost().set(0);
+    try {
+      createFiles(6, 2, 3, 300, 0, 0, 50, 50, false, true);
+      createFiles(6, 2, 3, 300, 0, 0, 50, 50, false, false);
+      tsFileManager.addAll(seqResources, true);
+      tsFileManager.addAll(unseqResources, false);
+      CrossSpaceCompactionTask task =
+          new CrossSpaceCompactionTask(
+              0L,
+              tsFileManager,
+              seqResources,
+              unseqResources,
+              new FastCompactionPerformer(true),
+              new AtomicInteger(0),
+              1000,
+              0);
+      Assert.assertTrue(task.setSourceFilesToCompactionCandidate());
+      boolean success = task.checkValidAndSetMerging();
+      Assert.assertTrue(success);
+      Assert.assertTrue(task.start());
+      Assert.assertEquals(0, 
SystemInfo.getInstance().getCompactionFileNumCost().get());
+      Assert.assertEquals(0, 
SystemInfo.getInstance().getCompactionMemoryCost().get());
+    } finally {
+      
SystemInfo.getInstance().setTotalFileLimitForCrossTask(oldMaxCrossCompactionCandidateFileNum);
+    }
+  }
+
   private void validateSeqFiles() {
     TsFileValidationTool.clearMap(true);
     List<File> files = new ArrayList<>();
diff --git 
a/server/src/test/java/org/apache/iotdb/db/engine/compaction/MemoryControlTest.java
 
b/server/src/test/java/org/apache/iotdb/db/engine/compaction/MemoryControlTest.java
index 04d8d87a671..24c18395363 100644
--- 
a/server/src/test/java/org/apache/iotdb/db/engine/compaction/MemoryControlTest.java
+++ 
b/server/src/test/java/org/apache/iotdb/db/engine/compaction/MemoryControlTest.java
@@ -19,23 +19,34 @@
 
 package org.apache.iotdb.db.engine.compaction;
 
+import org.apache.iotdb.commons.exception.MetadataException;
 import 
org.apache.iotdb.db.engine.compaction.execute.task.CrossSpaceCompactionTask;
 import 
org.apache.iotdb.db.engine.compaction.execute.task.InnerSpaceCompactionTask;
 import org.apache.iotdb.db.engine.storagegroup.TsFileManager;
 import org.apache.iotdb.db.engine.storagegroup.TsFileResource;
 import org.apache.iotdb.db.engine.storagegroup.TsFileResourceStatus;
 import org.apache.iotdb.db.rescon.SystemInfo;
+import org.apache.iotdb.tsfile.exception.write.WriteProcessException;
 
 import org.junit.Assert;
+import org.junit.Before;
 import org.junit.Test;
 import org.mockito.Mockito;
 
 import java.io.File;
+import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.concurrent.atomic.AtomicInteger;
 
 public class MemoryControlTest {
+  @Before
+  public void setUp()
+      throws IOException, WriteProcessException, MetadataException, 
InterruptedException {
+    SystemInfo.getInstance().getCompactionFileNumCost().set(0);
+    SystemInfo.getInstance().getCompactionMemoryCost().set(0);
+  }
+
   @Test
   public void testFailedToAllocateMemoryInCrossTask() throws Exception {
     List<TsFileResource> sequenceFiles = new ArrayList<>();
diff --git 
a/server/src/test/java/org/apache/iotdb/db/engine/compaction/cross/CrossSpaceCompactionSelectorTest.java
 
b/server/src/test/java/org/apache/iotdb/db/engine/compaction/cross/CrossSpaceCompactionSelectorTest.java
index 6407418ea08..d4d4c851231 100644
--- 
a/server/src/test/java/org/apache/iotdb/db/engine/compaction/cross/CrossSpaceCompactionSelectorTest.java
+++ 
b/server/src/test/java/org/apache/iotdb/db/engine/compaction/cross/CrossSpaceCompactionSelectorTest.java
@@ -180,6 +180,8 @@ public class CrossSpaceCompactionSelectorTest extends 
AbstractCompactionTest {
       throws IOException, MetadataException, WriteProcessException {
     int oldMaxFileNumForCompaction = 
SystemInfo.getInstance().getTotalFileLimitForCrossTask();
     SystemInfo.getInstance().setTotalFileLimitForCrossTask(1);
+    SystemInfo.getInstance().getCompactionFileNumCost().set(0);
+    SystemInfo.getInstance().getCompactionMemoryCost().set(0);
     try {
       createFiles(19, 2, 3, 50, 0, 10000, 50, 50, false, true);
       createFiles(1, 2, 3, 3000, 0, 10000, 50, 50, false, false);

Reply via email to