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

xingtanzjr pushed a commit to branch compaction_refine
in repository https://gitbox.apache.org/repos/asf/iotdb.git


The following commit(s) were added to refs/heads/compaction_refine by this push:
     new fc4239546c complete optimization of inner space selector
fc4239546c is described below

commit fc4239546c7cfb6f68ceb0ca50978feb4c50cee1
Author: Jinrui.Zhang <[email protected]>
AuthorDate: Sat Dec 17 17:58:19 2022 +0800

    complete optimization of inner space selector
---
 .../iotdb/db/engine/compaction/CompactionScheduler.java  |  7 ++++---
 .../engine/compaction/inner/IInnerSeqSpaceSelector.java  |  3 ++-
 .../compaction/inner/IInnerUnseqSpaceSelector.java       |  3 ++-
 .../inner/sizetiered/SizeTieredCompactionSelector.java   | 16 +++-------------
 .../db/engine/compaction/task/ICompactionSelector.java   |  3 ++-
 5 files changed, 13 insertions(+), 19 deletions(-)

diff --git 
a/server/src/main/java/org/apache/iotdb/db/engine/compaction/CompactionScheduler.java
 
b/server/src/main/java/org/apache/iotdb/db/engine/compaction/CompactionScheduler.java
index f2d1fc7131..65ee4c0a9c 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/engine/compaction/CompactionScheduler.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/engine/compaction/CompactionScheduler.java
@@ -25,6 +25,7 @@ import org.apache.iotdb.db.conf.IoTDBDescriptor;
 import org.apache.iotdb.db.engine.compaction.cross.CrossSpaceCompactionTask;
 import org.apache.iotdb.db.engine.compaction.cross.ICrossSpaceSelector;
 import org.apache.iotdb.db.engine.compaction.inner.InnerSpaceCompactionTask;
+import 
org.apache.iotdb.db.engine.compaction.inner.sizetiered.InnerCompactionCandidate;
 import org.apache.iotdb.db.engine.compaction.performer.ICompactionPerformer;
 import org.apache.iotdb.db.engine.compaction.task.ICompactionSelector;
 import org.apache.iotdb.db.engine.storagegroup.TsFileManager;
@@ -103,12 +104,12 @@ public class CompactionScheduler {
               .getInnerUnsequenceCompactionSelector()
               .createInstance(storageGroupName, dataRegionId, timePartition, 
tsFileManager);
     }
