| Index: lucene/test-framework/src/java/org/apache/lucene/index/MockRandomMergePolicy.java |
| =================================================================== |
| --- lucene/test-framework/src/java/org/apache/lucene/index/MockRandomMergePolicy.java (revision 1592642) |
| +++ lucene/test-framework/src/java/org/apache/lucene/index/MockRandomMergePolicy.java (working copy) |
| @@ -64,7 +64,7 @@ |
| // TODO: sometimes make more than 1 merge? |
| mergeSpec = new MergeSpecification(); |
| final int segsToMerge = TestUtil.nextInt(random, 1, numSegments); |
| - mergeSpec.add(new OneMerge(segments.subList(0, segsToMerge))); |
| + mergeSpec.add(new MockRandomOneMerge(segments.subList(0, segsToMerge),random.nextLong())); |
| } |
| |
| return mergeSpec; |
| @@ -93,7 +93,7 @@ |
| while(upto < eligibleSegments.size()) { |
| int max = Math.min(10, eligibleSegments.size()-upto); |
| int inc = max <= 2 ? max : TestUtil.nextInt(random, 2, max); |
| - mergeSpec.add(new OneMerge(eligibleSegments.subList(upto, upto+inc))); |
| + mergeSpec.add(new MockRandomOneMerge(eligibleSegments.subList(upto, upto+inc), random.nextLong())); |
| upto += inc; |
| } |
| } |
| @@ -122,4 +122,28 @@ |
| // 80% of the time we create CFS: |
| return random.nextInt(5) != 1; |
| } |
| + |
| + static class MockRandomOneMerge extends OneMerge { |
| + final Random r; |
| + ArrayList<AtomicReader> readers; |
| + |
| + MockRandomOneMerge(List<SegmentCommitInfo> segments, long seed) { |
| + super(segments); |
| + r = new Random(seed); |
| + } |
| + |
| + @Override |
| + public List<AtomicReader> getMergeReaders() throws IOException { |
| + if (readers == null) { |
| + readers = new ArrayList<AtomicReader>(super.getMergeReaders()); |
| + for (int i = 0; i < readers.size(); i++) { |
| + // wrap it (e.g. prevent bulk merge etc) |
| + if (r.nextInt(4) == 0) { |
| + readers.set(i, new FilterAtomicReader(readers.get(i))); |
| + } |
| + } |
| + } |
| + return readers; |
| + } |
| + } |
| } |