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/02 21:06:30 UTC
svn commit: r1098740 -
/lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/IndexWriter.java
Author: mikemccand
Date: Mon May 2 19:06:29 2011
New Revision: 1098740
URL: http://svn.apache.org/viewvc?rev=1098740&view=rev
Log:
LUCENE-3051: don't call SegmentInfo.sizeInBytes for merging segments (it's not thread safe)
Modified:
lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/IndexWriter.java
Modified: lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/IndexWriter.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/IndexWriter.java?rev=1098740&r1=1098739&r2=1098740&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/IndexWriter.java (original)
+++ lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/IndexWriter.java Mon May 2 19:06:29 2011
@@ -3133,6 +3133,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!
@@ -3258,8 +3268,6 @@ public class IndexWriter implements Clos
merge.readers = new ArrayList<SegmentReader>();
merge.readerClones = new ArrayList<SegmentReader>();
- merge.estimatedMergeBytes = 0;
-
// This is try/finally to make sure merger's readers are
// closed:
boolean success = false;
@@ -3277,13 +3285,6 @@ public class IndexWriter implements Clos
-config.getReaderTermsIndexDivisor());
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