You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-commits@lucene.apache.org by mi...@apache.org on 2009/02/27 13:20:23 UTC
svn commit: r748493 - in /lucene/java/trunk: ./
src/java/org/apache/lucene/index/ src/test/org/apache/lucene/index/
Author: mikemccand
Date: Fri Feb 27 12:20:23 2009
New Revision: 748493
URL: http://svn.apache.org/viewvc?rev=748493&view=rev
Log:
LUCENE-1546: add IndexReader.flush(String commitUserData)
Modified:
lucene/java/trunk/CHANGES.txt
lucene/java/trunk/src/java/org/apache/lucene/index/DirectoryIndexReader.java
lucene/java/trunk/src/java/org/apache/lucene/index/FilterIndexReader.java
lucene/java/trunk/src/java/org/apache/lucene/index/IndexReader.java
lucene/java/trunk/src/java/org/apache/lucene/index/MultiReader.java
lucene/java/trunk/src/java/org/apache/lucene/index/ParallelReader.java
lucene/java/trunk/src/test/org/apache/lucene/index/TestIndexReader.java
Modified: lucene/java/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/java/trunk/CHANGES.txt?rev=748493&r1=748492&r2=748493&view=diff
==============================================================================
--- lucene/java/trunk/CHANGES.txt (original)
+++ lucene/java/trunk/CHANGES.txt Fri Feb 27 12:20:23 2009
@@ -51,6 +51,11 @@
that's visited. All core collectors now use this API. (Mark
Miller, Mike McCandless)
+8. LUCENE-1546: Add IndexReader.flush(String commitUserData), allowing
+ you to record an opaque commitUserData into the commit written by
+ IndexReader. This matches IndexWriter's commit methods. (Jason
+ Rutherglen via Mike McCandless)
+
Bug fixes
1. LUCENE-1415: MultiPhraseQuery has incorrect hashCode() and equals()
Modified: lucene/java/trunk/src/java/org/apache/lucene/index/DirectoryIndexReader.java
URL: http://svn.apache.org/viewvc/lucene/java/trunk/src/java/org/apache/lucene/index/DirectoryIndexReader.java?rev=748493&r1=748492&r2=748493&view=diff
==============================================================================
--- lucene/java/trunk/src/java/org/apache/lucene/index/DirectoryIndexReader.java (original)
+++ lucene/java/trunk/src/java/org/apache/lucene/index/DirectoryIndexReader.java Fri Feb 27 12:20:23 2009
@@ -327,6 +327,10 @@
directory.close();
}
+ protected void doCommit() throws IOException {
+ doCommit(null);
+ }
+
/**
* Commit changes resulting from delete, undeleteAll, or
* setNorm operations
@@ -336,10 +340,10 @@
* (transactional semantics).
* @throws IOException if there is a low-level IO error
*/
- protected void doCommit() throws IOException {
+ protected void doCommit(String commitUserData) throws IOException {
if (hasChanges) {
if (segmentInfos != null) {
-
+ segmentInfos.setUserData(commitUserData);
// Default deleter (for backwards compatibility) is
// KeepOnlyLastCommitDeleter:
IndexFileDeleter deleter = new IndexFileDeleter(directory,
Modified: lucene/java/trunk/src/java/org/apache/lucene/index/FilterIndexReader.java
URL: http://svn.apache.org/viewvc/lucene/java/trunk/src/java/org/apache/lucene/index/FilterIndexReader.java?rev=748493&r1=748492&r2=748493&view=diff
==============================================================================
--- lucene/java/trunk/src/java/org/apache/lucene/index/FilterIndexReader.java (original)
+++ lucene/java/trunk/src/java/org/apache/lucene/index/FilterIndexReader.java Fri Feb 27 12:20:23 2009
@@ -209,7 +209,8 @@
}
protected void doDelete(int n) throws CorruptIndexException, IOException { in.deleteDocument(n); }
- protected void doCommit() throws IOException { in.commit(); }
+ protected void doCommit() throws IOException { doCommit(null); }
+ protected void doCommit(String commitUserData) throws IOException { in.commit(commitUserData); }
protected void doClose() throws IOException { in.close(); }
Modified: lucene/java/trunk/src/java/org/apache/lucene/index/IndexReader.java
URL: http://svn.apache.org/viewvc/lucene/java/trunk/src/java/org/apache/lucene/index/IndexReader.java?rev=748493&r1=748492&r2=748493&view=diff
==============================================================================
--- lucene/java/trunk/src/java/org/apache/lucene/index/IndexReader.java (original)
+++ lucene/java/trunk/src/java/org/apache/lucene/index/IndexReader.java Fri Feb 27 12:20:23 2009
@@ -995,6 +995,17 @@
}
/**
+ * @param commitUserData Opaque String that's recorded
+ * into the segments file in the index, and retrievable
+ * by {@link IndexReader#getCommitUserData}.
+ * @throws IOException
+ */
+ public final synchronized void flush(String commitUserData) throws IOException {
+ ensureOpen();
+ commit(commitUserData);
+ }
+
+ /**
* Commit changes resulting from delete, undeleteAll, or
* setNorm operations
*
@@ -1004,15 +1015,38 @@
* @throws IOException if there is a low-level IO error
*/
protected final synchronized void commit() throws IOException {
- if(hasChanges){
- doCommit();
+ commit(null);
+ }
+
+ /**
+ * Commit changes resulting from delete, undeleteAll, or
+ * setNorm operations
+ *
+ * If an exception is hit, then either no changes or all
+ * changes will have been committed to the index
+ * (transactional semantics).
+ * @throws IOException if there is a low-level IO error
+ */
+ protected final synchronized void commit(String commitUserData) throws IOException {
+ if (hasChanges) {
+ doCommit(commitUserData);
}
hasChanges = false;
}
- /** Implements commit. */
+ /** Implements commit.
+ * @deprecated Please implement {@link #doCommit(String)
+ * instead}. */
protected abstract void doCommit() throws IOException;
+ /** Implements commit. NOTE: subclasses should override
+ * this. In 3.0 this will become an abstract method. */
+ void doCommit(String commitUserData) throws IOException {
+ // Default impl discards commitUserData; all Lucene
+ // subclasses override this (do not discard it).
+ doCommit();
+ }
+
/**
* Closes files associated with this index.
* Also saves any new deletions to disk.
Modified: lucene/java/trunk/src/java/org/apache/lucene/index/MultiReader.java
URL: http://svn.apache.org/viewvc/lucene/java/trunk/src/java/org/apache/lucene/index/MultiReader.java?rev=748493&r1=748492&r2=748493&view=diff
==============================================================================
--- lucene/java/trunk/src/java/org/apache/lucene/index/MultiReader.java (original)
+++ lucene/java/trunk/src/java/org/apache/lucene/index/MultiReader.java Fri Feb 27 12:20:23 2009
@@ -349,8 +349,12 @@
}
protected void doCommit() throws IOException {
+ doCommit(null);
+ }
+
+ protected void doCommit(String commitUserData) throws IOException {
for (int i = 0; i < subReaders.length; i++)
- subReaders[i].commit();
+ subReaders[i].commit(commitUserData);
}
protected synchronized void doClose() throws IOException {
Modified: lucene/java/trunk/src/java/org/apache/lucene/index/ParallelReader.java
URL: http://svn.apache.org/viewvc/lucene/java/trunk/src/java/org/apache/lucene/index/ParallelReader.java?rev=748493&r1=748492&r2=748493&view=diff
==============================================================================
--- lucene/java/trunk/src/java/org/apache/lucene/index/ParallelReader.java (original)
+++ lucene/java/trunk/src/java/org/apache/lucene/index/ParallelReader.java Fri Feb 27 12:20:23 2009
@@ -437,8 +437,12 @@
}
protected void doCommit() throws IOException {
+ doCommit(null);
+ }
+
+ protected void doCommit(String commitUserData) throws IOException {
for (int i = 0; i < readers.size(); i++)
- ((IndexReader)readers.get(i)).commit();
+ ((IndexReader)readers.get(i)).commit(commitUserData);
}
protected synchronized void doClose() throws IOException {
Modified: lucene/java/trunk/src/test/org/apache/lucene/index/TestIndexReader.java
URL: http://svn.apache.org/viewvc/lucene/java/trunk/src/test/org/apache/lucene/index/TestIndexReader.java?rev=748493&r1=748492&r2=748493&view=diff
==============================================================================
--- lucene/java/trunk/src/test/org/apache/lucene/index/TestIndexReader.java (original)
+++ lucene/java/trunk/src/test/org/apache/lucene/index/TestIndexReader.java Fri Feb 27 12:20:23 2009
@@ -68,7 +68,57 @@
public TestIndexReader(String name) {
super(name);
}
+
+ public void testCommitUserData() throws Exception {
+ RAMDirectory d = new MockRAMDirectory();
+
+ String cmpCommitUserData = "foo fighters";
+
+ // set up writer
+ IndexWriter writer = new IndexWriter(d, new StandardAnalyzer(), true, IndexWriter.MaxFieldLength.LIMITED);
+ writer.setMaxBufferedDocs(2);
+ for(int i=0;i<27;i++)
+ addDocumentWithFields(writer);
+ writer.close();
+
+ IndexReader r = IndexReader.open(d);
+ r.deleteDocument(5);
+ r.flush(cmpCommitUserData);
+ r.close();
+
+ SegmentInfos sis = new SegmentInfos();
+ sis.read(d);
+ IndexReader r2 = IndexReader.open(d);
+ IndexCommit c = r.getIndexCommit();
+ assertEquals(c.getUserData(), cmpCommitUserData);
+
+ assertEquals(sis.getCurrentSegmentFileName(), c.getSegmentsFileName());
+
+ assertTrue(c.equals(r.getIndexCommit()));
+ // Change the index
+ writer = new IndexWriter(d, new StandardAnalyzer(), false, IndexWriter.MaxFieldLength.LIMITED);
+ writer.setMaxBufferedDocs(2);
+ for(int i=0;i<7;i++)
+ addDocumentWithFields(writer);
+ writer.close();
+
+ IndexReader r3 = r2.reopen();
+ assertFalse(c.equals(r3.getIndexCommit()));
+ assertFalse(r2.getIndexCommit().isOptimized());
+ r3.close();
+
+ writer = new IndexWriter(d, new StandardAnalyzer(), false, IndexWriter.MaxFieldLength.LIMITED);
+ writer.optimize();
+ writer.close();
+
+ r3 = r2.reopen();
+ assertTrue(r3.getIndexCommit().isOptimized());
+ r2.close();
+ r3.close();
+ d.close();
+ }
+
public void testIsCurrent() throws Exception
{
RAMDirectory d = new MockRAMDirectory();