summaryrefslogtreecommitdiffstats
path: root/config-model
diff options
context:
space:
mode:
authorgjoranv <gjoranv@gmail.com>2019-03-26 10:44:25 +0100
committerGitHub <noreply@github.com>2019-03-26 10:44:25 +0100
commit516af392068b14eaf80624eb32d236767e2311e3 (patch)
treefcc7c0a8ee81e1f119b978906a430012e48d837b /config-model
parent9783334f035caa4bdf7fcb26819bef8632f6deb8 (diff)
parent3eb71a39b9d6f38fafad02af822e0e2ab6772d85 (diff)
Merge pull request #8876 from vespa-engine/gjoranv/metrics-proxy-container
Gjoranv/metrics proxy container
Diffstat (limited to 'config-model')
-rw-r--r--config-model/src/main/java/com/yahoo/config/model/ConfigModelRepo.java1
-rw-r--r--config-model/src/main/java/com/yahoo/config/model/deploy/TestProperties.java8
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/admin/Admin.java25
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/admin/LogserverContainerCluster.java4
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/admin/metricsproxy/MetricsProxyContainer.java48
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/admin/metricsproxy/MetricsProxyContainerCluster.java23
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/DomAdminV4Builder.java2
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/container/Container.java4
-rwxr-xr-xconfig-model/src/main/java/com/yahoo/vespa/model/container/ContainerCluster.java6
-rw-r--r--config-model/src/test/java/com/yahoo/config/model/deploy/SystemModelTestCase.java2
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/admin/AdminTestCase.java7
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/admin/DedicatedAdminV4Test.java23
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/admin/metricsproxy/MetricsProxyContainerClusterTest.java45
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/application/validation/change/ConfigValueChangeValidatorTest.java1
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/builder/xml/dom/ContentBuilderTest.java10
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/test/VespaModelTester.java8
16 files changed, 187 insertions, 30 deletions
diff --git a/config-model/src/main/java/com/yahoo/config/model/ConfigModelRepo.java b/config-model/src/main/java/com/yahoo/config/model/ConfigModelRepo.java
index 93ff88f182b..4e9eb3bdb2e 100644
--- a/config-model/src/main/java/com/yahoo/config/model/ConfigModelRepo.java
+++ b/config-model/src/main/java/com/yahoo/config/model/ConfigModelRepo.java
@@ -107,7 +107,6 @@ public class ConfigModelRepo implements ConfigModelRepoAdder, Serializable, Iter
* @param root The Root to set as parent for all plugins
* @param servicesRoot XML root node of the services file
*/
- @SuppressWarnings("deprecation")
private void readConfigModels(ApplicationConfigProducerRoot root,
Element servicesRoot,
DeployState deployState,
diff --git a/config-model/src/main/java/com/yahoo/config/model/deploy/TestProperties.java b/config-model/src/main/java/com/yahoo/config/model/deploy/TestProperties.java
index c33eb9c6704..89433cdf7c0 100644
--- a/config-model/src/main/java/com/yahoo/config/model/deploy/TestProperties.java
+++ b/config-model/src/main/java/com/yahoo/config/model/deploy/TestProperties.java
@@ -37,6 +37,8 @@ public class TestProperties implements ModelContext.Properties {
private boolean useFdispatchByDefault = true;
private boolean useAdaptiveDispatch = false;
private boolean useSeparateServiceTypeForLogserverContainer = false;
+ private boolean enableMetricsProxyContainer = false;
+
@Override public boolean multitenant() { return multitenant; }
@Override public ApplicationId applicationId() { return applicationId; }
@@ -53,6 +55,7 @@ public class TestProperties implements ModelContext.Properties {
@Override public boolean useDedicatedNodeForLogserver() { return useDedicatedNodeForLogserver; }
@Override public boolean useFdispatchByDefault() { return useFdispatchByDefault; }
@Override public boolean useSeparateServiceTypeForLogserverContainer() { return useSeparateServiceTypeForLogserverContainer; }
+ @Override public boolean enableMetricsProxyContainer() { return enableMetricsProxyContainer; }
public TestProperties setApplicationId(ApplicationId applicationId) {
this.applicationId = applicationId;
@@ -89,6 +92,11 @@ public class TestProperties implements ModelContext.Properties {
return this;
}
+ public TestProperties setEnableMetricsProxyContainer(boolean enableMetricsProxyContainer) {
+ this.enableMetricsProxyContainer = enableMetricsProxyContainer;
+ return this;
+ }
+
public static class Spec implements ConfigServerSpec {
private final String hostName;
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/admin/Admin.java b/config-model/src/main/java/com/yahoo/vespa/model/admin/Admin.java
index fe3e5960446..8a98730c9c6 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/admin/Admin.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/admin/Admin.java
@@ -10,6 +10,7 @@ import com.yahoo.config.model.api.ConfigServerSpec;
import com.yahoo.config.model.deploy.DeployState;
import com.yahoo.config.model.producer.AbstractConfigProducer;
import com.yahoo.config.provision.ApplicationId;
+import com.yahoo.config.provision.SystemName;
import com.yahoo.config.provision.Zone;
import com.yahoo.vespa.model.AbstractService;
import com.yahoo.vespa.model.ConfigProxy;
@@ -17,6 +18,8 @@ import com.yahoo.vespa.model.ConfigSentinel;
import com.yahoo.vespa.model.HostResource;
import com.yahoo.vespa.model.Logd;
import com.yahoo.vespa.model.admin.clustercontroller.ClusterControllerContainerCluster;
+import com.yahoo.vespa.model.admin.metricsproxy.MetricsProxyContainer;
+import com.yahoo.vespa.model.admin.metricsproxy.MetricsProxyContainerCluster;
import com.yahoo.vespa.model.admin.monitoring.MetricsConsumer;
import com.yahoo.vespa.model.admin.monitoring.Monitoring;
import com.yahoo.vespa.model.admin.monitoring.builder.Metrics;
@@ -67,11 +70,12 @@ public class Admin extends AbstractConfigProducer implements Serializable {
*/
private ClusterControllerContainerCluster clusterControllers;
- /**
- * Cluster for container that might be running on logserver hosts
- */
+ // Cluster of logserver containers. If enabled, exactly one container is running on each logserver host.
private Optional<LogserverContainerCluster> logServerContainerCluster = Optional.empty();
+ // Cluster of metricsproxy containers. Exactly one container is set up on all hosts.
+ private MetricsProxyContainerCluster metricsProxyContainerCluster;
+
private ZooKeepersConfigProvider zooKeepersConfigProvider;
private FileDistributionConfigProducer fileDistribution;
private final boolean multitenant;
@@ -191,12 +195,27 @@ public class Admin extends AbstractConfigProducer implements Serializable {
public void addPerHostServices(List<HostResource> hosts, DeployState deployState) {
if (slobroks.isEmpty()) // TODO: Move to caller
slobroks.addAll(createDefaultSlobrokSetup(deployState.getDeployLogger()));
+
+ if (deployState.getProperties().enableMetricsProxyContainer())
+ addMetricsProxyCluster(hosts, deployState);
+
for (HostResource host : hosts) {
if (!host.getHost().runsConfigServer()) {
addCommonServices(host, deployState);
}
}
}
+
+ private void addMetricsProxyCluster(List<HostResource> hosts, DeployState deployState) {
+ var metricsProxyCluster = new MetricsProxyContainerCluster(this, "metrics", deployState);
+ int index = 0;
+ for (var host : hosts) {
+ var container = new MetricsProxyContainer(metricsProxyCluster, index++);
+ addAndInitializeService(deployState.getDeployLogger(), host, container);
+ metricsProxyCluster.addContainer(container);
+ }
+ }
+
private void addCommonServices(HostResource host, DeployState deployState) {
addConfigSentinel(deployState.getDeployLogger(), host, deployState.getProperties().applicationId(), deployState.zone());
addLogd(deployState.getDeployLogger(), host);
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 1e0c72c6298..f8f515cb609 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
@@ -11,8 +11,8 @@ import com.yahoo.vespa.model.container.component.Handler;
*/
public class LogserverContainerCluster extends ContainerCluster<LogserverContainer> {
- public LogserverContainerCluster(AbstractConfigProducer<?> parent, String subId, String name, DeployState deployState) {
- super(parent, subId, name, deployState);
+ public LogserverContainerCluster(AbstractConfigProducer<?> parent, String name, DeployState deployState) {
+ super(parent, name, name, deployState);
addDefaultHandlersWithVip();
addLogHandler();
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
new file mode 100644
index 00000000000..742196c91d1
--- /dev/null
+++ b/config-model/src/main/java/com/yahoo/vespa/model/admin/metricsproxy/MetricsProxyContainer.java
@@ -0,0 +1,48 @@
+package com.yahoo.vespa.model.admin.metricsproxy;
+
+import com.yahoo.config.model.api.container.ContainerServiceType;
+import com.yahoo.config.model.producer.AbstractConfigProducer;
+import com.yahoo.vespa.model.container.Container;
+
+import static com.yahoo.config.model.api.container.ContainerServiceType.METRICS_PROXY_CONTAINER;
+
+/**
+ * Container running a metrics proxy.
+ *
+ * @author gjoranv
+ */
+public class MetricsProxyContainer extends Container {
+
+ public MetricsProxyContainer(AbstractConfigProducer parent, int index) {
+ super(parent, "" + index, index);
+ setProp("clustertype", "admin");
+ setProp("index", String.valueOf(index));
+ }
+
+ @Override
+ protected ContainerServiceType myServiceType() {
+ return METRICS_PROXY_CONTAINER;
+ }
+
+ @Override
+ public int getWantedPort() {
+ return 19092; // TODO: current metrics-proxy uses 19091 as rpc port, will now get 19093.
+ }
+
+ @Override
+ public boolean requiresWantedPort() {
+ return true;
+ }
+
+ @Override
+ public int getPortCount() {
+ return super.getPortCount() + 1;
+ }
+
+ @Override
+ protected void tagServers() {
+ super.tagServers();
+ portsMeta.on(numHttpServerPorts).tag("rpc").tag("metrics");
+ }
+
+}
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
new file mode 100644
index 00000000000..437df42d531
--- /dev/null
+++ b/config-model/src/main/java/com/yahoo/vespa/model/admin/metricsproxy/MetricsProxyContainerCluster.java
@@ -0,0 +1,23 @@
+package com.yahoo.vespa.model.admin.metricsproxy;
+
+import com.yahoo.config.model.deploy.DeployState;
+import com.yahoo.config.model.producer.AbstractConfigProducer;
+import com.yahoo.vespa.model.container.ContainerCluster;
+
+/**
+ * Container cluster for metrics proxy containers.
+ *
+ * @author gjoranv
+ */
+public class MetricsProxyContainerCluster extends ContainerCluster<MetricsProxyContainer> {
+
+ public MetricsProxyContainerCluster(AbstractConfigProducer<?> parent, String name, DeployState deployState) {
+ super(parent, name, name, deployState);
+ setRpcServerEnabled(false);
+ addDefaultHandlersExceptStatus();
+ }
+
+ @Override
+ protected void doPrepare(DeployState deployState) { }
+
+}
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/DomAdminV4Builder.java b/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/DomAdminV4Builder.java
index 6b697a0f329..7d19c1d77c9 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/DomAdminV4Builder.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/DomAdminV4Builder.java
@@ -106,7 +106,7 @@ public class DomAdminV4Builder extends DomAdminBuilderBase {
// Creates a container cluster 'logs' with a container on the logserver host
// that has a handler for getting logs
private void createContainerOnLogserverHost(DeployState deployState, Admin admin, HostResource hostResource) {
- LogserverContainerCluster logServerCluster = new LogserverContainerCluster(admin, "logs", "logs", deployState);
+ LogserverContainerCluster logServerCluster = new LogserverContainerCluster(admin, "logs", deployState);
ContainerModel logserverClusterModel = new ContainerModel(context.withParent(admin).withId(logServerCluster.getSubId()));
logserverClusterModel.setCluster(logServerCluster);
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 5df50fa7ac7..f449feb5fc1 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
@@ -69,7 +69,7 @@ public abstract class Container extends AbstractService implements
private final JettyHttpServer defaultHttpServer = new JettyHttpServer(new ComponentId("DefaultHttpServer"));
- private final int numHttpServerPorts;
+ protected final int numHttpServerPorts;
private static final int numRpcServerPorts = 2;
protected Container(AbstractConfigProducer parent, String name, int index) {
@@ -155,7 +155,7 @@ public abstract class Container extends AbstractService implements
tagServers();
}
- private void tagServers() {
+ protected void tagServers() {
if (numHttpServerPorts > 0) {
portsMeta.on(0).tag("http").tag("query").tag("external").tag("state");
}
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 e61c1226968..a370e0dc38b 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
@@ -323,9 +323,7 @@ public abstract class ContainerCluster<CONTAINER extends Container>
}
public void addContainers(Collection<CONTAINER> containers) {
- for (var container : containers) {
- addContainer(container);
- }
+ containers.forEach(this::addContainer);
}
public void setProcessingChains(ProcessingChains processingChains, String... serverBindings) {
@@ -676,7 +674,7 @@ public abstract class ContainerCluster<CONTAINER extends Container>
boolean messageBusEnabled() { return messageBusEnabled; }
- public void setRpcServerEnabled(boolean rpcServerEnabled) { this.rpcServerEnabled = rpcServerEnabled; }
+ public final void setRpcServerEnabled(boolean rpcServerEnabled) { this.rpcServerEnabled = rpcServerEnabled; }
boolean rpcServerEnabled() { return rpcServerEnabled; }
diff --git a/config-model/src/test/java/com/yahoo/config/model/deploy/SystemModelTestCase.java b/config-model/src/test/java/com/yahoo/config/model/deploy/SystemModelTestCase.java
index 7a2c702a103..dc72fb8a42b 100644
--- a/config-model/src/test/java/com/yahoo/config/model/deploy/SystemModelTestCase.java
+++ b/config-model/src/test/java/com/yahoo/config/model/deploy/SystemModelTestCase.java
@@ -115,7 +115,7 @@ public class SystemModelTestCase {
assertEquals(host2, host3);
// all three host aliases are for the same host, so the number of services should be 3 + 8
- // (3 simpleservices and logd, configproxy, config sentinel, admin server config server, slobrok and log server)
+ // (3 simpleservices and logd, configproxy, config sentinel, admin server config server, slobrok, logserver and metricsproxy)
assertEquals(9, host1.getServices().size());
assertNotNull(host1.getService("simpleservice"));
diff --git a/config-model/src/test/java/com/yahoo/vespa/model/admin/AdminTestCase.java b/config-model/src/test/java/com/yahoo/vespa/model/admin/AdminTestCase.java
index 2c8887b0247..749ee2b9acc 100644
--- a/config-model/src/test/java/com/yahoo/vespa/model/admin/AdminTestCase.java
+++ b/config-model/src/test/java/com/yahoo/vespa/model/admin/AdminTestCase.java
@@ -28,6 +28,7 @@ import org.junit.Test;
import java.util.Set;
+import static com.yahoo.config.model.api.container.ContainerServiceType.METRICS_PROXY_CONTAINER;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
@@ -37,9 +38,6 @@ import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
-/**
- * @author gjoranv
- */
public class AdminTestCase {
private static final String TESTDIR = "src/test/cfg/admin/";
@@ -104,6 +102,7 @@ public class AdminTestCase {
assertThat(sentinelConfig.service(0).name(), is("logserver"));
assertThat(sentinelConfig.service(1).name(), is("slobrok"));
assertThat(sentinelConfig.service(2).name(), is("slobrok2"));
+ //assertThat(sentinelConfig.service(3).name(), is(METRICS_PROXY_CONTAINER.serviceName));
assertThat(sentinelConfig.service(3).name(), is("logd"));
}
@@ -138,6 +137,7 @@ public class AdminTestCase {
assertThat(sentinelConfig.service().size(), is(3));
assertThat(sentinelConfig.service(0).name(), is("logserver"));
assertThat(sentinelConfig.service(1).name(), is("slobrok"));
+ //assertThat(sentinelConfig.service(2).name(), is(METRICS_PROXY_CONTAINER.serviceName));
assertThat(sentinelConfig.service(2).name(), is("logd"));
assertThat(sentinelConfig.service(0).affinity().cpuSocket(), is(-1));
assertTrue(sentinelConfig.service(0).preShutdownCommand().isEmpty());
@@ -292,6 +292,7 @@ public class AdminTestCase {
assertThat(sentinelConfig.service().size(), is(3));
assertThat(sentinelConfig.service(0).name(), is("logserver"));
assertThat(sentinelConfig.service(1).name(), is("slobrok"));
+ //assertThat(sentinelConfig.service(2).name(), is(METRICS_PROXY_CONTAINER.serviceName));
assertThat(sentinelConfig.service(2).name(), is("logd"));
}
diff --git a/config-model/src/test/java/com/yahoo/vespa/model/admin/DedicatedAdminV4Test.java b/config-model/src/test/java/com/yahoo/vespa/model/admin/DedicatedAdminV4Test.java
index 9f68b8b32bd..f004cc8ff2a 100644
--- a/config-model/src/test/java/com/yahoo/vespa/model/admin/DedicatedAdminV4Test.java
+++ b/config-model/src/test/java/com/yahoo/vespa/model/admin/DedicatedAdminV4Test.java
@@ -5,6 +5,7 @@ import com.yahoo.cloud.config.LogforwarderConfig;
import com.yahoo.cloud.config.SentinelConfig;
import com.yahoo.config.application.api.ApplicationPackage;
import com.yahoo.config.model.NullConfigModelRegistry;
+import com.yahoo.config.model.api.container.ContainerServiceType;
import com.yahoo.config.model.deploy.DeployState;
import com.yahoo.config.model.deploy.TestProperties;
import com.yahoo.config.model.provision.Hosts;
@@ -26,7 +27,9 @@ import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
-import static com.yahoo.vespa.model.admin.monitoring.DefaultMetricsConsumer.VESPA_CONSUMER_ID;
+import static com.yahoo.config.model.api.container.ContainerServiceType.CONTAINER;
+import static com.yahoo.config.model.api.container.ContainerServiceType.METRICS_PROXY_CONTAINER;
+import static com.yahoo.config.model.api.container.ContainerServiceType.QRSERVER;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
@@ -74,7 +77,7 @@ public class DedicatedAdminV4Test {
assertHostContainsServices(model, "hosts/myhost0", "slobrok", "logd");
assertHostContainsServices(model, "hosts/myhost1", "slobrok", "logd");
// Note: A container is always added on logserver host
- assertHostContainsServices(model, "hosts/myhost2", "logserver", "logd", "container");
+ assertHostContainsServices(model, "hosts/myhost2", "logserver", "logd", CONTAINER.serviceName);
Monitoring monitoring = model.getAdmin().getMonitoring();
assertEquals("vespa.routing", monitoring.getClustername());
@@ -126,10 +129,14 @@ public class DedicatedAdminV4Test {
assertEquals(4, model.getHosts().size());
// 4 slobroks, 2 per cluster where possible
- assertHostContainsServices(model, "hosts/myhost0", "slobrok", "logd", "logserver", "qrserver");
- assertHostContainsServices(model, "hosts/myhost1", "slobrok", "logd", "qrserver");
- assertHostContainsServices(model, "hosts/myhost2", "slobrok", "logd", "qrserver");
- assertHostContainsServices(model, "hosts/myhost3", "slobrok", "logd", "qrserver");
+ assertHostContainsServices(model, "hosts/myhost0", "slobrok", "logd", "logserver",
+ QRSERVER.serviceName);
+ assertHostContainsServices(model, "hosts/myhost1", "slobrok", "logd",
+ QRSERVER.serviceName);
+ assertHostContainsServices(model, "hosts/myhost2", "slobrok", "logd",
+ QRSERVER.serviceName);
+ assertHostContainsServices(model, "hosts/myhost3", "slobrok", "logd",
+ QRSERVER.serviceName);
}
@Test
@@ -150,7 +157,7 @@ public class DedicatedAdminV4Test {
assertHostContainsServices(model, "hosts/myhost0", "logd", "logforwarder", "slobrok");
assertHostContainsServices(model, "hosts/myhost1", "logd", "logforwarder", "slobrok");
// Note: A container is always added on logserver host
- assertHostContainsServices(model, "hosts/myhost2", "logd", "logforwarder", "logserver", "container");
+ assertHostContainsServices(model, "hosts/myhost2", "logd", "logforwarder", "logserver", CONTAINER.serviceName);
Set<String> configIds = model.getConfigIds();
// 1 logforwarder on each host
@@ -193,7 +200,7 @@ public class DedicatedAdminV4Test {
.properties(new TestProperties().setHostedVespa(true)));
assertEquals(1, model.getHosts().size());
// Should create a container on the same node as logserver
- assertHostContainsServices(model, "hosts/myhost0", "slobrok", "logd", "logserver", "container");
+ assertHostContainsServices(model, "hosts/myhost0", "slobrok", "logd", "logserver", CONTAINER.serviceName);
}
private Set<String> serviceNames(VespaModel model, String hostname) {
diff --git a/config-model/src/test/java/com/yahoo/vespa/model/admin/metricsproxy/MetricsProxyContainerClusterTest.java b/config-model/src/test/java/com/yahoo/vespa/model/admin/metricsproxy/MetricsProxyContainerClusterTest.java
new file mode 100644
index 00000000000..efd13e82361
--- /dev/null
+++ b/config-model/src/test/java/com/yahoo/vespa/model/admin/metricsproxy/MetricsProxyContainerClusterTest.java
@@ -0,0 +1,45 @@
+package com.yahoo.vespa.model.admin.metricsproxy;
+
+import com.yahoo.vespa.model.VespaModel;
+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 org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.CoreMatchers.notNullValue;
+import static org.junit.Assert.assertThat;
+
+/**
+ * @author gjoranv
+ */
+public class MetricsProxyContainerClusterTest {
+
+ @Test
+ public void one_metrics_proxy_container_is_added_to_every_node() {
+ var numberOfHosts = 4;
+ var tester = new VespaModelTester();
+ tester.enableMetricsProxyContainer(true);
+ tester.addHosts(4);
+
+ VespaModel model = tester.createModel(servicesXml(), true);
+ assertThat(model.getRoot().getHostSystem().getHosts().size(), is(numberOfHosts));
+
+ for (var host : model.getHostSystem().getHosts()) {
+ assertThat(host.getService(METRICS_PROXY_CONTAINER.serviceName), notNullValue());
+ }
+
+ }
+
+ private String servicesXml() {
+ return String.join("\n", "<?xml version='1.0' encoding='utf-8' ?>",
+ "<services>",
+ " <container version='1.0' id='foo'>",
+ " <nodes count='2'/>",
+ " </container>",
+ " <content id='my-content' version='1.0'>",
+ " <documents />",
+ " <nodes count='2'/>",
+ " </content>",
+ "</services>");
+ }
+}
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 f13f53e8648..01f868d2ad7 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
@@ -61,6 +61,7 @@ public class ConfigValueChangeValidatorTest {
assertEquals(2, changes.size());
assertComponentsEquals(changes, "default/container.0", 0);
assertComponentsEquals(changes, "admin/cluster-controllers/0", 1);
+ //assertComponentsEquals(changes, "admin/metrics/0", 2);
}
@Test
diff --git a/config-model/src/test/java/com/yahoo/vespa/model/builder/xml/dom/ContentBuilderTest.java b/config-model/src/test/java/com/yahoo/vespa/model/builder/xml/dom/ContentBuilderTest.java
index 2c3e447533d..6a5e3bcb9d6 100644
--- a/config-model/src/test/java/com/yahoo/vespa/model/builder/xml/dom/ContentBuilderTest.java
+++ b/config-model/src/test/java/com/yahoo/vespa/model/builder/xml/dom/ContentBuilderTest.java
@@ -4,6 +4,7 @@ package com.yahoo.vespa.model.builder.xml.dom;
import com.yahoo.collections.CollectionUtil;
import com.yahoo.config.ConfigInstance;
import com.yahoo.config.application.api.ApplicationPackage;
+import com.yahoo.config.model.api.container.ContainerServiceType;
import com.yahoo.config.model.builder.xml.test.DomBuilderTest;
import com.yahoo.config.model.deploy.DeployState;
import com.yahoo.config.model.deploy.TestProperties;
@@ -34,6 +35,8 @@ import org.junit.rules.ExpectedException;
import java.util.Arrays;
import java.util.List;
+import static com.yahoo.config.model.api.container.ContainerServiceType.CLUSTERCONTROLLER_CONTAINER;
+import static com.yahoo.config.model.api.container.ContainerServiceType.METRICS_PROXY_CONTAINER;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.Matchers.containsString;
import static org.junit.Assert.assertEquals;
@@ -236,10 +239,9 @@ public class ContentBuilderTest extends DomBuilderTest {
assertEquals(1, cluster.getRoot().getHostSystem().getHosts().size());
HostResource h = cluster.getRoot().getHostSystem().getHost("mockhost");
String [] expectedServices = {
- "logd", "configproxy",
- "config-sentinel", "configserver", "logserver",
- "slobrok", "container-clustercontroller",
- "storagenode", "distributor","searchnode","transactionlogserver"
+ "logd", "configproxy", "config-sentinel", "configserver", "logserver",
+ "slobrok", "storagenode", "distributor","searchnode","transactionlogserver",
+ CLUSTERCONTROLLER_CONTAINER.serviceName
};
assertServices(h, expectedServices);
diff --git a/config-model/src/test/java/com/yahoo/vespa/model/test/VespaModelTester.java b/config-model/src/test/java/com/yahoo/vespa/model/test/VespaModelTester.java
index 0922ede86b6..00bc82bbe02 100644
--- a/config-model/src/test/java/com/yahoo/vespa/model/test/VespaModelTester.java
+++ b/config-model/src/test/java/com/yahoo/vespa/model/test/VespaModelTester.java
@@ -48,6 +48,7 @@ public class VespaModelTester {
private ApplicationId applicationId = ApplicationId.defaultId();
private boolean useDedicatedNodeForLogserver = false;
private boolean useSeparateServiceTypeForLogserverContainer = false;
+ private boolean enableMetricsProxyContainer = false;
public VespaModelTester() {
this(new NullConfigModelRegistry());
@@ -102,6 +103,10 @@ public class VespaModelTester {
this.useSeparateServiceTypeForLogserverContainer = useSeparateServiceTypeForLogserverContainer;
}
+ public void enableMetricsProxyContainer(boolean enableMetricsProxyContainer) {
+ this.enableMetricsProxyContainer = enableMetricsProxyContainer;
+ }
+
/** Creates a model which uses 0 as start index and fails on out of capacity */
public VespaModel createModel(String services, String ... retiredHostNames) {
return createModel(Zone.defaultZone(), services, true, retiredHostNames);
@@ -143,7 +148,8 @@ public class VespaModelTester {
.setHostedVespa(hosted)
.setApplicationId(applicationId)
.setUseDedicatedNodeForLogserver(useDedicatedNodeForLogserver)
- .setUseSeparateServiceTypeForLogserverContainer(useSeparateServiceTypeForLogserverContainer);
+ .setUseSeparateServiceTypeForLogserverContainer(useSeparateServiceTypeForLogserverContainer)
+ .setEnableMetricsProxyContainer(enableMetricsProxyContainer);
DeployState deployState = new DeployState.Builder()
.applicationPackage(appPkg)