You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by us...@apache.org on 2012/02/01 11:51:41 UTC

svn commit: r1239052 - in /lucene/dev/trunk: lucene/src/java/org/apache/lucene/codecs/ lucene/src/java/org/apache/lucene/index/ lucene/src/test/org/apache/lucene/index/ modules/facet/src/java/org/apache/lucene/facet/index/

Author: uschindler
Date: Wed Feb  1 10:51:40 2012
New Revision: 1239052

URL: http://svn.apache.org/viewvc?rev=1239052&view=rev
Log:
LUCENE-3735: Fix PayloadProcessorProvider to no longer use Directory for lookup, instead AtomicReader

Modified:
    lucene/dev/trunk/lucene/src/java/org/apache/lucene/codecs/TermsConsumer.java
    lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/IndexWriter.java
    lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/MergeState.java
    lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/PayloadProcessorProvider.java
    lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/SegmentMerger.java
    lucene/dev/trunk/lucene/src/test/org/apache/lucene/index/TestPayloadProcessorProvider.java
    lucene/dev/trunk/modules/facet/src/java/org/apache/lucene/facet/index/FacetsPayloadProcessorProvider.java

Modified: lucene/dev/trunk/lucene/src/java/org/apache/lucene/codecs/TermsConsumer.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/java/org/apache/lucene/codecs/TermsConsumer.java?rev=1239052&r1=1239051&r2=1239052&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/src/java/org/apache/lucene/codecs/TermsConsumer.java (original)
+++ lucene/dev/trunk/lucene/src/java/org/apache/lucene/codecs/TermsConsumer.java Wed Feb  1 10:51:40 2012
@@ -134,8 +134,8 @@ public abstract class TermsConsumer {
         // set PayloadProcessor
         if (mergeState.payloadProcessorProvider != null) {
           for (int i = 0; i < mergeState.readers.size(); i++) {
-            if (mergeState.dirPayloadProcessor[i] != null) {
-              mergeState.currentPayloadProcessor[i] = mergeState.dirPayloadProcessor[i].getProcessor(mergeState.fieldInfo.name, term);
+            if (mergeState.readerPayloadProcessor[i] != null) {
+              mergeState.currentPayloadProcessor[i] = mergeState.readerPayloadProcessor[i].getProcessor(mergeState.fieldInfo.name, term);
             }
           }
         }
@@ -168,8 +168,8 @@ public abstract class TermsConsumer {
         // set PayloadProcessor
         if (mergeState.payloadProcessorProvider != null) {
           for (int i = 0; i < mergeState.readers.size(); i++) {
-            if (mergeState.dirPayloadProcessor[i] != null) {
-              mergeState.currentPayloadProcessor[i] = mergeState.dirPayloadProcessor[i].getProcessor(mergeState.fieldInfo.name, term);
+            if (mergeState.readerPayloadProcessor[i] != null) {
+              mergeState.currentPayloadProcessor[i] = mergeState.readerPayloadProcessor[i].getProcessor(mergeState.fieldInfo.name, term);
             }
           }
         }

Modified: lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/IndexWriter.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/IndexWriter.java?rev=1239052&r1=1239051&r2=1239052&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/IndexWriter.java (original)
+++ lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/IndexWriter.java Wed Feb  1 10:51:40 2012
@@ -38,7 +38,6 @@ import org.apache.lucene.index.Documents
 import org.apache.lucene.index.FieldInfos.FieldNumberBiMap;
 import org.apache.lucene.index.IndexWriterConfig.OpenMode;
 import org.apache.lucene.index.MergeState.CheckAbort;
-import org.apache.lucene.index.PayloadProcessorProvider.DirPayloadProcessor;
 import org.apache.lucene.search.Query;
 import org.apache.lucene.store.AlreadyClosedException;
 import org.apache.lucene.store.CompoundFileDirectory;

Modified: lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/MergeState.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/MergeState.java?rev=1239052&r1=1239051&r2=1239052&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/MergeState.java (original)
+++ lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/MergeState.java Wed Feb  1 10:51:40 2012
@@ -19,7 +19,7 @@ package org.apache.lucene.index;
 
 import java.util.List;
 
-import org.apache.lucene.index.PayloadProcessorProvider.DirPayloadProcessor;
+import org.apache.lucene.index.PayloadProcessorProvider.ReaderPayloadProcessor;
 import org.apache.lucene.index.PayloadProcessorProvider.PayloadProcessor;
 import org.apache.lucene.store.Directory;
 import org.apache.lucene.util.Bits;
@@ -55,7 +55,7 @@ public class MergeState {
   // TODO: this is a FactoryFactory here basically
   // and we could make a codec(wrapper) to do all of this privately so IW is uninvolved
   public PayloadProcessorProvider payloadProcessorProvider;
-  public DirPayloadProcessor[] dirPayloadProcessor;
+  public ReaderPayloadProcessor[] readerPayloadProcessor;
   public PayloadProcessor[] currentPayloadProcessor;
 
   // TODO: get rid of this? it tells you which segments are 'aligned' (e.g. for bulk merging)

Modified: lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/PayloadProcessorProvider.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/PayloadProcessorProvider.java?rev=1239052&r1=1239051&r2=1239052&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/PayloadProcessorProvider.java (original)
+++ lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/PayloadProcessorProvider.java Wed Feb  1 10:51:40 2012
@@ -52,7 +52,7 @@ public abstract class PayloadProcessorPr
    * concurrency issues, then you shouldn't worry about any such issues when
    * {@link PayloadProcessor}s are requested for different terms.
    */
-  public static abstract class DirPayloadProcessor {
+  public static abstract class ReaderPayloadProcessor {
 
     /** Returns a {@link PayloadProcessor} for the given term. */
     public abstract PayloadProcessor getProcessor(String field, BytesRef text) throws IOException;
@@ -76,6 +76,6 @@ public abstract class PayloadProcessorPr
    * through which {@link PayloadProcessor}s can be obtained for each
    * {@link Term}, or <code>null</code> if none should be used.
    */
-  public abstract DirPayloadProcessor getDirProcessor(Directory dir) throws IOException;
+  public abstract ReaderPayloadProcessor getReaderProcessor(AtomicReader reader) throws IOException;
 
 }

Modified: lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/SegmentMerger.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/SegmentMerger.java?rev=1239052&r1=1239051&r2=1239052&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/SegmentMerger.java (original)
+++ lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/SegmentMerger.java Wed Feb  1 10:51:40 2012
@@ -286,7 +286,7 @@ final class SegmentMerger {
     // Remap docIDs
     mergeState.docMaps = new int[numReaders][];
     mergeState.docBase = new int[numReaders];
-    mergeState.dirPayloadProcessor = new PayloadProcessorProvider.DirPayloadProcessor[numReaders];
+    mergeState.readerPayloadProcessor = new PayloadProcessorProvider.ReaderPayloadProcessor[numReaders];
     mergeState.currentPayloadProcessor = new PayloadProcessorProvider.PayloadProcessor[numReaders];
 
     int docBase = 0;
@@ -323,12 +323,7 @@ final class SegmentMerger {
       docBase += docCount;
 
       if (mergeState.payloadProcessorProvider != null) {
-        // TODO: the PayloadProcessorProvider should take AtomicReader as parameter
-        // and find out by itself if it can provide a processor:
-        if (!(reader.reader instanceof SegmentReader))
-          throw new UnsupportedOperationException("Payload processing currently requires exclusively SegmentReaders to be merged.");
-        final Directory dir = ((SegmentReader) reader.reader).directory();
-        mergeState.dirPayloadProcessor[i] = mergeState.payloadProcessorProvider.getDirProcessor(dir);
+        mergeState.readerPayloadProcessor[i] = mergeState.payloadProcessorProvider.getReaderProcessor(reader.reader);
       }
 
       i++;

Modified: lucene/dev/trunk/lucene/src/test/org/apache/lucene/index/TestPayloadProcessorProvider.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/test/org/apache/lucene/index/TestPayloadProcessorProvider.java?rev=1239052&r1=1239051&r2=1239052&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/src/test/org/apache/lucene/index/TestPayloadProcessorProvider.java (original)
+++ lucene/dev/trunk/lucene/src/test/org/apache/lucene/index/TestPayloadProcessorProvider.java Wed Feb  1 10:51:40 2012
@@ -30,7 +30,7 @@ import org.apache.lucene.analysis.tokena
 import org.apache.lucene.document.Document;
 import org.apache.lucene.document.FieldType;
 import org.apache.lucene.document.TextField;
-import org.apache.lucene.index.PayloadProcessorProvider.DirPayloadProcessor;
+import org.apache.lucene.index.PayloadProcessorProvider.ReaderPayloadProcessor;
 import org.apache.lucene.index.PayloadProcessorProvider.PayloadProcessor;
 import org.apache.lucene.search.DocIdSetIterator;
 import org.apache.lucene.store.Directory;
@@ -42,20 +42,24 @@ public class TestPayloadProcessorProvide
 
   private static final class PerDirPayloadProcessor extends PayloadProcessorProvider {
 
-    private Map<Directory, DirPayloadProcessor> processors;
+    private final Map<Directory, ReaderPayloadProcessor> processors;
 
-    public PerDirPayloadProcessor(Map<Directory, DirPayloadProcessor> processors) {
+    public PerDirPayloadProcessor(Map<Directory, ReaderPayloadProcessor> processors) {
       this.processors = processors;
     }
 
     @Override
-    public DirPayloadProcessor getDirProcessor(Directory dir) throws IOException {
-      return processors.get(dir);
+    public ReaderPayloadProcessor getReaderProcessor(AtomicReader reader) throws IOException {
+      if (reader instanceof SegmentReader) {
+        return processors.get(((SegmentReader) reader).directory());
+      } else {
+        throw new UnsupportedOperationException("This shouldnot happen in this test: Reader is no SegmentReader");
+      }
     }
 
   }
 
-  private static final class PerTermPayloadProcessor extends DirPayloadProcessor {
+  private static final class PerTermPayloadProcessor extends ReaderPayloadProcessor {
 
     @Override
     public PayloadProcessor getProcessor(String field, BytesRef text) throws IOException {
@@ -185,7 +189,7 @@ public class TestPayloadProcessorProvide
 
     // Add two source dirs. By not adding the dest dir, we ensure its payloads
     // won't get processed.
-    Map<Directory, DirPayloadProcessor> processors = new HashMap<Directory, DirPayloadProcessor>();
+    Map<Directory, ReaderPayloadProcessor> processors = new HashMap<Directory, ReaderPayloadProcessor>();
     for (Directory d : dirs) {
       processors.put(d, new PerTermPayloadProcessor());
     }
@@ -241,7 +245,7 @@ public class TestPayloadProcessorProvide
 
     // Add two source dirs. By not adding the dest dir, we ensure its payloads
     // won't get processed.
-    Map<Directory, DirPayloadProcessor> processors = new HashMap<Directory, DirPayloadProcessor>();
+    Map<Directory, ReaderPayloadProcessor> processors = new HashMap<Directory, ReaderPayloadProcessor>();
     processors.put(dir, new PerTermPayloadProcessor());
     IndexWriter writer = new IndexWriter(dir, newIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random, MockTokenizer.WHITESPACE, false)));
     writer.setPayloadProcessorProvider(new PerDirPayloadProcessor(processors));

Modified: lucene/dev/trunk/modules/facet/src/java/org/apache/lucene/facet/index/FacetsPayloadProcessorProvider.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/modules/facet/src/java/org/apache/lucene/facet/index/FacetsPayloadProcessorProvider.java?rev=1239052&r1=1239051&r2=1239052&view=diff
==============================================================================
--- lucene/dev/trunk/modules/facet/src/java/org/apache/lucene/facet/index/FacetsPayloadProcessorProvider.java (original)
+++ lucene/dev/trunk/modules/facet/src/java/org/apache/lucene/facet/index/FacetsPayloadProcessorProvider.java Wed Feb  1 10:51:40 2012
@@ -7,7 +7,9 @@ import java.io.InputStream;
 import java.util.HashMap;
 import java.util.Map;
 
+import org.apache.lucene.index.AtomicReader;
 import org.apache.lucene.index.PayloadProcessorProvider;
+import org.apache.lucene.index.SegmentReader;
 import org.apache.lucene.index.Term;
 import org.apache.lucene.store.Directory;
 
@@ -94,7 +96,7 @@ public class FacetsPayloadProcessorProvi
   
   private final Directory workDir;
   
-  private final DirPayloadProcessor dirProcessor;
+  private final ReaderPayloadProcessor dirProcessor;
 
   /**
    * Construct FacetsPayloadProcessorProvider with FacetIndexingParams
@@ -110,14 +112,16 @@ public class FacetsPayloadProcessorProvi
   }
   
   @Override
-  public DirPayloadProcessor getDirProcessor(Directory dir) throws IOException {
-    if (workDir != dir) {
-      return null;
+  public ReaderPayloadProcessor getReaderProcessor(AtomicReader reader) throws IOException {
+    if (reader instanceof SegmentReader) {
+      if (workDir == ((SegmentReader) reader).directory()) {
+        return dirProcessor;
+      }
     }
-    return dirProcessor;
+    return null;
   }
   
-  public static class FacetsDirPayloadProcessor extends DirPayloadProcessor {
+  public static class FacetsDirPayloadProcessor extends ReaderPayloadProcessor {
     
     private final Map<Term, CategoryListParams> termMap = new HashMap<Term, CategoryListParams>(1);