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 2014/03/17 20:30:43 UTC

svn commit: r1578528 - in /lucene/dev/branches/lucene_solr_4_7: ./ lucene/ lucene/core/ lucene/core/src/java/org/apache/lucene/index/ lucene/core/src/test/org/apache/lucene/index/ lucene/test-framework/ lucene/test-framework/src/java/org/apache/lucene/...

Author: mikemccand
Date: Mon Mar 17 19:30:42 2014
New Revision: 1578528

URL: http://svn.apache.org/r1578528
Log:
LUCENE-5481: merge back to 47x

Added:
    lucene/dev/branches/lucene_solr_4_7/lucene/core/src/test/org/apache/lucene/index/TestLogMergePolicy.java
      - copied unchanged from r1572943, lucene/dev/branches/branch_4x/lucene/core/src/test/org/apache/lucene/index/TestLogMergePolicy.java
    lucene/dev/branches/lucene_solr_4_7/lucene/test-framework/src/java/org/apache/lucene/index/BaseMergePolicyTestCase.java
      - copied, changed from r1572943, lucene/dev/branches/branch_4x/lucene/test-framework/src/java/org/apache/lucene/index/BaseMergePolicyTestCase.java
Modified:
    lucene/dev/branches/lucene_solr_4_7/   (props changed)
    lucene/dev/branches/lucene_solr_4_7/lucene/   (props changed)
    lucene/dev/branches/lucene_solr_4_7/lucene/CHANGES.txt   (contents, props changed)
    lucene/dev/branches/lucene_solr_4_7/lucene/core/   (props changed)
    lucene/dev/branches/lucene_solr_4_7/lucene/core/src/java/org/apache/lucene/index/LogMergePolicy.java
    lucene/dev/branches/lucene_solr_4_7/lucene/core/src/java/org/apache/lucene/index/MergePolicy.java
    lucene/dev/branches/lucene_solr_4_7/lucene/core/src/java/org/apache/lucene/index/TieredMergePolicy.java
    lucene/dev/branches/lucene_solr_4_7/lucene/core/src/test/org/apache/lucene/index/TestTieredMergePolicy.java
    lucene/dev/branches/lucene_solr_4_7/lucene/test-framework/   (props changed)

Modified: lucene/dev/branches/lucene_solr_4_7/lucene/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene_solr_4_7/lucene/CHANGES.txt?rev=1578528&r1=1578527&r2=1578528&view=diff
==============================================================================
--- lucene/dev/branches/lucene_solr_4_7/lucene/CHANGES.txt (original)
+++ lucene/dev/branches/lucene_solr_4_7/lucene/CHANGES.txt Mon Mar 17 19:30:42 2014
@@ -36,6 +36,9 @@ Bug Fixes
 
 * LUCENE-5532: AutomatonQuery.hashCode was not thread-safe. (Robert Muir)
 
+* LUCENE-5481: IndexWriter.forceMerge used to run a merge even if there was a
+  single segment in the index. (Adrien Grand, Mike McCandless)
+
 Build
 
 * LUCENE-5511: "ant precommit" / "ant check-svn-working-copy" now work again

Modified: lucene/dev/branches/lucene_solr_4_7/lucene/core/src/java/org/apache/lucene/index/LogMergePolicy.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene_solr_4_7/lucene/core/src/java/org/apache/lucene/index/LogMergePolicy.java?rev=1578528&r1=1578527&r2=1578528&view=diff
==============================================================================
--- lucene/dev/branches/lucene_solr_4_7/lucene/core/src/java/org/apache/lucene/index/LogMergePolicy.java (original)
+++ lucene/dev/branches/lucene_solr_4_7/lucene/core/src/java/org/apache/lucene/index/LogMergePolicy.java Mon Mar 17 19:30:42 2014
@@ -196,7 +196,7 @@ public abstract class LogMergePolicy ext
     }
 
     return numToMerge <= maxNumSegments &&