-    List<List<TsFileResource>> taskList =
+    List<InnerCompactionCandidate> candidates =
         innerSpaceCompactionSelector.selectInnerSpaceTask(
             sequence
                 ? tsFileManager.getSequenceListByTimePartition(timePartition)
                 : 
tsFileManager.getUnsequenceListByTimePartition(timePartition));
-    for (List<TsFileResource> candidateFileList : taskList) {
+    for (InnerCompactionCandidate candidate : candidates) {
       ICompactionPerformer performer =
           sequence
               ? IoTDBDescriptor.getInstance()
@@ -124,7 +125,7 @@ public class CompactionScheduler {
               new InnerSpaceCompactionTask(
                   timePartition,
                   tsFileManager,
-                  candidateFileList,
+                  candidate.getTsFileResources(),
                   sequence,
                   performer,
                   CompactionTaskManager.getNextCompactionTaskId()));
diff --git 
a/server/src/main/java/org/apache/iotdb/db/engine/compaction/inner/IInnerSeqSpaceSelector.java
 
b/server/src/main/java/org/apache/iotdb/db/engine/compaction/inner/IInnerSeqSpaceSelector.java
index 7a6b326a8e..298a8ac52c 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/engine/compaction/inner/IInnerSeqSpaceSelector.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/engine/compaction/inner/IInnerSeqSpaceSelector.java
@@ -18,11 +18,12 @@
  */
 package org.apache.iotdb.db.engine.compaction.inner;
 
+import 
org.apache.iotdb.db.engine.compaction.inner.sizetiered.InnerCompactionCandidate;
 import org.apache.iotdb.db.engine.compaction.task.ICompactionSelector;
 import org.apache.iotdb.db.engine.storagegroup.TsFileResource;
 
 import java.util.List;
 
 public interface IInnerSeqSpaceSelector extends ICompactionSelector {
-  List<List<TsFileResource>> selectInnerSpaceTask(List<TsFileResource> 
resources);
+  List<InnerCompactionCandidate> selectInnerSpaceTask(List<TsFileResource> 
resources);
 }
diff --git 
a/server/src/main/java/org/apache/iotdb/db/engine/compaction/inner/IInnerUnseqSpaceSelector.java
 
b/server/src/main/java/org/apache/iotdb/db/engine/compaction/inner/IInnerUnseqSpaceSelector.java
index c7f02f5f65..34b0f6ed07 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/engine/compaction/inner/IInnerUnseqSpaceSelector.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/engine/compaction/inner/IInnerUnseqSpaceSelector.java
@@ -18,11 +18,12 @@
  */
 package org.apache.iotdb.db.engine.compaction.inner;
 
+import 
org.apache.iotdb.db.engine.compaction.inner.sizetiered.InnerCompactionCandidate;
 import org.apache.iotdb.db.engine.compaction.task.ICompactionSelector;
 import org.apache.iotdb.db.engine.storagegroup.TsFileResource;
 
 import java.util.List;
 
 public interface IInnerUnseqSpaceSelector extends ICompactionSelector {
-  List<List<TsFileResource>> selectInnerSpaceTask(List<TsFileResource> 
resources);
+  List<InnerCompactionCandidate> selectInnerSpaceTask(List<TsFileResource> 
resources);
 }
diff --git 
a/server/src/main/java/org/apache/iotdb/db/engine/compaction/inner/sizetiered/SizeTieredCompactionSelector.java
 
b/server/src/main/java/org/apache/iotdb/db/engine/compaction/inner/sizetiered/SizeTieredCompactionSelector.java
index d1e4586f2c..928b02b223 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/engine/compaction/inner/sizetiered/SizeTieredCompactionSelector.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/engine/compaction/inner/sizetiered/SizeTieredCompactionSelector.java
@@ -36,9 +36,7 @@ import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Comparator;
-import java.util.LinkedList;
 import java.util.List;
-import java.util.PriorityQueue;
 
 /**
  * SizeTieredCompactionSelector selects files to be compacted based on the 
size of files. The
@@ -143,24 +141,16 @@ public class SizeTieredCompactionSelector
    * @return Returns whether the file was found and submits the merge task
    */
   @Override
-  public List<List<TsFileResource>> selectInnerSpaceTask(List<TsFileResource> 
tsFileResources) {
-    PriorityQueue<InnerCompactionCandidate> taskPriorityQueue =
-        new PriorityQueue<>(new SizeTieredCompactionTaskComparator());
+  public List<InnerCompactionCandidate> 
selectInnerSpaceTask(List<TsFileResource> tsFileResources) {
     try {
       int maxLevel = searchMaxFileLevel(tsFileResources);
       for (int currentLevel = 0; currentLevel <= maxLevel; currentLevel++) {
         List<InnerCompactionCandidate> candidates = 
selectLevelTask(tsFileResources, currentLevel);
         if (candidates.size() > 0) {
-          taskPriorityQueue.addAll(candidates);
-          break;
+          candidates.sort(new SizeTieredCompactionTaskComparator());
+          return candidates;
         }
       }
-      List<List<TsFileResource>> taskList = new LinkedList<>();
-      while (taskPriorityQueue.size() > 0) {
-        List<TsFileResource> resources = 
taskPriorityQueue.poll().getTsFileResources();
-        taskList.add(resources);
-      }
-      return taskList;
     } catch (Exception e) {
       LOGGER.error("Exception occurs while selecting files", e);
     }
diff --git 
a/server/src/main/java/org/apache/iotdb/db/engine/compaction/task/ICompactionSelector.java
 
b/server/src/main/java/org/apache/iotdb/db/engine/compaction/task/ICompactionSelector.java
index e198acda6a..79ba394b74 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/engine/compaction/task/ICompactionSelector.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/engine/compaction/task/ICompactionSelector.java
@@ -21,6 +21,7 @@ package org.apache.iotdb.db.engine.compaction.task;
 import org.apache.iotdb.db.engine.compaction.constant.CrossCompactionPerformer;
 import 
org.apache.iotdb.db.engine.compaction.cross.utils.AbstractCompactionEstimator;
 import 
org.apache.iotdb.db.engine.compaction.cross.utils.ReadPointCrossCompactionEstimator;
+import 
org.apache.iotdb.db.engine.compaction.inner.sizetiered.InnerCompactionCandidate;
 import org.apache.iotdb.db.engine.storagegroup.TsFileResource;
 import org.apache.iotdb.tsfile.utils.Pair;
 
@@ -39,7 +40,7 @@ public interface ICompactionSelector {
    * It takes the list of tsfile in a time partition as input, and returns a 
list of list. Each list in
    * the returned list is the source files of one compaction tasks.
    */
-  default List<List<TsFileResource>> selectInnerSpaceTask(List<TsFileResource> 
resources) {
+  default List<InnerCompactionCandidate> 
selectInnerSpaceTask(List<TsFileResource> resources) {
     throw new RuntimeException("This kind of selector cannot be used to select 
inner space task");
   }
 

Reply via email to