aboutsummaryrefslogtreecommitdiffstats
path: root/config-model/src
diff options
context:
space:
mode:
authorBjørn Christian Seime <bjorncs@verizonmedia.com>2020-09-14 13:00:04 +0200
committerBjørn Christian Seime <bjorncs@verizonmedia.com>2020-09-14 13:04:47 +0200
commite5780128358a2db9574e785025d3db39a4563084 (patch)
tree17033bbd7e1b8c5d34cbf22d51139a58b0062b7b /config-model/src
parent25b513ed5ef18c09a6c041f81816e768c473cda9 (diff)
Move search handler component definition to separate class
Diffstat (limited to 'config-model/src')
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/container/xml/BundleInstantiationSpecificationBuilder.java4
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilder.java24
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/container/xml/SearchHandler.java25
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/container/xml/SearchBuilderTest.java10
4 files changed, 38 insertions, 25 deletions
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/container/xml/BundleInstantiationSpecificationBuilder.java b/config-model/src/main/java/com/yahoo/vespa/model/container/xml/BundleInstantiationSpecificationBuilder.java
index 4e0bff1c1fc..12d74418f9f 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/container/xml/BundleInstantiationSpecificationBuilder.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/container/xml/BundleInstantiationSpecificationBuilder.java
@@ -9,8 +9,6 @@ import org.w3c.dom.Element;
import java.util.Arrays;
import java.util.List;
-import static com.yahoo.vespa.model.container.xml.ContainerModelBuilder.SEARCH_HANDLER_CLASS;
-
/**
* This object builds a bundle instantiation spec from an XML element.
*
@@ -39,7 +37,7 @@ public class BundleInstantiationSpecificationBuilder {
private static void validate(BundleInstantiationSpecification instSpec) {
List<String> forbiddenClasses = Arrays.asList(
- SEARCH_HANDLER_CLASS,
+ SearchHandler.HANDLER_CLASS,
"com.yahoo.processing.handler.ProcessingHandler");
for (String forbiddenClass: forbiddenClasses) {
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilder.java b/config-model/src/main/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilder.java
index 448e81be1c6..09911ada69b 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilder.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilder.java
@@ -111,9 +111,6 @@ public class ContainerModelBuilder extends ConfigModelBuilder<ContainerModel> {
private static final String DEPRECATED_CONTAINER_TAG = "jdisc";
private static final String ENVIRONMENT_VARIABLES_ELEMENT = "environment-variables";
- static final String SEARCH_HANDLER_CLASS = com.yahoo.search.handler.SearchHandler.class.getName();
- static final BindingPattern SEARCH_HANDLER_BINDING = SystemBindingPattern.fromHttpPath("/search/*");
-
public enum Networking { disable, enable }
private ApplicationPackage app;
@@ -439,7 +436,7 @@ public class ContainerModelBuilder extends ConfigModelBuilder<ContainerModel> {
addIncludes(processingElement);
cluster.setProcessingChains(new DomProcessingBuilder(null).build(deployState, cluster, processingElement),
- serverBindings(processingElement, ProcessingChains.defaultBindings));
+ serverBindings(processingElement, ProcessingChains.defaultBindings).toArray(BindingPattern[]::new));
validateAndAddConfiguredComponents(deployState, cluster, processingElement, "renderer", ContainerModelBuilder::validateRendererElement);
}
@@ -788,14 +785,9 @@ public class ContainerModelBuilder extends ConfigModelBuilder<ContainerModel> {
cluster.addComponent(new ProcessingHandler<>(cluster.getSearch().getChains(),
"com.yahoo.search.searchchain.ExecutionFactory"));
- ProcessingHandler<SearchChains> searchHandler = new ProcessingHandler<>(cluster.getSearch().getChains(),
- "com.yahoo.search.handler.SearchHandler");
- BindingPattern[] defaultBindings = {SEARCH_HANDLER_BINDING};
- for (BindingPattern binding: serverBindings(searchElement, defaultBindings)) {
- searchHandler.addServerBindings(binding);
- }
-
- cluster.addComponent(searchHandler);
+ cluster.addComponent(
+ new SearchHandler(
+ cluster.getSearch().getChains(), serverBindings(searchElement, SearchHandler.DEFAULT_BINDING)));
}
private void addGUIHandler(ApplicationContainerCluster cluster) {
@@ -805,15 +797,15 @@ public class ContainerModelBuilder extends ConfigModelBuilder<ContainerModel> {
}
- private BindingPattern[] serverBindings(Element searchElement, BindingPattern... defaultBindings) {
+ private List<BindingPattern> serverBindings(Element searchElement, BindingPattern... defaultBindings) {
List<Element> bindings = XML.getChildren(searchElement, "binding");
if (bindings.isEmpty())
- return defaultBindings;
+ return List.of(defaultBindings);
return toBindingList(bindings);
}
- private BindingPattern[] toBindingList(List<Element> bindingElements) {
+ private List<BindingPattern> toBindingList(List<Element> bindingElements) {
List<BindingPattern> result = new ArrayList<>();
for (Element element: bindingElements) {
@@ -822,7 +814,7 @@ public class ContainerModelBuilder extends ConfigModelBuilder<ContainerModel> {
result.add(UserBindingPattern.fromPattern(text));
}
- return result.toArray(BindingPattern[]::new);
+ return result;
}
private ContainerDocumentApi buildDocumentApi(DeployState deployState, ApplicationContainerCluster cluster, Element spec) {
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/container/xml/SearchHandler.java b/config-model/src/main/java/com/yahoo/vespa/model/container/xml/SearchHandler.java
new file mode 100644
index 00000000000..abf151bd673
--- /dev/null
+++ b/config-model/src/main/java/com/yahoo/vespa/model/container/xml/SearchHandler.java
@@ -0,0 +1,25 @@
+// Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.vespa.model.container.xml;
+
+import com.yahoo.vespa.model.container.component.BindingPattern;
+import com.yahoo.vespa.model.container.component.SystemBindingPattern;
+import com.yahoo.vespa.model.container.component.chain.ProcessingHandler;
+import com.yahoo.vespa.model.container.search.searchchain.SearchChains;
+
+import java.util.List;
+
+/**
+ * Component definition for {@link com.yahoo.search.handler.SearchHandler}
+ *
+ * @author bjorncs
+ */
+class SearchHandler extends ProcessingHandler<SearchChains> {
+
+ static final String HANDLER_CLASS = com.yahoo.search.handler.SearchHandler.class.getName();
+ static final BindingPattern DEFAULT_BINDING = SystemBindingPattern.fromHttpPath("/search/*");
+
+ SearchHandler(SearchChains searchChains, List<BindingPattern> bindings) {
+ super(searchChains, HANDLER_CLASS);
+ bindings.forEach(this::addServerBindings);
+ }
+}
diff --git a/config-model/src/test/java/com/yahoo/vespa/model/container/xml/SearchBuilderTest.java b/config-model/src/test/java/com/yahoo/vespa/model/container/xml/SearchBuilderTest.java
index c8564c5a273..ed7d09d6410 100644
--- a/config-model/src/test/java/com/yahoo/vespa/model/container/xml/SearchBuilderTest.java
+++ b/config-model/src/test/java/com/yahoo/vespa/model/container/xml/SearchBuilderTest.java
@@ -6,8 +6,8 @@ import com.yahoo.config.model.builder.xml.test.DomBuilderTest;
import com.yahoo.container.core.ChainsConfig;
import com.yahoo.container.jdisc.JdiscBindingsConfig;
import com.yahoo.vespa.model.VespaModel;
-import com.yahoo.vespa.model.container.ContainerCluster;
import com.yahoo.vespa.model.container.ApplicationContainerCluster;
+import com.yahoo.vespa.model.container.ContainerCluster;
import com.yahoo.vespa.model.container.component.Handler;
import com.yahoo.vespa.model.container.search.GUIHandler;
import com.yahoo.vespa.model.test.utils.ApplicationPackageUtils;
@@ -18,8 +18,6 @@ import org.w3c.dom.Element;
import static com.yahoo.config.model.api.container.ContainerServiceType.QRSERVER;
import static com.yahoo.test.Matchers.hasItemWithMethod;
import static com.yahoo.vespa.model.container.search.ContainerSearch.QUERY_PROFILE_REGISTRY_CLASS;
-import static com.yahoo.vespa.model.container.xml.ContainerModelBuilder.SEARCH_HANDLER_BINDING;
-import static com.yahoo.vespa.model.container.xml.ContainerModelBuilder.SEARCH_HANDLER_CLASS;
import static org.hamcrest.Matchers.containsString;
import static org.hamcrest.Matchers.not;
import static org.junit.Assert.assertEquals;
@@ -105,7 +103,7 @@ public class SearchBuilderTest extends ContainerModelBuilderTestBase {
"<container id='default' version='1.0'>",
" <search />",
" <handler id='" + myHandler + "'>",
- " <binding>" + SEARCH_HANDLER_BINDING.patternString() + "</binding>",
+ " <binding>" + SearchHandler.DEFAULT_BINDING.patternString() + "</binding>",
" </handler>",
nodesXml,
"</container>");
@@ -113,8 +111,8 @@ public class SearchBuilderTest extends ContainerModelBuilderTestBase {
createModel(root, clusterElem);
var discBindingsConfig = root.getConfig(JdiscBindingsConfig.class, "default");
- assertEquals(SEARCH_HANDLER_BINDING.patternString(), discBindingsConfig.handlers(myHandler).serverBindings(0));
- assertNull(discBindingsConfig.handlers(SEARCH_HANDLER_CLASS));
+ assertEquals(SearchHandler.DEFAULT_BINDING.patternString(), discBindingsConfig.handlers(myHandler).serverBindings(0));
+ assertNull(discBindingsConfig.handlers(SearchHandler.HANDLER_CLASS));
}
// TODO: remove test when all containers are named 'container'