From 0933faf06b277a548d1a190c39b5932399b3274b Mon Sep 17 00:00:00 2001 From: Michael McCandless Date: Mon, 8 Oct 2012 17:41:15 +0000 Subject: [PATCH] make MockRandomMergePolicy a bit smarter git-svn-id: https://svn.apache.org/repos/asf/lucene/dev/trunk@1395689 13f79535-47bb-0310-9956-ffa450edef68 --- .../org/apache/lucene/index/IndexWriter.java | 6 +++++ .../lucene/index/MockRandomMergePolicy.java | 23 +++++++++++++++---- 2 files changed, 24 insertions(+), 5 deletions(-) diff --git a/lucene/core/src/java/org/apache/lucene/index/IndexWriter.java b/lucene/core/src/java/org/apache/lucene/index/IndexWriter.java index 0d515a56772..0ba15db616d 100644 --- a/lucene/core/src/java/org/apache/lucene/index/IndexWriter.java +++ b/lucene/core/src/java/org/apache/lucene/index/IndexWriter.java @@ -3367,9 +3367,15 @@ public class IndexWriter implements Closeable, TwoPhaseCommit { boolean isExternal = false; for(SegmentInfoPerCommit info : merge.segments) { if (mergingSegments.contains(info)) { + if (infoStream.isEnabled("IW")) { + infoStream.message("IW", "reject merge " + segString(merge.segments) + ": segment " + segString(info) + " is already marked for merge"); + } return false; } if (!segmentInfos.contains(info)) { + if (infoStream.isEnabled("IW")) { + infoStream.message("IW", "reject merge " + segString(merge.segments) + ": segment " + segString(info) + " does not exist in live infos"); + } return false; } if (info.info.dir != directory) { diff --git a/lucene/test-framework/src/java/org/apache/lucene/index/MockRandomMergePolicy.java b/lucene/test-framework/src/java/org/apache/lucene/index/MockRandomMergePolicy.java index 1890501eae7..fb55f76e37f 100644 --- a/lucene/test-framework/src/java/org/apache/lucene/index/MockRandomMergePolicy.java +++ b/lucene/test-framework/src/java/org/apache/lucene/index/MockRandomMergePolicy.java @@ -19,10 +19,11 @@ package org.apache.lucene.index; import java.io.IOException; import java.util.ArrayList; +import java.util.Collection; import java.util.Collections; import java.util.List; -import java.util.Random; import java.util.Map; +import java.util.Random; import org.apache.lucene.util._TestUtil; @@ -43,14 +44,26 @@ public class MockRandomMergePolicy extends MergePolicy { MergeSpecification mergeSpec = null; //System.out.println("MRMP: findMerges sis=" + segmentInfos); - if (segmentInfos.size() > 1 && random.nextInt(5) == 3) { - - List segments = new ArrayList(segmentInfos.asList()); + int numSegments = segmentInfos.size(); + + List segments = new ArrayList(); + final Collection merging = writer.get().getMergingSegments(); + + for(SegmentInfoPerCommit sipc : segmentInfos) { + if (!merging.contains(sipc)) { + segments.add(sipc); + } + } + + numSegments = segments.size(); + + if (numSegments > 1 && (numSegments > 30 || random.nextInt(5) == 3)) { + Collections.shuffle(segments, random); // TODO: sometimes make more than 1 merge? mergeSpec = new MergeSpecification(); - final int segsToMerge = _TestUtil.nextInt(random, 1, segmentInfos.size()); + final int segsToMerge = _TestUtil.nextInt(random, 1, numSegments); mergeSpec.add(new OneMerge(segments.subList(0, segsToMerge))); }