You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by sh...@apache.org on 2011/05/02 14:50:30 UTC
svn commit: r1098543 - in /lucene/dev/branches/branch_3x/lucene: CHANGES.txt
src/java/org/apache/lucene/index/IndexWriter.java
src/test/org/apache/lucene/TestMergeSchedulerExternal.java
Author: shaie
Date: Mon May 2 12:50:29 2011
New Revision: 1098543
URL: http://svn.apache.org/viewvc?rev=1098543&view=rev
Log:
LUCENE-3061: Open IndexWriter API to allow custom MergeScheduler implementation
Modified:
lucene/dev/branches/branch_3x/lucene/CHANGES.txt
lucene/dev/branches/branch_3x/lucene/src/java/org/apache/lucene/index/IndexWriter.java
lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/TestMergeSchedulerExternal.java
Modified: lucene/dev/branches/branch_3x/lucene/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/lucene/CHANGES.txt?rev=1098543&r1=1098542&r2=1098543&view=diff
==============================================================================
--- lucene/dev/branches/branch_3x/lucene/CHANGES.txt (original)
+++ lucene/dev/branches/branch_3x/lucene/CHANGES.txt Mon May 2 12:50:29 2011
@@ -9,6 +9,12 @@ Changes in backwards compatibility polic
a method getHeapArray() was added to retrieve the internal heap array as a
non-generic Object[]. (Uwe Schindler, Yonik Seeley)
+API Changes
+
+* LUCENE-3061: IndexWriter's getNextMerge() and merge(OneMerge) are now public
+ (though @lucene.experimental), allowing for custom MergeScheduler
+ implementations. (Shai Erera)
+
Optimizations
* LUCENE-2990: ArrayUtil/CollectionUtil.*Sort() methods now exit early
Modified: lucene/dev/branches/branch_3x/lucene/src/java/org/apache/lucene/index/IndexWriter.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/lucene/src/java/org/apache/lucene/index/IndexWriter.java?rev=1098543&r1=1098542&r2=1098543&view=diff
==============================================================================
--- lucene/dev/branches/branch_3x/lucene/src/java/org/apache/lucene/index/IndexWriter.java (original)
+++ lucene/dev/branches/branch_3x/lucene/src/java/org/apache/lucene/index/IndexWriter.java Mon May 2 12:50:29 2011
@@ -2618,10 +2618,13 @@ public class IndexWriter implements Clos
}
}
- /** Expert: the {@link MergeScheduler} calls this method
- * to retrieve the next merge requested by the
- * MergePolicy */
- synchronized MergePolicy.OneMerge getNextMerge() {
+ /**
+ * Expert: the {@link MergeScheduler} calls this method to retrieve the next
+ * merge requested by the MergePolicy
+ *
+ * @lucene.experimental
+ */
+ public synchronized MergePolicy.OneMerge getNextMerge() {
if (pendingMerges.size() == 0)
return null;
else {
@@ -3598,9 +3601,10 @@ public class IndexWriter implements Clos
/**
* Merges the indicated segments, replacing them in the stack with a
* single segment.
+ *
+ * @lucene.experimental
*/
-
- final void merge(MergePolicy.OneMerge merge)
+ public final void merge(MergePolicy.OneMerge merge)
throws CorruptIndexException, IOException {
boolean success = false;
Modified: lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/TestMergeSchedulerExternal.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/TestMergeSchedulerExternal.java?rev=1098543&r1=1098542&r2=1098543&view=diff
==============================================================================
--- lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/TestMergeSchedulerExternal.java (original)
+++ lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/TestMergeSchedulerExternal.java Mon May 2 12:50:29 2011
@@ -19,17 +19,21 @@ package org.apache.lucene;
import java.io.IOException;
import org.apache.lucene.util.LuceneTestCase;
+import org.apache.lucene.store.Directory;
import org.apache.lucene.store.MockDirectoryWrapper;
+import org.apache.lucene.store.RAMDirectory;
+import org.apache.lucene.index.CorruptIndexException;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.index.LogMergePolicy;
import org.apache.lucene.index.MergePolicy;
import org.apache.lucene.index.ConcurrentMergeScheduler;
+import org.apache.lucene.index.MergeScheduler;
+import org.apache.lucene.index.MergePolicy.OneMerge;
import org.apache.lucene.analysis.MockAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
-
/**
* Holds tests cases to verify external APIs are accessible
* while not being in org.apache.lucene.index package.
@@ -106,4 +110,40 @@ public class TestMergeSchedulerExternal
assertTrue(excCalled);
dir.close();
}
+
+ private static class ReportingMergeScheduler extends MergeScheduler {
+
+ @Override
+ public void merge(IndexWriter writer) throws CorruptIndexException, IOException {
+ OneMerge merge = null;
+ while ((merge = writer.getNextMerge()) != null) {
+ if (VERBOSE) {
+ System.out.println("executing merge " + merge.segString(writer.getDirectory()));
+ }
+ writer.merge(merge);
+ }
+ }
+
+ @Override
+ public void close() throws CorruptIndexException, IOException {}
+
+ }
+
+ public void testCustomMergeScheduler() throws Exception {
+ // we don't really need to execute anything, just to make sure the custom MS
+ // compiles. But ensure that it can be used as well, e.g., no other hidden
+ // dependencies or something. Therefore, don't use any random API !
+ Directory dir = new RAMDirectory();
+ IndexWriterConfig conf = new IndexWriterConfig(TEST_VERSION_CURRENT, null);
+ conf.setMergeScheduler(new ReportingMergeScheduler());
+ IndexWriter writer = new IndexWriter(dir, conf);
+ writer.addDocument(new Document());
+ writer.commit(); // trigger flush
+ writer.addDocument(new Document());
+ writer.commit(); // trigger flush
+ writer.optimize();
+ writer.close();
+ dir.close();
+ }
+
}