You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by yo...@apache.org on 2013/10/28 13:53:06 UTC

svn commit: r1536341 - in /lucene/dev/trunk/solr: ./ core/src/java/org/apache/solr/update/processor/ core/src/test-files/solr/collection1/conf/ core/src/test/org/apache/solr/update/processor/

Author: yonik
Date: Mon Oct 28 12:53:05 2013
New Revision: 1536341

URL: http://svn.apache.org/r1536341
Log:
SOLR-5395: add RunAlways marker interface for update processor facctories

Modified:
    lucene/dev/trunk/solr/CHANGES.txt
    lucene/dev/trunk/solr/core/src/java/org/apache/solr/update/processor/UpdateRequestProcessorChain.java
    lucene/dev/trunk/solr/core/src/java/org/apache/solr/update/processor/UpdateRequestProcessorFactory.java
    lucene/dev/trunk/solr/core/src/test-files/solr/collection1/conf/solrconfig-transformers.xml
    lucene/dev/trunk/solr/core/src/test/org/apache/solr/update/processor/UpdateRequestProcessorFactoryTest.java

Modified: lucene/dev/trunk/solr/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/CHANGES.txt?rev=1536341&r1=1536340&r2=1536341&view=diff
==============================================================================
--- lucene/dev/trunk/solr/CHANGES.txt (original)
+++ lucene/dev/trunk/solr/CHANGES.txt Mon Oct 28 12:53:05 2013
@@ -103,6 +103,11 @@ New Features
 * SOLR-5027: CollapsingQParserPlugin for high performance field collapsing on high cardinality fields.
   (Joel Bernstein)
 
+* SOLR-5395: Added a RunAlways marker interface for UpdateRequestProcessorFactory 
+  implementations indicating that they should not be removed in later stages
+  of distributed updates (usually signalled by the update.distrib parameter)
+  (yonik)
+  
 
 Bug Fixes
 ----------------------

Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/update/processor/UpdateRequestProcessorChain.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/update/processor/UpdateRequestProcessorChain.java?rev=1536341&r1=1536340&r2=1536341&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/update/processor/UpdateRequestProcessorChain.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/update/processor/UpdateRequestProcessorChain.java Mon Oct 28 12:53:05 2013
@@ -75,7 +75,7 @@ import java.util.ArrayList;
  * <code>UpdateRequestProcessorFactory</code>.  If a chain includes 
  * <code>RunUpdateProcessorFactory</code> but does not include a 
  * <code>DistributingUpdateProcessorFactory</code>, it will be added 
- * automaticly by {@link #init init()}.
+ * automatically by {@link #init init()}.
  * </p>
  *
  * @see UpdateRequestProcessorFactory
@@ -195,8 +195,8 @@ public final class UpdateRequestProcesso
           if (factory instanceof DistributingUpdateProcessorFactory) {
             afterDistrib = false;
           }
-        } else if (!(factory instanceof LogUpdateProcessorFactory)) {    // TODO: use a marker interface for this?
-          // skip anything that is not the log factory
+        } else if (!(factory instanceof UpdateRequestProcessorFactory.RunAlways)) {
+          // skip anything that doesn't have the marker interface
           continue;
         }
       }

Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/update/processor/UpdateRequestProcessorFactory.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/update/processor/UpdateRequestProcessorFactory.java?rev=1536341&r1=1536340&r2=1536341&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/update/processor/UpdateRequestProcessorFactory.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/update/processor/UpdateRequestProcessorFactory.java Mon Oct 28 12:53:05 2013
@@ -33,7 +33,14 @@ import org.apache.solr.util.plugin.SolrC
  * @since solr 1.3
  */
 public abstract class UpdateRequestProcessorFactory implements NamedListInitializedPlugin
-{    
+{
+
+  /** A marker interface for UpdateRequestProcessorFactory implementations indicating that
+   * the factory should be used even if the update.distrib parameter would otherwise cause
+   * it to not be run.
+   */
+  public interface RunAlways {}
+
   @Override
   public void init( NamedList args )
   {

Modified: lucene/dev/trunk/solr/core/src/test-files/solr/collection1/conf/solrconfig-transformers.xml
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/test-files/solr/collection1/conf/solrconfig-transformers.xml?rev=1536341&r1=1536340&r2=1536341&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/test-files/solr/collection1/conf/solrconfig-transformers.xml (original)
+++ lucene/dev/trunk/solr/core/src/test-files/solr/collection1/conf/solrconfig-transformers.xml Mon Oct 28 12:53:05 2013
@@ -62,6 +62,7 @@
 <updateRequestProcessorChain name="distrib-chain-explicit">
   <!-- explicit test using processors before and after distrib -->
   <processor class="solr.CustomUpdateRequestProcessorFactory" />
+  <processor class="solr.LogUpdateProcessorFactory" />
   <processor class="solr.DistributedUpdateProcessorFactory" />
   <processor class="solr.RemoveBlankFieldUpdateProcessorFactory" />
   <processor class="solr.RunUpdateProcessorFactory" />
@@ -69,6 +70,7 @@
 <updateRequestProcessorChain name="distrib-chain-implicit">
   <!-- implicit test w/o distrib declared -->
   <processor class="solr.CustomUpdateRequestProcessorFactory" />
+  <processor class="solr.LogUpdateProcessorFactory" />
   <processor class="solr.RemoveBlankFieldUpdateProcessorFactory" />
   <!-- distrib should be injected here -->
   <processor class="solr.RunUpdateProcessorFactory" />
@@ -76,6 +78,7 @@
 <updateRequestProcessorChain name="distrib-chain-noop">
   <!-- explicit test using noop distrib -->
   <processor class="solr.CustomUpdateRequestProcessorFactory" />
+  <processor class="solr.LogUpdateProcessorFactory" />
   <processor class="solr.NoOpDistributingUpdateProcessorFactory" />
   <processor class="solr.RemoveBlankFieldUpdateProcessorFactory" />
   <processor class="solr.RunUpdateProcessorFactory" />

Modified: lucene/dev/trunk/solr/core/src/test/org/apache/solr/update/processor/UpdateRequestProcessorFactoryTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/test/org/apache/solr/update/processor/UpdateRequestProcessorFactoryTest.java?rev=1536341&r1=1536340&r2=1536341&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/test/org/apache/solr/update/processor/UpdateRequestProcessorFactoryTest.java (original)
+++ lucene/dev/trunk/solr/core/src/test/org/apache/solr/update/processor/UpdateRequestProcessorFactoryTest.java Mon Oct 28 12:53:05 2013
@@ -78,7 +78,7 @@ public class UpdateRequestProcessorFacto
       assertNotNull(name, chain);
 
       // either explicitly, or because of injection
-      assertEquals(name + " chain length", 4,
+      assertEquals(name + " chain length", 5,
                    chain.getFactories().length);
 
       // Custom comes first in all three of our chains
@@ -93,7 +93,20 @@ public class UpdateRequestProcessorFacto
       assertFalse(name + " post distrib proc should not be a CustomUpdateRequestProcessor: " 
                  + proc.getClass().getName(),
                  proc instanceof CustomUpdateRequestProcessor);
-      
+
+      int n=0;
+      boolean foundLog = false;
+      for (;;) {
+        n++;
+        if (proc instanceof LogUpdateProcessor) {
+          foundLog = true;
+        }
+        proc = proc.next;
+        if (proc == null) break;
+      }
+
+      assertTrue( n < chain.getFactories().length );   // some processors should have been dropped
+      assertTrue( foundLog );  // make sure the marker interface was successful in keeping the log processor
 
     }