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();

Reply via email to