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