You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by no...@apache.org on 2014/08/30 18:37:06 UTC

svn commit: r1621489 - in /lucene/dev/branches/branch_4x: ./ solr/ solr/core/ solr/core/src/java/org/apache/solr/core/ solr/core/src/java/org/apache/solr/handler/ solr/core/src/java/org/apache/solr/util/ solr/core/src/test-files/solr/collection1/conf/ ...

Author: noble
Date: Sat Aug 30 16:37:05 2014
New Revision: 1621489

URL: http://svn.apache.org/r1621489
Log:
SOLR-6365: specify appends, defaults, invariants outside of the request handler

Added:
    lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/core/ParamSet.java
      - copied unchanged from r1621414, lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/ParamSet.java
    lucene/dev/branches/branch_4x/solr/core/src/test-files/solr/collection1/conf/solrconfig-paramset.xml
      - copied unchanged from r1621414, lucene/dev/trunk/solr/core/src/test-files/solr/collection1/conf/solrconfig-paramset.xml
    lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/core/TestParamSet.java
      - copied unchanged from r1621414, lucene/dev/trunk/solr/core/src/test/org/apache/solr/core/TestParamSet.java
Modified:
    lucene/dev/branches/branch_4x/   (props changed)
    lucene/dev/branches/branch_4x/solr/   (props changed)
    lucene/dev/branches/branch_4x/solr/CHANGES.txt   (contents, props changed)
    lucene/dev/branches/branch_4x/solr/core/   (props changed)
    lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/core/PluginInfo.java
    lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/core/RequestHandlers.java
    lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/core/SolrConfig.java
    lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/handler/DumpRequestHandler.java
    lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/util/SolrPluginUtils.java
    lucene/dev/branches/branch_4x/solr/solrj/   (props changed)
    lucene/dev/branches/branch_4x/solr/solrj/src/java/org/apache/solr/common/util/NamedList.java

Modified: lucene/dev/branches/branch_4x/solr/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/CHANGES.txt?rev=1621489&r1=1621488&r2=1621489&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/CHANGES.txt (original)
+++ lucene/dev/branches/branch_4x/solr/CHANGES.txt Sat Aug 30 16:37:05 2014
@@ -39,6 +39,9 @@ New Features
 
 * SOLR-4580: Support for protecting content in ZooKeeper. (Per Steffensen, Mark Miller)
 
+* SOLR-6365: specify appends, defaults, invariants outside of the request handler.
+  (Noble Paul, Erik Hatcher, shalin)
+
 Bug Fixes
 ----------------------
 

Modified: lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/core/PluginInfo.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/core/PluginInfo.java?rev=1621489&r1=1621488&r2=1621489&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/core/PluginInfo.java (original)
+++ lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/core/PluginInfo.java Sat Aug 30 16:37:05 2014
@@ -111,4 +111,7 @@ public class PluginInfo {
                    "str",
                    "int","long",
                    "float","double"));
+  public static final String DEFAULTS = "defaults";
+  public static final String APPENDS = "appends";
+  public static final String INVARIANTS = "invariants";
 }

Modified: lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/core/RequestHandlers.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/core/RequestHandlers.java?rev=1621489&r1=1621488&r2=1621489&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/core/RequestHandlers.java (original)
+++ lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/core/RequestHandlers.java Sat Aug 30 16:37:05 2014
@@ -31,6 +31,7 @@ import org.apache.solr.common.SolrExcept
 import org.apache.solr.common.SolrException.ErrorCode;
 import org.apache.solr.common.util.NamedList;
 import org.apache.solr.common.util.SimpleOrderedMap;
+import org.apache.solr.common.util.StrUtils;
 import org.apache.solr.request.SolrQueryRequest;
 import org.apache.solr.request.SolrRequestHandler;
 import org.apache.solr.response.SolrQueryResponse;
