Skip to content

Commit d1f5b2d

Browse files
committed
Fix tests: too many calls to IndexInput.clone during merging (#14595)
1 parent 463efa1 commit d1f5b2d

File tree

1 file changed

+13
-4
lines changed

1 file changed

+13
-4
lines changed

lucene/core/src/test/org/apache/lucene/index/TestForTooMuchCloning.java

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
*/
1717
package org.apache.lucene.index;
1818

19+
import java.util.concurrent.atomic.AtomicInteger;
1920
import org.apache.lucene.document.Document;
2021
import org.apache.lucene.document.Field;
2122
import org.apache.lucene.document.TextField;
@@ -35,17 +36,25 @@ public class TestForTooMuchCloning extends LuceneTestCase {
3536
// during merging and searching:
3637
public void test() throws Exception {
3738
final MockDirectoryWrapper dir = newMockDirectory();
39+
dir.setVerboseClone(false); // set true to view clone stacks.
3840
final TieredMergePolicy tmp = new TieredMergePolicy();
3941
tmp.setMaxMergeAtOnce(2);
42+
AtomicInteger segmentsMerged = new AtomicInteger();
4043
final RandomIndexWriter w =
4144
new RandomIndexWriter(
4245
random(),
4346
dir,
4447
newIndexWriterConfig(new MockAnalyzer(random()))
48+
// to reduce flakiness on merge clone count
49+
.setMergeScheduler(new SerialMergeScheduler())
4550
.setMaxBufferedDocs(2)
46-
// use a FilterMP otherwise RIW will randomly reconfigure
47-
// the MP while the test runs
48-
.setMergePolicy(new FilterMergePolicy(tmp)));
51+
.setMergePolicy(
52+
new OneMergeWrappingMergePolicy(
53+
tmp,
54+
oneMerge -> {
55+
segmentsMerged.addAndGet(oneMerge.segments.size());
56+
return oneMerge;
57+
})));
4958
final int numDocs = 20;
5059
for (int docs = 0; docs < numDocs; docs++) {
5160
StringBuilder sb = new StringBuilder();
@@ -62,7 +71,7 @@ public void test() throws Exception {
6271
// System.out.println("merge clone count=" + cloneCount);
6372
assertTrue(
6473
"too many calls to IndexInput.clone during merging: " + dir.getInputCloneCount(),
65-
dir.getInputCloneCount() < 500);
74+
dir.getInputCloneCount() < (r.leaves().size() + segmentsMerged.get()) * 50);
6675

6776
final IndexSearcher s = newSearcher(r);
6877
// important: set this after newSearcher, it might have run checkindex

0 commit comments

Comments
 (0)