-      (numToMerge != 1 || !segmentIsOriginal || isMerged(mergeInfo));
+      (numToMerge != 1 || !segmentIsOriginal || isMerged(infos, mergeInfo));
   }
 
   /**
@@ -221,7 +221,7 @@ public abstract class LogMergePolicy ext
         }
         // need to skip that segment + add a merge for the 'right' segments,
         // unless there is only 1 which is merged.
-        if (last - start - 1 > 1 || (start != last - 1 && !isMerged(infos.info(start + 1)))) {
+        if (last - start - 1 > 1 || (start != last - 1 && !isMerged(infos, infos.info(start + 1)))) {
           // there is more than 1 segment to the right of
           // this one, or a mergeable single segment.
           spec.add(new OneMerge(segments.subList(start + 1, last)));
@@ -237,7 +237,7 @@ public abstract class LogMergePolicy ext
 
     // Add any left-over segments, unless there is just 1
     // already fully merged
-    if (last > 0 && (++start + 1 < last || !isMerged(infos.info(start)))) {
+    if (last > 0 && (++start + 1 < last || !isMerged(infos, infos.info(start)))) {
       spec.add(new OneMerge(segments.subList(start, last)));
     }
 
@@ -267,7 +267,7 @@ public abstract class LogMergePolicy ext
 
         // Since we must merge down to 1 segment, the
         // choice is simple:
-        if (last > 1 || !isMerged(infos.info(0))) {
+        if (last > 1 || !isMerged(infos, infos.info(0))) {
           spec.add(new OneMerge(segments.subList(0, last)));
         }
       } else if (last > maxNumSegments) {
@@ -352,7 +352,7 @@ public abstract class LogMergePolicy ext
     }
     
     // There is only one segment already, and it is merged
-    if (maxNumSegments == 1 && last == 1 && isMerged(infos.info(0))) {
+    if (maxNumSegments == 1 && last == 1 && isMerged(infos, infos.info(0))) {
       if (verbose()) {
         message("already 1 seg; skip");
       }

Modified: lucene/dev/branches/lucene_solr_4_7/lucene/core/src/java/org/apache/lucene/index/MergePolicy.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene_solr_4_7/lucene/core/src/java/org/apache/lucene/index/MergePolicy.java?rev=1578528&r1=1578527&r2=1578528&view=diff
==============================================================================
--- lucene/dev/branches/lucene_solr_4_7/lucene/core/src/java/org/apache/lucene/index/MergePolicy.java (original)
+++ lucene/dev/branches/lucene_solr_4_7/lucene/core/src/java/org/apache/lucene/index/MergePolicy.java Mon Mar 17 19:30:42 2014
@@ -520,14 +520,14 @@ public abstract class MergePolicy implem
   /** Returns true if this single info is already fully merged (has no
    *  pending deletes, is in the same dir as the
    *  writer, and matches the current compound file setting */
