summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHarald Musum <musum@yahooinc.com>2024-04-03 14:50:04 +0200
committerHarald Musum <musum@yahooinc.com>2024-04-03 14:50:04 +0200
commita0edaca0267efc849cbc033a6d89a5f369e7a82a (patch)
tree8087f8da82cb6f77e8b1fac7c9f8c4b3d6bdc0cd
parenta009cdd704f427282c3c9ed3b70a7caf9d536c7e (diff)
Throw if min node resources is less than 1
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/NodesSpecification.java16
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/builder/xml/dom/NodesSpecificationTest.java2
2 files changed, 12 insertions, 6 deletions
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/NodesSpecification.java b/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/NodesSpecification.java
index 93d65426b61..d877600db13 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/NodesSpecification.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/NodesSpecification.java
@@ -1,32 +1,31 @@
// Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.vespa.model.builder.xml.dom;
-import com.yahoo.config.provision.ClusterInfo;
-import com.yahoo.config.provision.IntRange;
import com.yahoo.collections.Pair;
import com.yahoo.component.Version;
import com.yahoo.config.application.api.DeployLogger;
-import com.yahoo.config.provision.ZoneEndpoint;
import com.yahoo.config.model.ConfigModelContext;
import com.yahoo.config.provision.Capacity;
import com.yahoo.config.provision.CloudAccount;
+import com.yahoo.config.provision.ClusterInfo;
import com.yahoo.config.provision.ClusterMembership;
import com.yahoo.config.provision.ClusterResources;
import com.yahoo.config.provision.ClusterSpec;
import com.yahoo.config.provision.DockerImage;
+import com.yahoo.config.provision.IntRange;
import com.yahoo.config.provision.NodeResources;
+import com.yahoo.config.provision.ZoneEndpoint;
import com.yahoo.text.XML;
import com.yahoo.vespa.model.HostResource;
import com.yahoo.vespa.model.HostSystem;
import com.yahoo.vespa.model.container.xml.ContainerModelBuilder;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
+
import java.util.List;
import java.util.Map;
import java.util.Optional;
-import java.util.function.Function;
import java.util.function.ToDoubleFunction;
-import java.util.logging.Level;
/**
* A common utility class to represent a requirement for nodes during model building.
@@ -77,8 +76,10 @@ public class NodesSpecification {
Optional<CloudAccount> cloudAccount,
boolean hasCountAttribute) {
if (max.smallerThan(min))
- throw new IllegalArgumentException("Min resources must be larger or equal to max resources, but " +
+ throw new IllegalArgumentException("Max resources must be larger or equal to min resources, but " +
max + " is smaller than " + min);
+ if (min.nodes() < 1)
+ throw new IllegalArgumentException("Min node count cannot be less than 1, but is " + min.nodes());
// Non-scaled resources must be equal
if ( ! min.nodeResources().justNonNumbers().equals(max.nodeResources().justNonNumbers()))
@@ -128,6 +129,9 @@ public class NodesSpecification {
var groups = rangeFrom(nodesElement, "groups");
var groupSize = rangeFrom(nodesElement, "group-size");
+ if (nodes.from().orElse(1) < 1)
+ throw new IllegalArgumentException("Min node resources cannot be less than 1, but is " + nodes.from().getAsInt());
+
// Find the tightest possible limits for groups to avoid falsely concluding we are autoscaling
// when only specifying group size
int defaultMinGroups = nodes.from().orElse(1) / groupSize.to().orElse(nodes.from().orElse(1));
diff --git a/config-model/src/test/java/com/yahoo/vespa/model/builder/xml/dom/NodesSpecificationTest.java b/config-model/src/test/java/com/yahoo/vespa/model/builder/xml/dom/NodesSpecificationTest.java
index a40d5f22939..344471cada0 100644
--- a/config-model/src/test/java/com/yahoo/vespa/model/builder/xml/dom/NodesSpecificationTest.java
+++ b/config-model/src/test/java/com/yahoo/vespa/model/builder/xml/dom/NodesSpecificationTest.java
@@ -91,6 +91,8 @@ public class NodesSpecificationTest {
() -> nodesSpecification("<nodes><resources memory='b' /></nodes>"));
assertThrows(IllegalArgumentException.class,
() -> nodesSpecification("<nodes><resources memory='Yb' /></nodes>"));
+ assertThrows(IllegalArgumentException.class,
+ () -> nodesSpecification("<nodes count='[0, 1]'></nodes>"));
}
@Test