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 2012/10/31 17:21:14 UTC

svn commit: r1404227 - in /lucene/dev/branches/branch_4x/lucene: CHANGES.txt core/src/java/org/apache/lucene/index/IndexWriter.java core/src/test/org/apache/lucene/index/TestIndexWriterDelete.java

Author: mikemccand
Date: Wed Oct 31 16:21:13 2012
New Revision: 1404227

URL: http://svn.apache.org/viewvc?rev=1404227&view=rev
Log:
LUCENE-4521: make sure we commit new del file if tryDeleteDocument succeeds but IW has no other pending changes

Modified:
    lucene/dev/branches/branch_4x/lucene/CHANGES.txt
    lucene/dev/branches/branch_4x/lucene/core/src/java/org/apache/lucene/index/IndexWriter.java
    lucene/dev/branches/branch_4x/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterDelete.java

Modified: lucene/dev/branches/branch_4x/lucene/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/lucene/CHANGES.txt?rev=1404227&r1=1404226&r2=1404227&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/lucene/CHANGES.txt (original)
+++ lucene/dev/branches/branch_4x/lucene/CHANGES.txt Wed Oct 31 16:21:13 2012
@@ -91,6 +91,12 @@ Bug Fixes
 * LUCENE-4511: TermsFilter might return wrong results if a field is not 
   indexed or doesn't exist in the index. (Simon Willnauer)
 
+* LUCENE-4521: IndexWriter.tryDeleteDocument could return true
+  (successfully deleting the document) but then on IndexWriter
+  close/commit fail to write the new deletions, if no other changes
+  happened in the IndexWriter instance.  (Ivan Vasilev via Mike
+  McCandless)
+
 Optimizations
 
 * LUCENE-4512: Additional memory savings for CompressingStoredFieldsIndex.MEMORY_CHUNK

Modified: lucene/dev/branches/branch_4x/lucene/core/src/java/org/apache/lucene/index/IndexWriter.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/lucene/core/src/java/org/apache/lucene/index/IndexWriter.java?rev=1404227&r1=1404226&r2=1404227&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/lucene/core/src/java/org/apache/lucene/index/IndexWriter.java (original)
+++ lucene/dev/branches/branch_4x/lucene/core/src/java/org/apache/lucene/index/IndexWriter.java Wed Oct 31 16:21:13 2012
@@ -1320,6 +1320,10 @@ public class IndexWriter implements Clos
                 checkpoint();
               }
             }
+
+            // Must bump changeCount so if no other changes
+            // happened, we still commit this change:
+            changeCount++;
           }
           //System.out.println("  yes " + info.info.name + " " + docID);
           return true;

Modified: lucene/dev/branches/branch_4x/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterDelete.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterDelete.java?rev=1404227&r1=1404226&r2=1404227&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterDelete.java (original)
+++ lucene/dev/branches/branch_4x/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterDelete.java Wed Oct 31 16:21:13 2012
@@ -39,6 +39,7 @@ import org.apache.lucene.search.TermQuer
 import org.apache.lucene.store.Directory;
 import org.apache.lucene.store.MockDirectoryWrapper;
 import org.apache.lucene.store.RAMDirectory;
+import org.apache.lucene.util.Bits;
 import org.apache.lucene.util.LuceneTestCase;
 import org.apache.lucene.util._TestUtil;
 
@@ -1116,4 +1117,32 @@ public class TestIndexWriterDelete exten
     assertFalse(s.contains("has deletions"));
     dir.close();
   }
+
+  public void testTryDeleteDocument() throws Exception {
+
+    Directory d = newDirectory();
+
+    IndexWriterConfig iwc = new IndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random()));
+    IndexWriter w = new IndexWriter(d, iwc);
+    Document doc = new Document();
+    w.addDocument(doc);
+    w.addDocument(doc);
+    w.addDocument(doc);
+    w.close();
+
+    iwc = new IndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random()));
+    iwc.setOpenMode(IndexWriterConfig.OpenMode.APPEND);
+    w = new IndexWriter(d, iwc);
+    IndexReader r = DirectoryReader.open(w, false);
+    assertTrue(w.tryDeleteDocument(r, 1));
+    assertTrue(w.tryDeleteDocument(r.leaves().get(0).reader(), 0));
+    r.close();
+    w.close();
+
+    r = DirectoryReader.open(d);
+    assertEquals(2, r.numDeletedDocs());
+    assertNotNull(MultiFields.getLiveDocs(r));
+    r.close();
+    d.close();
+  }
 }