aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@oath.com>2019-11-22 15:59:41 +0100
committerGitHub <noreply@github.com>2019-11-22 15:59:41 +0100
commit074766fdf49df963f21d8c61fc8027fb6a70568c (patch)
treeb62ad3fe3cb01559846dee5e3e962f9515e49964
parent5d60610b4f7618fea483f7646d685f0c0808aea0 (diff)
parent58fac544f225d2ee11e0d027c50e832197d34034 (diff)
Merge pull request #11387 from vespa-engine/bratseth/required-node-resources
Let "required" on nodes apply to node resources
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/CapacityPolicies.java18
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeRepositoryProvisioner.java2
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());