mirror of
https://github.com/apache/lucene.git
synced 2025-03-09 01:59:27 +00:00
SOLR-6365 "implicit requesthandler (specifiedin code) takes lower precedence over <initParams>"
git-svn-id: https://svn.apache.org/repos/asf/lucene/dev/trunk@1640594 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
570058d937
commit
58d913b6e5
@ -78,10 +78,16 @@ public class InitParams {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void apply(NamedList initArgs) {
|
public void apply(PluginInfo info) {
|
||||||
merge( (NamedList) initArgs.get(PluginInfo.DEFAULTS), defaults,initArgs, PluginInfo.DEFAULTS, false);
|
if (info.isFromSolrConfig) {
|
||||||
merge((NamedList) initArgs.get(PluginInfo.INVARIANTS), invariants, initArgs, PluginInfo.INVARIANTS, false);
|
//if this is a component implicitly defined in code it should be overridden by initPrams
|
||||||
merge((NamedList) initArgs.get(PluginInfo.APPENDS), appends, initArgs, PluginInfo.APPENDS, true);
|
merge(defaults, (NamedList) info.initArgs.get(PluginInfo.DEFAULTS) ,info.initArgs, PluginInfo.DEFAULTS, false);
|
||||||
|
} else {
|
||||||
|
//if the args is initialized from solrconfig.xml inside the requesthHandler it should be taking precedence over initParams
|
||||||
|
merge( (NamedList) info.initArgs.get(PluginInfo.DEFAULTS), defaults,info.initArgs, PluginInfo.DEFAULTS, false);
|
||||||
|
}
|
||||||
|
merge((NamedList) info.initArgs.get(PluginInfo.INVARIANTS), invariants, info.initArgs, PluginInfo.INVARIANTS, false);
|
||||||
|
merge((NamedList) info.initArgs.get(PluginInfo.APPENDS), appends, info.initArgs, PluginInfo.APPENDS, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void merge(NamedList first, NamedList second, NamedList sink, String name, boolean appends) {
|
private static void merge(NamedList first, NamedList second, NamedList sink, String name, boolean appends) {
|
||||||
|
@ -34,6 +34,7 @@ public class PluginInfo implements MapSerializable{
|
|||||||
public final NamedList initArgs;
|
public final NamedList initArgs;
|
||||||
public final Map<String, String> attributes;
|
public final Map<String, String> attributes;
|
||||||
public final List<PluginInfo> children;
|
public final List<PluginInfo> children;
|
||||||
|
public final boolean isFromSolrConfig;
|
||||||
|
|
||||||
public PluginInfo(String type, Map<String, String> attrs ,NamedList initArgs, List<PluginInfo> children) {
|
public PluginInfo(String type, Map<String, String> attrs ,NamedList initArgs, List<PluginInfo> children) {
|
||||||
this.type = type;
|
this.type = type;
|
||||||
@ -42,6 +43,7 @@ public class PluginInfo implements MapSerializable{
|
|||||||
this.initArgs = initArgs;
|
this.initArgs = initArgs;
|
||||||
attributes = unmodifiableMap(attrs);
|
attributes = unmodifiableMap(attrs);
|
||||||
this.children = children == null ? Collections.<PluginInfo>emptyList(): unmodifiableList(children);
|
this.children = children == null ? Collections.<PluginInfo>emptyList(): unmodifiableList(children);
|
||||||
|
isFromSolrConfig = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -52,6 +54,7 @@ public class PluginInfo implements MapSerializable{
|
|||||||
initArgs = DOMUtil.childNodesToNamedList(node);
|
initArgs = DOMUtil.childNodesToNamedList(node);
|
||||||
attributes = unmodifiableMap(DOMUtil.toMap(node.getAttributes()));
|
attributes = unmodifiableMap(DOMUtil.toMap(node.getAttributes()));
|
||||||
children = loadSubPlugins(node);
|
children = loadSubPlugins(node);
|
||||||
|
isFromSolrConfig = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<PluginInfo> loadSubPlugins(Node node) {
|
private List<PluginInfo> loadSubPlugins(Node node) {
|
||||||
|
@ -212,7 +212,7 @@ public final class RequestHandlers {
|
|||||||
if(!ags.isEmpty()){
|
if(!ags.isEmpty()){
|
||||||
info = new PluginInfo(info.type, info.attributes, info.initArgs.clone(), info.children);
|
info = new PluginInfo(info.type, info.attributes, info.initArgs.clone(), info.children);
|
||||||
for (InitParams initParam : ags) {
|
for (InitParams initParam : ags) {
|
||||||
initParam.apply(info.initArgs);
|
initParam.apply(info);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return info;
|
return info;
|
||||||
|
@ -18,6 +18,7 @@ package org.apache.solr.core;
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import org.apache.solr.SolrTestCaseJ4;
|
import org.apache.solr.SolrTestCaseJ4;
|
||||||
|
import org.apache.solr.common.cloud.ZkNodeProps;
|
||||||
import org.apache.solr.common.util.NamedList;
|
import org.apache.solr.common.util.NamedList;
|
||||||
import org.apache.solr.request.SolrRequestHandler;
|
import org.apache.solr.request.SolrRequestHandler;
|
||||||
import org.apache.solr.response.SolrQueryResponse;
|
import org.apache.solr.response.SolrQueryResponse;
|
||||||
@ -25,6 +26,9 @@ import org.junit.BeforeClass;
|
|||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
import java.util.HashMap;
|
||||||
|
|
||||||
|
import static java.util.Collections.singletonMap;
|
||||||
|
|
||||||
public class TestInitParams extends SolrTestCaseJ4 {
|
public class TestInitParams extends SolrTestCaseJ4 {
|
||||||
@BeforeClass
|
@BeforeClass
|
||||||
@ -46,6 +50,14 @@ public class TestInitParams extends SolrTestCaseJ4 {
|
|||||||
def = (NamedList) nl.get(PluginInfo.APPENDS);
|
def = (NamedList) nl.get(PluginInfo.APPENDS);
|
||||||
assertEquals("C", def.get("c"));
|
assertEquals("C", def.get("c"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
InitParams initParams = h.getCore().getSolrConfig().getInitParams().get("a");
|
||||||
|
|
||||||
|
PluginInfo pluginInfo = new PluginInfo("requestHandler",
|
||||||
|
new HashMap<String, String>(),
|
||||||
|
new NamedList<>(singletonMap("defaults", new NamedList(ZkNodeProps.makeMap("a", "A1")))), null);
|
||||||
|
initParams.apply(pluginInfo);
|
||||||
|
assertEquals( "A",initParams.defaults.get("a"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
Loading…
x
Reference in New Issue
Block a user