You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by qi...@apache.org on 2022/04/14 17:27:09 UTC
[iotdb] branch master updated: [IOTDB-2861] Improve Cross compaction selector file number restrict (#5532)
This is an automated email from the ASF dual-hosted git repository.
qiaojialin pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/master by this push:
new 0c50e6c890 [IOTDB-2861] Improve Cross compaction selector file number restrict (#5532)
0c50e6c890 is described below
commit 0c50e6c8905021ef7a2088c3a9f23b220ec3c37f
Author: 周沛辰 <45...@users.noreply.github.com>
AuthorDate: Fri Apr 15 01:27:03 2022 +0800
[IOTDB-2861] Improve Cross compaction selector file number restrict (#5532)
---
.../selector/RewriteCompactionFileSelector.java | 7 +++---
.../cross/RewriteCompactionFileSelectorTest.java | 29 +++++++++++++++++++---
2 files changed, 29 insertions(+), 7 deletions(-)
diff --git a/server/src/main/java/org/apache/iotdb/db/engine/compaction/cross/rewrite/selector/RewriteCompactionFileSelector.java b/server/src/main/java/org/apache/iotdb/db/engine/compaction/cross/rewrite/selector/RewriteCompactionFileSelector.java
index f7d1ffbf1d..bba5badfb5 100644
--- a/server/src/main/java/org/apache/iotdb/db/engine/compaction/cross/rewrite/selector/RewriteCompactionFileSelector.java
+++ b/server/src/main/java/org/apache/iotdb/db/engine/compaction/cross/rewrite/selector/RewriteCompactionFileSelector.java
@@ -199,9 +199,10 @@ public class RewriteCompactionFileSelector implements ICrossSpaceMergeFileSelect
}
private boolean updateSelectedFiles(long newCost, TsFileResource unseqFile) {
- if (seqSelectedNum + selectedUnseqFiles.size() + 1 + tmpSelectedSeqFiles.size()
- <= maxCrossCompactionFileNum
- && totalCost + newCost < memoryBudget) {
+ if (selectedUnseqFiles.size() == 0
+ || (seqSelectedNum + selectedUnseqFiles.size() + 1 + tmpSelectedSeqFiles.size()
+ <= maxCrossCompactionFileNum
+ && totalCost + newCost < memoryBudget)) {
selectedUnseqFiles.add(unseqFile);
maxSeqFileCost = tempMaxSeqFileCost;
diff --git a/server/src/test/java/org/apache/iotdb/db/engine/compaction/cross/RewriteCompactionFileSelectorTest.java b/server/src/test/java/org/apache/iotdb/db/engine/compaction/cross/RewriteCompactionFileSelectorTest.java
index 0b5ca8d891..121018c752 100644
--- a/server/src/test/java/org/apache/iotdb/db/engine/compaction/cross/RewriteCompactionFileSelectorTest.java
+++ b/server/src/test/java/org/apache/iotdb/db/engine/compaction/cross/RewriteCompactionFileSelectorTest.java
@@ -83,12 +83,12 @@ public class RewriteCompactionFileSelectorTest extends MergeTest {
}
@Test
- public void testNonSelection() throws MergeException, IOException {
+ public void testWithFewMemoryBudgeSelection() throws MergeException, IOException {
RewriteCrossSpaceCompactionResource resource =
new RewriteCrossSpaceCompactionResource(seqResources, unseqResources);
ICrossSpaceMergeFileSelector mergeFileSelector = new RewriteCompactionFileSelector(resource, 1);
List[] result = mergeFileSelector.select();
- assertEquals(0, result.length);
+ assertEquals(2, result.length);
resource.clear();
}
@@ -318,10 +318,10 @@ public class RewriteCompactionFileSelectorTest extends MergeTest {
resource =
new RewriteCrossSpaceCompactionResource(
seqList.subList(1, seqList.size()), unseqList.subList(1, unseqList.size()));
- // the second selection should be empty
+ // Although memory is out of memoryBudget, at least one unseq file should be selected
mergeFileSelector = new RewriteCompactionFileSelector(resource, 29000);
result = mergeFileSelector.select();
- assertEquals(0, result.length);
+ assertEquals(2, result.length);
resource.clear();
} finally {
removeFiles(seqList, unseqList);
@@ -898,4 +898,25 @@ public class RewriteCompactionFileSelectorTest extends MergeTest {
.getConfig()
.setMaxCrossCompactionCandidateFileNum(oldMaxCrossCompactionCandidateFileNum);
}
+
+ @Test
+ public void testAtLeastOneUnseqFileBeenSelected() throws IOException, MergeException {
+ int maxCrossFilesNum =
+ IoTDBDescriptor.getInstance().getConfig().getMaxCrossCompactionCandidateFileNum();
+ IoTDBDescriptor.getInstance().getConfig().setMaxCrossCompactionCandidateFileNum(1);
+
+ RewriteCrossSpaceCompactionResource resource =
+ new RewriteCrossSpaceCompactionResource(seqResources, unseqResources);
+ ICrossSpaceMergeFileSelector mergeFileSelector =
+ new RewriteCompactionFileSelector(resource, Long.MAX_VALUE);
+ List[] result = mergeFileSelector.select();
+ List<TsFileResource> seqSelected = result[0];
+ List<TsFileResource> unseqSelected = result[1];
+ assertEquals(1, seqSelected.size());
+ assertEquals(1, unseqSelected.size());
+ resource.clear();
+ IoTDBDescriptor.getInstance()
+ .getConfig()
+ .setMaxCrossCompactionCandidateFileNum(maxCrossFilesNum);
+ }
}