diff options
author | Jon Bratseth <bratseth@verizonmedia.com> | 2020-01-22 17:02:14 +0100 |
---|---|---|
committer | Jon Bratseth <bratseth@verizonmedia.com> | 2020-01-22 17:02:14 +0100 |
commit | 995e6883f191574ba3f386c49271950fc5e5a50a (patch) | |
tree | 46ba68e7c2d62c73069aa50f0ae57eac5093a454 | |
parent | 0b9f810ca24dc09c4a1677a525abd878eed896ab (diff) |
Don't allocate on hosts reserved to someone else
3 files changed, 9 insertions, 6 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 9cc4b3f3bdb..4ecd10bdd86 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 @@ -84,7 +84,8 @@ public class GroupPreparer { prioritizer.addApplicationNodes(); prioritizer.addSurplusNodes(surplusActiveNodes); prioritizer.addReadyNodes(); - prioritizer.addNewDockerNodes(dynamicProvisioningEnabled && preprovisionCapacityFlag.value().isEmpty()); + prioritizer.addNewDockerNodes(dynamicProvisioningEnabled && preprovisionCapacityFlag.value().isEmpty(), + application); // Allocate from the prioritized list NodeAllocation allocation = new NodeAllocation(nodeList, application, cluster, requestedNodes, diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeAllocation.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeAllocation.java index ef6e4747f94..ebd6a01e61f 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeAllocation.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeAllocation.java @@ -140,9 +140,9 @@ class NodeAllocation { continue; } node.node = offered.allocate(application, - ClusterMembership.from(cluster, highestIndex.add(1)), - requestedNodes.resources().orElse(node.node.flavor().resources()), - clock.instant()); + ClusterMembership.from(cluster, highestIndex.add(1)), + requestedNodes.resources().orElse(node.node.flavor().resources()), + clock.instant()); accepted.add(acceptNode(node, false, false)); } } 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 a17d92117fb..2e241337949 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 @@ -122,12 +122,14 @@ public class NodePrioritizer { * * @param exclusively whether the ready docker nodes should only be added on hosts that * already have nodes allocated to this tenant + * @param application the application we are adding nodes for */ - void addNewDockerNodes(boolean exclusively) { + void addNewDockerNodes(boolean exclusively, ApplicationId application) { if ( ! isDocker) return; LockedNodeList candidates = allNodes - .filter(node -> node.type() != NodeType.host || ALLOCATABLE_HOST_STATES.contains(node.state())); + .filter(node -> node.type() != NodeType.host || ALLOCATABLE_HOST_STATES.contains(node.state())) + .filter(node -> node.reservedTo().isEmpty() || node.reservedTo().get().equals(application.tenant())); if (exclusively) { Set<String> candidateHostnames = candidates.asList().stream() |