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 2014/12/02 15:54:23 UTC
svn commit: r1642891 - in /lucene/dev/branches/branch_5x: ./ lucene/
lucene/CHANGES.txt lucene/core/
lucene/core/src/java/org/apache/lucene/search/SearcherManager.java
lucene/core/src/test/org/apache/lucene/search/TestSearcherManager.java
Author: mikemccand
Date: Tue Dec 2 14:54:23 2014
New Revision: 1642891
URL: http://svn.apache.org/r1642891
Log:
LUCENE-6087: allow custom DirectoryReader to SearcherManager
Modified:
lucene/dev/branches/branch_5x/ (props changed)
lucene/dev/branches/branch_5x/lucene/ (props changed)
lucene/dev/branches/branch_5x/lucene/CHANGES.txt (contents, props changed)
lucene/dev/branches/branch_5x/lucene/core/ (props changed)
lucene/dev/branches/branch_5x/lucene/core/src/java/org/apache/lucene/search/SearcherManager.java
lucene/dev/branches/branch_5x/lucene/core/src/test/org/apache/lucene/search/TestSearcherManager.java
Modified: lucene/dev/branches/branch_5x/lucene/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/lucene/CHANGES.txt?rev=1642891&r1=1642890&r2=1642891&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/lucene/CHANGES.txt (original)
+++ lucene/dev/branches/branch_5x/lucene/CHANGES.txt Tue Dec 2 14:54:23 2014
@@ -208,6 +208,9 @@ API Changes
resourceDescription so its toString is sane (Robert Muir, Mike
McCandless)
+* LUCENE-6087: Allow passing custom DirectoryReader to SearcherManager
+ (Mike McCandless)
+
Bug Fixes
* LUCENE-5650: Enforce read-only access to any path outside the temporary
Modified: lucene/dev/branches/branch_5x/lucene/core/src/java/org/apache/lucene/search/SearcherManager.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/lucene/core/src/java/org/apache/lucene/search/SearcherManager.java?rev=1642891&r1=1642890&r2=1642891&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/lucene/core/src/java/org/apache/lucene/search/SearcherManager.java (original)
+++ lucene/dev/branches/branch_5x/lucene/core/src/java/org/apache/lucene/search/SearcherManager.java Tue Dec 2 14:54:23 2014
@@ -106,6 +106,25 @@ public final class SearcherManager exten
current = getSearcher(searcherFactory, DirectoryReader.open(dir));
}
+ /**
+ * Creates and returns a new SearcherManager from an existing {@link DirectoryReader}. Note that
+ * this steals the incoming reference.
+ *
+ * @param reader the DirectoryReader.
+ * @param searcherFactory An optional {@link SearcherFactory}. Pass
+ * <code>null</code> if you don't require the searcher to be warmed
+ * before going live or other custom behavior.
+ *
+ * @throws IOException if there is a low-level I/O error
+ */
+ public SearcherManager(DirectoryReader reader, SearcherFactory searcherFactory) throws IOException {
+ if (searcherFactory == null) {
+ searcherFactory = new SearcherFactory();
+ }
+ this.searcherFactory = searcherFactory;
+ this.current = getSearcher(searcherFactory, reader);
+ }
+
@Override
protected void decRef(IndexSearcher reference) throws IOException {
reference.getIndexReader().decRef();
Modified: lucene/dev/branches/branch_5x/lucene/core/src/test/org/apache/lucene/search/TestSearcherManager.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/lucene/core/src/test/org/apache/lucene/search/TestSearcherManager.java?rev=1642891&r1=1642890&r2=1642891&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/lucene/core/src/test/org/apache/lucene/search/TestSearcherManager.java (original)
+++ lucene/dev/branches/branch_5x/lucene/core/src/test/org/apache/lucene/search/TestSearcherManager.java Tue Dec 2 14:54:23 2014
@@ -31,16 +31,20 @@ import org.apache.lucene.analysis.MockAn
import org.apache.lucene.document.Document;
import org.apache.lucene.index.ConcurrentMergeScheduler;
import org.apache.lucene.index.DirectoryReader;
+import org.apache.lucene.index.FilterDirectoryReader;
+import org.apache.lucene.index.FilterLeafReader;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
+import org.apache.lucene.index.LeafReader;
+import org.apache.lucene.index.LeafReaderContext;
import org.apache.lucene.index.RandomIndexWriter;
import org.apache.lucene.index.Term;
import org.apache.lucene.index.ThreadedIndexingAndSearchingTestCase;
import org.apache.lucene.store.AlreadyClosedException;
import org.apache.lucene.store.Directory;
-import org.apache.lucene.util.LuceneTestCase;
import org.apache.lucene.util.LuceneTestCase.SuppressCodecs;
+import org.apache.lucene.util.LuceneTestCase;
import org.apache.lucene.util.NamedThreadFactory;
import org.apache.lucene.util.TestUtil;
@@ -445,5 +449,51 @@ public class TestSearcherManager extends
sm.close();
dir.close();
}
-
+
+ private static class MyFilterLeafReader extends FilterLeafReader {
+ public MyFilterLeafReader(LeafReader in) {
+ super(in);
+ }
+ }
+
+ private static class MyFilterDirectoryReader extends FilterDirectoryReader {
+ public MyFilterDirectoryReader(DirectoryReader in) {
+ super(in,
+ new FilterDirectoryReader.SubReaderWrapper() {
+ @Override
+ public LeafReader wrap(LeafReader reader) {
+ return new MyFilterLeafReader(reader);
+ }
+ });
+ }
+
+ @Override
+ protected DirectoryReader doWrapDirectoryReader(DirectoryReader in) {
+ return new MyFilterDirectoryReader(in);
+ }
+ }
+
+ // LUCENE-6087
+ public void testCustomDirectoryReader() throws Exception {
+ Directory dir = newDirectory();
+ RandomIndexWriter w = new RandomIndexWriter(random(), dir);
+ DirectoryReader reader = new MyFilterDirectoryReader(w.getReader());
+ SearcherManager mgr = new SearcherManager(reader, null);
+ for(int i=0;i<10;i++) {
+ w.addDocument(new Document());
+ mgr.maybeRefresh();
+ IndexSearcher s = mgr.acquire();
+ try {
+ assertTrue(s.getIndexReader() instanceof MyFilterDirectoryReader);
+ for (LeafReaderContext ctx : s.getIndexReader().leaves()) {
+ assertTrue(ctx.reader() instanceof MyFilterLeafReader);
+ }
+ } finally {
+ mgr.release(s);
+ }
+ }
+ mgr.close();
+ w.close();
+ dir.close();
+ }
}