aboutsummaryrefslogtreecommitdiffstats
path: root/config-model/src/main/java/com/yahoo
diff options
context:
space:
mode:
authorArne Juul <arnej@yahoo-inc.com>2019-08-05 07:48:45 +0000
committerArne Juul <arnej@yahoo-inc.com>2019-08-06 06:43:02 +0000
commit211cb30e6a61fa5aa0a43ad8e09239492e9cab18 (patch)
tree7bc2d8942d206b6daebc0ed47e5f9b8e3a6b4257 /config-model/src/main/java/com/yahoo
parent35283b454dfdaa9acbcea24274e01e65d128b7b6 (diff)
retry: refactor requestor api
* add and switch to API for explicitly allocating network ports * remove now-unused getPortSuffixes * remove now-unused requiresConsecutivePorts * remove now-unused reservePortPrepended
Diffstat (limited to 'config-model/src/main/java/com/yahoo')
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/AbstractService.java18
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/ConfigProxy.java11
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/ConfigSentinel.java14
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/HostPorts.java31
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/Logd.java12
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/NetworkPortRequestor.java17
-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.java22
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/admin/LogForwarder.java10
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/admin/Logserver.java9
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/admin/Slobrok.java22
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/admin/metricsproxy/MetricsProxyContainer.java29
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/container/Container.java60
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/content/ContentNode.java13
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/generic/service/Service.java5
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/search/Dispatch.java14
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/search/SearchNode.java16
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/search/TransactionLogServer.java6
18 files changed, 200 insertions, 157 deletions
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/AbstractService.java b/config-model/src/main/java/com/yahoo/vespa/model/AbstractService.java
index 06cdfa5e664..72c475fb091 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/AbstractService.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/AbstractService.java
@@ -196,16 +196,6 @@ public abstract class AbstractService extends AbstractConfigProducer<AbstractCon
}
/**
- * Override if the services does not require consecutive port numbers. I.e. if any ports
- * in addition to the baseport should be allocated from Vespa's default port range.
- *
- * @return true by default
- */
- public boolean requiresConsecutivePorts() {
- return true;
- }
-
- /**
* Gets the ports metainfo object. The service implementation
* must populate this object in the constructor.
*/
@@ -454,14 +444,6 @@ public abstract class AbstractService extends AbstractConfigProducer<AbstractCon
this.basePort = wantedPort;
}
- /** Temporary hack: reserve port with index 0
- * Must be done this way since the system test framework
- * currently uses the first port as container http port.
- */
- public void reservePortPrepended(int port, String suffix) {
- ports.add(0, hostResource.ports().requireNetworkPort(port, this, suffix));
- }
-
public void setHostResource(HostResource hostResource) {
this.hostResource = hostResource;
}
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..adb49fff9df 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.
*/
@@ -47,9 +53,4 @@ public class ConfigProxy extends AbstractService {
*/
public int getPortCount() { return 1; }
- @Override
- public String[] getPortSuffixes() {
- return new String[]{"rpc"};
- }
-
}
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..d15db6b4a55 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.
*/
@@ -48,11 +57,6 @@ public class ConfigSentinel extends AbstractService implements SentinelConfig.Pr
public int getPortCount() { return 2; }
@Override
- public String[] getPortSuffixes() {
- return new String[]{ "rpc", "http" };
- }
-
- @Override
public int getHealthPort() {return getRelativePort(1); }
/**
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/HostPorts.java b/config-model/src/main/java/com/yahoo/vespa/model/HostPorts.java
index 69b692e3ad9..5f55c78c1e4 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/HostPorts.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/HostPorts.java
@@ -137,34 +137,9 @@ public class HostPorts {
/** Allocate all ports for a service */
List<Integer> allocatePorts(NetworkPortRequestor service, int wantedPort) {
- List<Integer> ports = new ArrayList<>();
- final int count = service.getPortCount();
- if (count < 1)
- return ports;
-
- String[] suffixes = service.getPortSuffixes();
- if (suffixes.length != count) {
- throw new IllegalArgumentException("service "+service+" had "+suffixes.length+" port suffixes, but port count "+count+", mismatch");
- }
-
- if (wantedPort > 0) {
- boolean force = service.requiresWantedPort();
- if (service.requiresConsecutivePorts()) {
- for (int i = 0; i < count; i++) {
- ports.add(wantNetworkPort(wantedPort+i, service, suffixes[i], force));
- }
- } else {
- ports.add(wantNetworkPort(wantedPort, service, suffixes[0], force));
- for (int i = 1; i < count; i++) {
- ports.add(allocateNetworkPort(service, suffixes[i]));
- }
- }
- } else {
- for (int i = 0; i < count; i++) {
- ports.add(allocateNetworkPort(service, suffixes[i]));
- }
- }
- return ports;
+ PortAllocBridge allocator = new PortAllocBridge(this, service);
+ service.allocatePorts(wantedPort, allocator);
+ return allocator.result();
}
public void flushPortReservations() {
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..300f35b62d3 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.
*
@@ -32,11 +39,6 @@ public class Logd
*/
public int getPortCount() { return 1; }
- @Override
- public String[] getPortSuffixes() {
- return new String[]{"http"};
- }
-
/** Returns the desired base port for this service. */
public int getWantedPort() { return 19089; }
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..f8337219f54 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
@@ -41,18 +44,4 @@ public interface NetworkPortRequestor {
* @return true if this Service requires the wanted base port.
*/
default boolean requiresWantedPort() { return false; }
-
- /**
- * Override if the services does not require consecutive port numbers. I.e. if any ports
- * in addition to the baseport should be allocated from Vespa's default port range.
- *
- * @return true by default
- */
- default boolean requiresConsecutivePorts() { return true; }
-
- /**
- * Return names for each port requested.
- * The size of the returned array must be equal to getPortCount().
- */
- String[] getPortSuffixes();
}
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..7c31da19cf8 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.
*/
@@ -50,11 +67,6 @@ public class Configserver extends AbstractService {
*/
public int getPortCount() { return 2; }
- @Override
- public String[] getPortSuffixes() {
- return new String[]{ "rpc", "http" };
- }
-
private int getConfigServerRpcPort() {
return getRelativePort(0);
}
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..f93a3b39ad6 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.
*
@@ -57,11 +62,6 @@ public class LogForwarder extends AbstractService implements LogforwarderConfig.
*/
public int getPortCount() { return 0; }
- @Override
- public String[] getPortSuffixes() {
- return null;
- }
-
/**
* @return The command used to start LogForwarder
*/
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..cdc3fd4c4d4 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
@@ -68,8 +69,12 @@ public class Logserver extends AbstractService {
}
@Override
- public String[] getPortSuffixes() {
- return new String[]{ "rpc", "unused/1", "unused/2", "unused/3" };
+ public void allocatePorts(int start, PortAllocBridge from) {
+ int port = (start == 0) ? getWantedPort() : start;
+ from.requirePort(port++, "rpc");
+ from.requirePort(port++, "unused/1");
+ from.requirePort(port++, "unused/2");
+ from.requirePort(port++, "unused/3");
}
}
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..43f02f8b6d4 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());
@@ -32,14 +35,9 @@ public class Slobrok extends AbstractService implements StateserverConfig.Produc
}
@Override
- public boolean requiresConsecutivePorts() {
- return false;
- }
-
- @Override
public int getWantedPort() {
if (getId() == 1) {
- return 19099;
+ return BASEPORT;
} else {
return 0;
}
@@ -49,6 +47,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.
*/
@@ -56,11 +61,6 @@ public class Slobrok extends AbstractService implements StateserverConfig.Produc
return 2;
}
- @Override
- public String[] getPortSuffixes() {
- return new String[] { "rpc", "http" };
- }
-
/**
* @return The port on which this slobrok should respond
*/
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..01168c59442 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
@@ -78,8 +90,12 @@ public class MetricsProxyContainer extends Container implements
// Must have predictable ports for both http and rpc.
@Override
- public boolean requiresConsecutivePorts() {
- return true;
+ 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
@@ -94,13 +110,6 @@ public class MetricsProxyContainer extends Container implements
}
@Override
- public String[] getPortSuffixes() {
- var suffixes = super.getPortSuffixes();
- suffixes[metricsRpcPortOffset()] = "rpc/metrics";
- return suffixes;
- }
-
- @Override
public void getConfig(RpcConnectorConfig.Builder builder) {
builder.port(getRelativePort(metricsRpcPortOffset()));
}
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..3bc68e4a879 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;
@@ -157,8 +158,6 @@ public abstract class Container extends AbstractService implements
if (getHttp() == null) {
initDefaultJettyConnector();
- } else {
- reserveHttpPortsPrepended();
}
tagServers();
@@ -181,14 +180,6 @@ public abstract class Container extends AbstractService implements
}
}
- private void reserveHttpPortsPrepended() {
- if (getHttp() != null && getHttp().getHttpServer() != null) {
- for (ConnectorFactory connectorFactory : getHttp().getHttpServer().getConnectorFactories()) {
- reservePortPrepended(getPort(connectorFactory), "http/" + connectorFactory.getName());
- }
- }
- }
-
private int getPort(ConnectorFactory connectorFactory) {
return connectorFactory.getListenPort();
}
@@ -233,12 +224,8 @@ public abstract class Container extends AbstractService implements
return requireSpecificPorts && (getHttp() == null);
}
- public boolean requiresConsecutivePorts() {
- return false;
- }
-
/**
- * @return the number of ports needed by the Container except those reserved manually(reservePortPrepended)
+ * @return the number of ports needed by the Container
*/
public int getPortCount() {
// TODO Vespa 8: remove +2, only here for historical reasons
@@ -247,30 +234,39 @@ public abstract class Container extends AbstractService implements
}
@Override
- public String[] getPortSuffixes() {
- // TODO clean up this mess
- int n = getPortCount();
- String[] suffixes = new String[n];
- int off = 0;
- int httpPorts = (getHttp() != null) ? 0 : numHttpServerPorts;
- if (httpPorts > 0) {
- suffixes[off++] = "http";
- }
- for (int i = 1; i < httpPorts; i++) {
- suffixes[off++] = "http/" + i;
+ 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()) {
- suffixes[off++] = "messaging";
+ from.allocatePort("messaging");
+ ++off;
}
if (rpcServerEnabled()) {
- suffixes[off++] = "rpc/admin";
+ from.allocatePort("rpc/admin");
+ ++off;
}
- while (off < n) {
- suffixes[off] = "unused/" + off;
+ // TODO: remove this
+ if (getHttp() == null) {
+ from.allocatePort("unused/" + off);
++off;
+ from.allocatePort("unused/" + off);
}
- assert (off == n);
- return suffixes;
}
/**
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..9a8a57f12ea 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;
/**
@@ -56,8 +57,16 @@ public abstract class ContentNode extends AbstractService
public int getPortCount() { return 3; }
@Override
- public String[] getPortSuffixes() {
- return new String[] { "messaging", "rpc", "http" };
+ 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
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..325f511edf1 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
@@ -24,9 +25,7 @@ public class Service extends AbstractService {
}
@Override
- public String[] getPortSuffixes() {
- return null;
- }
+ public void allocatePorts(int start, PortAllocBridge from) { }
@Override
public String getStartupCommand() {
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..2e821a67cb2 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,14 +231,17 @@ 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
*/
public int getPortCount() { return 3; }
- @Override
- public String[] getPortSuffixes() {
- return new String[]{ "rpc", "fs4", "health" };
- }
-
}
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..c4acf8b5b0b 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.
*
@@ -168,11 +179,6 @@ public class SearchNode extends AbstractService implements
return 5;
}
- @Override
- public String[] getPortSuffixes() {
- return new String[] { "rpc", "fs4", "future/4", "unused/3", "health" };
- }
-
/**
* Returns the RPC port used by this searchnode.
*
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..2c457940f24 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;
@@ -39,8 +40,9 @@ public class TransactionLogServer extends AbstractService {
}
@Override
- public String[] getPortSuffixes() {
- return new String[]{"tls"};
+ public void allocatePorts(int start, PortAllocBridge from) {
+ // NB: ignore "start"
+ from.allocatePort("tls");
}
/**