You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by jp...@apache.org on 2022/05/30 09:41:33 UTC
[lucene] branch main updated: LUCENE-10574: Fix TestTieredMergePolicy's expectations about the segment count.
This is an automated email from the ASF dual-hosted git repository.
jpountz pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/lucene.git
The following commit(s) were added to refs/heads/main by this push:
new 318177af83e LUCENE-10574: Fix TestTieredMergePolicy's expectations about the segment count.
318177af83e is described below
commit 318177af83efc99b6c05412cc8ef0ade15c92f6c
Author: Adrien Grand <jp...@gmail.com>
AuthorDate: Mon May 30 11:28:58 2022 +0200
LUCENE-10574: Fix TestTieredMergePolicy's expectations about the segment count.
---
.../apache/lucene/index/TestTieredMergePolicy.java | 23 +++++++++++++++++++++-
1 file changed, 22 insertions(+), 1 deletion(-)
diff --git a/lucene/core/src/test/org/apache/lucene/index/TestTieredMergePolicy.java b/lucene/core/src/test/org/apache/lucene/index/TestTieredMergePolicy.java
index dfec4c566cc..cfeff53f888 100644
--- a/lucene/core/src/test/org/apache/lucene/index/TestTieredMergePolicy.java
+++ b/lucene/core/src/test/org/apache/lucene/index/TestTieredMergePolicy.java
@@ -53,6 +53,7 @@ public class TestTieredMergePolicy extends BaseMergePolicyTestCase {
int totalDelCount = 0;
int totalMaxDoc = 0;
long totalBytes = 0;
+ List<Long> segmentSizes = new ArrayList<>();
for (SegmentCommitInfo sci : infos) {
totalDelCount += sci.getDelCount();
totalMaxDoc += sci.info.maxDoc();
@@ -60,6 +61,7 @@ public class TestTieredMergePolicy extends BaseMergePolicyTestCase {
double liveRatio = 1 - (double) sci.getDelCount() / sci.info.maxDoc();
long weightedByteSize = (long) (liveRatio * byteSize);
totalBytes += weightedByteSize;
+ segmentSizes.add(weightedByteSize);
minSegmentBytes = Math.min(minSegmentBytes, weightedByteSize);
}
@@ -89,6 +91,25 @@ public class TestTieredMergePolicy extends BaseMergePolicyTestCase {
}
allowedSegCount = Math.max(allowedSegCount, tmp.getSegmentsPerTier());
+ // It's ok to be over the allowed segment count if none of the most balanced merges are balanced
+ // enough
+ Collections.sort(segmentSizes);
+ boolean hasBalancedMerges = false;
+ for (int i = 0; i < segmentSizes.size() - mergeFactor; ++i) {
+ long maxMergeSegmentSize = segmentSizes.get(i + mergeFactor - 1);
+ if (maxMergeSegmentSize >= maxMergedSegmentBytes / 2) {
+ break;
+ }
+ long totalMergeSize = 0;
+ for (int j = 0; j < i + mergeFactor; ++j) {
+ totalMergeSize += segmentSizes.get(j);
+ }
+ if (maxMergedSegmentBytes * 1.5 <= totalMergeSize) {
+ hasBalancedMerges = true;
+ break;
+ }
+ }
+
int numSegments = infos.asList().size();
assertTrue(
String.format(
@@ -104,7 +125,7 @@ public class TestTieredMergePolicy extends BaseMergePolicyTestCase {
totalBytes,
delPercentage,
tmp.getDeletesPctAllowed()),
- numSegments <= allowedSegCount);
+ numSegments <= allowedSegCount || hasBalancedMerges == false);
}
@Override