diff options
author | gjoranv <gv@verizonmedia.com> | 2019-05-07 13:34:18 +0200 |
---|---|---|
committer | gjoranv <gv@verizonmedia.com> | 2019-05-07 13:34:18 +0200 |
commit | 7b31baa3a03c23874369a895b587c4617ade7aa0 (patch) | |
tree | 06f8bdddafd39b50b13510b2422ebf4ae0d5eea8 /config-model | |
parent | 58a6ce32c4cde7f3bfc3220248e8439d1834a9a5 (diff) |
Require consecutive ports and add tests for port allocation.
Diffstat (limited to 'config-model')
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) { |