You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by mi...@apache.org on 2012/10/08 19:41:16 UTC

svn commit: r1395689 - in /lucene/dev/trunk/lucene: core/src/java/org/apache/lucene/index/IndexWriter.java test-framework/src/java/org/apache/lucene/index/MockRandomMergePolicy.java

Author: mikemccand
Date: Mon Oct  8 17:41:15 2012
New Revision: 1395689

URL: http://svn.apache.org/viewvc?rev=1395689&view=rev
Log:
make MockRandomMergePolicy a bit smarter

Modified:
    lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/IndexWriter.java
    lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/index/MockRandomMergePolicy.java

Modified: lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/IndexWriter.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/IndexWriter.java?rev=1395689&r1=1395688&r2=1395689&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/IndexWriter.java (original)
+++ lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/IndexWriter.java Mon Oct  8 17:41:15 2012
@@ -3367,9 +3367,15 @@ public class IndexWriter implements Clos
     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) {

Modified: lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/index/MockRandomMergePolicy.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/index/MockRandomMergePolicy.java?rev=1395689&r1=1395688&r2=1395689&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/index/MockRandomMergePolicy.java (original)
+++ lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/index/MockRandomMergePolicy.java Mon Oct  8 17:41:15 2012
@@ -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 exten
     MergeSpecification mergeSpec = null;
     //System.out.println("MRMP: findMerges sis=" + segmentInfos);
 
-    if (segmentInfos.size() > 1 && random.nextInt(5) == 3) {
-      
-      List<SegmentInfoPerCommit> segments = new ArrayList<SegmentInfoPerCommit>(segmentInfos.asList());
+    int numSegments = segmentInfos.size();
+
+    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);
 
       // 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)));
     }