diff options
author | Jon Bratseth <bratseth@vespa.ai> | 2024-04-24 21:53:29 +0200 |
---|---|---|
committer | Jon Bratseth <bratseth@vespa.ai> | 2024-04-24 21:53:29 +0200 |
commit | 89f1747d8123e53f12cee51f70a2a1d519feedbc (patch) | |
tree | e58100efe48dcb41c8d606dc227c1bf5868bff58 /node-repository | |
parent | f148e789a1cbf1d2aa81b03090765ca9c3b4da94 (diff) |
Only adjust groups if we adjust nodes
Diffstat (limited to 'node-repository')
-rw-r--r-- | node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/CapacityPolicies.java | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/CapacityPolicies.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/CapacityPolicies.java index ec48e1d5f34..46dfb51a433 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/CapacityPolicies.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/CapacityPolicies.java @@ -49,15 +49,13 @@ public class CapacityPolicies { } private ClusterResources applyOn(ClusterResources resources, Capacity capacity, ApplicationId application, boolean exclusive) { - int nodes = decideSize(resources.nodes(), capacity.isRequired(), application.instance().isTester()); - int groups = Math.min(resources.groups(), nodes); // cannot have more groups than nodes - while (groups > 1 && nodes % groups != 0) - groups--; // Must be divisible by the number of groups + int nodes = decideCount(resources.nodes(), capacity.isRequired(), application.instance().isTester()); + int groups = decideGroups(resources.nodes(), resources.groups(), nodes); var nodeResources = decideNodeResources(resources.nodeResources(), capacity.isRequired(), exclusive); return new ClusterResources(nodes, groups, nodeResources); } - private int decideSize(int requested, boolean required, boolean isTester) { + private int decideCount(int requested, boolean required, boolean isTester) { if (isTester) return 1; if (required) return requested; @@ -69,6 +67,14 @@ public class CapacityPolicies { }; } + private int decideGroups(int requestedNodes, int requestedGroups, int decidedNodes) { + if (requestedNodes == decidedNodes) return requestedGroups; + int groups = Math.min(requestedGroups, decidedNodes); // cannot have more groups than nodes + while (groups > 1 && decidedNodes % groups != 0) + groups--; // Must be divisible by the number of groups + return groups; + } + private NodeResources decideNodeResources(NodeResources target, boolean required, boolean exclusive) { if (required || exclusive) return target; // Cannot downsize if resources are required, or exclusively allocated if (target.isUnspecified()) return target; // Cannot be modified |