diff options
author | gjoranv <gv@verizonmedia.com> | 2020-01-07 15:24:42 +0100 |
---|---|---|
committer | gjoranv <gv@verizonmedia.com> | 2020-01-07 15:24:42 +0100 |
commit | 26794b334be31f5bcbf00a7b84c88d1407365308 (patch) | |
tree | ed30a64d4dfac55c583482394959ee602898cfa2 | |
parent | 9ebceeaf35519f3f1edf8ad70d86a6b754feb457 (diff) |
Disallow the admin/monitoring element for hosted Vespa.
3 files changed, 59 insertions, 4 deletions
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/DomAdminBuilderBase.java b/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/DomAdminBuilderBase.java index 9de777a96ef..859a1c2eaea 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/DomAdminBuilderBase.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/DomAdminBuilderBase.java @@ -69,7 +69,7 @@ public abstract class DomAdminBuilderBase extends VespaDomBuilder.DomConfigProdu @Override protected Admin doBuild(DeployState deployState, AbstractConfigProducer parent, Element adminElement) { - Monitoring monitoring = getMonitoring(XML.getChild(adminElement,"monitoring")); + Monitoring monitoring = getMonitoring(XML.getChild(adminElement,"monitoring"), deployState.isHosted()); Metrics metrics = new MetricsBuilder(applicationType, predefinedMetricSets) .buildMetrics(XML.getChild(adminElement, "metrics")); FileDistributionConfigProducer fileDistributionConfigProducer = getFileDistributionConfigProducer(parent); @@ -88,8 +88,9 @@ public abstract class DomAdminBuilderBase extends VespaDomBuilder.DomConfigProdu protected abstract void doBuildAdmin(DeployState deployState, Admin admin, Element adminE); - private Monitoring getMonitoring(Element monitoringElement) { + private Monitoring getMonitoring(Element monitoringElement, boolean isHosted) { if (monitoringElement == null) return new DefaultMonitoring(DEFAULT_CLUSTER_NAME, DEFAULT_INTERVAL); + if (isHosted) throw new IllegalArgumentException("The 'monitoring' element cannot be used on hosted Vespa."); Integer minutes = getMonitoringInterval(monitoringElement); if (minutes == null) 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 index 6164b311da0..12cc7727153 100644 --- 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 @@ -58,7 +58,6 @@ import static java.util.stream.Collectors.toList; import static org.hamcrest.CoreMatchers.endsWith; import static org.hamcrest.CoreMatchers.hasItem; import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; @@ -314,7 +313,8 @@ public class MetricsProxyContainerClusterTest { } private static String servicesWithAdminOnly() { - return String.join("\n", "<services>", + return String.join("\n", + "<services>", " <admin version='4.0'>", " <adminserver hostalias='node1'/>", " </admin>", diff --git a/config-model/src/test/java/com/yahoo/vespa/model/admin/metricsproxy/MonitoringElementTest.java b/config-model/src/test/java/com/yahoo/vespa/model/admin/metricsproxy/MonitoringElementTest.java new file mode 100644 index 00000000000..c218b34afc5 --- /dev/null +++ b/config-model/src/test/java/com/yahoo/vespa/model/admin/metricsproxy/MonitoringElementTest.java @@ -0,0 +1,54 @@ +package com.yahoo.vespa.model.admin.metricsproxy; + +import ai.vespa.metricsproxy.core.MonitoringConfig; +import com.yahoo.vespa.model.VespaModel; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ExpectedException; + +import static com.yahoo.vespa.model.admin.metricsproxy.MetricsProxyModelTester.CLUSTER_CONFIG_ID; +import static com.yahoo.vespa.model.admin.metricsproxy.MetricsProxyModelTester.TestMode.hosted; +import static com.yahoo.vespa.model.admin.metricsproxy.MetricsProxyModelTester.TestMode.self_hosted; +import static com.yahoo.vespa.model.admin.metricsproxy.MetricsProxyModelTester.getModel; +import static org.junit.Assert.assertEquals; + +/** + * @author gjoranv + */ +public class MonitoringElementTest { + + @Rule + public ExpectedException thrown = ExpectedException.none(); + + @Test + public void monitoring_element_is_disallowed_for_hosted_vespa() { + String services = servicesWithMonitoringElement(); + thrown.expect(IllegalArgumentException.class); + thrown.expectMessage("The 'monitoring' element cannot be used"); + getModel(services, hosted); + } + + @Test + public void monitoring_element_is_allowed_for_self_hosted_vespa() { + String services = servicesWithMonitoringElement(); + VespaModel model = getModel(services, self_hosted); + + var builder = new MonitoringConfig.Builder(); + model.getConfig(builder, CLUSTER_CONFIG_ID); + MonitoringConfig config = builder.build(); + + assertEquals(5, config.intervalMinutes()); + assertEquals("my-system", config.systemName()); + } + + private String servicesWithMonitoringElement() { + return String.join("\n", + "<services>", + " <admin version='4.0'>", + " <monitoring interval='300' systemname='my-system' />", + " </admin>", + "</services>" + ); + } + +} |