summaryrefslogtreecommitdiffstats
path: root/node-repository/src
diff options
context:
space:
mode:
authorHÃ¥kon Hallingstad <hakon@verizonmedia.com>2020-02-18 23:54:41 +0100
committerGitHub <noreply@github.com>2020-02-18 23:54:41 +0100
commitd6402b3f61e2d3be6b1493810c2d88c332276cee (patch)
tree1fa0390a3b53428a46cd40c0a9bac603dbe9beea /node-repository/src
parent07466b9a8a8d4b6d61b193893a1ef13bed1f47c0 (diff)
parentd3300578d21fb4481d946fd8964470a828505484 (diff)
Merge pull request #12253 from vespa-engine/freva/allocate-fully
Allow dynamic provisioning when preprovisioned capacity is not enough
Diffstat (limited to 'node-repository/src')
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/GroupPreparer.java5
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodePrioritizer.java11
2 files changed, 9 insertions, 7 deletions
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/GroupPreparer.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/GroupPreparer.java
index 3cb6f848f7b..5753bbb3c5a 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/GroupPreparer.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/GroupPreparer.java
@@ -62,7 +62,8 @@ public class GroupPreparer {
List<Node> surplusActiveNodes, MutableInteger highestIndex, int spareCount, int wantedGroups) {
boolean dynamicProvisioningEnabled = hostProvisioner.isPresent() && dynamicProvisioningEnabledFlag
.with(FetchVector.Dimension.APPLICATION_ID, application.serializedForm())
- .value() && preprovisionCapacityFlag.value().isEmpty();
+ .value();
+ boolean allocateFully = dynamicProvisioningEnabled && preprovisionCapacityFlag.value().isEmpty();
try (Mutex lock = nodeRepository.lock(application)) {
@@ -73,7 +74,7 @@ public class GroupPreparer {
LockedNodeList nodeList = nodeRepository.list(allocationLock);
NodePrioritizer prioritizer = new NodePrioritizer(nodeList, application, cluster, requestedNodes,
spareCount, wantedGroups, nodeRepository.nameResolver(),
- hostResourcesCalculator, dynamicProvisioningEnabled);
+ hostResourcesCalculator, allocateFully);
prioritizer.addApplicationNodes();
prioritizer.addSurplusNodes(surplusActiveNodes);
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodePrioritizer.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodePrioritizer.java
index a0e9141f753..1ef23209369 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodePrioritizer.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodePrioritizer.java
@@ -46,13 +46,14 @@ public class NodePrioritizer {
private final boolean isDocker;
private final boolean isAllocatingForReplacement;
private final boolean isTopologyChange;
- private final boolean dynamicProvisioningEnabled;
+ /** If set, a host can only have nodes by single tenant and does not allow in-place resizing. */
+ private final boolean allocateFully;
private final int currentClusterSize;
private final Set<Node> spareHosts;
NodePrioritizer(LockedNodeList allNodes, ApplicationId application, ClusterSpec clusterSpec, NodeSpec nodeSpec,
int spares, int wantedGroups, NameResolver nameResolver, HostResourcesCalculator hostResourcesCalculator,
- boolean dynamicProvisioningEnabled) {
+ boolean allocateFully) {
this.allNodes = allNodes;
this.capacity = new DockerHostCapacity(allNodes, hostResourcesCalculator);
this.requestedNodes = nodeSpec;
@@ -60,7 +61,7 @@ public class NodePrioritizer {
this.application = application;
this.nameResolver = nameResolver;
this.spareHosts = findSpareHosts(allNodes, capacity, spares);
- this.dynamicProvisioningEnabled = dynamicProvisioningEnabled;
+ this.allocateFully = allocateFully;
NodeList nodesInCluster = allNodes.owner(application).type(clusterSpec.type()).cluster(clusterSpec.id());
NodeList nonRetiredNodesInCluster = nodesInCluster.not().retired();
@@ -125,7 +126,7 @@ public class NodePrioritizer {
.filter(node -> node.type() != NodeType.host || ALLOCATABLE_HOST_STATES.contains(node.state()))
.filter(node -> node.reservedTo().isEmpty() || node.reservedTo().get().equals(application.tenant()));
- if (dynamicProvisioningEnabled) {
+ if (allocateFully) {
Set<String> candidateHostnames = candidates.asList().stream()
.filter(node -> node.type() == NodeType.tenant)
.filter(node -> node.allocation()
@@ -213,7 +214,7 @@ public class NodePrioritizer {
builder.parent(parent).freeParentCapacity(parentCapacity);
if (!isNewNode)
- builder.resizable(!dynamicProvisioningEnabled && requestedNodes.canResize(
+ builder.resizable(!allocateFully && requestedNodes.canResize(
node.flavor().resources(), parentCapacity, isTopologyChange, currentClusterSize));
if (spareHosts.contains(parent))