-  protected final boolean isMerged(SegmentCommitInfo info) {
+  protected final boolean isMerged(SegmentInfos infos, SegmentCommitInfo info) throws IOException {
     IndexWriter w = writer.get();
     assert w != null;
     boolean hasDeletions = w.numDeletedDocs(info) > 0;
     return !hasDeletions &&
       !info.info.hasSeparateNorms() &&
       info.info.dir == w.getDirectory() &&
-      ((noCFSRatio > 0.0 && noCFSRatio < 1.0) || maxCFSSegmentSize < Long.MAX_VALUE);
+      useCompoundFile(infos, info) == info.info.getUseCompoundFile();
   }
   
   /** Returns current {@code noCFSRatio}.

Modified: lucene/dev/branches/lucene_solr_4_7/lucene/core/src/java/org/apache/lucene/index/TieredMergePolicy.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene_solr_4_7/lucene/core/src/java/org/apache/lucene/index/TieredMergePolicy.java?rev=1578528&r1=1578527&r2=1578528&view=diff
==============================================================================
--- lucene/dev/branches/lucene_solr_4_7/lucene/core/src/java/org/apache/lucene/index/TieredMergePolicy.java (original)
+++ lucene/dev/branches/lucene_solr_4_7/lucene/core/src/java/org/apache/lucene/index/TieredMergePolicy.java Mon Mar 17 19:30:42 2014
@@ -518,7 +518,7 @@ public class TieredMergePolicy extends M
     }
 
     if ((maxSegmentCount > 1 && eligible.size() <= maxSegmentCount) ||
-        (maxSegmentCount == 1 && eligible.size() == 1 && (!segmentIsOriginal || isMerged(eligible.get(0))))) {
+        (maxSegmentCount == 1 && eligible.size() == 1 && (!segmentIsOriginal || isMerged(infos, eligible.get(0))))) {
       if (verbose()) {
         message("already merged");
       }

Modified: lucene/dev/branches/lucene_solr_4_7/lucene/core/src/test/org/apache/lucene/index/TestTieredMergePolicy.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene_solr_4_7/lucene/core/src/test/org/apache/lucene/index/TestTieredMergePolicy.java?rev=1578528&r1=1578527&r2=1578528&view=diff
==============================================================================
--- lucene/dev/branches/lucene_solr_4_7/lucene/core/src/test/org/apache/lucene/index/TestTieredMergePolicy.java (original)
+++ lucene/dev/branches/lucene_solr_4_7/lucene/core/src/test/org/apache/lucene/index/TestTieredMergePolicy.java Mon Mar 17 19:30:42 2014
@@ -21,10 +21,13 @@ import org.apache.lucene.analysis.MockAn
 import org.apache.lucene.document.Document;
 import org.apache.lucene.document.Field;
 import org.apache.lucene.store.Directory;
-import org.apache.lucene.util.LuceneTestCase;
 import org.apache.lucene.util._TestUtil;
 
-public class TestTieredMergePolicy extends LuceneTestCase {
+public class TestTieredMergePolicy extends BaseMergePolicyTestCase {
+
+  public MergePolicy mergePolicy() {
+    return newTieredMergePolicy();
+  }
 
   public void testForceMergeDeletes() throws Exception {
     Directory dir = newDirectory();

Copied: lucene/dev/branches/lucene_solr_4_7/lucene/test-framework/src/java/org/apache/lucene/index/BaseMergePolicyTestCase.java (from r1572943, lucene/dev/branches/branch_4x/lucene/test-framework/src/java/org/apache/lucene/index/BaseMergePolicyTestCase.java)
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene_solr_4_7/lucene/test-framework/src/java/org/apache/lucene/index/BaseMergePolicyTestCase.java?p2=lucene/dev/branches/lucene_solr_4_7/lucene/test-framework/src/java/org/apache/lucene/index/BaseMergePolicyTestCase.java&p1=lucene/dev/branches/branch_4x/lucene/test-framework/src/java/org/apache/lucene/index/BaseMergePolicyTestCase.java&r1=1572943&r2=1578528&rev=1578528&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/lucene/test-framework/src/java/org/apache/lucene/index/BaseMergePolicyTestCase.java (original)
+++ lucene/dev/branches/lucene_solr_4_7/lucene/test-framework/src/java/org/apache/lucene/index/BaseMergePolicyTestCase.java Mon Mar 17 19:30:42 2014
@@ -24,7 +24,7 @@ import org.apache.lucene.analysis.MockAn
 import org.apache.lucene.document.Document;
 import org.apache.lucene.store.Directory;
 import org.apache.lucene.util.LuceneTestCase;
-import org.apache.lucene.util.TestUtil;
+import org.apache.lucene.util._TestUtil;
 
 /**
  * Base test case for {@link MergePolicy}.
@@ -48,9 +48,9 @@ public abstract class BaseMergePolicyTes
     };
     IndexWriter writer = new IndexWriter(dir, newIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random())).setMergeScheduler(mergeScheduler).setMergePolicy(mergePolicy()));
     writer.getConfig().getMergePolicy().setNoCFSRatio(random().nextBoolean() ? 0 : 1);
-    final int numSegments = TestUtil.nextInt(random(), 2, 20);
+    final int numSegments = _TestUtil.nextInt(random(), 2, 20);
     for (int i = 0; i < numSegments; ++i) {
-      final int numDocs = TestUtil.nextInt(random(), 1, 5);
+      final int numDocs = _TestUtil.nextInt(random(), 1, 5);
       for (int j = 0; j < numDocs; ++j) {
         writer.addDocument(new Document());
       }
@@ -58,7 +58,7 @@ public abstract class BaseMergePolicyTes
     }
     for (int i = 5; i >= 0; --i) {
       final int segmentCount = writer.getSegmentCount();
-      final int maxNumSegments = i == 0 ? 1 : TestUtil.nextInt(random(), 1, 10);
+      final int maxNumSegments = i == 0 ? 1 : _TestUtil.nextInt(random(), 1, 10);
       mayMerge.set(segmentCount > maxNumSegments);
       writer.forceMerge(maxNumSegments);
     }