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 2015/01/05 18:53:18 UTC

svn commit: r1649599 - /lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/BufferedUpdatesStream.java

Author: mikemccand
Date: Mon Jan  5 17:53:18 2015
New Revision: 1649599

URL: http://svn.apache.org/r1649599
Log:
LUCENE-6161: reuse DocsEnum when resolving deleted terms/queries to doc id

Modified:
    lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/BufferedUpdatesStream.java

Modified: lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/BufferedUpdatesStream.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/BufferedUpdatesStream.java?rev=1649599&r1=1649598&r2=1649599&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/BufferedUpdatesStream.java (original)
+++ lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/BufferedUpdatesStream.java Mon Jan  5 17:53:18 2015
@@ -408,7 +408,7 @@ class BufferedUpdatesStream implements A
     TermsEnum termsEnum = null;
 
     String currentField = null;
-    DocsEnum docs = null;
+    DocsEnum docsEnum = null;
 
     assert checkDeleteTerm(null);
 
@@ -433,36 +433,38 @@ class BufferedUpdatesStream implements A
       }
 
       if (termsEnum == null) {
+        // no terms in this field
         continue;
       }
+
       assert checkDeleteTerm(term);
 
       // System.out.println("  term=" + term);
 
       if (termsEnum.seekExact(term.bytes())) {
         // we don't need term frequencies for this
-        DocsEnum docsEnum = termsEnum.docs(rld.getLiveDocs(), docs, DocsEnum.FLAG_NONE);
+        docsEnum = termsEnum.docs(rld.getLiveDocs(), docsEnum, DocsEnum.FLAG_NONE);
         //System.out.println("BDS: got docsEnum=" + docsEnum);
 
-        if (docsEnum != null) {
-          while (true) {
-            final int docID = docsEnum.nextDoc();
-            //System.out.println(Thread.currentThread().getName() + " del term=" + term + " doc=" + docID);
-            if (docID == DocIdSetIterator.NO_MORE_DOCS) {
-              break;
-            }   
-            if (!any) {
-              rld.initWritableLiveDocs();
-              any = true;
-            }
-            // NOTE: there is no limit check on the docID
-            // when deleting by Term (unlike by Query)
-            // because on flush we apply all Term deletes to
-            // each segment.  So all Term deleting here is
-            // against prior segments:
-            if (rld.delete(docID)) {
-              delCount++;
-            }
+        assert docsEnum != null;
+
+        while (true) {
+          final int docID = docsEnum.nextDoc();
+          //System.out.println(Thread.currentThread().getName() + " del term=" + term + " doc=" + docID);
+          if (docID == DocIdSetIterator.NO_MORE_DOCS) {
+            break;
+          }   
+          if (!any) {
+            rld.initWritableLiveDocs();
+            any = true;
+          }
+          // NOTE: there is no limit check on the docID
+          // when deleting by Term (unlike by Query)
+          // because on flush we apply all Term deletes to
+          // each segment.  So all Term deleting here is
+          // against prior segments:
+          if (rld.delete(docID)) {
+            delCount++;
           }
         }
       }
@@ -488,7 +490,7 @@ class BufferedUpdatesStream implements A
     
     String currentField = null;
     TermsEnum termsEnum = null;
-    DocsEnum docs = null;
+    DocsEnum docsEnum = null;
     
     //System.out.println(Thread.currentThread().getName() + " numericDVUpdate reader=" + reader);
     for (DocValuesUpdate update : updates) {
@@ -514,19 +516,19 @@ class BufferedUpdatesStream implements A
           termsEnum = terms.iterator(termsEnum);
         } else {
           termsEnum = null;
-          continue; // no terms in that field
         }
       }
 
       if (termsEnum == null) {
+        // no terms in this field
         continue;
       }
+
       // System.out.println("  term=" + term);
 
       if (termsEnum.seekExact(term.bytes())) {
         // we don't need term frequencies for this
-        DocsEnum docsEnum = termsEnum.docs(rld.getLiveDocs(), docs, DocsEnum.FLAG_NONE);
-      
+        docsEnum = termsEnum.docs(rld.getLiveDocs(), docsEnum, DocsEnum.FLAG_NONE);
         //System.out.println("BDS: got docsEnum=" + docsEnum);
 
         DocValuesFieldUpdates dvUpdates = dvUpdatesContainer.getUpdates(update.field, update.type);