aboutsummaryrefslogtreecommitdiffstats
path: root/config-model
diff options
context:
space:
mode:
authorgjoranv <gv@verizonmedia.com>2019-05-07 13:34:18 +0200
committergjoranv <gv@verizonmedia.com>2019-05-07 13:34:18 +0200
commit7b31baa3a03c23874369a895b587c4617ade7aa0 (patch)
tree06f8bdddafd39b50b13510b2422ebf4ae0d5eea8 /config-model
parent58a6ce32c4cde7f3bfc3220248e8439d1834a9a5 (diff)
Require consecutive ports and add tests for port allocation.
Diffstat (limited to 'config-model')
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/admin/metricsproxy/MetricsProxyContainer.java23
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/admin/metricsproxy/MetricsProxyContainerTest.java33
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/admin/metricsproxy/MetricsProxyModelTester.java14
3 files changed, 63 insertions, 7 deletions
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 5aef2a2db1d..1a66fa72c93 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
@@ -59,6 +59,10 @@ public class MetricsProxyContainer extends Container implements
addMetricsProxyComponent(VespaServices.class);
}
+ int metricsRpcPortOffset() {
+ return numHttpServerPorts;
+ }
+
@Override
protected ContainerServiceType myServiceType() {
return METRICS_PROXY_CONTAINER;
@@ -66,7 +70,7 @@ public class MetricsProxyContainer extends Container implements
@Override
public int getWantedPort() {
- return 19092; // TODO: current metrics-proxy uses 19091 as rpc port, will now get 19093.
+ return 19092;
}
@Override
@@ -74,9 +78,15 @@ public class MetricsProxyContainer extends Container implements
return true;
}
+ // Must have predictable ports for both http and rpc.
+ @Override
+ public boolean requiresConsecutivePorts() {
+ return true;
+ }
+
@Override
public int getPortCount() {
- return super.getPortCount() + 1;
+ return metricsRpcPortOffset() + 1;
}
@Override
@@ -86,8 +96,15 @@ 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(0));
+ builder.port(getRelativePort(metricsRpcPortOffset()));
}
@Override
diff --git a/config-model/src/test/java/com/yahoo/vespa/model/admin/metricsproxy/MetricsProxyContainerTest.java b/config-model/src/test/java/com/yahoo/vespa/model/admin/metricsproxy/MetricsProxyContainerTest.java
index 28ea272d71a..ff486c6a437 100644
--- a/config-model/src/test/java/com/yahoo/vespa/model/admin/metricsproxy/MetricsProxyContainerTest.java
+++ b/config-model/src/test/java/com/yahoo/vespa/model/admin/metricsproxy/MetricsProxyContainerTest.java
@@ -1,6 +1,7 @@
package com.yahoo.vespa.model.admin.metricsproxy;
import ai.vespa.metricsproxy.metric.dimensions.NodeDimensionsConfig;
+import ai.vespa.metricsproxy.rpc.RpcConnectorConfig;
import ai.vespa.metricsproxy.service.VespaServicesConfig;
import com.yahoo.vespa.model.VespaModel;
import com.yahoo.vespa.model.admin.metricsproxy.MetricsProxyContainer.NodeDimensionNames;
@@ -8,14 +9,18 @@ import com.yahoo.vespa.model.test.VespaModelTester;
import org.junit.Test;
import static com.yahoo.config.model.api.container.ContainerServiceType.METRICS_PROXY_CONTAINER;
+import static com.yahoo.vespa.model.admin.metricsproxy.MetricsProxyModelTester.CONTAINER_CONFIG_ID;
import static com.yahoo.vespa.model.admin.metricsproxy.MetricsProxyModelTester.MY_FLAVOR;
import static com.yahoo.vespa.model.admin.metricsproxy.MetricsProxyModelTester.getHostedModel;
+import static com.yahoo.vespa.model.admin.metricsproxy.MetricsProxyModelTester.getModel;
import static com.yahoo.vespa.model.admin.metricsproxy.MetricsProxyModelTester.getNodeDimensionsConfig;
+import static com.yahoo.vespa.model.admin.metricsproxy.MetricsProxyModelTester.getRpcConnectorConfig;
import static com.yahoo.vespa.model.admin.metricsproxy.MetricsProxyModelTester.getVespaServicesConfig;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.CoreMatchers.notNullValue;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertThat;
+import static org.junit.Assert.assertTrue;
/**
* @author gjoranv
@@ -43,6 +48,34 @@ public class MetricsProxyContainerTest {
}
@Test
+ public void http_server_is_running_on_expected_port() {
+ VespaModel model = getModel(servicesWithContent());
+ MetricsProxyContainer container = (MetricsProxyContainer)model.id2producer().get(CONTAINER_CONFIG_ID);
+ assertEquals(19092, container.getSearchPort());
+ assertEquals(19092, container.getHealthPort());
+ assertEquals("http", container.getPortSuffixes()[0]);
+
+ assertTrue(container.getPortsMeta().getTagsAt(0).contains("http"));
+ assertTrue(container.getPortsMeta().getTagsAt(0).contains("state"));
+ }
+
+ @Test
+ public void rpc_server_is_running_on_expected_port() {
+ VespaModel model = getModel(servicesWithContent());
+
+ MetricsProxyContainer container = (MetricsProxyContainer)model.id2producer().get(CONTAINER_CONFIG_ID);
+
+ int rpcPort = container.metricsRpcPortOffset();
+ assertTrue(container.getPortsMeta().getTagsAt(rpcPort).contains("rpc"));
+ assertTrue(container.getPortsMeta().getTagsAt(rpcPort).contains("metrics"));
+
+ assertEquals("rpc/metrics", container.getPortSuffixes()[rpcPort]);
+
+ RpcConnectorConfig config = getRpcConnectorConfig(model);
+ assertEquals(19094, config.port());
+ }
+
+ @Test
public void hosted_application_propagates_node_dimensions() {
String services = servicesWithContent();
VespaModel hostedModel = getHostedModel(services);
diff --git a/config-model/src/test/java/com/yahoo/vespa/model/admin/metricsproxy/MetricsProxyModelTester.java b/config-model/src/test/java/com/yahoo/vespa/model/admin/metricsproxy/MetricsProxyModelTester.java
index 03d666c5c00..3e5c8a6ef0d 100644
--- a/config-model/src/test/java/com/yahoo/vespa/model/admin/metricsproxy/MetricsProxyModelTester.java
+++ b/config-model/src/test/java/com/yahoo/vespa/model/admin/metricsproxy/MetricsProxyModelTester.java
@@ -7,6 +7,7 @@ package com.yahoo.vespa.model.admin.metricsproxy;
import ai.vespa.metricsproxy.core.ConsumersConfig;
import ai.vespa.metricsproxy.metric.dimensions.ApplicationDimensionsConfig;
import ai.vespa.metricsproxy.metric.dimensions.NodeDimensionsConfig;
+import ai.vespa.metricsproxy.rpc.RpcConnectorConfig;
import ai.vespa.metricsproxy.service.VespaServicesConfig;
import com.yahoo.config.provision.Flavor;
import com.yahoo.config.provisioning.FlavorsConfig;
@@ -27,6 +28,9 @@ class MetricsProxyModelTester {
static final String MY_INSTANCE = "myinstance";
static final String MY_FLAVOR = "myflavor";
+ // Used for all configs that are produced by the container, not the cluster.
+ static final String CONTAINER_CONFIG_ID = "admin/metrics/0";
+
static VespaModel getModel(String servicesXml) {
var numberOfHosts = 1;
var tester = new VespaModelTester();
@@ -79,14 +83,16 @@ class MetricsProxyModelTester {
}
static NodeDimensionsConfig getNodeDimensionsConfig(VespaModel model) {
- String configId = "admin/metrics/0"; // This config is produced by the container, not the cluster
- return new NodeDimensionsConfig((NodeDimensionsConfig.Builder) model.getConfig(new NodeDimensionsConfig.Builder(), configId));
+ return new NodeDimensionsConfig((NodeDimensionsConfig.Builder) model.getConfig(new NodeDimensionsConfig.Builder(), CONTAINER_CONFIG_ID));
}
static VespaServicesConfig getVespaServicesConfig(String servicesXml) {
- String configId = "admin/metrics/0"; // This config is produced by the container, not the cluster
VespaModel model = getModel(servicesXml);
- return new VespaServicesConfig((VespaServicesConfig.Builder) model.getConfig(new VespaServicesConfig.Builder(), configId));
+ return new VespaServicesConfig((VespaServicesConfig.Builder) model.getConfig(new VespaServicesConfig.Builder(), CONTAINER_CONFIG_ID));
+ }
+
+ static RpcConnectorConfig getRpcConnectorConfig(VespaModel model) {
+ return new RpcConnectorConfig((RpcConnectorConfig.Builder) model.getConfig(new RpcConnectorConfig.Builder(), CONTAINER_CONFIG_ID));
}
private static Flavor flavorFromString(String name) {