From 8e0d9849bd4c3c40293700c4eda24ef9e8a577d1 Mon Sep 17 00:00:00 2001 From: Adrien Grand Date: Tue, 10 Jul 2018 08:47:41 +0200 Subject: [PATCH] LUCENE-8393: TieredMergePolicy needs to take into account the maximum segment size when computing the allowed number of segments. --- .../src/java/org/apache/lucene/index/TieredMergePolicy.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lucene/core/src/java/org/apache/lucene/index/TieredMergePolicy.java b/lucene/core/src/java/org/apache/lucene/index/TieredMergePolicy.java index 34d7af694eb..499273daa5f 100644 --- a/lucene/core/src/java/org/apache/lucene/index/TieredMergePolicy.java +++ b/lucene/core/src/java/org/apache/lucene/index/TieredMergePolicy.java @@ -402,13 +402,13 @@ public class TieredMergePolicy extends MergePolicy { double allowedSegCount = 0; while (true) { final double segCountLevel = bytesLeft / (double) levelSize; - if (segCountLevel < segsPerTier) { + if (segCountLevel < segsPerTier || levelSize == maxMergedSegmentBytes) { allowedSegCount += Math.ceil(segCountLevel); break; } allowedSegCount += segsPerTier; bytesLeft -= segsPerTier * levelSize; - levelSize *= mergeFactor; + levelSize = Math.min(maxMergedSegmentBytes, levelSize * mergeFactor); } if (verbose(mergeContext) && tooBigCount > 0) {