mirror of
https://github.com/apache/lucene.git
synced 2025-02-12 13:05:29 +00:00
make MockRandomMergePolicy a bit smarter
git-svn-id: https://svn.apache.org/repos/asf/lucene/dev/trunk@1395689 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
0fdedf94a8
commit
0933faf06b
@ -3367,9 +3367,15 @@ public class IndexWriter implements Closeable, TwoPhaseCommit {
|
|||||||
boolean isExternal = false;
|
boolean isExternal = false;
|
||||||
for(SegmentInfoPerCommit info : merge.segments) {
|
for(SegmentInfoPerCommit info : merge.segments) {
|
||||||
if (mergingSegments.contains(info)) {
|
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;
|
return false;
|
||||||
}
|
}
|
||||||
if (!segmentInfos.contains(info)) {
|
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;
|
return false;
|
||||||
}
|
}
|
||||||
if (info.info.dir != directory) {
|
if (info.info.dir != directory) {
|
||||||
|
@ -19,10 +19,11 @@ package org.apache.lucene.index;
|
|||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collection;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Random;
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.Random;
|
||||||
|
|
||||||
import org.apache.lucene.util._TestUtil;
|
import org.apache.lucene.util._TestUtil;
|
||||||
|
|
||||||
@ -43,14 +44,26 @@ public class MockRandomMergePolicy extends MergePolicy {
|
|||||||
MergeSpecification mergeSpec = null;
|
MergeSpecification mergeSpec = null;
|
||||||
//System.out.println("MRMP: findMerges sis=" + segmentInfos);
|
//System.out.println("MRMP: findMerges sis=" + segmentInfos);
|
||||||
|
|
||||||
if (segmentInfos.size() > 1 && random.nextInt(5) == 3) {
|
int numSegments = segmentInfos.size();
|
||||||
|
|
||||||
List<SegmentInfoPerCommit> segments = new ArrayList<SegmentInfoPerCommit>(segmentInfos.asList());
|
List<SegmentInfoPerCommit> segments = new ArrayList<SegmentInfoPerCommit>();
|
||||||
|
final Collection<SegmentInfoPerCommit> 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);
|
Collections.shuffle(segments, random);
|
||||||
|
|
||||||
// TODO: sometimes make more than 1 merge?
|
// TODO: sometimes make more than 1 merge?
|
||||||
mergeSpec = new MergeSpecification();
|
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)));
|
mergeSpec.add(new OneMerge(segments.subList(0, segsToMerge)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user