summaryrefslogtreecommitdiffstats
path: root/config-model/src/main
diff options
context:
space:
mode:
authorBjørn Christian Seime <bjorncs@verizonmedia.com>2020-07-20 16:12:29 +0200
committerBjørn Christian Seime <bjorncs@verizonmedia.com>2020-08-27 10:28:02 +0200
commit5deebedde33d72360887580f23b1ab382c861273 (patch)
tree35fc8bc33bc4155493da06191c802e826255e62a /config-model/src/main
parentfff150db8b6fd95743d65ad0a39c3f2a420e1313 (diff)
Use BindingPattern to represent all types of binding in config model
Diffstat (limited to 'config-model/src/main')
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/admin/LogserverContainerCluster.java3
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/admin/clustercontroller/ClusterControllerContainer.java14
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/admin/metricsproxy/MetricsProxyContainerCluster.java6
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/DomClientProviderBuilder.java5
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/DomHandlerBuilder.java39
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/clients/ContainerDocumentApi.java18
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/container/ApplicationContainerCluster.java11
-rwxr-xr-xconfig-model/src/main/java/com/yahoo/vespa/model/container/ContainerCluster.java17
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/container/ContainerModelEvaluation.java8
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/container/component/DiscBindingsConfigGenerator.java15
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/container/component/FileStatusHandlerComponent.java2
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/container/component/Handler.java14
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/container/docproc/ContainerDocproc.java3
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/container/docproc/DocprocChains.java5
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/container/http/AccessControl.java17
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/container/http/FilterBinding.java11
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/container/http/Http.java2
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/container/http/xml/HttpBuilder.java5
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/container/processing/ProcessingChains.java3
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/container/search/GUIHandler.java2
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilder.java27
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/container/xml/DocumentApiOptionsBuilder.java7
22 files changed, 135 insertions, 99 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 f9338f9cb35..a3c5ad53889 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,6 +6,7 @@ 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;
/**
@@ -39,7 +40,7 @@ public class LogserverContainerCluster extends ContainerCluster<LogserverContain
private void addLogHandler() {
Handler<?> logHandler = Handler.fromClassName(ContainerCluster.LOG_HANDLER_CLASS);
- logHandler.addServerBindings("http://*/logs");
+ logHandler.addServerBindings(BindingPattern.createModelGeneratedFromHttpPath("/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 08f4e2fa12f..bb2e85b40e0 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,6 +12,7 @@ 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.xml.PlatformBundles;
@@ -36,10 +37,10 @@ public class ClusterControllerContainer extends Container implements
super(parent, "" + index, index);
addHandler("clustercontroller-status",
"com.yahoo.vespa.clustercontroller.apps.clustercontroller.StatusHandler",
- "clustercontroller-status/*");
+ "/clustercontroller-status/*");
addHandler("clustercontroller-state-restapi-v2",
"com.yahoo.vespa.clustercontroller.apps.clustercontroller.StateRestApiV2Handler",
- "cluster/v2/*");
+ "/cluster/v2/*");
if (runStandaloneZooKeeper) {
addComponent("clustercontroller-zkrunner",
"com.yahoo.vespa.zookeeper.VespaZooKeeperServerImpl",
@@ -77,8 +78,8 @@ public class ClusterControllerContainer extends Container implements
return ContainerServiceType.CLUSTERCONTROLLER_CONTAINER;
}
- private void addHandler(Handler h, String binding) {
- h.addServerBindings("http://*/" + binding);
+ private void addHandler(Handler h, String path) {
+ h.addServerBindings(BindingPattern.createModelGeneratedFromHttpPath(path));
super.addHandler(h);
}
@@ -96,9 +97,8 @@ public class ClusterControllerContainer extends Container implements
addComponent(new Component<>(createComponentModel(id, className, bundle)));
}
- private void addHandler(String id, String className, String binding) {
- addHandler(new Handler(createComponentModel(id, className, CLUSTERCONTROLLER_BUNDLE)),
- binding);
+ private void addHandler(String id, String className, String path) {
+ addHandler(new Handler(createComponentModel(id, className, CLUSTERCONTROLLER_BUNDLE)), path);
}
@Override
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 4dc9811a024..04a009762ce 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
@@ -37,6 +37,7 @@ 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.xml.PlatformBundles;
@@ -129,8 +130,9 @@ public class MetricsProxyContainerCluster extends ContainerCluster<MetricsProxyC
static Handler<AbstractConfigProducer<?>> createMetricsHandler(Class<? extends ThreadedHttpRequestHandler> clazz, String bindingPath) {
Handler<AbstractConfigProducer<?>> metricsHandler = new Handler<>(
new ComponentModel(clazz.getName(), null, METRICS_PROXY_BUNDLE_NAME, null));
- metricsHandler.addServerBindings("http://*" + bindingPath,
- "http://*" + bindingPath + "/*");
+ metricsHandler.addServerBindings(
+ BindingPattern.createModelGeneratedFromHttpPath(bindingPath),
+ BindingPattern.createModelGeneratedFromHttpPath(bindingPath + "/*"));
return metricsHandler;
}
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 11fab0ada29..30ea8c41f06 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
@@ -5,6 +5,7 @@ import com.yahoo.config.model.deploy.DeployState;
import com.yahoo.text.XML;
import com.yahoo.config.model.producer.AbstractConfigProducer;
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 org.w3c.dom.Element;
@@ -24,10 +25,10 @@ public class DomClientProviderBuilder extends DomHandlerBuilder {
Handler<? super Component<?, ?>> client = createHandler(clientElement);
for (Element binding : XML.getChildren(clientElement, "binding"))
- client.addClientBindings(XML.getValue(binding));
+ client.addClientBindings(BindingPattern.createUserGeneratedFromPattern(XML.getValue(binding)));
for (Element serverBinding : XML.getChildren(clientElement, "serverBinding"))
- client.addServerBindings(XML.getValue(serverBinding));
+ client.addServerBindings(BindingPattern.createUserGeneratedFromPattern(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 ac6d089cf24..50396cb4aa5 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
@@ -8,6 +8,7 @@ import com.yahoo.container.bundle.BundleInstantiationSpecification;
import com.yahoo.osgi.provider.model.ComponentModel;
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.xml.BundleInstantiationSpecificationBuilder;
@@ -27,11 +28,14 @@ import static java.util.logging.Level.INFO;
*/
public class DomHandlerBuilder extends VespaDomBuilder.DomConfigProducerBuilder<Handler> {
- private static final Set<String> reservedBindings = Set.of(METRICS_V2_HANDLER_BINDING_1,
- METRICS_V2_HANDLER_BINDING_2,
- STATE_HANDLER_BINDING_1,
- STATE_HANDLER_BINDING_2,
- VIP_HANDLER_BINDING);
+ private static final Set<BindingPattern> reservedBindings =
+ Set.of(
+ METRICS_V2_HANDLER_BINDING_1,
+ METRICS_V2_HANDLER_BINDING_2,
+ STATE_HANDLER_BINDING_1,
+ STATE_HANDLER_BINDING_2,
+ VIP_HANDLER_BINDING);
+
private final ApplicationContainerCluster cluster;
public DomHandlerBuilder(ApplicationContainerCluster cluster) {
@@ -43,10 +47,10 @@ public class DomHandlerBuilder extends VespaDomBuilder.DomConfigProducerBuilder<
Handler<? super Component<?, ?>> handler = createHandler(handlerElement);
for (Element binding : XML.getChildren(handlerElement, "binding"))
- addServerBinding(handler, XML.getValue(binding), deployState.getDeployLogger());
+ addServerBinding(handler, BindingPattern.createUserGeneratedFromPattern(XML.getValue(binding)), deployState.getDeployLogger());
for (Element clientBinding : XML.getChildren(handlerElement, "clientBinding"))
- handler.addClientBindings(XML.getValue(clientBinding));
+ handler.addClientBindings(BindingPattern.createUserGeneratedFromPattern(XML.getValue(clientBinding)));
DomComponentBuilder.addChildren(deployState, parent, handlerElement, handler);
@@ -58,27 +62,30 @@ public class DomHandlerBuilder extends VespaDomBuilder.DomConfigProducerBuilder<
return new Handler<>(new ComponentModel(bundleSpec));
}
- private void addServerBinding(Handler<? super Component<?, ?>> handler, String binding, DeployLogger log) {
+ private void addServerBinding(Handler<? super Component<?, ?>> handler, BindingPattern binding, DeployLogger log) {
throwIfBindingIsReserved(binding, handler);
handler.addServerBindings(binding);
removeExistingServerBinding(binding, handler, log);
}
- private void throwIfBindingIsReserved(String binding, Handler<?> newHandler) {
+ private void throwIfBindingIsReserved(BindingPattern binding, Handler<?> newHandler) {
for (var reserved : reservedBindings) {
- if (binding.equals(reserved)) {
- throw new IllegalArgumentException("Binding '" + binding + "' is a reserved Vespa binding and " +
+ if (binding.hasSamePattern(reserved)) {
+ throw new IllegalArgumentException("Binding '" + binding.patternString() + "' is a reserved Vespa binding and " +
"cannot be used by handler: " + newHandler.getComponentId());
}
}
}
- private void removeExistingServerBinding(String binding, Handler<?> newHandler, DeployLogger log) {
+ private void removeExistingServerBinding(BindingPattern binding, Handler<?> newHandler, DeployLogger log) {
for (var handler : cluster.getHandlers()) {
- if (handler.getServerBindings().contains(binding)) {
- handler.removeServerBinding(binding);
- log.log(INFO, "Binding '" + binding + "' was already in use by handler '" +
- handler.getComponentId() + "', but will now be taken over by handler: " + newHandler.getComponentId());
+ for (BindingPattern serverBinding : handler.getServerBindings()) {
+ if (serverBinding.hasSamePattern(binding)) {
+ handler.removeServerBinding(serverBinding);
+ log.log(INFO, "Binding '" + binding.patternString() + "' was already in use by handler '" +
+ handler.getComponentId() + "', but will now be taken over by handler: " + newHandler.getComponentId());
+
+ }
}
}
}
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 58f03bffb30..d4d7178f0f3 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,6 +5,7 @@ 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 java.util.Collection;
@@ -24,7 +25,7 @@ public class ContainerDocumentApi {
}
private void setupHandlers(ContainerCluster cluster) {
- cluster.addComponent(newVespaClientHandler("com.yahoo.document.restapi.resource.RestApi", "document/v1/*"));
+ cluster.addComponent(newVespaClientHandler("com.yahoo.document.restapi.resource.RestApi", "/document/v1/*"));
cluster.addComponent(newVespaClientHandler("com.yahoo.vespa.http.server.FeedHandler", ContainerCluster.RESERVED_URI_PREFIX + "/feedapi"));
}
@@ -32,9 +33,18 @@ public class ContainerDocumentApi {
Handler<AbstractConfigProducer<?>> handler = new Handler<>(new ComponentModel(
BundleInstantiationSpecification.getFromStrings(componentId, null, vespaClientBundleSpecification), ""));
- for (String rootBinding : options.bindings) {
- handler.addServerBindings(rootBinding + bindingSuffix,
- rootBinding + bindingSuffix + '/');
+ if (options.bindings.isEmpty()) {
+ handler.addServerBindings(
+ BindingPattern.createModelGeneratedFromHttpPath(bindingSuffix),
+ BindingPattern.createModelGeneratedFromHttpPath(bindingSuffix + '/'));
+ } else {
+ for (String rootBinding : options.bindings) {
+ String pathWithoutLeadingSlash = bindingSuffix.substring(1);
+ handler.addServerBindings(
+ BindingPattern.createUserGeneratedFromPattern(rootBinding + pathWithoutLeadingSlash),
+ BindingPattern.createUserGeneratedFromPattern(rootBinding + pathWithoutLeadingSlash + '/'));
+ }
+
}
return handler;
}
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 b0ac02d0fe8..b1ece8a2a22 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
@@ -22,6 +22,7 @@ import com.yahoo.search.config.QrStartConfig;
import com.yahoo.vespa.config.search.RankProfilesConfig;
import com.yahoo.vespa.config.search.core.RankingConstantsConfig;
import com.yahoo.vespa.model.admin.metricsproxy.MetricsProxyContainer;
+import com.yahoo.vespa.model.container.component.BindingPattern;
import com.yahoo.vespa.model.container.component.Component;
import com.yahoo.vespa.model.container.component.ConfigProducerGroup;
import com.yahoo.vespa.model.container.component.Handler;
@@ -55,12 +56,12 @@ public final class ApplicationContainerCluster extends ContainerCluster<Applicat
MetricsProxyApiConfig.Producer {
public static final String METRICS_V2_HANDLER_CLASS = MetricsV2Handler.class.getName();
- public static final String METRICS_V2_HANDLER_BINDING_1 = "http://*" + MetricsV2Handler.V2_PATH;
- public static final String METRICS_V2_HANDLER_BINDING_2 = METRICS_V2_HANDLER_BINDING_1 + "/*";
+ 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 String PROMETHEUS_V1_HANDLER_CLASS = PrometheusV1Handler.class.getName();
- private static final String PROMETHEUS_V1_HANDLER_BINDING_1 = "http://*" + PrometheusV1Handler.V1_PATH;
- private static final String PROMETHEUS_V1_HANDLER_BINDING_2 = PROMETHEUS_V1_HANDLER_BINDING_1 + "/*";
+ 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 + "/*");
public static final int heapSizePercentageOfTotalNodeMemory = 60;
public static final int heapSizePercentageOfTotalNodeMemoryWhenCombinedCluster = 17;
@@ -125,7 +126,7 @@ public final class ApplicationContainerCluster extends ContainerCluster<Applicat
addMetricsHandler(PROMETHEUS_V1_HANDLER_CLASS, PROMETHEUS_V1_HANDLER_BINDING_1, PROMETHEUS_V1_HANDLER_BINDING_2);
}
- private void addMetricsHandler(String handlerClass, String rootBinding, String innerBinding) {
+ private void addMetricsHandler(String handlerClass, BindingPattern rootBinding, BindingPattern innerBinding) {
Handler<AbstractConfigProducer<?>> handler = new Handler<>(
new ComponentModel(handlerClass, null, null, null));
handler.addServerBindings(rootBinding, innerBinding);
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 240157fb7aa..d373b1557fc 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
@@ -39,6 +39,7 @@ import com.yahoo.vespa.model.Service;
import com.yahoo.vespa.model.admin.monitoring.Monitoring;
import com.yahoo.vespa.model.clients.ContainerDocumentApi;
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.ComponentGroup;
import com.yahoo.vespa.model.container.component.ComponentsConfigGenerator;
@@ -107,7 +108,7 @@ public abstract class ContainerCluster<CONTAINER extends Container>
* normal compatibility concerns only applies to libraries using the URIs in
* question, not contents served from the URIs themselves.
*/
- public static final String RESERVED_URI_PREFIX = "reserved-for-internal-use";
+ public static final String RESERVED_URI_PREFIX = "/reserved-for-internal-use";
public static final String APPLICATION_STATUS_HANDLER_CLASS = "com.yahoo.container.handler.observability.ApplicationStatusHandler";
public static final String BINDINGS_OVERVIEW_HANDLER_CLASS = BindingsOverviewHandler.class.getName();
@@ -117,13 +118,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 String STATE_HANDLER_BINDING_1 = "http://*" + StateHandler.STATE_API_ROOT;
- public static final String STATE_HANDLER_BINDING_2 = STATE_HANDLER_BINDING_1 + "/*";
+ 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 String ROOT_HANDLER_PATH = "/";
- public static final String ROOT_HANDLER_BINDING = "http://*" + ROOT_HANDLER_PATH;
+ public static final BindingPattern ROOT_HANDLER_BINDING = BindingPattern.createModelGeneratedFromHttpPath(ROOT_HANDLER_PATH);
- public static final String VIP_HANDLER_BINDING = "http://*/status.html";
+ public static final BindingPattern VIP_HANDLER_BINDING = BindingPattern.createModelGeneratedFromHttpPath("/status.html");
private final String name;
@@ -234,7 +235,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("http://*/ApplicationStatus");
+ statusHandler.addServerBindings(BindingPattern.createModelGeneratedFromHttpPath("/ApplicationStatus"));
addComponent(statusHandler);
}
@@ -309,7 +310,7 @@ public abstract class ContainerCluster<CONTAINER extends Container>
containers.forEach(this::addContainer);
}
- public void setProcessingChains(ProcessingChains processingChains, String... serverBindings) {
+ public void setProcessingChains(ProcessingChains processingChains, BindingPattern... serverBindings) {
if (this.processingChains != null)
throw new IllegalStateException("ProcessingChains should only be set once.");
@@ -320,7 +321,7 @@ public abstract class ContainerCluster<CONTAINER extends Container>
processingChains,
"com.yahoo.processing.handler.ProcessingHandler");
- for (String binding: serverBindings)
+ for (BindingPattern binding: serverBindings)
processingHandler.addServerBindings(binding);
addComponent(processingHandler);
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 6b4f8d486ec..3b034c2bd0f 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,6 +6,7 @@ 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 java.util.List;
@@ -21,7 +22,7 @@ public class ContainerModelEvaluation implements RankProfilesConfig.Producer, Ra
private final static String BUNDLE_NAME = "model-evaluation";
private final static String EVALUATOR_NAME = ModelsEvaluator.class.getName();
private final static String REST_HANDLER_NAME = "ai.vespa.models.handler.ModelsEvaluationHandler";
- private final static String REST_BINDING = "model-evaluation/v1";
+ private final static String REST_BINDING_PATH = "/model-evaluation/v1";
/** Global rank profiles, aka models */
private final RankProfileList rankProfileList;
@@ -48,8 +49,9 @@ 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("http://*/" + REST_BINDING,
- "http://*/" + REST_BINDING + "/*");
+ handler.addServerBindings(
+ BindingPattern.createModelGeneratedFromHttpPath(REST_BINDING_PATH),
+ BindingPattern.createModelGeneratedFromHttpPath(REST_BINDING_PATH + "/*"));
return handler;
}
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/container/component/DiscBindingsConfigGenerator.java b/config-model/src/main/java/com/yahoo/vespa/model/container/component/DiscBindingsConfigGenerator.java
index d7e393ee474..02face328d9 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/container/component/DiscBindingsConfigGenerator.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/container/component/DiscBindingsConfigGenerator.java
@@ -1,13 +1,16 @@
// 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.component;
-import java.util.*;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.LinkedHashMap;
+import java.util.Map;
import static com.yahoo.container.jdisc.JdiscBindingsConfig.Handlers;
+import static java.util.stream.Collectors.toList;
/**
* @author gjoranv
- * @since 5.1.8
*/
public class DiscBindingsConfigGenerator {
@@ -26,7 +29,11 @@ public class DiscBindingsConfigGenerator {
return Collections.singletonMap(handler.model.getComponentId().stringValue(),
new Handlers.Builder()
- .serverBindings(handler.getServerBindings())
- .clientBindings(handler.getClientBindings()));
+ .serverBindings(toStrings(handler.getServerBindings()))
+ .clientBindings(toStrings(handler.getClientBindings())));
+ }
+
+ private static Collection<String> toStrings(Collection<BindingPattern> bindings) {
+ return bindings.stream().map(BindingPattern::patternString).collect(toList());
}
}
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/container/component/FileStatusHandlerComponent.java b/config-model/src/main/java/com/yahoo/vespa/model/container/component/FileStatusHandlerComponent.java
index 3d9a1b2e665..839594502c6 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/container/component/FileStatusHandlerComponent.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/container/component/FileStatusHandlerComponent.java
@@ -15,7 +15,7 @@ public class FileStatusHandlerComponent extends Handler implements VipStatusConf
private final String fileName;
- public FileStatusHandlerComponent(String id, String fileName, String... bindings) {
+ public FileStatusHandlerComponent(String id, String fileName, BindingPattern... bindings) {
super(new ComponentModel(id, CLASS, null, null));
this.fileName = fileName;
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/container/component/Handler.java b/config-model/src/main/java/com/yahoo/vespa/model/container/component/Handler.java
index be3e484db9c..efee5c6a9a0 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/container/component/Handler.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/container/component/Handler.java
@@ -22,8 +22,8 @@ import java.util.Set;
*/
public class Handler<CHILD extends AbstractConfigProducer<?>> extends Component<CHILD, ComponentModel> {
- private Set<String> serverBindings = new LinkedHashSet<>();
- private List<String> clientBindings = new ArrayList<>();
+ private final Set<BindingPattern> serverBindings = new LinkedHashSet<>();
+ private final List<BindingPattern> clientBindings = new ArrayList<>();
public Handler(ComponentModel model) {
super(model);
@@ -33,23 +33,23 @@ public class Handler<CHILD extends AbstractConfigProducer<?>> extends Component<
return new Handler<>(new ComponentModel(className, null, null, null));
}
- public void addServerBindings(String... bindings) {
+ public void addServerBindings(BindingPattern... bindings) {
serverBindings.addAll(Arrays.asList(bindings));
}
- public void removeServerBinding(String binding) {
+ public void removeServerBinding(BindingPattern binding) {
serverBindings.remove(binding);
}
- public void addClientBindings(String... bindings) {
+ public void addClientBindings(BindingPattern... bindings) {
clientBindings.addAll(Arrays.asList(bindings));
}
- public final Set<String> getServerBindings() {
+ public final Set<BindingPattern> getServerBindings() {
return Collections.unmodifiableSet(serverBindings);
}
- public final List<String> getClientBindings() {
+ public final List<BindingPattern> getClientBindings() {
return Collections.unmodifiableList(clientBindings);
}
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 d4b4dcea78e..b7dfe6c42f0 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,6 +8,7 @@ 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 java.util.HashMap;
@@ -44,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("mbus://*/" + mbusClient.getSessionName());
+ mbusClient.addClientBindings(BindingPattern.createModelGeneratedFromPattern("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 5d08a0a6998..3c2e8c9bde1 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,6 +6,7 @@ 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.chain.Chains;
import com.yahoo.vespa.model.container.component.chain.ProcessingHandler;
@@ -38,12 +39,12 @@ public class DocprocChains extends Chains<DocprocChain> {
}
private void addServerAndClientForChain(ApplicationContainerCluster cluster, DocprocChain docprocChain) {
- docprocHandler.addServerBindings("mbus://*/" + docprocChain.getSessionName());
+ docprocHandler.addServerBindings(BindingPattern.createModelGeneratedFromPattern("mbus://*/" + docprocChain.getSessionName()));
cluster.addMbusServer(ComponentId.fromString(docprocChain.getSessionName()));
MbusClient client = new MbusClient(docprocChain.getSessionName(), SessionConfig.Type.INTERMEDIATE);
- client.addClientBindings("mbus://*/" + client.getSessionName());
+ client.addClientBindings(BindingPattern.createModelGeneratedFromPattern("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 a7335eeeeac..a8ed10e8542 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
@@ -6,6 +6,7 @@ import com.yahoo.component.ComponentSpecification;
import com.yahoo.config.application.api.DeployLogger;
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.FileStatusHandlerComponent;
import com.yahoo.vespa.model.container.component.Handler;
import com.yahoo.vespa.model.container.component.Servlet;
@@ -43,7 +44,7 @@ public final class AccessControl {
private String domain;
private boolean readEnabled = false;
private boolean writeEnabled = true;
- private final Set<String> excludeBindings = new LinkedHashSet<>();
+ private final Set<BindingPattern> excludeBindings = new LinkedHashSet<>();
private Collection<Handler<?>> handlers = Collections.emptyList();
private Collection<Servlet> servlets = Collections.emptyList();
private final DeployLogger logger;
@@ -63,7 +64,7 @@ public final class AccessControl {
return this;
}
- public Builder excludeBinding(String binding) {
+ public Builder excludeBinding(BindingPattern binding) {
this.excludeBindings.add(binding);
return this;
}
@@ -83,7 +84,7 @@ public final class AccessControl {
public final String domain;
public final boolean readEnabled;
public final boolean writeEnabled;
- private final Set<String> excludedBindings;
+ private final Set<BindingPattern> excludedBindings;
private final Collection<Handler<?>> handlers;
private final Collection<Servlet> servlets;
private final DeployLogger logger;
@@ -91,7 +92,7 @@ public final class AccessControl {
private AccessControl(String domain,
boolean writeEnabled,
boolean readEnabled,
- Set<String> excludedBindings,
+ Set<BindingPattern> excludedBindings,
Collection<Servlet> servlets,
Collection<Handler<?>> handlers,
DeployLogger logger) {
@@ -140,12 +141,12 @@ public final class AccessControl {
return servletBindings(servlet).noneMatch(excludedBindings::contains);
}
- private static FilterBinding accessControlBinding(String binding, DeployLogger logger) {
+ private static FilterBinding accessControlBinding(BindingPattern binding, DeployLogger logger) {
return FilterBinding.create(new ComponentSpecification(ACCESS_CONTROL_CHAIN_ID.stringValue()), binding, logger);
}
- private static Stream<String> servletBindings(Servlet servlet) {
- return Stream.of("http://*/").map(protocol -> protocol + servlet.bindingPath);
+ private static Stream<BindingPattern> servletBindings(Servlet servlet) {
+ return Stream.of(BindingPattern.createModelGeneratedFromHttpPath("/" + servlet.bindingPath));
}
private static boolean handlerNeedsProtection(Handler<?> handler) {
@@ -153,7 +154,7 @@ public final class AccessControl {
}
private static boolean hasNonMbusBinding(Handler<?> handler) {
- return handler.getServerBindings().stream().anyMatch(binding -> ! binding.startsWith("mbus"));
+ return handler.getServerBindings().stream().anyMatch(binding -> ! binding.scheme().equals("mbus"));
}
}
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/container/http/FilterBinding.java b/config-model/src/main/java/com/yahoo/vespa/model/container/http/FilterBinding.java
index 8bb4de9e3f2..266c8c7bae2 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/container/http/FilterBinding.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/container/http/FilterBinding.java
@@ -3,6 +3,7 @@ package com.yahoo.vespa.model.container.http;
import com.yahoo.component.ComponentSpecification;
import com.yahoo.config.application.api.DeployLogger;
+import com.yahoo.vespa.model.container.component.BindingPattern;
import java.util.logging.Level;
@@ -12,15 +13,15 @@ import java.util.logging.Level;
public class FilterBinding {
private final ComponentSpecification filterId;
- private final String binding;
+ private final BindingPattern binding;
- private FilterBinding(ComponentSpecification filterId, String binding) {
+ private FilterBinding(ComponentSpecification filterId, BindingPattern binding) {
this.filterId = filterId;
this.binding = binding;
}
- public static FilterBinding create(ComponentSpecification filterId, String binding, DeployLogger logger) {
- if (binding.startsWith("https://")) {
+ public static FilterBinding create(ComponentSpecification filterId, BindingPattern binding, DeployLogger logger) {
+ if (binding.scheme().equals("https")) {
logger.log(Level.WARNING, String.format("For binding '%s' on '%s': 'https' bindings are deprecated, " +
"use 'http' instead to bind to both http and https traffic.",
binding, filterId));
@@ -32,7 +33,7 @@ public class FilterBinding {
return filterId;
}
- public String binding() {
+ public BindingPattern binding() {
return binding;
}
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/container/http/Http.java b/config-model/src/main/java/com/yahoo/vespa/model/container/http/Http.java
index 1d54ddb3e39..3155669527a 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/container/http/Http.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/container/http/Http.java
@@ -77,7 +77,7 @@ public class Http extends AbstractConfigProducer<AbstractConfigProducer<?>> impl
for (FilterBinding binding : bindings) {
builder.filter(new ServerConfig.Filter.Builder()
.id(binding.filterId().stringValue())
- .binding(binding.binding()));
+ .binding(binding.binding().patternString()));
}
}
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 c4ab267aadb..658493a5bd2 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,6 +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.chain.Chain;
import com.yahoo.vespa.model.container.http.AccessControl;
import com.yahoo.vespa.model.container.http.FilterBinding;
@@ -75,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::getValue)
+ .map(xml -> BindingPattern.createUserGeneratedFromPattern(XML.getValue(xml)))
.forEach(builder::excludeBinding);
}
return builder.build();
@@ -123,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, binding, logger));
+ result.add(FilterBinding.create(chainId, BindingPattern.createUserGeneratedFromPattern(binding), logger));
}
}
}
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 4fd79a4f335..1cbd6ecfbbc 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
@@ -2,6 +2,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.chain.Chains;
/**
@@ -11,7 +12,7 @@ import com.yahoo.vespa.model.container.component.chain.Chains;
*/
public class ProcessingChains extends Chains<ProcessingChain> {
- public static final String[] defaultBindings = new String[] {"http://*/processing/*"};
+ public static final BindingPattern[] defaultBindings = new BindingPattern[]{BindingPattern.createModelGeneratedFromHttpPath("/processing/*")};
public ProcessingChains(AbstractConfigProducer parent, String subId) {
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/container/search/GUIHandler.java b/config-model/src/main/java/com/yahoo/vespa/model/container/search/GUIHandler.java
index 1e717f89819..f01bbcd3951 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/container/search/GUIHandler.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/container/search/GUIHandler.java
@@ -14,7 +14,7 @@ public class GUIHandler extends Handler<AbstractConfigProducer<?>> {
public static final String BUNDLE = "container-search-gui";
public static final String CLASS = "com.yahoo.search.query.gui.GUIHandler";
- public static final String BINDING = "*/querybuilder/*";
+ public static final String BINDING_PATH = "/querybuilder/*";
public GUIHandler() {
super(new ComponentModel(bundleSpec(CLASS, BUNDLE)));
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 41e092c7ea5..857ff10e2bc 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
@@ -29,7 +29,6 @@ import com.yahoo.config.provision.Environment;
import com.yahoo.config.provision.HostName;
import com.yahoo.config.provision.NodeResources;
import com.yahoo.config.provision.NodeType;
-import com.yahoo.config.provision.SystemName;
import com.yahoo.config.provision.Zone;
import com.yahoo.search.rendering.RendererRegistry;
import com.yahoo.searchdefinition.derived.RankProfileList;
@@ -57,7 +56,7 @@ import com.yahoo.vespa.model.container.ContainerModel;
import com.yahoo.vespa.model.container.ContainerModelEvaluation;
import com.yahoo.vespa.model.container.IdentityProvider;
import com.yahoo.vespa.model.container.SecretStore;
-import com.yahoo.vespa.model.container.component.Component;
+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.chain.Chain;
@@ -113,7 +112,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 String SEARCH_HANDLER_BINDING = "http://*/search/*";
+ static final BindingPattern SEARCH_HANDLER_BINDING = BindingPattern.createModelGeneratedFromHttpPath("/search/*");
public enum Networking { disable, enable }
@@ -278,8 +277,10 @@ public class ContainerModelBuilder extends ConfigModelBuilder<ContainerModel> {
String name = "status.html";
Optional<String> statusFile = Optional.ofNullable(System.getenv(HOSTED_VESPA_STATUS_FILE_SETTING));
cluster.addComponent(
- new FileStatusHandlerComponent(name + "-status-handler", statusFile.orElse(HOSTED_VESPA_STATUS_FILE),
- "http://*/" + name));
+ new FileStatusHandlerComponent(
+ name + "-status-handler",
+ statusFile.orElse(HOSTED_VESPA_STATUS_FILE),
+ BindingPattern.createModelGeneratedFromHttpPath("/" + name)));
} else {
cluster.addVipHandler();
}
@@ -795,8 +796,8 @@ public class ContainerModelBuilder extends ConfigModelBuilder<ContainerModel> {
ProcessingHandler<SearchChains> searchHandler = new ProcessingHandler<>(cluster.getSearch().getChains(),
"com.yahoo.search.handler.SearchHandler");
- String[] defaultBindings = {SEARCH_HANDLER_BINDING};
- for (String binding: serverBindings(searchElement, defaultBindings)) {
+ BindingPattern[] defaultBindings = {SEARCH_HANDLER_BINDING};
+ for (BindingPattern binding: serverBindings(searchElement, defaultBindings)) {
searchHandler.addServerBindings(binding);
}
@@ -805,12 +806,12 @@ public class ContainerModelBuilder extends ConfigModelBuilder<ContainerModel> {
private void addGUIHandler(ApplicationContainerCluster cluster) {
Handler<?> guiHandler = new GUIHandler();
- guiHandler.addServerBindings("http://"+GUIHandler.BINDING);
+ guiHandler.addServerBindings(BindingPattern.createModelGeneratedFromHttpPath(GUIHandler.BINDING_PATH));
cluster.addComponent(guiHandler);
}
- private String[] serverBindings(Element searchElement, String... defaultBindings) {
+ private BindingPattern[] serverBindings(Element searchElement, BindingPattern... defaultBindings) {
List<Element> bindings = XML.getChildren(searchElement, "binding");
if (bindings.isEmpty())
return defaultBindings;
@@ -818,16 +819,16 @@ public class ContainerModelBuilder extends ConfigModelBuilder<ContainerModel> {
return toBindingList(bindings);
}
- private String[] toBindingList(List<Element> bindingElements) {
- List<String> result = new ArrayList<>();
+ private BindingPattern[] toBindingList(List<Element> bindingElements) {
+ List<BindingPattern> result = new ArrayList<>();
for (Element element: bindingElements) {
String text = element.getTextContent().trim();
if (!text.isEmpty())
- result.add(text);
+ result.add(BindingPattern.createUserGeneratedFromPattern(text));
}
- return result.toArray(new String[result.size()]);
+ return result.toArray(BindingPattern[]::new);
}
private ContainerDocumentApi buildDocumentApi(ApplicationContainerCluster cluster, Element spec) {
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/container/xml/DocumentApiOptionsBuilder.java b/config-model/src/main/java/com/yahoo/vespa/model/container/xml/DocumentApiOptionsBuilder.java
index ae74dbdb4a7..61464799812 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/container/xml/DocumentApiOptionsBuilder.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/container/xml/DocumentApiOptionsBuilder.java
@@ -6,19 +6,17 @@ import com.yahoo.vespa.model.clients.ContainerDocumentApi;
import org.w3c.dom.Element;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import java.util.logging.Logger;
/**
* @author Einar M R Rosenvinge
- * @since 5.1.11
*/
public class DocumentApiOptionsBuilder {
private static final Logger log = Logger.getLogger(DocumentApiOptionsBuilder.class.getName());
- private static final String[] DEFAULT_BINDINGS = {"http://*/"};
+
public static ContainerDocumentApi.Options build(Element spec) {
return new ContainerDocumentApi.Options(getBindings(spec));
@@ -27,8 +25,7 @@ public class DocumentApiOptionsBuilder {
private static List<String> getBindings(Element spec) {
Collection<Element> bindingElems = XML.getChildren(spec, "binding");
if (bindingElems.isEmpty())
- return Arrays.asList(DEFAULT_BINDINGS);
-
+ return List.of();
List<String> bindings = new ArrayList<>();
for (Element e :bindingElems) {
String binding = getBinding(e);