You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by sh...@apache.org on 2014/09/22 08:48:12 UTC

svn commit: r1626675 - in /lucene/dev/trunk/lucene/core/src: java/org/apache/lucene/index/IndexWriter.java test/org/apache/lucene/index/TestIndexWriterForceMerge.java

Author: shaie
Date: Mon Sep 22 06:48:11 2014
New Revision: 1626675

URL: http://svn.apache.org/r1626675
Log:
LUCENE-5941: IndexWriter.forceMerge documentation improvements

Modified:
    lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/IndexWriter.java
    lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterForceMerge.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=1626675&r1=1626674&r2=1626675&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 Sep 22 06:48:11 2014
@@ -1554,13 +1554,15 @@ public class IndexWriter implements Clos
    * should only call this if the index is static (will no
    * longer be changed).</p>
    *
-   * <p>Note that this requires up to 2X the index size free
-   * space in your Directory (3X if you're using compound
-   * file format).  For example, if your index size is 10 MB
-   * then you need up to 20 MB free for this to complete (30
-   * MB if you're using compound file format).  Also,
-   * it's best to call {@link #commit()} afterwards,
-   * to allow IndexWriter to free up disk space.</p>
+   * <p>Note that this requires free space that is proportional
+   * to the size of the index in your Directory (2X if you're
+   * using compound file format). For example, if your index
+   * size is 10 MB then you need an additional 10 MB free for
+   * this to complete (20 MB if you're using compound file
+   * format). This is also affected by the {@link Codec} that
+   * is used to execute the merge, and may result in even a
+   * bigger index. Also, it's best to call {@link #commit()}
+   * afterwards, to allow IndexWriter to free up disk space.</p>
    *
    * <p>If some but not all readers re-open while merging
    * is underway, this will cause > 2X temporary

Modified: lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterForceMerge.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterForceMerge.java?rev=1626675&r1=1626674&r2=1626675&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterForceMerge.java (original)
+++ lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterForceMerge.java Mon Sep 22 06:48:11 2014
@@ -121,10 +121,12 @@ public class TestIndexWriterForceMerge e
    */
   public void testForceMergeTempSpaceUsage() throws IOException {
 
-    MockDirectoryWrapper dir = newMockDirectory();
+    final MockDirectoryWrapper dir = newMockDirectory();
+    dir.setEnableVirusScanner(false);
     IndexWriter writer  = new IndexWriter(dir, newIndexWriterConfig(new MockAnalyzer(random()))
                                                  .setMaxBufferedDocs(10)
                                                  .setMergePolicy(newLogMergePolicy()));
+    
     if (VERBOSE) {
       System.out.println("TEST: config1=" + writer.getConfig());
     }
@@ -138,17 +140,16 @@ public class TestIndexWriterForceMerge e
     TestIndexWriter.addDocWithIndex(writer, 500);
     writer.close();
 
-    if (VERBOSE) {
-      System.out.println("TEST: start disk usage");
-    }
     long startDiskUsage = 0;
-    String[] files = dir.listAll();
-    for(int i=0;i<files.length;i++) {
-      startDiskUsage += dir.fileLength(files[i]);
+    for (String f : dir.listAll()) {
+      startDiskUsage += dir.fileLength(f);
       if (VERBOSE) {
-        System.out.println(files[i] + ": " + dir.fileLength(files[i]));
+        System.out.println(f + ": " + dir.fileLength(f));
       }
     }
+    if (VERBOSE) {
+      System.out.println("TEST: start disk usage = " + startDiskUsage);
+    }
 
     dir.resetMaxUsedSizeInBytes();
     dir.setTrackDiskUsage(true);
@@ -156,11 +157,36 @@ public class TestIndexWriterForceMerge e
     writer = new IndexWriter(dir, newIndexWriterConfig(new MockAnalyzer(random()))
                                     .setOpenMode(OpenMode.APPEND)
                                     .setMergePolicy(newLogMergePolicy()));
+    
+    if (VERBOSE) {
+      System.out.println("TEST: config2=" + writer.getConfig());
+    }
+
     writer.forceMerge(1);
     writer.close();
+
+    long finalDiskUsage = 0;
+    for (String f : dir.listAll()) {
+      finalDiskUsage += dir.fileLength(f);
+      if (VERBOSE) {
+        System.out.println(f + ": " + dir.fileLength(f));
+      }
+    }
+    if (VERBOSE) {
+      System.out.println("TEST: final disk usage = " + finalDiskUsage);
+    }
+
+    // The result of the merged index is often smaller, but sometimes it could
+    // be bigger (compression slightly changes, Codec changes etc.). Therefore
+    // we compare the temp space used to the max of the initial and final index
+    // size
+    long maxStartFinalDiskUsage = Math.max(startDiskUsage, finalDiskUsage);
     long maxDiskUsage = dir.getMaxUsedSizeInBytes();
-    assertTrue("forceMerge used too much temporary space: starting usage was " + startDiskUsage + " bytes; max temp usage was " + maxDiskUsage + " but should have been " + (4*startDiskUsage) + " (= 4X starting usage)",
-               maxDiskUsage <= 4*startDiskUsage);
+    assertTrue("forceMerge used too much temporary space: starting usage was "
+        + startDiskUsage + " bytes; final usage was " + finalDiskUsage
+        + " bytes; max temp usage was " + maxDiskUsage
+        + " but should have been " + (3 * maxStartFinalDiskUsage)
+        + " (= 3X starting usage)", maxDiskUsage <= 3 * maxStartFinalDiskUsage);
     dir.close();
   }