summaryrefslogtreecommitdiffstats
path: root/config-model
diff options
context:
space:
mode:
authorArne Juul <arnej@yahoo-inc.com>2019-07-31 09:39:21 +0000
committerArne Juul <arnej@yahoo-inc.com>2019-08-01 09:14:45 +0000
commitc27b7f877b7727bbab1a314fe798df8a66732f0a (patch)
tree889878546f27d4c2be489be94c3d3163da6686f6 /config-model
parentf2aaaf89a0f24790ff2322b7b4f88256940c2917 (diff)
add API for explicitly allocating network ports
Diffstat (limited to 'config-model')
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/ConfigProxy.java6
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/ConfigSentinel.java9
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/Logd.java7
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/NetworkPortRequestor.java3
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/PortAllocBridge.java48
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/admin/Configserver.java17
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/admin/LogForwarder.java5
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/admin/Logserver.java10
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/admin/Slobrok.java12
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/admin/metricsproxy/MetricsProxyContainer.java23
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/container/Container.java37
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/content/ContentNode.java14
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/generic/service/Service.java4
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/search/Dispatch.java9
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/search/SearchNode.java11
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/search/TransactionLogServer.java7
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/HostPortsTest.java18
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/HostResourceTest.java13
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/application/validation/change/ConfigValueChangeValidatorTest.java3
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/application/validation/change/StartupCommandChangeValidatorTest.java3
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/test/ApiService.java3
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/test/ModelAmendingTestCase.java3
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/test/ParentService.java3
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/test/SimpleService.java11
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/utils/FileSenderTest.java3
25 files changed, 280 insertions, 2 deletions
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/ConfigProxy.java b/config-model/src/main/java/com/yahoo/vespa/model/ConfigProxy.java
index 4fe13c8bede..70df4cdedb9 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/ConfigProxy.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/ConfigProxy.java
@@ -30,6 +30,12 @@ public class ConfigProxy extends AbstractService {
setProp("clustername", "admin");
}
+ @Override
+ public void allocatePorts(int start, PortAllocBridge from) {
+ if (start == 0) start = BASEPORT;
+ from.requirePort(start, "rpc");
+ }
+
/**
* Returns the desired base port for this service.
*/
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/ConfigSentinel.java b/config-model/src/main/java/com/yahoo/vespa/model/ConfigSentinel.java
index 3f1202ccfd7..655c081c72e 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/ConfigSentinel.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/ConfigSentinel.java
@@ -14,6 +14,8 @@ import com.yahoo.config.provision.Zone;
*/
public class ConfigSentinel extends AbstractService implements SentinelConfig.Producer {
+ static final int BASEPORT = 19097;
+
private final ApplicationId applicationId;
private final Zone zone;
@@ -32,6 +34,13 @@ public class ConfigSentinel extends AbstractService implements SentinelConfig.Pr
setProp("clustername", "admin");
}
+ @Override
+ public void allocatePorts(int start, PortAllocBridge from) {
+ if (start == 0) start = BASEPORT;
+ from.requirePort(start++, "rpc");
+ from.requirePort(start++, "http");
+ }
+
/**
* Returns the desired base port for this service.
*/
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/Logd.java b/config-model/src/main/java/com/yahoo/vespa/model/Logd.java
index 3c7f1ba6cfa..5253b4b54ec 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/Logd.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/Logd.java
@@ -14,6 +14,7 @@ public class Logd
extends AbstractService
implements LogdConfig.Producer
{
+ static final int BASEPORT = 19089;
/**
* Creates a new Logd instance.
@@ -25,6 +26,12 @@ public class Logd
portsMeta.on(0).tag("http").tag("state");
}
+ @Override
+ public void allocatePorts(int start, PortAllocBridge from) {
+ if (start == 0) start = BASEPORT;
+ from.wantPort(start, "http");
+ }
+
/**
* Logd needs a state port.
*
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/NetworkPortRequestor.java b/config-model/src/main/java/com/yahoo/vespa/model/NetworkPortRequestor.java
index 96870ee30d8..10a236e42c6 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/NetworkPortRequestor.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/NetworkPortRequestor.java
@@ -26,6 +26,9 @@ public interface NetworkPortRequestor {
*/
default int getWantedPort() { return 0; }
+ /** allocate the ports you need */
+ void allocatePorts(int start, PortAllocBridge from);
+
/**
* Returns the number of ports needed by this service.
* User-defined ports for container http servers should not be counted, as those
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/PortAllocBridge.java b/config-model/src/main/java/com/yahoo/vespa/model/PortAllocBridge.java
new file mode 100644
index 00000000000..ac518b3a7d9
--- /dev/null
+++ b/config-model/src/main/java/com/yahoo/vespa/model/PortAllocBridge.java
@@ -0,0 +1,48 @@
+// Copyright 2019 Oath Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+
+package com.yahoo.vespa.model;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * API for allocating network ports
+ * This class acts as a bridge between NetworkPortRequestor and HostPorts
+ * for a single call to allocatePorts(), gathering the resulting port
+ * allocations in a list of integers.
+ * @author arnej
+ */
+public class PortAllocBridge {
+
+ private HostPorts host;
+ private NetworkPortRequestor service;
+ private List<Integer> ports = new ArrayList<>();
+
+ public PortAllocBridge(HostPorts host, NetworkPortRequestor service) {
+ this.host = host;
+ this.service = service;
+ }
+
+ public int requirePort(int port, String suffix) {
+ int got = host.requireNetworkPort(port, service, suffix);
+ ports.add(got);
+ return got;
+ }
+
+ public int wantPort(int port, String suffix) {
+ int got = host.wantNetworkPort(port, service, suffix);
+ ports.add(got);
+ return got;
+ }
+
+ public int allocatePort(String suffix) {
+ int got = host.allocateNetworkPort(service, suffix);
+ ports.add(got);
+ return got;
+ }
+
+ public List<Integer> result() {
+ return ports;
+ }
+
+}
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/admin/Configserver.java b/config-model/src/main/java/com/yahoo/vespa/model/admin/Configserver.java
index e8ca03b277d..bf0a9b00ded 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/admin/Configserver.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/admin/Configserver.java
@@ -3,6 +3,8 @@ package com.yahoo.vespa.model.admin;
import com.yahoo.config.model.producer.AbstractConfigProducer;
import com.yahoo.vespa.model.AbstractService;
+import com.yahoo.vespa.model.PortAllocBridge;
+
/**
* Represents a Configserver. There may be one or more Configservers in a
@@ -30,6 +32,21 @@ public class Configserver extends AbstractService {
setProp("clustername", "admin");
}
+ @Override
+ public void allocatePorts(int start, PortAllocBridge from) {
+ if (requiresWantedPort()) {
+ from.requirePort(start++, "rpc");
+ from.requirePort(start++, "http");
+ } else if (start == 0) {
+ from.allocatePort("rpc");
+ from.allocatePort("http");
+ } else {
+ from.wantPort(start++, "rpc");
+ from.wantPort(start++, "http");
+ }
+ }
+
+
/**
* Returns the desired base port for this service.
*/
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/admin/LogForwarder.java b/config-model/src/main/java/com/yahoo/vespa/model/admin/LogForwarder.java
index 1f77b96244f..5e8e0e3acc2 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/admin/LogForwarder.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/admin/LogForwarder.java
@@ -4,6 +4,7 @@ package com.yahoo.vespa.model.admin;
import com.yahoo.cloud.config.LogforwarderConfig;
import com.yahoo.config.model.producer.AbstractConfigProducer;
import com.yahoo.vespa.model.AbstractService;
+import com.yahoo.vespa.model.PortAllocBridge;
public class LogForwarder extends AbstractService implements LogforwarderConfig.Producer {
@@ -50,6 +51,10 @@ public class LogForwarder extends AbstractService implements LogforwarderConfig.
return new Config(null, null, null, null);
}
+ // LogForwarder does not need any ports.
+ @Override
+ public void allocatePorts(int start, PortAllocBridge from) { }
+
/**
* LogForwarder does not need any ports.
*
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/admin/Logserver.java b/config-model/src/main/java/com/yahoo/vespa/model/admin/Logserver.java
index eca8fd40e69..31ea1d3902b 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/admin/Logserver.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/admin/Logserver.java
@@ -3,6 +3,7 @@ package com.yahoo.vespa.model.admin;
import com.yahoo.config.model.producer.AbstractConfigProducer;
import com.yahoo.vespa.model.AbstractService;
+import com.yahoo.vespa.model.PortAllocBridge;
/**
* Represents the Logserver. There is exactly one logserver in a Vespa
@@ -72,4 +73,13 @@ public class Logserver extends AbstractService {
return new String[]{ "rpc", "unused/1", "unused/2", "unused/3" };
}
+ @Override
+ public void allocatePorts(int start, PortAllocBridge from) {
+ int port = (start == 0) ? getWantedPort() : start;
+ from.requirePort(port++, "unused");
+ from.requirePort(port++, "logtp");
+ from.requirePort(port++, "last.errors");
+ from.requirePort(port++, "replicator");
+ }
+
}
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/admin/Slobrok.java b/config-model/src/main/java/com/yahoo/vespa/model/admin/Slobrok.java
index 2c4fa83d02b..da157798767 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/admin/Slobrok.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/admin/Slobrok.java
@@ -4,6 +4,7 @@ package com.yahoo.vespa.model.admin;
import com.yahoo.config.model.producer.AbstractConfigProducer;
import com.yahoo.vespa.config.core.StateserverConfig;
import com.yahoo.vespa.model.AbstractService;
+import com.yahoo.vespa.model.PortAllocBridge;
/**
* Represents a Slobrok service.
@@ -13,6 +14,8 @@ import com.yahoo.vespa.model.AbstractService;
public class Slobrok extends AbstractService implements StateserverConfig.Producer {
private static final long serialVersionUID = 1L;
+ public final static int BASEPORT = 19099;
+
@Override
public void getConfig(StateserverConfig.Builder builder) {
builder.httpport(getHealthPort());
@@ -39,7 +42,7 @@ public class Slobrok extends AbstractService implements StateserverConfig.Produc
@Override
public int getWantedPort() {
if (getId() == 1) {
- return 19099;
+ return BASEPORT;
} else {
return 0;
}
@@ -49,6 +52,13 @@ public class Slobrok extends AbstractService implements StateserverConfig.Produc
return "exec $ROOT/sbin/vespa-slobrok -p " + getRpcPort() + " -c " + getConfigId();
}
+ @Override
+ public void allocatePorts(int start, PortAllocBridge from) {
+ if (start == 0) start = BASEPORT;
+ from.wantPort(start, "rpc");
+ from.allocatePort("http");
+ }
+
/**
* @return The number of ports needed by the slobrok.
*/
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/admin/metricsproxy/MetricsProxyContainer.java b/config-model/src/main/java/com/yahoo/vespa/model/admin/metricsproxy/MetricsProxyContainer.java
index 2a698233713..73ec43ae8fc 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/admin/metricsproxy/MetricsProxyContainer.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/admin/metricsproxy/MetricsProxyContainer.java
@@ -13,6 +13,7 @@ import ai.vespa.metricsproxy.service.VespaServicesConfig;
import com.yahoo.config.model.api.container.ContainerServiceType;
import com.yahoo.config.model.producer.AbstractConfigProducer;
import com.yahoo.config.provision.ClusterMembership;
+import com.yahoo.vespa.model.PortAllocBridge;
import com.yahoo.vespa.model.container.Container;
import java.util.LinkedHashMap;
@@ -58,6 +59,15 @@ public class MetricsProxyContainer extends Container implements
}
int metricsRpcPortOffset() {
+ if (numHttpServerPorts != 2) {
+ throw new IllegalArgumentException("expecting 2 http server ports");
+ }
+ if (numMessageBusPorts() != 0) {
+ throw new IllegalArgumentException("expecting 0 message bus ports");
+ }
+ if (numRpcPorts() != 1) {
+ throw new IllegalArgumentException("expecting 1 rpc port");
+ }
return numHttpServerPorts + numMessageBusPorts() + numRpcPorts();
}
@@ -66,9 +76,11 @@ public class MetricsProxyContainer extends Container implements
return METRICS_PROXY_CONTAINER;
}
+ static public int BASEPORT = 19092;
+
@Override
public int getWantedPort() {
- return 19092;
+ return BASEPORT;
}
@Override
@@ -83,6 +95,15 @@ public class MetricsProxyContainer extends Container implements
}
@Override
+ public void allocatePorts(int start, PortAllocBridge from) {
+ if (start == 0) start = BASEPORT;
+ from.wantPort(start++, "http");
+ from.wantPort(start++, "http/1");
+ from.wantPort(start++, "rpc/admin");
+ from.wantPort(start++, "rpc/metrics");
+ }
+
+ @Override
public int getPortCount() {
return metricsRpcPortOffset() + 1;
}
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/container/Container.java b/config-model/src/main/java/com/yahoo/vespa/model/container/Container.java
index 52abe8e8fde..12c72cecd14 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/container/Container.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/container/Container.java
@@ -14,6 +14,7 @@ import com.yahoo.osgi.provider.model.ComponentModel;
import com.yahoo.search.config.QrStartConfig;
import com.yahoo.vespa.defaults.Defaults;
import com.yahoo.vespa.model.AbstractService;
+import com.yahoo.vespa.model.PortAllocBridge;
import com.yahoo.vespa.model.application.validation.RestartConfigs;
import com.yahoo.vespa.model.container.component.Component;
import com.yahoo.vespa.model.container.component.ComponentGroup;
@@ -273,6 +274,42 @@ public abstract class Container extends AbstractService implements
return suffixes;
}
+ @Override
+ public void allocatePorts(int start, PortAllocBridge from) {
+ if (start == 0) start = BASEPORT;
+ int off = 2;
+ if (getHttp() == null) {
+ if (requireSpecificPorts) {
+ from.requirePort(start, "http");
+ } else {
+ from.allocatePort("http");
+ }
+ from.allocatePort("http/1");
+ } else if (getHttp().getHttpServer() == null) {
+ // no http server ports
+ } else {
+ for (ConnectorFactory connectorFactory : getHttp().getHttpServer().getConnectorFactories()) {
+ int port = getPort(connectorFactory);
+ String name = "http/" + connectorFactory.getName();
+ from.requirePort(port, name);
+ }
+ }
+ if (messageBusEnabled()) {
+ from.allocatePort("messaging");
+ ++off;
+ }
+ if (rpcServerEnabled()) {
+ from.allocatePort("rpc/admin");
+ ++off;
+ }
+ // TODO: remove this
+ if (getHttp() == null) {
+ from.allocatePort("unused/" + off);
+ ++off;
+ from.allocatePort("unused/" + off);
+ }
+ }
+
/**
* @return the actual search port
* TODO: Remove. Use {@link #getPortsMeta()} and check tags in conjunction with {@link #getRelativePort(int)}.
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/content/ContentNode.java b/config-model/src/main/java/com/yahoo/vespa/model/content/ContentNode.java
index d25396c6a50..17e85e47c4e 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/content/ContentNode.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/content/ContentNode.java
@@ -8,6 +8,7 @@ import com.yahoo.vespa.config.content.core.StorServerConfig;
import com.yahoo.vespa.config.content.core.StorStatusConfig;
import com.yahoo.config.model.producer.AbstractConfigProducer;
import com.yahoo.vespa.model.AbstractService;
+import com.yahoo.vespa.model.PortAllocBridge;
import com.yahoo.vespa.model.application.validation.RestartConfigs;
/**
@@ -61,6 +62,19 @@ public abstract class ContentNode extends AbstractService
}
@Override
+ public void allocatePorts(int start, PortAllocBridge from) {
+ if (start == 0) {
+ from.allocatePort("messaging");
+ from.allocatePort("rpc");
+ from.allocatePort("http");
+ } else {
+ from.wantPort(start++, "messaging");
+ from.wantPort(start++, "rpc");
+ from.wantPort(start++, "http");
+ }
+ }
+
+ @Override
public void getConfig(StorCommunicationmanagerConfig.Builder builder) {
builder.mbusport(getRelativePort(0));
builder.rpcport(getRelativePort(1));
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/generic/service/Service.java b/config-model/src/main/java/com/yahoo/vespa/model/generic/service/Service.java
index 0d30bade53c..4dfca39004a 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/generic/service/Service.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/generic/service/Service.java
@@ -3,6 +3,7 @@ package com.yahoo.vespa.model.generic.service;
import com.yahoo.vespa.model.AbstractService;
import com.yahoo.vespa.model.HostResource;
+import com.yahoo.vespa.model.PortAllocBridge;
/**
* An application specific generic service
@@ -29,6 +30,9 @@ public class Service extends AbstractService {
}
@Override
+ public void allocatePorts(int start, PortAllocBridge from) { }
+
+ @Override
public String getStartupCommand() {
return ((ServiceCluster) getParent()).getCommand();
}
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/search/Dispatch.java b/config-model/src/main/java/com/yahoo/vespa/model/search/Dispatch.java
index c50f772d8d0..6073f338683 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/search/Dispatch.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/search/Dispatch.java
@@ -5,6 +5,7 @@ import com.yahoo.vespa.config.search.core.FdispatchrcConfig;
import com.yahoo.vespa.config.search.core.PartitionsConfig;
import com.yahoo.config.model.producer.AbstractConfigProducer;
import com.yahoo.vespa.model.AbstractService;
+import com.yahoo.vespa.model.PortAllocBridge;
import com.yahoo.vespa.model.application.validation.RestartConfigs;
import com.yahoo.vespa.model.content.SearchCoverage;
@@ -230,6 +231,14 @@ public class Dispatch extends AbstractService implements SearchInterface,
}
}
+ @Override
+ public void allocatePorts(int start, PortAllocBridge from) {
+ // NB: ignore "start"
+ from.allocatePort("rpc");
+ from.allocatePort("fs4");
+ from.allocatePort("health");
+ }
+
/**
* @return the number of ports needed
*/
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/search/SearchNode.java b/config-model/src/main/java/com/yahoo/vespa/model/search/SearchNode.java
index 21882ee640a..9fe016b95df 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/search/SearchNode.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/search/SearchNode.java
@@ -16,6 +16,7 @@ import com.yahoo.vespa.config.content.core.StorStatusConfig;
import com.yahoo.vespa.config.search.core.ProtonConfig;
import static com.yahoo.vespa.defaults.Defaults.getDefaults;
import com.yahoo.vespa.model.AbstractService;
+import com.yahoo.vespa.model.PortAllocBridge;
import com.yahoo.vespa.model.admin.monitoring.Monitoring;
import com.yahoo.vespa.model.application.validation.RestartConfigs;
import com.yahoo.vespa.model.builder.xml.dom.VespaDomBuilder;
@@ -158,6 +159,16 @@ public class SearchNode extends AbstractService implements
return nodeSpec;
}
+ @Override
+ public void allocatePorts(int start, PortAllocBridge from) {
+ // NB: ignore "start"
+ from.allocatePort("rpc");
+ from.allocatePort("fs4");
+ from.allocatePort("future/4");
+ from.allocatePort("unused/3");
+ from.allocatePort("health");
+ }
+
/**
* Returns the number of ports needed by this service.
*
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/search/TransactionLogServer.java b/config-model/src/main/java/com/yahoo/vespa/model/search/TransactionLogServer.java
index 4f854800c05..7f3391865ed 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/search/TransactionLogServer.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/search/TransactionLogServer.java
@@ -5,6 +5,7 @@ import com.yahoo.config.model.deploy.DeployState;
import com.yahoo.searchlib.TranslogserverConfig;
import com.yahoo.config.model.producer.AbstractConfigProducer;
import com.yahoo.vespa.model.AbstractService;
+import com.yahoo.vespa.model.PortAllocBridge;
import com.yahoo.vespa.model.builder.xml.dom.VespaDomBuilder;
import org.w3c.dom.Element;
@@ -43,6 +44,12 @@ public class TransactionLogServer extends AbstractService {
return new String[]{"tls"};
}
+ @Override
+ public void allocatePorts(int start, PortAllocBridge from) {
+ // NB: ignore "start"
+ from.allocatePort("tls");
+ }
+
/**
* Returns the port used by the TLS.
*
diff --git a/config-model/src/test/java/com/yahoo/vespa/model/HostPortsTest.java b/config-model/src/test/java/com/yahoo/vespa/model/HostPortsTest.java
index 1ded447993c..0c737bce2f3 100644
--- a/config-model/src/test/java/com/yahoo/vespa/model/HostPortsTest.java
+++ b/config-model/src/test/java/com/yahoo/vespa/model/HostPortsTest.java
@@ -116,6 +116,11 @@ public class HostPortsTest {
@Override public int getPortCount() { return 1; }
@Override public String[] getPortSuffixes() { return new String[]{"http"}; }
@Override public String getServiceType() { return "slobrok"; }
+
+ @Override
+ public void allocatePorts(int start, PortAllocBridge from) {
+ from.allocatePort("http");
+ }
}
private static int counter = 0;
@@ -145,5 +150,18 @@ public class HostPortsTest {
}
return suffixes;
}
+
+ @Override
+ public void allocatePorts(int start, PortAllocBridge from) {
+ for (int i = 0; i < portCount; i++) {
+ String suffix = "generic." + i;
+ if (start == 0) {
+ from.allocatePort(suffix);
+ } else {
+ from.requirePort(start++, suffix);
+ }
+ }
+ }
+
}
}
diff --git a/config-model/src/test/java/com/yahoo/vespa/model/HostResourceTest.java b/config-model/src/test/java/com/yahoo/vespa/model/HostResourceTest.java
index 02b77bdb375..f582417815b 100644
--- a/config-model/src/test/java/com/yahoo/vespa/model/HostResourceTest.java
+++ b/config-model/src/test/java/com/yahoo/vespa/model/HostResourceTest.java
@@ -129,5 +129,18 @@ public class HostResourceTest {
}
return suffixes;
}
+
+ @Override
+ public void allocatePorts(int start, PortAllocBridge from) {
+ for (int i = 0; i < portCount; i++) {
+ String suffix = "generic." + i;
+ if (start == 0) {
+ from.allocatePort(suffix);
+ } else {
+ from.requirePort(start++, suffix);
+ }
+ }
+ }
+
}
}
diff --git a/config-model/src/test/java/com/yahoo/vespa/model/application/validation/change/ConfigValueChangeValidatorTest.java b/config-model/src/test/java/com/yahoo/vespa/model/application/validation/change/ConfigValueChangeValidatorTest.java
index 9318130bb4f..be2ac91391c 100644
--- a/config-model/src/test/java/com/yahoo/vespa/model/application/validation/change/ConfigValueChangeValidatorTest.java
+++ b/config-model/src/test/java/com/yahoo/vespa/model/application/validation/change/ConfigValueChangeValidatorTest.java
@@ -12,6 +12,7 @@ import com.yahoo.config.model.test.MockRoot;
import com.yahoo.vespa.model.AbstractService;
import com.yahoo.vespa.model.Host;
import com.yahoo.vespa.model.HostResource;
+import com.yahoo.vespa.model.PortAllocBridge;
import com.yahoo.vespa.model.VespaModel;
import com.yahoo.vespa.model.application.validation.RestartConfigs;
import com.yahoo.config.application.api.ValidationOverrides;
@@ -249,6 +250,8 @@ public class ConfigValueChangeValidatorTest {
@Override
public String[] getPortSuffixes() { return null; }
+
+ @Override public void allocatePorts(int start, PortAllocBridge from) { }
}
private static class SimpleConfigProducer extends AbstractConfigProducer<AbstractConfigProducer<?>>
diff --git a/config-model/src/test/java/com/yahoo/vespa/model/application/validation/change/StartupCommandChangeValidatorTest.java b/config-model/src/test/java/com/yahoo/vespa/model/application/validation/change/StartupCommandChangeValidatorTest.java
index 2b04b026ee7..a42b04b8342 100644
--- a/config-model/src/test/java/com/yahoo/vespa/model/application/validation/change/StartupCommandChangeValidatorTest.java
+++ b/config-model/src/test/java/com/yahoo/vespa/model/application/validation/change/StartupCommandChangeValidatorTest.java
@@ -8,6 +8,7 @@ import com.yahoo.config.model.test.MockRoot;
import com.yahoo.vespa.model.AbstractService;
import com.yahoo.vespa.model.Host;
import com.yahoo.vespa.model.HostResource;
+import com.yahoo.vespa.model.PortAllocBridge;
import com.yahoo.vespa.model.application.validation.change.StartupCommandChangeValidator;
import org.junit.Test;
@@ -78,5 +79,7 @@ public class StartupCommandChangeValidatorTest {
@Override
public String[] getPortSuffixes() { return null; }
+
+ @Override public void allocatePorts(int start, PortAllocBridge from) { }
}
}
diff --git a/config-model/src/test/java/com/yahoo/vespa/model/test/ApiService.java b/config-model/src/test/java/com/yahoo/vespa/model/test/ApiService.java
index 6f06eb3e482..016c8b84347 100644
--- a/config-model/src/test/java/com/yahoo/vespa/model/test/ApiService.java
+++ b/config-model/src/test/java/com/yahoo/vespa/model/test/ApiService.java
@@ -3,6 +3,7 @@ package com.yahoo.vespa.model.test;
import com.yahoo.config.model.producer.AbstractConfigProducer;
import com.yahoo.vespa.model.AbstractService;
+import com.yahoo.vespa.model.PortAllocBridge;
/**
* This is a service for testing the plugin exchange mechanism in the
@@ -38,4 +39,6 @@ public class ApiService extends AbstractService implements com.yahoo.test.Standa
@Override
public String[] getPortSuffixes() { return null; }
+
+ @Override public void allocatePorts(int start, PortAllocBridge from) { }
}
diff --git a/config-model/src/test/java/com/yahoo/vespa/model/test/ModelAmendingTestCase.java b/config-model/src/test/java/com/yahoo/vespa/model/test/ModelAmendingTestCase.java
index a8e946bcea1..42ce91c3c51 100644
--- a/config-model/src/test/java/com/yahoo/vespa/model/test/ModelAmendingTestCase.java
+++ b/config-model/src/test/java/com/yahoo/vespa/model/test/ModelAmendingTestCase.java
@@ -13,6 +13,7 @@ import com.yahoo.config.model.builder.xml.ConfigModelId;
import com.yahoo.config.model.producer.AbstractConfigProducer;
import com.yahoo.vespa.model.AbstractService;
import com.yahoo.vespa.model.HostResource;
+import com.yahoo.vespa.model.PortAllocBridge;
import com.yahoo.vespa.model.VespaModel;
import com.yahoo.vespa.model.container.ContainerCluster;
import com.yahoo.vespa.model.container.ContainerModel;
@@ -129,6 +130,8 @@ public class ModelAmendingTestCase {
@Override
public String[] getPortSuffixes() { return null; }
+
+ @Override public void allocatePorts(int start, PortAllocBridge from) { }
}
public static class AdminModelAmender extends ConfigModel {
diff --git a/config-model/src/test/java/com/yahoo/vespa/model/test/ParentService.java b/config-model/src/test/java/com/yahoo/vespa/model/test/ParentService.java
index b7887262ed5..3c3c11a7773 100644
--- a/config-model/src/test/java/com/yahoo/vespa/model/test/ParentService.java
+++ b/config-model/src/test/java/com/yahoo/vespa/model/test/ParentService.java
@@ -4,6 +4,7 @@ package com.yahoo.vespa.model.test;
import com.yahoo.test.StandardConfig.Builder;
import com.yahoo.config.model.producer.AbstractConfigProducer;
import com.yahoo.vespa.model.AbstractService;
+import com.yahoo.vespa.model.PortAllocBridge;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
@@ -59,4 +60,6 @@ public class ParentService extends AbstractService implements com.yahoo.test.Sta
@Override
public String[] getPortSuffixes() { return null; }
+
+ @Override public void allocatePorts(int start, PortAllocBridge from) { }
}
diff --git a/config-model/src/test/java/com/yahoo/vespa/model/test/SimpleService.java b/config-model/src/test/java/com/yahoo/vespa/model/test/SimpleService.java
index 8a5bbe36a73..155fc4709ef 100644
--- a/config-model/src/test/java/com/yahoo/vespa/model/test/SimpleService.java
+++ b/config-model/src/test/java/com/yahoo/vespa/model/test/SimpleService.java
@@ -4,6 +4,7 @@ package com.yahoo.vespa.model.test;
import com.yahoo.test.StandardConfig.Builder;
import com.yahoo.config.model.producer.AbstractConfigProducer;
import com.yahoo.vespa.model.AbstractService;
+import com.yahoo.vespa.model.PortAllocBridge;
import java.util.HashMap;
@@ -43,6 +44,16 @@ public class SimpleService extends AbstractService implements com.yahoo.test.Sta
return new String[]{ "a", "b", "c", "d", "e" };
}
+ @Override
+ public void allocatePorts(int start, PortAllocBridge from) {
+ if (start == 0) start = getWantedPort();
+ from.wantPort(start++, "a");
+ from.wantPort(start++, "b");
+ from.wantPort(start++, "c");
+ from.wantPort(start++, "d");
+ from.wantPort(start++, "e");
+ }
+
// Make sure this service is listed in the sentinel config
public String getStartupCommand() { return "sleep 0"; }
diff --git a/config-model/src/test/java/com/yahoo/vespa/model/utils/FileSenderTest.java b/config-model/src/test/java/com/yahoo/vespa/model/utils/FileSenderTest.java
index 79646dacaa9..363baccf33f 100644
--- a/config-model/src/test/java/com/yahoo/vespa/model/utils/FileSenderTest.java
+++ b/config-model/src/test/java/com/yahoo/vespa/model/utils/FileSenderTest.java
@@ -9,6 +9,7 @@ import com.yahoo.config.model.producer.UserConfigRepo;
import com.yahoo.config.model.test.MockRoot;
import com.yahoo.vespa.config.*;
import com.yahoo.vespa.model.AbstractService;
+import com.yahoo.vespa.model.PortAllocBridge;
import com.yahoo.vespa.model.SimpleConfigProducer;
import org.junit.Before;
import org.junit.Test;
@@ -175,5 +176,7 @@ public class FileSenderTest {
@Override
public String[] getPortSuffixes() { return null; }
+
+ @Override public void allocatePorts(int start, PortAllocBridge from) { }
}
}