You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by rm...@apache.org on 2012/01/27 19:14:00 UTC

svn commit: r1236793 - in /lucene/dev/branches/lucene3661/lucene/src/java/org/apache/lucene/index: DocumentsWriterPerThread.java FreqProxTermsWriterPerField.java IndexWriter.java SegmentWriteState.java

Author: rmuir
Date: Fri Jan 27 18:14:00 2012
New Revision: 1236793

URL: http://svn.apache.org/viewvc?rev=1236793&view=rev
Log:
LUCENE-3661: track count instead of relying on codec to count() in its livedocs

Modified:
    lucene/dev/branches/lucene3661/lucene/src/java/org/apache/lucene/index/DocumentsWriterPerThread.java
    lucene/dev/branches/lucene3661/lucene/src/java/org/apache/lucene/index/FreqProxTermsWriterPerField.java
    lucene/dev/branches/lucene3661/lucene/src/java/org/apache/lucene/index/IndexWriter.java
    lucene/dev/branches/lucene3661/lucene/src/java/org/apache/lucene/index/SegmentWriteState.java

Modified: lucene/dev/branches/lucene3661/lucene/src/java/org/apache/lucene/index/DocumentsWriterPerThread.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene3661/lucene/src/java/org/apache/lucene/index/DocumentsWriterPerThread.java?rev=1236793&r1=1236792&r2=1236793&view=diff
==============================================================================
--- lucene/dev/branches/lucene3661/lucene/src/java/org/apache/lucene/index/DocumentsWriterPerThread.java (original)
+++ lucene/dev/branches/lucene3661/lucene/src/java/org/apache/lucene/index/DocumentsWriterPerThread.java Fri Jan 27 18:14:00 2012
@@ -115,12 +115,14 @@ public class DocumentsWriterPerThread {
     final SegmentInfo segmentInfo;
     final BufferedDeletes segmentDeletes;
     final MutableBits liveDocs;
+    final int delCount;
 
     private FlushedSegment(SegmentInfo segmentInfo,
-        BufferedDeletes segmentDeletes, MutableBits liveDocs) {
+                           BufferedDeletes segmentDeletes, MutableBits liveDocs, int delCount) {
       this.segmentInfo = segmentInfo;
       this.segmentDeletes = segmentDeletes;
       this.liveDocs = liveDocs;
+      this.delCount = delCount;
     }
   }
 
@@ -452,6 +454,7 @@ public class DocumentsWriterPerThread {
       for(int delDocID : pendingDeletes.docIDs) {
         flushState.liveDocs.clear(delDocID);
       }
+      flushState.delCountOnFlush = pendingDeletes.docIDs.size();
       pendingDeletes.bytesUsed.addAndGet(-pendingDeletes.docIDs.size() * BufferedDeletes.BYTES_PER_DEL_DOCID);
       pendingDeletes.docIDs.clear();
     }
@@ -503,7 +506,7 @@ public class DocumentsWriterPerThread {
       doAfterFlush();
       success = true;
 
-      return new FlushedSegment(newSegment, segmentDeletes, flushState.liveDocs);
+      return new FlushedSegment(newSegment, segmentDeletes, flushState.liveDocs, flushState.delCountOnFlush);
     } finally {
       if (!success) {
         if (segment != null) {

Modified: lucene/dev/branches/lucene3661/lucene/src/java/org/apache/lucene/index/FreqProxTermsWriterPerField.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene3661/lucene/src/java/org/apache/lucene/index/FreqProxTermsWriterPerField.java?rev=1236793&r1=1236792&r2=1236793&view=diff
==============================================================================
--- lucene/dev/branches/lucene3661/lucene/src/java/org/apache/lucene/index/FreqProxTermsWriterPerField.java (original)
+++ lucene/dev/branches/lucene3661/lucene/src/java/org/apache/lucene/index/FreqProxTermsWriterPerField.java Fri Jan 27 18:14:00 2012
@@ -465,7 +465,10 @@ final class FreqProxTermsWriterPerField 
           if (state.liveDocs == null) {
             state.liveDocs = docState.docWriter.codec.liveDocsFormat().newLiveDocs(state.numDocs);
           }
-          state.liveDocs.clear(docID);
+          if (state.liveDocs.get(docID)) {
+            state.delCountOnFlush++;
+            state.liveDocs.clear(docID);
+          }
         }
 
         totTF += termDocFreq;

Modified: lucene/dev/branches/lucene3661/lucene/src/java/org/apache/lucene/index/IndexWriter.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene3661/lucene/src/java/org/apache/lucene/index/IndexWriter.java?rev=1236793&r1=1236792&r2=1236793&view=diff
==============================================================================
--- lucene/dev/branches/lucene3661/lucene/src/java/org/apache/lucene/index/IndexWriter.java (original)
+++ lucene/dev/branches/lucene3661/lucene/src/java/org/apache/lucene/index/IndexWriter.java Fri Jan 27 18:14:00 2012
@@ -2246,7 +2246,7 @@ public class IndexWriter implements Clos
       // Must write deleted docs after the CFS so we don't
       // slurp the del file into CFS:
       if (flushedSegment.liveDocs != null) {
-        final int delCount = flushedSegment.segmentInfo.docCount - flushedSegment.liveDocs.count();
+        final int delCount = flushedSegment.delCount;
         assert delCount > 0;
         newSegment.setDelCount(delCount);
         newSegment.advanceDelGen();

Modified: lucene/dev/branches/lucene3661/lucene/src/java/org/apache/lucene/index/SegmentWriteState.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene3661/lucene/src/java/org/apache/lucene/index/SegmentWriteState.java?rev=1236793&r1=1236792&r2=1236793&view=diff
==============================================================================
--- lucene/dev/branches/lucene3661/lucene/src/java/org/apache/lucene/index/SegmentWriteState.java (original)
+++ lucene/dev/branches/lucene3661/lucene/src/java/org/apache/lucene/index/SegmentWriteState.java Fri Jan 27 18:14:00 2012
@@ -32,6 +32,7 @@ public class SegmentWriteState {
   public final String segmentName;
   public final FieldInfos fieldInfos;
   public final int numDocs;
+  public int delCountOnFlush;
 
   // Deletes to apply while we are flushing the segment.  A
   // Term is enrolled in here if it was deleted at one
@@ -83,5 +84,6 @@ public class SegmentWriteState {
     codec = state.codec;
     this.segmentSuffix = segmentSuffix;
     segDeletes = state.segDeletes;
+    delCountOnFlush = state.delCountOnFlush;
   }
 }