summaryrefslogtreecommitdiffstats
path: root/node-repository/src/main
diff options
context:
space:
mode:
authorMartin Polden <mpolden@mpolden.no>2022-05-18 18:09:09 +0200
committerMartin Polden <mpolden@mpolden.no>2022-05-18 18:09:58 +0200
commit77e26dd3783b54c294eb55530227f911cf3ee56c (patch)
tree6ec77d091c923614a6c17b7fcf3e8ecd3ee4c37a /node-repository/src/main
parent550194c7b1f86616971b67bec5cdf662e4d98b9e (diff)
Never downsize if allocating exclusively
Diffstat (limited to 'node-repository/src/main')
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/CapacityPolicies.java14
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeRepositoryProvisioner.java4
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);