@@ -178,8 +179,9 @@ public final class RequestHandlers {
     for (Map.Entry<PluginInfo,SolrRequestHandler> entry : handlers.entrySet()) {
       PluginInfo info = entry.getKey();
       SolrRequestHandler requestHandler = entry.getValue();
+      info = applyParamSet(config, info);
       if (requestHandler instanceof PluginInfoInitialized) {
-        ((PluginInfoInitialized) requestHandler).init(info);
+       ((PluginInfoInitialized) requestHandler).init(info);
       } else{
         requestHandler.init(info.initArgs);
       }
@@ -190,7 +192,28 @@ public final class RequestHandlers {
     if(get("") == null)
       log.warn("no default request handler is registered (either '/select' or 'standard')");
   }
-    
+
+  private PluginInfo applyParamSet(SolrConfig config, PluginInfo info) {
+    List<ParamSet> paramSets= new ArrayList<>();
+    String p = info.attributes.get("paramSet");
+    if(p!=null) {
+      for (String paramSet : StrUtils.splitSmart(p, ',')) {
+        if(config.getParamSets().containsKey(paramSet)) paramSets.add(config.getParamSets().get(paramSet));
+        else log.warn("INVALID paramSet {} in requestHandler {}", paramSet, info.toString());
+      }
+    }
+    for (ParamSet paramSet : config.getParamSets().values()) {
+      if(paramSet.matchPath(info.name)) paramSets.add(paramSet);
+    }
+    if(!paramSets.isEmpty()){
+      info = new PluginInfo(info.type, info.attributes, info.initArgs.clone(), info.children);
+      for (ParamSet paramSet : paramSets) {
+        paramSet.apply(info.initArgs);
+      }
+    }
+    return info;
+  }
+
 
   /**
    * The <code>LazyRequestHandlerWrapper</code> wraps any {@link SolrRequestHandler}.  

Modified: lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/core/SolrConfig.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/core/SolrConfig.java?rev=1621489&r1=1621488&r2=1621489&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/core/SolrConfig.java (original)
+++ lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/core/SolrConfig.java Sat Aug 30 16:37:05 2014
@@ -23,6 +23,8 @@ import org.apache.lucene.search.BooleanQ
 import org.apache.lucene.util.Version;
 import org.apache.solr.common.SolrException;
 import org.apache.solr.common.SolrException.ErrorCode;
+import org.apache.solr.common.util.NamedList;
+import org.apache.solr.common.util.StrUtils;
 import org.apache.solr.handler.component.SearchComponent;
 import org.apache.solr.request.SolrRequestHandler;
 import org.apache.solr.response.QueryResponseWriter;
@@ -57,10 +59,13 @@ import java.util.ArrayList;
 import java.util.Collections;
 import java.util.EnumSet;
 import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Locale;
 import java.util.Map;
+import java.util.Set;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
@@ -81,7 +86,7 @@ public class SolrConfig extends Config {
   
   public static final String DEFAULT_CONF_FILE = "solrconfig.xml";
 
-  static enum PluginOpts { 
+  static enum PluginOpts {
     MULTI_OK, 
     REQUIRE_NAME,
     REQUIRE_CLASS,
@@ -305,12 +310,27 @@ public class SolrConfig extends Config {
          "requestDispatcher/@handleSelect", true ); 
      
      addHttpRequestToContext = getBool( 
-         "requestDispatcher/requestParsers/@addHttpRequestToContext", false ); 
+         "requestDispatcher/requestParsers/@addHttpRequestToContext", false );
+
+    loadPluginInfo(ParamSet.class,ParamSet.TYPE);
+    List<PluginInfo> paramSetInfos =  pluginStore.get(ParamSet.class.getName()) ;
+    if(paramSetInfos!=null){
+      Map<String,ParamSet> paramSets = new HashMap<>();
+      for (PluginInfo p : paramSetInfos) {
+        ParamSet paramSet = new ParamSet(p);
+        paramSets.put(paramSet.name == null ? String.valueOf(paramSet.hashCode()) : paramSet.name , paramSet );
+      }
+      this.paramSets = Collections.unmodifiableMap(paramSets);
+
+    }
 
     solrRequestParsers = new SolrRequestParsers(this);
     Config.log.info("Loaded SolrConfig: " + name);
   }
-
+  private Map<String,ParamSet>  paramSets = Collections.emptyMap();
+  public Map<String, ParamSet> getParamSets() {
+    return paramSets;
+  }
   protected UpdateHandlerInfo loadUpdatehandlerInfo() {
     return new UpdateHandlerInfo(get("updateHandler/@class",null),
             getInt("updateHandler/autoCommit/maxDocs",-1),
@@ -607,4 +627,6 @@ public class SolrConfig extends Config {
   public boolean isEnableRemoteStreams() {
     return enableRemoteStreams;
   }
+
+
 }

Modified: lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/handler/DumpRequestHandler.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/handler/DumpRequestHandler.java?rev=1621489&r1=1621488&r2=1621489&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/handler/DumpRequestHandler.java (original)
+++ lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/handler/DumpRequestHandler.java Sat Aug 30 16:37:05 2014
@@ -35,6 +35,21 @@ public class DumpRequestHandler extends 
   {
     // Show params
     rsp.add( "params", req.getParams().toNamedList() );
+    String[] returnParams = req.getParams().getParams("param");
+    if(returnParams !=null) {
+      NamedList params = (NamedList) rsp.getValues().get("params");
+      for (String returnParam : returnParams) {
+        String[] vals = req.getParams().getParams(returnParam);
+        if(vals != null){
+          for (String val : vals) {
+            params.add(returnParam,val);
+          }
+        }
+
+      }
+    }
+
+    if(Boolean.TRUE.equals( req.getParams().getBool("initArgs"))) rsp.add("initArgs", initArgs);
         
     // Write the streams...
     if( req.getContentStreams() != null ) {

Modified: lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/util/SolrPluginUtils.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/util/SolrPluginUtils.java?rev=1621489&r1=1621488&r2=1621489&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/util/SolrPluginUtils.java (original)
+++ lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/util/SolrPluginUtils.java Sat Aug 30 16:37:05 2014
@@ -48,6 +48,7 @@ import org.apache.solr.common.params.Sol
 import org.apache.solr.common.util.NamedList;
 import org.apache.solr.common.util.SimpleOrderedMap;
 import org.apache.solr.common.util.StrUtils;
+import org.apache.solr.core.ParamSet;
 import org.apache.solr.core.SolrCore;
 import org.apache.solr.handler.component.HighlightComponent;
 import org.apache.solr.handler.component.ResponseBuilder;
@@ -124,6 +125,17 @@ public class SolrPluginUtils {
    */
   public static void setDefaults(SolrQueryRequest req, SolrParams defaults,
                                  SolrParams appends, SolrParams invariants) {
+      String paramSetNames = req.getParams().get(ParamSet.TYPE);
+      if(paramSetNames !=null){
+        for (String name : StrUtils.splitSmart(paramSetNames,',')) {
+          ParamSet paramSet = req.getCore().getSolrConfig().getParamSets().get(name);
+          if(paramSet!=null){
+            if(paramSet.defaults != null) defaults = SolrParams.wrapDefaults(SolrParams.toSolrParams(paramSet.defaults) , defaults);
+            if(paramSet.invariants != null) invariants = SolrParams.wrapDefaults(invariants, SolrParams.toSolrParams(paramSet.invariants));
+            if(paramSet.appends != null)  appends = SolrParams.wrapAppended(appends, SolrParams.toSolrParams(paramSet.appends));
+          }
+        }
+      }
 
       SolrParams p = req.getParams();
       p = SolrParams.wrapDefaults(p, defaults);

Modified: lucene/dev/branches/branch_4x/solr/solrj/src/java/org/apache/solr/common/util/NamedList.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/solrj/src/java/org/apache/solr/common/util/NamedList.java?rev=1621489&r1=1621488&r2=1621489&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/solrj/src/java/org/apache/solr/common/util/NamedList.java (original)
+++ lucene/dev/branches/branch_4x/solr/solrj/src/java/org/apache/solr/common/util/NamedList.java Sat Aug 30 16:37:05 2014
@@ -21,6 +21,7 @@ import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
+import java.util.Collections;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
@@ -384,6 +385,11 @@ public class NamedList<T> implements Clo
     return sb.toString();
   }
 
+  public NamedList getImmutableCopy() {
+    NamedList copy = clone();
+    return new NamedList<>( Collections.unmodifiableList(copy.nvPairs));
+  }
+
   /**
    * 
    * Helper class implementing Map.Entry&lt;String, T&gt; to store the key-value