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 2011/05/06 01:30:13 UTC

svn commit: r1100000 - in /lucene/dev/branches/branch_3x: ./ lucene/ lucene/backwards/ lucene/src/java/org/apache/lucene/index/IndexWriter.java solr/

Author: mikemccand
Date: Thu May  5 23:30:12 2011
New Revision: 1100000

URL: http://svn.apache.org/viewvc?rev=1100000&view=rev
Log:
LUCENE-3051: don't call SegmentInfo.sizeInBytes for merging segments (it's not thread safe) (merge from trunk)

Modified:
    lucene/dev/branches/branch_3x/   (props changed)
    lucene/dev/branches/branch_3x/lucene/   (props changed)
    lucene/dev/branches/branch_3x/lucene/backwards/   (props changed)
    lucene/dev/branches/branch_3x/lucene/src/java/org/apache/lucene/index/IndexWriter.java
    lucene/dev/branches/branch_3x/solr/   (props changed)

Modified: lucene/dev/branches/branch_3x/lucene/src/java/org/apache/lucene/index/IndexWriter.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/lucene/src/java/org/apache/lucene/index/IndexWriter.java?rev=1100000&r1=1099999&r2=1100000&view=diff
==============================================================================
--- lucene/dev/branches/branch_3x/lucene/src/java/org/apache/lucene/index/IndexWriter.java (original)
+++ lucene/dev/branches/branch_3x/lucene/src/java/org/apache/lucene/index/IndexWriter.java Thu May  5 23:30:12 2011
@@ -3886,6 +3886,16 @@ public class IndexWriter implements Clos
       message("merge seg=" + merge.info.name);
     }
 
+    assert merge.estimatedMergeBytes == 0;
+    for(SegmentInfo info : merge.segments) {
+      if (info.docCount > 0) {
+        final int delCount = numDeletedDocs(info);
+        assert delCount <= info.docCount;
+        final double delRatio = ((double) delCount)/info.docCount;
+        merge.estimatedMergeBytes += info.sizeInBytes(true) * (1.0 - delRatio);
+      }
+    }
+
     // TODO: I think this should no longer be needed (we
     // now build CFS before adding segment to the infos);
     // however, on removing it, tests fail for some reason!
@@ -4013,8 +4023,6 @@ public class IndexWriter implements Clos
 
     merge.info.setHasVectors(merger.fieldInfos().hasVectors());
 
-    merge.estimatedMergeBytes = 0;
-
     // This is try/finally to make sure merger's readers are
     // closed:
     boolean success = false;
@@ -4032,13 +4040,6 @@ public class IndexWriter implements Clos
                                                     -1);
         merge.readers.add(reader);
 
-        final int readerMaxDoc = reader.maxDoc();
-        if (readerMaxDoc > 0) {
-          final int delCount = reader.numDeletedDocs();
-          final double delRatio = ((double) delCount)/readerMaxDoc;
-          merge.estimatedMergeBytes += info.sizeInBytes(true) * (1.0 - delRatio);
-        }
-
         // We clone the segment readers because other
         // deletes may come in while we're merging so we
         // need readers that will not change