diff options
author | Jon Bratseth <bratseth@oath.com> | 2019-11-22 15:59:41 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-11-22 15:59:41 +0100 |
commit | 074766fdf49df963f21d8c61fc8027fb6a70568c (patch) | |
tree | b62ad3fe3cb01559846dee5e3e962f9515e49964 | |
parent | 5d60610b4f7618fea483f7646d685f0c0808aea0 (diff) | |
parent | 58fac544f225d2ee11e0d027c50e832197d34034 (diff) |
Merge pull request #11387 from vespa-engine/bratseth/required-node-resources
Let "required" on nodes apply to node resources
2 files changed, 10 insertions, 10 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 8ee9a92fa46..0adab137513 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 @@ -9,7 +9,6 @@ import com.yahoo.config.provision.Zone; import java.util.Arrays; import java.util.Locale; -import java.util.Optional; /** * Defines the policies for assigning cluster capacity in various environments @@ -27,23 +26,24 @@ public class CapacityPolicies { this.isUsingAdvertisedResources = zone.region().value().contains("aws-"); } - public int decideSize(Capacity requestedCapacity, ClusterSpec.Type clusterType) { - int requestedNodes = ensureRedundancy(requestedCapacity.nodeCount(), clusterType, requestedCapacity.canFail()); - if (requestedCapacity.isRequired()) return requestedNodes; + public int decideSize(Capacity capacity, ClusterSpec.Type clusterType) { + int requestedNodes = ensureRedundancy(capacity.nodeCount(), clusterType, capacity.canFail()); + if (capacity.isRequired()) return requestedNodes; switch(zone.environment()) { case dev : case test : return 1; - case perf : return Math.min(requestedCapacity.nodeCount(), 3); + case perf : return Math.min(capacity.nodeCount(), 3); case staging: return requestedNodes <= 1 ? requestedNodes : Math.max(2, requestedNodes / 10); case prod : return requestedNodes; default : throw new IllegalArgumentException("Unsupported environment " + zone.environment()); } } - public NodeResources decideNodeResources(Optional<NodeResources> requestedResources, ClusterSpec cluster) { - if (requestedResources.isPresent()) assertMinimumResources(requestedResources.get(), cluster); + public NodeResources decideNodeResources(Capacity capacity, ClusterSpec cluster) { + NodeResources resources = capacity.nodeResources().orElse(defaultNodeResources(cluster.type())); + ensureSufficientResources(resources, cluster); - NodeResources resources = requestedResources.orElse(defaultNodeResources(cluster.type())); + if (capacity.isRequired()) return resources; // Allow slow storage in zones which are not performance sensitive if (zone.system().isCd() || zone.environment() == Environment.dev || zone.environment() == Environment.test) @@ -57,7 +57,7 @@ public class CapacityPolicies { return resources; } - private void assertMinimumResources(NodeResources resources, ClusterSpec cluster) { + private void ensureSufficientResources(NodeResources resources, ClusterSpec cluster) { double minMemoryGb = cluster.type() == ClusterSpec.Type.admin ? 2 : 4; if (resources.memoryGb() >= minMemoryGb) return; 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 8d9ff2e4216..cb8f08a60fc 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 @@ -94,7 +94,7 @@ public class NodeRepositoryProvisioner implements Provisioner { if (zone.environment().isManuallyDeployed() && nodeCount < requestedCapacity.nodeCount()) logger.log(Level.INFO, "Requested " + requestedCapacity.nodeCount() + " nodes for " + cluster + ", downscaling to " + nodeCount + " nodes in " + zone.environment()); - resources = Optional.of(capacityPolicies.decideNodeResources(requestedCapacity.nodeResources(), cluster)); + resources = Optional.of(capacityPolicies.decideNodeResources(requestedCapacity, cluster)); boolean exclusive = capacityPolicies.decideExclusivity(cluster.isExclusive()); effectiveGroups = wantedGroups > nodeCount ? nodeCount : wantedGroups; // cannot have more groups than nodes requestedNodes = NodeSpec.from(nodeCount, resources.get(), exclusive, requestedCapacity.canFail()); |