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 2013/04/04 13:04:38 UTC

svn commit: r1464437 - in /lucene/dev/trunk: ./ lucene/ lucene/CHANGES.txt lucene/core/ lucene/core/src/java/org/apache/lucene/index/StandardDirectoryReader.java lucene/core/src/test/org/apache/lucene/index/TestDirectoryReaderReopen.java

Author: mikemccand
Date: Thu Apr  4 11:04:38 2013
New Revision: 1464437

URL: http://svn.apache.org/r1464437
Log:
LUCENE-4898: openIfChange now allows targeting an IndexCommit from an NRT reader

Modified:
    lucene/dev/trunk/   (props changed)
    lucene/dev/trunk/lucene/   (props changed)
    lucene/dev/trunk/lucene/CHANGES.txt   (contents, props changed)
    lucene/dev/trunk/lucene/core/   (props changed)
    lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/StandardDirectoryReader.java
    lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestDirectoryReaderReopen.java

Modified: lucene/dev/trunk/lucene/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/CHANGES.txt?rev=1464437&r1=1464436&r2=1464437&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/CHANGES.txt (original)
+++ lucene/dev/trunk/lucene/CHANGES.txt Thu Apr  4 11:04:38 2013
@@ -160,6 +160,10 @@ New Features
 * LUCENE-4645: Added support for the "Contains" spatial predicate for
   RecursivePrefixTreeStrategy.  (David Smiley)
 
+* LUCENE-4898: DirectoryReader.openIfChanged now allows opening a reader
+  on an IndexCommit starting from a near-real-time reader (previously
+  this would throw IllegalArgumentException).  (Mike McCandless)
+
 Optimizations
 
 * LUCENE-4839: SorterTemplate.merge can now be overridden in order to replace

Modified: lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/StandardDirectoryReader.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/StandardDirectoryReader.java?rev=1464437&r1=1464436&r2=1464437&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/StandardDirectoryReader.java (original)
+++ lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/StandardDirectoryReader.java Thu Apr  4 11:04:38 2013
@@ -260,7 +260,7 @@ final class StandardDirectoryReader exte
 
   private DirectoryReader doOpenFromWriter(IndexCommit commit) throws IOException {
     if (commit != null) {
-      throw new IllegalArgumentException("a reader obtained from IndexWriter.getReader() cannot currently accept a commit");
+      return doOpenFromCommit(commit);
     }
 
     if (writer.nrtIsCurrent(segmentInfos)) {
@@ -293,6 +293,10 @@ final class StandardDirectoryReader exte
       }
     }
 
+    return doOpenFromCommit(commit);
+  }
+
+  private DirectoryReader doOpenFromCommit(IndexCommit commit) throws IOException {
     return (DirectoryReader) new SegmentInfos.FindSegmentsFile(directory) {
       @Override
       protected Object doBody(String segmentFileName) throws IOException {

Modified: lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestDirectoryReaderReopen.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestDirectoryReaderReopen.java?rev=1464437&r1=1464436&r2=1464437&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestDirectoryReaderReopen.java (original)
+++ lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestDirectoryReaderReopen.java Thu Apr  4 11:04:38 2013
@@ -594,4 +594,28 @@ public class TestDirectoryReaderReopen e
     r.close();
     dir.close();
   }
+
+  public void testOpenIfChangedNRTToCommit() throws Exception {
+    Directory dir = newDirectory();
+
+    // Can't use RIW because it randomly commits:
+    IndexWriter w = new IndexWriter(dir, newIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random())));
+    Document doc = new Document();
+    doc.add(newStringField("field", "value", Field.Store.NO));
+    w.addDocument(doc);
+    w.commit();
+    List<IndexCommit> commits = DirectoryReader.listCommits(dir);
+    assertEquals(1, commits.size());
+    w.addDocument(doc);
+    DirectoryReader r = DirectoryReader.open(w, true);
+
+    assertEquals(2, r.numDocs());
+    IndexReader r2 = DirectoryReader.openIfChanged(r, commits.get(0));
+    assertNotNull(r2);
+    r.close();
+    assertEquals(1, r2.numDocs());
+    w.close();
+    r2.close();
+    dir.close();
+  }
 }