aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorgjoranv <gv@verizonmedia.com>2020-01-07 15:24:42 +0100
committergjoranv <gv@verizonmedia.com>2020-01-07 15:24:42 +0100
commit26794b334be31f5bcbf00a7b84c88d1407365308 (patch)
treeed30a64d4dfac55c583482394959ee602898cfa2
parent9ebceeaf35519f3f1edf8ad70d86a6b754feb457 (diff)
Disallow the admin/monitoring element for hosted Vespa.
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/DomAdminBuilderBase.java5
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/admin/metricsproxy/MetricsProxyContainerClusterTest.java4
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/admin/metricsproxy/MonitoringElementTest.java54
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>"
+ );
+ }
+
+}