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");
}