diff options
author | Bjørn Christian Seime <bjorncs@verizonmedia.com> | 2020-08-17 16:59:14 +0200 |
---|---|---|
committer | Bjørn Christian Seime <bjorncs@verizonmedia.com> | 2020-08-17 17:04:19 +0200 |
commit | efd4542b717f01798aac9dab6dc84d3f6862b9cb (patch) | |
tree | 47a59757eb97897460e072178e456ccda7804dd0 /config-model | |
parent | 94f7cec36cb97af2a4be9bdbe087ebe857b53db8 (diff) |
Model user-generated and non user-generated bindings as separate sub-classes
Diffstat (limited to 'config-model')
23 files changed, 153 insertions, 127 deletions
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/admin/LogserverContainerCluster.java b/config-model/src/main/java/com/yahoo/vespa/model/admin/LogserverContainerCluster.java index a3c5ad53889..9ae9a158631 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/admin/LogserverContainerCluster.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/admin/LogserverContainerCluster.java @@ -6,8 +6,8 @@ import com.yahoo.config.model.producer.AbstractConfigProducer; import com.yahoo.container.handler.ThreadpoolConfig; import com.yahoo.search.config.QrStartConfig; import com.yahoo.vespa.model.container.ContainerCluster; -import com.yahoo.vespa.model.container.component.BindingPattern; import com.yahoo.vespa.model.container.component.Handler; +import com.yahoo.vespa.model.container.component.SystemBindingPattern; /** * @author hmusum @@ -40,7 +40,7 @@ public class LogserverContainerCluster extends ContainerCluster<LogserverContain private void addLogHandler() { Handler<?> logHandler = Handler.fromClassName(ContainerCluster.LOG_HANDLER_CLASS); - logHandler.addServerBindings(BindingPattern.createModelGeneratedFromHttpPath("/logs")); + logHandler.addServerBindings(SystemBindingPattern.fromHttpPath("/logs")); addComponent(logHandler); } diff --git a/config-model/src/main/java/com/yahoo/vespa/model/admin/clustercontroller/ClusterControllerContainer.java b/config-model/src/main/java/com/yahoo/vespa/model/admin/clustercontroller/ClusterControllerContainer.java index bb2e85b40e0..5b3e4e1479e 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/admin/clustercontroller/ClusterControllerContainer.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/admin/clustercontroller/ClusterControllerContainer.java @@ -12,9 +12,9 @@ import com.yahoo.vespa.config.content.FleetcontrollerConfig; import com.yahoo.vespa.model.application.validation.RestartConfigs; import com.yahoo.vespa.model.container.Container; import com.yahoo.vespa.model.container.component.AccessLogComponent; -import com.yahoo.vespa.model.container.component.BindingPattern; import com.yahoo.vespa.model.container.component.Component; import com.yahoo.vespa.model.container.component.Handler; +import com.yahoo.vespa.model.container.component.SystemBindingPattern; import com.yahoo.vespa.model.container.xml.PlatformBundles; import java.util.Set; @@ -79,7 +79,7 @@ public class ClusterControllerContainer extends Container implements } private void addHandler(Handler h, String path) { - h.addServerBindings(BindingPattern.createModelGeneratedFromHttpPath(path)); + h.addServerBindings(SystemBindingPattern.fromHttpPath(path)); super.addHandler(h); } diff --git a/config-model/src/main/java/com/yahoo/vespa/model/admin/metricsproxy/MetricsProxyContainerCluster.java b/config-model/src/main/java/com/yahoo/vespa/model/admin/metricsproxy/MetricsProxyContainerCluster.java index 04a009762ce..b5936887b50 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/admin/metricsproxy/MetricsProxyContainerCluster.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/admin/metricsproxy/MetricsProxyContainerCluster.java @@ -7,12 +7,12 @@ import ai.vespa.metricsproxy.core.MetricsConsumers; import ai.vespa.metricsproxy.core.MetricsManager; import ai.vespa.metricsproxy.core.MonitoringConfig; import ai.vespa.metricsproxy.core.VespaMetrics; -import ai.vespa.metricsproxy.http.metrics.MetricsV1Handler; import ai.vespa.metricsproxy.http.application.ApplicationMetricsHandler; import ai.vespa.metricsproxy.http.application.ApplicationMetricsRetriever; import ai.vespa.metricsproxy.http.application.MetricsNodesConfig; -import ai.vespa.metricsproxy.http.yamas.YamasHandler; +import ai.vespa.metricsproxy.http.metrics.MetricsV1Handler; import ai.vespa.metricsproxy.http.prometheus.PrometheusHandler; +import ai.vespa.metricsproxy.http.yamas.YamasHandler; import ai.vespa.metricsproxy.metric.ExternalMetrics; import ai.vespa.metricsproxy.metric.dimensions.ApplicationDimensions; import ai.vespa.metricsproxy.metric.dimensions.ApplicationDimensionsConfig; @@ -37,8 +37,8 @@ import com.yahoo.vespa.model.admin.monitoring.MetricSet; import com.yahoo.vespa.model.admin.monitoring.MetricsConsumer; import com.yahoo.vespa.model.admin.monitoring.Monitoring; import com.yahoo.vespa.model.container.ContainerCluster; -import com.yahoo.vespa.model.container.component.BindingPattern; import com.yahoo.vespa.model.container.component.Handler; +import com.yahoo.vespa.model.container.component.SystemBindingPattern; import com.yahoo.vespa.model.container.xml.PlatformBundles; import java.nio.file.Path; @@ -131,8 +131,8 @@ public class MetricsProxyContainerCluster extends ContainerCluster<MetricsProxyC Handler<AbstractConfigProducer<?>> metricsHandler = new Handler<>( new ComponentModel(clazz.getName(), null, METRICS_PROXY_BUNDLE_NAME, null)); metricsHandler.addServerBindings( - BindingPattern.createModelGeneratedFromHttpPath(bindingPath), - BindingPattern.createModelGeneratedFromHttpPath(bindingPath + "/*")); + SystemBindingPattern.fromHttpPath(bindingPath), + SystemBindingPattern.fromHttpPath(bindingPath + "/*")); return metricsHandler; } diff --git a/config-model/src/main/java/com/yahoo/vespa/model/application/validation/UriBindingsValidator.java b/config-model/src/main/java/com/yahoo/vespa/model/application/validation/UriBindingsValidator.java index a9fc300f85a..249827b11d9 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/application/validation/UriBindingsValidator.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/application/validation/UriBindingsValidator.java @@ -6,6 +6,7 @@ import com.yahoo.vespa.model.VespaModel; import com.yahoo.vespa.model.container.ApplicationContainerCluster; import com.yahoo.vespa.model.container.component.BindingPattern; import com.yahoo.vespa.model.container.component.Handler; +import com.yahoo.vespa.model.container.component.SystemBindingPattern; import com.yahoo.vespa.model.container.http.FilterBinding; import com.yahoo.vespa.model.container.http.Http; @@ -55,7 +56,7 @@ class UriBindingsValidator extends Validator { private static void validateHostedApplicationUserBinding(BindingPattern binding) { // only perform these validation for used-generated bindings // bindings produced by the hosted config model amender will violate some of the rules below - if (!binding.isUserGenerated()) return; + if (binding instanceof SystemBindingPattern) return; if (binding.port().isPresent()) { throw new IllegalArgumentException(createErrorMessage(binding, "binding with port is not allowed")); diff --git a/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/DomClientProviderBuilder.java b/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/DomClientProviderBuilder.java index 30ea8c41f06..0fdd1af56f3 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/DomClientProviderBuilder.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/DomClientProviderBuilder.java @@ -2,12 +2,12 @@ package com.yahoo.vespa.model.builder.xml.dom; import com.yahoo.config.model.deploy.DeployState; -import com.yahoo.text.XML; import com.yahoo.config.model.producer.AbstractConfigProducer; +import com.yahoo.text.XML; import com.yahoo.vespa.model.container.ApplicationContainerCluster; -import com.yahoo.vespa.model.container.component.BindingPattern; import com.yahoo.vespa.model.container.component.Component; import com.yahoo.vespa.model.container.component.Handler; +import com.yahoo.vespa.model.container.component.UserBindingPattern; import org.w3c.dom.Element; /** @@ -25,10 +25,10 @@ public class DomClientProviderBuilder extends DomHandlerBuilder { Handler<? super Component<?, ?>> client = createHandler(clientElement); for (Element binding : XML.getChildren(clientElement, "binding")) - client.addClientBindings(BindingPattern.createUserGeneratedFromPattern(XML.getValue(binding))); + client.addClientBindings(UserBindingPattern.fromPattern(XML.getValue(binding))); for (Element serverBinding : XML.getChildren(clientElement, "serverBinding")) - client.addServerBindings(BindingPattern.createUserGeneratedFromPattern(XML.getValue(serverBinding))); + client.addServerBindings(UserBindingPattern.fromPattern(XML.getValue(serverBinding))); DomComponentBuilder.addChildren(deployState, parent, clientElement, client); diff --git a/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/DomHandlerBuilder.java b/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/DomHandlerBuilder.java index 50396cb4aa5..145535fe06f 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/DomHandlerBuilder.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/DomHandlerBuilder.java @@ -11,6 +11,7 @@ import com.yahoo.vespa.model.container.ApplicationContainerCluster; import com.yahoo.vespa.model.container.component.BindingPattern; import com.yahoo.vespa.model.container.component.Component; import com.yahoo.vespa.model.container.component.Handler; +import com.yahoo.vespa.model.container.component.UserBindingPattern; import com.yahoo.vespa.model.container.xml.BundleInstantiationSpecificationBuilder; import org.w3c.dom.Element; @@ -47,10 +48,10 @@ public class DomHandlerBuilder extends VespaDomBuilder.DomConfigProducerBuilder< Handler<? super Component<?, ?>> handler = createHandler(handlerElement); for (Element binding : XML.getChildren(handlerElement, "binding")) - addServerBinding(handler, BindingPattern.createUserGeneratedFromPattern(XML.getValue(binding)), deployState.getDeployLogger()); + addServerBinding(handler, UserBindingPattern.fromPattern(XML.getValue(binding)), deployState.getDeployLogger()); for (Element clientBinding : XML.getChildren(handlerElement, "clientBinding")) - handler.addClientBindings(BindingPattern.createUserGeneratedFromPattern(XML.getValue(clientBinding))); + handler.addClientBindings(UserBindingPattern.fromPattern(XML.getValue(clientBinding))); DomComponentBuilder.addChildren(deployState, parent, handlerElement, handler); diff --git a/config-model/src/main/java/com/yahoo/vespa/model/clients/ContainerDocumentApi.java b/config-model/src/main/java/com/yahoo/vespa/model/clients/ContainerDocumentApi.java index d4d7178f0f3..159a87be27d 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/clients/ContainerDocumentApi.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/clients/ContainerDocumentApi.java @@ -5,8 +5,9 @@ import com.yahoo.config.model.producer.AbstractConfigProducer; import com.yahoo.container.bundle.BundleInstantiationSpecification; import com.yahoo.osgi.provider.model.ComponentModel; import com.yahoo.vespa.model.container.ContainerCluster; -import com.yahoo.vespa.model.container.component.BindingPattern; import com.yahoo.vespa.model.container.component.Handler; +import com.yahoo.vespa.model.container.component.SystemBindingPattern; +import com.yahoo.vespa.model.container.component.UserBindingPattern; import java.util.Collection; import java.util.Collections; @@ -35,14 +36,14 @@ public class ContainerDocumentApi { if (options.bindings.isEmpty()) { handler.addServerBindings( - BindingPattern.createModelGeneratedFromHttpPath(bindingSuffix), - BindingPattern.createModelGeneratedFromHttpPath(bindingSuffix + '/')); + SystemBindingPattern.fromHttpPath(bindingSuffix), + SystemBindingPattern.fromHttpPath(bindingSuffix + '/')); } else { for (String rootBinding : options.bindings) { String pathWithoutLeadingSlash = bindingSuffix.substring(1); handler.addServerBindings( - BindingPattern.createUserGeneratedFromPattern(rootBinding + pathWithoutLeadingSlash), - BindingPattern.createUserGeneratedFromPattern(rootBinding + pathWithoutLeadingSlash + '/')); + UserBindingPattern.fromPattern(rootBinding + pathWithoutLeadingSlash), + UserBindingPattern.fromPattern(rootBinding + pathWithoutLeadingSlash + '/')); } } diff --git a/config-model/src/main/java/com/yahoo/vespa/model/container/ApplicationContainerCluster.java b/config-model/src/main/java/com/yahoo/vespa/model/container/ApplicationContainerCluster.java index b1ece8a2a22..1427fa492dc 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/container/ApplicationContainerCluster.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/container/ApplicationContainerCluster.java @@ -27,6 +27,7 @@ import com.yahoo.vespa.model.container.component.Component; import com.yahoo.vespa.model.container.component.ConfigProducerGroup; import com.yahoo.vespa.model.container.component.Handler; import com.yahoo.vespa.model.container.component.Servlet; +import com.yahoo.vespa.model.container.component.SystemBindingPattern; import com.yahoo.vespa.model.container.jersey.Jersey2Servlet; import com.yahoo.vespa.model.container.jersey.RestApi; import com.yahoo.vespa.model.container.xml.PlatformBundles; @@ -56,12 +57,12 @@ public final class ApplicationContainerCluster extends ContainerCluster<Applicat MetricsProxyApiConfig.Producer { public static final String METRICS_V2_HANDLER_CLASS = MetricsV2Handler.class.getName(); - public static final BindingPattern METRICS_V2_HANDLER_BINDING_1 = BindingPattern.createModelGeneratedFromHttpPath(MetricsV2Handler.V2_PATH); - public static final BindingPattern METRICS_V2_HANDLER_BINDING_2 = BindingPattern.createModelGeneratedFromHttpPath(MetricsV2Handler.V2_PATH + "/*"); + public static final BindingPattern METRICS_V2_HANDLER_BINDING_1 = SystemBindingPattern.fromHttpPath(MetricsV2Handler.V2_PATH); + public static final BindingPattern METRICS_V2_HANDLER_BINDING_2 = SystemBindingPattern.fromHttpPath(MetricsV2Handler.V2_PATH + "/*"); public static final String PROMETHEUS_V1_HANDLER_CLASS = PrometheusV1Handler.class.getName(); - private static final BindingPattern PROMETHEUS_V1_HANDLER_BINDING_1 = BindingPattern.createModelGeneratedFromHttpPath(PrometheusV1Handler.V1_PATH); - private static final BindingPattern PROMETHEUS_V1_HANDLER_BINDING_2 = BindingPattern.createModelGeneratedFromHttpPath(PrometheusV1Handler.V1_PATH + "/*"); + private static final BindingPattern PROMETHEUS_V1_HANDLER_BINDING_1 = SystemBindingPattern.fromHttpPath(PrometheusV1Handler.V1_PATH); + private static final BindingPattern PROMETHEUS_V1_HANDLER_BINDING_2 = SystemBindingPattern.fromHttpPath(PrometheusV1Handler.V1_PATH + "/*"); public static final int heapSizePercentageOfTotalNodeMemory = 60; public static final int heapSizePercentageOfTotalNodeMemoryWhenCombinedCluster = 17; diff --git a/config-model/src/main/java/com/yahoo/vespa/model/container/ContainerCluster.java b/config-model/src/main/java/com/yahoo/vespa/model/container/ContainerCluster.java index d373b1557fc..8bb456ab7e7 100755 --- a/config-model/src/main/java/com/yahoo/vespa/model/container/ContainerCluster.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/container/ContainerCluster.java @@ -48,6 +48,7 @@ import com.yahoo.vespa.model.container.component.FileStatusHandlerComponent; import com.yahoo.vespa.model.container.component.Handler; import com.yahoo.vespa.model.container.component.SimpleComponent; import com.yahoo.vespa.model.container.component.StatisticsComponent; +import com.yahoo.vespa.model.container.component.SystemBindingPattern; import com.yahoo.vespa.model.container.component.chain.ProcessingHandler; import com.yahoo.vespa.model.container.docproc.ContainerDocproc; import com.yahoo.vespa.model.container.docproc.DocprocChains; @@ -118,13 +119,13 @@ public abstract class ContainerCluster<CONTAINER extends Container> public static final String G1GC = "-XX:+UseG1GC -XX:MaxTenuringThreshold=15"; public static final String STATE_HANDLER_CLASS = "com.yahoo.container.jdisc.state.StateHandler"; - public static final BindingPattern STATE_HANDLER_BINDING_1 = BindingPattern.createModelGeneratedFromHttpPath(StateHandler.STATE_API_ROOT); - public static final BindingPattern STATE_HANDLER_BINDING_2 = BindingPattern.createModelGeneratedFromHttpPath(StateHandler.STATE_API_ROOT + "/*"); + public static final BindingPattern STATE_HANDLER_BINDING_1 = SystemBindingPattern.fromHttpPath(StateHandler.STATE_API_ROOT); + public static final BindingPattern STATE_HANDLER_BINDING_2 = SystemBindingPattern.fromHttpPath(StateHandler.STATE_API_ROOT + "/*"); public static final String ROOT_HANDLER_PATH = "/"; - public static final BindingPattern ROOT_HANDLER_BINDING = BindingPattern.createModelGeneratedFromHttpPath(ROOT_HANDLER_PATH); + public static final BindingPattern ROOT_HANDLER_BINDING = SystemBindingPattern.fromHttpPath(ROOT_HANDLER_PATH); - public static final BindingPattern VIP_HANDLER_BINDING = BindingPattern.createModelGeneratedFromHttpPath("/status.html"); + public static final BindingPattern VIP_HANDLER_BINDING = SystemBindingPattern.fromHttpPath("/status.html"); private final String name; @@ -235,7 +236,7 @@ public abstract class ContainerCluster<CONTAINER extends Container> Handler<AbstractConfigProducer<?>> statusHandler = new Handler<>( new ComponentModel(BundleInstantiationSpecification.getInternalHandlerSpecificationFromStrings( APPLICATION_STATUS_HANDLER_CLASS, null), null)); - statusHandler.addServerBindings(BindingPattern.createModelGeneratedFromHttpPath("/ApplicationStatus")); + statusHandler.addServerBindings(SystemBindingPattern.fromHttpPath("/ApplicationStatus")); addComponent(statusHandler); } diff --git a/config-model/src/main/java/com/yahoo/vespa/model/container/ContainerModelEvaluation.java b/config-model/src/main/java/com/yahoo/vespa/model/container/ContainerModelEvaluation.java index 3b034c2bd0f..72f1921e6a2 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/container/ContainerModelEvaluation.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/container/ContainerModelEvaluation.java @@ -6,8 +6,8 @@ import com.yahoo.osgi.provider.model.ComponentModel; import com.yahoo.searchdefinition.derived.RankProfileList; import com.yahoo.vespa.config.search.RankProfilesConfig; import com.yahoo.vespa.config.search.core.RankingConstantsConfig; -import com.yahoo.vespa.model.container.component.BindingPattern; import com.yahoo.vespa.model.container.component.Handler; +import com.yahoo.vespa.model.container.component.SystemBindingPattern; import java.util.List; import java.util.Objects; @@ -50,8 +50,8 @@ public class ContainerModelEvaluation implements RankProfilesConfig.Producer, Ra public static Handler<?> getHandler() { Handler<?> handler = new Handler<>(new ComponentModel(REST_HANDLER_NAME, null, BUNDLE_NAME)); handler.addServerBindings( - BindingPattern.createModelGeneratedFromHttpPath(REST_BINDING_PATH), - BindingPattern.createModelGeneratedFromHttpPath(REST_BINDING_PATH + "/*")); + SystemBindingPattern.fromHttpPath(REST_BINDING_PATH), + SystemBindingPattern.fromHttpPath(REST_BINDING_PATH + "/*")); return handler; } diff --git a/config-model/src/main/java/com/yahoo/vespa/model/container/component/BindingPattern.java b/config-model/src/main/java/com/yahoo/vespa/model/container/component/BindingPattern.java index ae524d0f06e..0fd7f577461 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/container/component/BindingPattern.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/container/component/BindingPattern.java @@ -10,13 +10,9 @@ import java.util.regex.Pattern; /** * URI binding pattern used by filter and handler bindings. * - * There are two types of binding; user generated and model generated bindings. - * - User generated bindings are bindings which are constructed from directly from 'binding' elements from services.xml - * - Model generated bindings are binding which are implicitly constructed by the model, e.g built-in handlers. - * * @author bjorncs */ -public class BindingPattern implements Comparable<BindingPattern> { +public abstract class BindingPattern implements Comparable<BindingPattern> { private static final Pattern BINDING_PATTERN = Pattern.compile("([^:]+)://([^:/]+)(:((\\*)|([0-9]+)))?(/.*)", Pattern.UNICODE_CASE | Pattern.CANON_EQ); @@ -27,19 +23,25 @@ public class BindingPattern implements Comparable<BindingPattern> { private final String host; private final String port; private final String path; - private final boolean isUserGenerated; - private BindingPattern( + protected BindingPattern( String scheme, String host, String port, - String path, - boolean isUserGenerated) { + String path) { this.scheme = Objects.requireNonNull(scheme, "Scheme in binding must be specified"); this.host = Objects.requireNonNull(host, "Host must be specified"); this.port = port; this.path = validatePath(path); - this.isUserGenerated = isUserGenerated; + } + + protected BindingPattern(String binding) { + Matcher matcher = BINDING_PATTERN.matcher(binding); + if (!matcher.matches()) throw new IllegalArgumentException("Invalid binding: " + binding); + this.scheme = matcher.group(1); + this.host = matcher.group(2); + this.port = matcher.group(4); + this.path = matcher.group(7); } private static String validatePath(String path) { @@ -48,37 +50,10 @@ public class BindingPattern implements Comparable<BindingPattern> { return path; } - public static BindingPattern createUserGeneratedFromPattern(String pattern) { - return createFromBindingString(pattern, true); - } - - public static BindingPattern createUserGeneratedFromHttpPath(String path) { - return new BindingPattern("http", "*", null, path, true); - } - - public static BindingPattern createModelGeneratedFromPattern(String pattern) { - return createFromBindingString(pattern, false); - } - - public static BindingPattern createModelGeneratedFromHttpPath(String path) { - return new BindingPattern("http", "*", null, path, false); - } - - private static BindingPattern createFromBindingString(String binding, boolean isUserGenerated) { - Matcher matcher = BINDING_PATTERN.matcher(binding); - if (!matcher.matches()) throw new IllegalArgumentException("Invalid binding: " + binding); - String scheme = matcher.group(1); - String host = matcher.group(2); - String port = matcher.group(4); - String path = matcher.group(7); - return new BindingPattern(scheme, host, port, path, isUserGenerated); - } - public String scheme() { return scheme; } public String host() { return host; } public Optional<String> port() { return Optional.ofNullable(port); } public String path() { return path; } - public boolean isUserGenerated() { return isUserGenerated; } public String patternString() { StringBuilder builder = new StringBuilder(scheme).append("://").append(host); @@ -92,30 +67,17 @@ public class BindingPattern implements Comparable<BindingPattern> { public boolean hasSamePattern(BindingPattern other) { return this.patternString().equals(other.patternString()); } @Override - public String toString() { - return "BindingPattern{" + - "scheme='" + scheme + '\'' + - ", host='" + host + '\'' + - ", port='" + port + '\'' + - ", path='" + path + '\'' + - ", isUserGenerated=" + isUserGenerated + - '}'; - } - - @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; BindingPattern that = (BindingPattern) o; - return isUserGenerated == that.isUserGenerated && - Objects.equals(scheme, that.scheme) && + return Objects.equals(scheme, that.scheme) && Objects.equals(host, that.host) && Objects.equals(port, that.port) && Objects.equals(path, that.path); } - @Override public int hashCode() { return Objects.hash(scheme, host, port, path, isUserGenerated); } - + @Override public int hashCode() { return Objects.hash(scheme, host, port, path); } @Override public int compareTo(BindingPattern o) { @@ -123,7 +85,6 @@ public class BindingPattern implements Comparable<BindingPattern> { .thenComparing(BindingPattern::host) .thenComparing(pattern -> pattern.port().orElse(null)) .thenComparing(BindingPattern::path) - .thenComparing(BindingPattern::isUserGenerated) .compare(this, o); } } diff --git a/config-model/src/main/java/com/yahoo/vespa/model/container/component/SystemBindingPattern.java b/config-model/src/main/java/com/yahoo/vespa/model/container/component/SystemBindingPattern.java new file mode 100644 index 00000000000..559651b3b4f --- /dev/null +++ b/config-model/src/main/java/com/yahoo/vespa/model/container/component/SystemBindingPattern.java @@ -0,0 +1,26 @@ +// 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.component; + +/** + * A {@link BindingPattern} which is implicitly constructed by the model, e.g for built-in handlers and filter chains. + * + * @author bjorncs + */ +public class SystemBindingPattern extends BindingPattern { + + private SystemBindingPattern(String scheme, String host, String port, String path) { super(scheme, host, port, path); } + private SystemBindingPattern(String binding) { super(binding); } + + public static SystemBindingPattern fromHttpPath(String path) { return new SystemBindingPattern("http", "*", null, path);} + public static SystemBindingPattern fromPattern(String binding) { return new SystemBindingPattern(binding);} + + @Override + public String toString() { + return "SystemBindingPattern{" + + "scheme='" + scheme() + '\'' + + ", host='" + host() + '\'' + + ", port='" + port().orElse(null) + '\'' + + ", path='" + path() + '\'' + + '}'; + } +} diff --git a/config-model/src/main/java/com/yahoo/vespa/model/container/component/UserBindingPattern.java b/config-model/src/main/java/com/yahoo/vespa/model/container/component/UserBindingPattern.java new file mode 100644 index 00000000000..43f57fa0343 --- /dev/null +++ b/config-model/src/main/java/com/yahoo/vespa/model/container/component/UserBindingPattern.java @@ -0,0 +1,26 @@ +// 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.component; + +/** + * A {@link BindingPattern} which is constructed directly from a user provided 'binding' element from services.xml. + * + * @author bjorncs + */ +public class UserBindingPattern extends BindingPattern { + + private UserBindingPattern(String scheme, String host, String port, String path) { super(scheme, host, port, path); } + private UserBindingPattern(String binding) { super(binding); } + + public static UserBindingPattern fromHttpPath(String path) { return new UserBindingPattern("http", "*", null, path); } + public static UserBindingPattern fromPattern(String binding) { return new UserBindingPattern(binding); } + + @Override + public String toString() { + return "UserBindingPattern{" + + "scheme='" + scheme() + '\'' + + ", host='" + host() + '\'' + + ", port='" + port().orElse(null) + '\'' + + ", path='" + path() + '\'' + + '}'; + } +} diff --git a/config-model/src/main/java/com/yahoo/vespa/model/container/docproc/ContainerDocproc.java b/config-model/src/main/java/com/yahoo/vespa/model/container/docproc/ContainerDocproc.java index b7dfe6c42f0..82061a0425f 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/container/docproc/ContainerDocproc.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/container/docproc/ContainerDocproc.java @@ -8,8 +8,8 @@ import com.yahoo.container.jdisc.ContainerMbusConfig; import com.yahoo.container.jdisc.config.SessionConfig; import com.yahoo.docproc.jdisc.messagebus.MbusRequestContext; import com.yahoo.vespa.model.container.ContainerCluster; -import com.yahoo.vespa.model.container.component.BindingPattern; import com.yahoo.vespa.model.container.component.ContainerSubsystem; +import com.yahoo.vespa.model.container.component.SystemBindingPattern; import java.util.HashMap; import java.util.Map; @@ -45,7 +45,7 @@ public class ContainerDocproc extends ContainerSubsystem<DocprocChains> private void addSource( final ContainerCluster cluster, final String name, final SessionConfig.Type.Enum type) { final MbusClient mbusClient = new MbusClient(name, type); - mbusClient.addClientBindings(BindingPattern.createModelGeneratedFromPattern("mbus://*/" + mbusClient.getSessionName())); + mbusClient.addClientBindings(SystemBindingPattern.fromPattern("mbus://*/" + mbusClient.getSessionName())); cluster.addComponent(mbusClient); } diff --git a/config-model/src/main/java/com/yahoo/vespa/model/container/docproc/DocprocChains.java b/config-model/src/main/java/com/yahoo/vespa/model/container/docproc/DocprocChains.java index 3c2e8c9bde1..68dc2518c23 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/container/docproc/DocprocChains.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/container/docproc/DocprocChains.java @@ -6,8 +6,8 @@ import com.yahoo.config.model.producer.AbstractConfigProducer; import com.yahoo.container.jdisc.config.SessionConfig; import com.yahoo.vespa.model.container.ApplicationContainerCluster; import com.yahoo.vespa.model.container.ContainerCluster; -import com.yahoo.vespa.model.container.component.BindingPattern; import com.yahoo.vespa.model.container.component.Component; +import com.yahoo.vespa.model.container.component.SystemBindingPattern; import com.yahoo.vespa.model.container.component.chain.Chains; import com.yahoo.vespa.model.container.component.chain.ProcessingHandler; @@ -39,12 +39,12 @@ public class DocprocChains extends Chains<DocprocChain> { } private void addServerAndClientForChain(ApplicationContainerCluster cluster, DocprocChain docprocChain) { - docprocHandler.addServerBindings(BindingPattern.createModelGeneratedFromPattern("mbus://*/" + docprocChain.getSessionName())); + docprocHandler.addServerBindings(SystemBindingPattern.fromPattern("mbus://*/" + docprocChain.getSessionName())); cluster.addMbusServer(ComponentId.fromString(docprocChain.getSessionName())); MbusClient client = new MbusClient(docprocChain.getSessionName(), SessionConfig.Type.INTERMEDIATE); - client.addClientBindings(BindingPattern.createModelGeneratedFromPattern("mbus://*/" + client.getSessionName())); + client.addClientBindings(SystemBindingPattern.fromPattern("mbus://*/" + client.getSessionName())); addComponent(client); } } diff --git a/config-model/src/main/java/com/yahoo/vespa/model/container/http/AccessControl.java b/config-model/src/main/java/com/yahoo/vespa/model/container/http/AccessControl.java index 9054549ba22..87c6d41c80d 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/container/http/AccessControl.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/container/http/AccessControl.java @@ -9,6 +9,7 @@ import com.yahoo.vespa.model.container.component.BindingPattern; import com.yahoo.vespa.model.container.component.FileStatusHandlerComponent; import com.yahoo.vespa.model.container.component.Handler; import com.yahoo.vespa.model.container.component.Servlet; +import com.yahoo.vespa.model.container.component.SystemBindingPattern; import java.util.ArrayList; import java.util.Collection; @@ -140,7 +141,7 @@ public final class AccessControl { } private static Stream<BindingPattern> servletBindings(Servlet servlet) { - return Stream.of(BindingPattern.createModelGeneratedFromHttpPath("/" + servlet.bindingPath)); + return Stream.of(SystemBindingPattern.fromHttpPath("/" + servlet.bindingPath)); } private static boolean handlerNeedsProtection(Handler<?> handler) { diff --git a/config-model/src/main/java/com/yahoo/vespa/model/container/http/xml/HttpBuilder.java b/config-model/src/main/java/com/yahoo/vespa/model/container/http/xml/HttpBuilder.java index d6007ae190f..9d5fead7dfb 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/container/http/xml/HttpBuilder.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/container/http/xml/HttpBuilder.java @@ -13,7 +13,7 @@ import com.yahoo.vespa.model.builder.xml.dom.ModelElement; import com.yahoo.vespa.model.builder.xml.dom.VespaDomBuilder; import com.yahoo.vespa.model.container.ApplicationContainerCluster; import com.yahoo.vespa.model.container.Container; -import com.yahoo.vespa.model.container.component.BindingPattern; +import com.yahoo.vespa.model.container.component.UserBindingPattern; import com.yahoo.vespa.model.container.component.chain.Chain; import com.yahoo.vespa.model.container.http.AccessControl; import com.yahoo.vespa.model.container.http.FilterBinding; @@ -76,7 +76,7 @@ public class HttpBuilder extends VespaDomBuilder.DomConfigProducerBuilder<Http> Element excludeElem = XML.getChild(accessControlElem, "exclude"); if (excludeElem != null) { XML.getChildren(excludeElem, "binding").stream() - .map(xml -> BindingPattern.createUserGeneratedFromPattern(XML.getValue(xml))) + .map(xml -> UserBindingPattern.fromPattern(XML.getValue(xml))) .forEach(builder::excludeBinding); } return builder.build(); @@ -124,7 +124,7 @@ public class HttpBuilder extends VespaDomBuilder.DomConfigProducerBuilder<Http> for (Element bindingSpec: XML.getChildren(child, "binding")) { String binding = XML.getValue(bindingSpec); - result.add(FilterBinding.create(chainId, BindingPattern.createUserGeneratedFromPattern(binding))); + result.add(FilterBinding.create(chainId, UserBindingPattern.fromPattern(binding))); } } } diff --git a/config-model/src/main/java/com/yahoo/vespa/model/container/processing/ProcessingChains.java b/config-model/src/main/java/com/yahoo/vespa/model/container/processing/ProcessingChains.java index 1cbd6ecfbbc..f6b24bf9635 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/container/processing/ProcessingChains.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/container/processing/ProcessingChains.java @@ -3,6 +3,7 @@ package com.yahoo.vespa.model.container.processing; import com.yahoo.config.model.producer.AbstractConfigProducer; import com.yahoo.vespa.model.container.component.BindingPattern; +import com.yahoo.vespa.model.container.component.SystemBindingPattern; import com.yahoo.vespa.model.container.component.chain.Chains; /** @@ -12,7 +13,7 @@ import com.yahoo.vespa.model.container.component.chain.Chains; */ public class ProcessingChains extends Chains<ProcessingChain> { - public static final BindingPattern[] defaultBindings = new BindingPattern[]{BindingPattern.createModelGeneratedFromHttpPath("/processing/*")}; + public static final BindingPattern[] defaultBindings = new BindingPattern[]{SystemBindingPattern.fromHttpPath("/processing/*")}; public ProcessingChains(AbstractConfigProducer parent, String subId) { 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 c6be67f74bb..d11e0f9a891 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 @@ -59,6 +59,8 @@ import com.yahoo.vespa.model.container.SecretStore; import com.yahoo.vespa.model.container.component.BindingPattern; import com.yahoo.vespa.model.container.component.FileStatusHandlerComponent; import com.yahoo.vespa.model.container.component.Handler; +import com.yahoo.vespa.model.container.component.SystemBindingPattern; +import com.yahoo.vespa.model.container.component.UserBindingPattern; import com.yahoo.vespa.model.container.component.chain.Chain; import com.yahoo.vespa.model.container.component.chain.ProcessingHandler; import com.yahoo.vespa.model.container.docproc.ContainerDocproc; @@ -112,7 +114,7 @@ public class ContainerModelBuilder extends ConfigModelBuilder<ContainerModel> { 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 = BindingPattern.createModelGeneratedFromHttpPath("/search/*"); + static final BindingPattern SEARCH_HANDLER_BINDING = SystemBindingPattern.fromHttpPath("/search/*"); public enum Networking { disable, enable } @@ -280,7 +282,7 @@ public class ContainerModelBuilder extends ConfigModelBuilder<ContainerModel> { new FileStatusHandlerComponent( name + "-status-handler", statusFile.orElse(HOSTED_VESPA_STATUS_FILE), - BindingPattern.createModelGeneratedFromHttpPath("/" + name))); + SystemBindingPattern.fromHttpPath("/" + name))); } else { cluster.addVipHandler(); } @@ -806,7 +808,7 @@ public class ContainerModelBuilder extends ConfigModelBuilder<ContainerModel> { private void addGUIHandler(ApplicationContainerCluster cluster) { Handler<?> guiHandler = new GUIHandler(); - guiHandler.addServerBindings(BindingPattern.createModelGeneratedFromHttpPath(GUIHandler.BINDING_PATH)); + guiHandler.addServerBindings(SystemBindingPattern.fromHttpPath(GUIHandler.BINDING_PATH)); cluster.addComponent(guiHandler); } @@ -825,7 +827,7 @@ public class ContainerModelBuilder extends ConfigModelBuilder<ContainerModel> { for (Element element: bindingElements) { String text = element.getTextContent().trim(); if (!text.isEmpty()) - result.add(BindingPattern.createUserGeneratedFromPattern(text)); + result.add(UserBindingPattern.fromPattern(text)); } return result.toArray(BindingPattern[]::new); diff --git a/config-model/src/test/java/com/yahoo/vespa/model/container/component/BindingPatternTest.java b/config-model/src/test/java/com/yahoo/vespa/model/container/component/BindingPatternTest.java index 069ef156913..91a2b65c0e0 100644 --- a/config-model/src/test/java/com/yahoo/vespa/model/container/component/BindingPatternTest.java +++ b/config-model/src/test/java/com/yahoo/vespa/model/container/component/BindingPatternTest.java @@ -27,14 +27,14 @@ public class BindingPatternTest { @Test public void getters_returns_correct_components() { { - BindingPattern pattern = BindingPattern.createModelGeneratedFromPattern("http://host:1234/path/*"); + BindingPattern pattern = SystemBindingPattern.fromPattern("http://host:1234/path/*"); assertEquals("http", pattern.scheme()); assertEquals("host", pattern.host()); assertEquals("1234", pattern.port().get()); assertEquals("/path/*", pattern.path()); } { - BindingPattern pattern = BindingPattern.createModelGeneratedFromPattern("https://*/path/v1/"); + BindingPattern pattern = SystemBindingPattern.fromPattern("https://*/path/v1/"); assertEquals("https", pattern.scheme()); assertEquals("*", pattern.host()); assertFalse(pattern.port().isPresent()); @@ -43,7 +43,7 @@ public class BindingPatternTest { } private static void assertBindingParses(String binding) { - BindingPattern pattern = BindingPattern.createModelGeneratedFromPattern(binding); + BindingPattern pattern = SystemBindingPattern.fromPattern(binding); String stringRepresentation = pattern.patternString(); assertEquals( "Expected string representation of parsed binding to match original binding string", diff --git a/config-model/src/test/java/com/yahoo/vespa/model/container/http/FilterBindingsTest.java b/config-model/src/test/java/com/yahoo/vespa/model/container/http/FilterBindingsTest.java index 07789697709..4ca7590673d 100644 --- a/config-model/src/test/java/com/yahoo/vespa/model/container/http/FilterBindingsTest.java +++ b/config-model/src/test/java/com/yahoo/vespa/model/container/http/FilterBindingsTest.java @@ -1,11 +1,12 @@ // Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.model.container.http; -import com.yahoo.config.model.deploy.DeployState; import com.yahoo.config.model.builder.xml.test.DomBuilderTest; +import com.yahoo.config.model.deploy.DeployState; import com.yahoo.jdisc.http.ServerConfig; import com.yahoo.vespa.model.container.ContainerModel; import com.yahoo.vespa.model.container.component.BindingPattern; +import com.yahoo.vespa.model.container.component.UserBindingPattern; import com.yahoo.vespa.model.container.component.chain.Chain; import com.yahoo.vespa.model.container.http.xml.HttpBuilder; import com.yahoo.vespa.model.container.xml.ContainerModelBuilder; @@ -22,7 +23,7 @@ import static org.junit.Assert.assertNotNull; */ public class FilterBindingsTest extends DomBuilderTest { - private static final BindingPattern MY_CHAIN_BINDING = BindingPattern.createUserGeneratedFromHttpPath("/my-chain-binding"); + private static final BindingPattern MY_CHAIN_BINDING = UserBindingPattern.fromHttpPath("/my-chain-binding"); private Http buildHttp(Element xml) { Http http = new HttpBuilder().build(root.getDeployState(), root, xml); diff --git a/config-model/src/test/java/com/yahoo/vespa/model/container/xml/AccessControlTest.java b/config-model/src/test/java/com/yahoo/vespa/model/container/xml/AccessControlTest.java index 9a9f7f34ab9..e054698d40b 100644 --- a/config-model/src/test/java/com/yahoo/vespa/model/container/xml/AccessControlTest.java +++ b/config-model/src/test/java/com/yahoo/vespa/model/container/xml/AccessControlTest.java @@ -9,6 +9,8 @@ import com.yahoo.config.provision.AthenzDomain; import com.yahoo.vespa.model.container.ApplicationContainer; import com.yahoo.vespa.model.container.ContainerCluster; import com.yahoo.vespa.model.container.component.BindingPattern; +import com.yahoo.vespa.model.container.component.SystemBindingPattern; +import com.yahoo.vespa.model.container.component.UserBindingPattern; import com.yahoo.vespa.model.container.http.AccessControl; import com.yahoo.vespa.model.container.http.FilterBinding; import com.yahoo.vespa.model.container.http.Http; @@ -41,18 +43,18 @@ public class AccessControlTest extends ContainerModelBuilderTestBase { private static final Set<BindingPattern> REQUIRED_HANDLER_BINDINGS = Set.of( - BindingPattern.createUserGeneratedFromHttpPath("/custom-handler/*"), - BindingPattern.createModelGeneratedFromHttpPath("/search/*"), - BindingPattern.createModelGeneratedFromHttpPath("/document/v1/*"), - BindingPattern.createModelGeneratedFromHttpPath("/reserved-for-internal-use/feedapi")); + UserBindingPattern.fromHttpPath("/custom-handler/*"), + SystemBindingPattern.fromHttpPath("/search/*"), + SystemBindingPattern.fromHttpPath("/document/v1/*"), + SystemBindingPattern.fromHttpPath("/reserved-for-internal-use/feedapi")); private static final Set<BindingPattern> FORBIDDEN_HANDLER_BINDINGS = Set.of( - BindingPattern.createModelGeneratedFromHttpPath("/ApplicationStatus"), - BindingPattern.createModelGeneratedFromHttpPath("/status.html"), - BindingPattern.createModelGeneratedFromHttpPath("/statistics/"), - BindingPattern.createModelGeneratedFromHttpPath("/state/v1"), - BindingPattern.createModelGeneratedFromHttpPath("/")); + SystemBindingPattern.fromHttpPath("/ApplicationStatus"), + SystemBindingPattern.fromHttpPath("/status.html"), + SystemBindingPattern.fromHttpPath("/statistics/"), + SystemBindingPattern.fromHttpPath("/state/v1"), + SystemBindingPattern.fromHttpPath("/")); @Test public void access_control_filter_chain_is_set_up() { @@ -151,8 +153,8 @@ public class AccessControlTest extends ContainerModelBuilderTestBase { @Test public void handler_can_be_excluded_by_excluding_one_of_its_bindings() { - BindingPattern notExcludedBinding = BindingPattern.createUserGeneratedFromHttpPath("/custom-handler/*"); - BindingPattern excludedBinding = BindingPattern.createModelGeneratedFromHttpPath("/excluded/*"); + BindingPattern notExcludedBinding = UserBindingPattern.fromHttpPath("/custom-handler/*"); + BindingPattern excludedBinding = SystemBindingPattern.fromHttpPath("/excluded/*"); Element clusterElem = DomBuilderTest.parse( "<container version='1.0'>", httpWithExcludedBinding(excludedBinding), @@ -190,8 +192,8 @@ public class AccessControlTest extends ContainerModelBuilderTestBase { Http http = getHttp(clusterElem); Set<BindingPattern> requiredBindings = Set.of( - BindingPattern.createModelGeneratedFromHttpPath("/" + servletPath), - BindingPattern.createModelGeneratedFromHttpPath("/" + restApiPath + "/*")); + SystemBindingPattern.fromHttpPath("/" + servletPath), + SystemBindingPattern.fromHttpPath("/" + restApiPath + "/*")); Set<BindingPattern> missingRequiredBindings = requiredBindings.stream() .filter(requiredBinding -> ! containsBinding(http.getBindings(), requiredBinding)) .collect(Collectors.toSet()); @@ -203,8 +205,8 @@ public class AccessControlTest extends ContainerModelBuilderTestBase { @Test public void servlet_can_be_excluded_by_excluding_one_of_its_bindings() { String servletPath = "servlet/path"; - BindingPattern notExcludedBinding = BindingPattern.createModelGeneratedFromPattern("http://*:8081/" + servletPath); - BindingPattern excludedBinding = BindingPattern.createModelGeneratedFromPattern("http://*:8080/" + servletPath); + BindingPattern notExcludedBinding = SystemBindingPattern.fromPattern("http://*:8081/" + servletPath); + BindingPattern excludedBinding = SystemBindingPattern.fromPattern("http://*:8080/" + servletPath); Element clusterElem = DomBuilderTest.parse( "<container version='1.0'>", httpWithExcludedBinding(excludedBinding), @@ -224,8 +226,8 @@ public class AccessControlTest extends ContainerModelBuilderTestBase { @Test public void rest_api_can_be_excluded_by_excluding_one_of_its_bindings() { String restApiPath = "api/v0"; - BindingPattern notExcludedBinding = BindingPattern.createModelGeneratedFromPattern("http://*:8081/" + restApiPath + Jersey2Servlet.BINDING_SUFFIX); - BindingPattern excludedBinding = BindingPattern.createModelGeneratedFromPattern("http://*:8080/" + restApiPath + Jersey2Servlet.BINDING_SUFFIX);; + BindingPattern notExcludedBinding = SystemBindingPattern.fromPattern("http://*:8081/" + restApiPath + Jersey2Servlet.BINDING_SUFFIX); + BindingPattern excludedBinding = SystemBindingPattern.fromPattern("http://*:8080/" + restApiPath + Jersey2Servlet.BINDING_SUFFIX);; Element clusterElem = DomBuilderTest.parse( "<container version='1.0'>", httpWithExcludedBinding(excludedBinding), diff --git a/config-model/src/test/java/com/yahoo/vespa/model/container/xml/ContainerDocumentApiBuilderTest.java b/config-model/src/test/java/com/yahoo/vespa/model/container/xml/ContainerDocumentApiBuilderTest.java index a9282b124f4..73a68429b6d 100644 --- a/config-model/src/test/java/com/yahoo/vespa/model/container/xml/ContainerDocumentApiBuilderTest.java +++ b/config-model/src/test/java/com/yahoo/vespa/model/container/xml/ContainerDocumentApiBuilderTest.java @@ -3,8 +3,9 @@ package com.yahoo.vespa.model.container.xml; import com.yahoo.config.model.builder.xml.test.DomBuilderTest; import com.yahoo.vespa.model.container.ContainerCluster; -import com.yahoo.vespa.model.container.component.BindingPattern; import com.yahoo.vespa.model.container.component.Handler; +import com.yahoo.vespa.model.container.component.SystemBindingPattern; +import com.yahoo.vespa.model.container.component.UserBindingPattern; import org.junit.Test; import org.w3c.dom.Element; @@ -52,8 +53,8 @@ public class ContainerDocumentApiBuilderTest extends ContainerModelBuilderTestBa private void verifyCustomBindings(String id) { Handler<?> handler = getHandlers("cluster1").get(id); - assertThat(handler.getServerBindings(), hasItem(BindingPattern.createUserGeneratedFromHttpPath("/document-api/reserved-for-internal-use/feedapi"))); - assertThat(handler.getServerBindings(), hasItem(BindingPattern.createUserGeneratedFromHttpPath("/document-api/reserved-for-internal-use/feedapi/"))); + assertThat(handler.getServerBindings(), hasItem(UserBindingPattern.fromHttpPath("/document-api/reserved-for-internal-use/feedapi"))); + assertThat(handler.getServerBindings(), hasItem(UserBindingPattern.fromHttpPath("/document-api/reserved-for-internal-use/feedapi/"))); assertThat(handler.getServerBindings().size(), is(2)); } @@ -75,10 +76,10 @@ public class ContainerDocumentApiBuilderTest extends ContainerModelBuilderTestBa assertThat(handlerMap.get("com.yahoo.vespa.http.server.FeedHandler"), not(nullValue())); assertThat(handlerMap.get("com.yahoo.vespa.http.server.FeedHandler").getServerBindings() - .contains(BindingPattern.createModelGeneratedFromHttpPath("/reserved-for-internal-use/feedapi")), + .contains(SystemBindingPattern.fromHttpPath("/reserved-for-internal-use/feedapi")), is(true)); assertThat(handlerMap.get("com.yahoo.vespa.http.server.FeedHandler").getServerBindings() - .contains(BindingPattern.createModelGeneratedFromHttpPath("/reserved-for-internal-use/feedapi")), + .contains(SystemBindingPattern.fromHttpPath("/reserved-for-internal-use/feedapi")), is(true)); assertThat(handlerMap.get("com.yahoo.vespa.http.server.FeedHandler").getServerBindings().size(), equalTo(2)); } |