diff options
author | Bjørn Christian Seime <bjorncs@verizonmedia.com> | 2020-09-14 13:00:04 +0200 |
---|---|---|
committer | Bjørn Christian Seime <bjorncs@verizonmedia.com> | 2020-09-14 13:04:47 +0200 |
commit | e5780128358a2db9574e785025d3db39a4563084 (patch) | |
tree | 17033bbd7e1b8c5d34cbf22d51139a58b0062b7b /config-model/src | |
parent | 25b513ed5ef18c09a6c041f81816e768c473cda9 (diff) |
Move search handler component definition to separate class
Diffstat (limited to 'config-model/src')
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' |