diff options
author | Martin Polden <mpolden@mpolden.no> | 2022-05-18 18:09:09 +0200 |
---|---|---|
committer | Martin Polden <mpolden@mpolden.no> | 2022-05-18 18:09:58 +0200 |
commit | 77e26dd3783b54c294eb55530227f911cf3ee56c (patch) | |
tree | 6ec77d091c923614a6c17b7fcf3e8ecd3ee4c37a /node-repository/src/main | |
parent | 550194c7b1f86616971b67bec5cdf662e4d98b9e (diff) |
Never downsize if allocating exclusively
Diffstat (limited to 'node-repository/src/main')
2 files changed, 9 insertions, 9 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 00671e14768..4aeb6722ba9 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 @@ -40,15 +40,15 @@ public class CapacityPolicies { this.flagSource = nodeRepository.flagSource(); } - public Capacity applyOn(Capacity capacity, ApplicationId application) { - return capacity.withLimits(applyOn(capacity.minResources(), capacity, application), - applyOn(capacity.maxResources(), capacity, application)); + public Capacity applyOn(Capacity capacity, ApplicationId application, boolean exclusive) { + return capacity.withLimits(applyOn(capacity.minResources(), capacity, application, exclusive), + applyOn(capacity.maxResources(), capacity, application, exclusive)); } - private ClusterResources applyOn(ClusterResources resources, Capacity capacity, ApplicationId application) { + 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 - var nodeResources = decideNodeResources(resources.nodeResources(), capacity.isRequired()); + var nodeResources = decideNodeResources(resources.nodeResources(), capacity.isRequired(), exclusive); return new ClusterResources(nodes, groups, nodeResources); } @@ -65,8 +65,8 @@ public class CapacityPolicies { } } - private NodeResources decideNodeResources(NodeResources target, boolean required) { - if (required) return target; + 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 // Dev does not cap the cpu or network of containers since usage is spotty: Allocate just a small amount exclusively diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeRepositoryProvisioner.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeRepositoryProvisioner.java index 24743b47c8e..c7bb42ded2e 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeRepositoryProvisioner.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeRepositoryProvisioner.java @@ -97,9 +97,9 @@ public class NodeRepositoryProvisioner implements Provisioner { NodeResources resources; NodeSpec nodeSpec; if (requested.type() == NodeType.tenant) { - var actual = capacityPolicies.applyOn(requested, application); + boolean exclusive = capacityPolicies.decideExclusivity(requested, cluster.isExclusive()); + Capacity actual = capacityPolicies.applyOn(requested, application, exclusive); ClusterResources target = decideTargetResources(application, cluster, actual); - boolean exclusive = capacityPolicies.decideExclusivity(actual, cluster.isExclusive()); ensureRedundancy(target.nodes(), cluster, actual.canFail(), application); logIfDownscaled(requested.minResources().nodes(), actual.minResources().nodes(), cluster, logger); |