complete optimization of inner space selector
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 f2d1fc71..65ee4c0 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.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 @@ .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 @@ 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 7a6b326..298a8ac 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 c7f02f5..34b0f6e 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 d1e4586..928b02b 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.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 @@ * @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 e198acd..79ba394 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 @@ 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 @@ * 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"); }