This is an automated email from the ASF dual-hosted git repository. xingtanzjr pushed a commit to branch changcheng_0213 in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit 043dcc8fc3109822f6600857ea46321a2cb6748a Author: Jinrui.Zhang <[email protected]> AuthorDate: Wed Jan 18 14:55:20 2023 +0800 change logic of cross selector --- .../impl/RewriteCrossSpaceCompactionSelector.java | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/server/src/main/java/org/apache/iotdb/db/engine/compaction/selector/impl/RewriteCrossSpaceCompactionSelector.java b/server/src/main/java/org/apache/iotdb/db/engine/compaction/selector/impl/RewriteCrossSpaceCompactionSelector.java index 1a3bb4480d..8ce59d35c1 100644 --- a/server/src/main/java/org/apache/iotdb/db/engine/compaction/selector/impl/RewriteCrossSpaceCompactionSelector.java +++ b/server/src/main/java/org/apache/iotdb/db/engine/compaction/selector/impl/RewriteCrossSpaceCompactionSelector.java @@ -30,6 +30,7 @@ import org.apache.iotdb.db.engine.compaction.selector.utils.CrossSpaceCompaction import org.apache.iotdb.db.engine.compaction.selector.utils.CrossSpaceCompactionCandidate.CrossCompactionTaskResourceSplit; import org.apache.iotdb.db.engine.compaction.selector.utils.CrossSpaceCompactionCandidate.TsFileResourceCandidate; import org.apache.iotdb.db.engine.storagegroup.TsFileManager; +import org.apache.iotdb.db.engine.storagegroup.TsFileNameGenerator; import org.apache.iotdb.db.engine.storagegroup.TsFileResource; import org.apache.iotdb.db.exception.MergeException; import org.apache.iotdb.db.rescon.SystemInfo; @@ -186,10 +187,20 @@ public class RewriteCrossSpaceCompactionSelector implements ICrossSpaceSelector CrossCompactionTaskResource taskResource, TsFileResource unseqFile, List<TsFileResource> seqFiles, - long memoryCost) { + long memoryCost) + throws IOException { + // we add a hard limit for cross compaction that selected unseqFile should be compacted in inner + // space at least once. This is used to make to improve the priority of inner compaction and + // avoid too much cross compaction with small files. + TsFileNameGenerator.TsFileName unseqFileName = + TsFileNameGenerator.getTsFileName(unseqFile.getTsFile().getName()); + if (unseqFileName.getInnerCompactionCnt() < 1) { + return false; + } // currently, we must allow at least one unseqFile be selected to handle the situation that // an unseqFile has huge time range but few data points. - if (taskResource.getUnseqFiles().isEmpty()) { + // IMPORTANT: this logic is opposite to previous one + if (taskResource.getUnseqFiles().size() == 0) { return true; } long totalFileSize = unseqFile.getTsFileSize();
