diff options
author | Valerij Fredriksen <freva@users.noreply.github.com> | 2020-10-19 17:16:19 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-10-19 17:16:19 +0200 |
commit | 98f3df8f0778a18a3995e4070828c28092c1edb3 (patch) | |
tree | ef4b83db72335a3d1262c9587de68cf7382b81ca | |
parent | 8e62622c4c67450f72a70d95aa6036a0758871a2 (diff) | |
parent | d721c00185c088b6844c288dbd9291d57d20fb12 (diff) |
Merge pull request #14952 from vespa-engine/freva/aws-alloc
Allow non-exclusive allocation in AWS
3 files changed, 7 insertions, 34 deletions
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 fa27b0cf9f7..4633b247ff1 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 @@ -2,13 +2,11 @@ package com.yahoo.vespa.hosted.provision.provisioning; import com.yahoo.config.provision.ApplicationId; -import com.yahoo.config.provision.ApplicationName; import com.yahoo.config.provision.ClusterMembership; import com.yahoo.config.provision.ClusterSpec; import com.yahoo.config.provision.Flavor; import com.yahoo.config.provision.NodeResources; import com.yahoo.config.provision.SystemName; -import com.yahoo.config.provision.TenantName; import com.yahoo.lang.MutableInteger; import com.yahoo.vespa.hosted.provision.Node; import com.yahoo.vespa.hosted.provision.NodeList; @@ -130,7 +128,7 @@ class NodeAllocation { ++rejectedDueToClashingParentHost; continue; } - if ( ! exclusiveTo(application.tenant(), application.application(), candidate.parentHostname())) { + if ( ! exclusiveTo(application, candidate.parentHostname())) { ++rejectedDueToExclusivity; continue; } @@ -187,12 +185,12 @@ class NodeAllocation { * If a parent host is given, and it hosts another application which requires exclusive access * to the physical host, then we cannot host this application on it. */ - private boolean exclusiveTo(TenantName tenant, ApplicationName application, Optional<String> parentHostname) { + private boolean exclusiveTo(ApplicationId applicationId, Optional<String> parentHostname) { if (parentHostname.isEmpty()) return true; for (Node nodeOnHost : allNodes.childrenOf(parentHostname.get())) { if (nodeOnHost.allocation().isEmpty()) continue; if ( nodeOnHost.allocation().get().membership().cluster().isExclusive() && - ! allocatedTo(tenant, application, nodeOnHost)) + ! allocatedTo(applicationId, nodeOnHost)) return false; } return true; @@ -204,15 +202,14 @@ class NodeAllocation { for (Node nodeOnHost : allNodes.childrenOf(parentHostname.get())) { if (nodeOnHost.allocation().isEmpty()) continue; - if ( ! allocatedTo(application.tenant(), application.application(), nodeOnHost)) return false; + if ( ! allocatedTo(application, nodeOnHost)) return false; } return true; } - private boolean allocatedTo(TenantName tenant, ApplicationName application, Node node) { + private boolean allocatedTo(ApplicationId applicationId, Node node) { if (node.allocation().isEmpty()) return false; - ApplicationId owner = node.allocation().get().owner(); - return owner.tenant().equals(tenant) && owner.application().equals(application); + return node.allocation().get().owner().equals(applicationId); } /** 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 5c54336acf6..3aa6253979d 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 @@ -134,18 +134,7 @@ public class NodePrioritizer { .filter(node -> node.type() != NodeType.host || nodeRepository.canAllocateTenantNodeTo(node)) .filter(node -> node.reservedTo().isEmpty() || node.reservedTo().get().equals(application.tenant())) .collect(Collectors.toList()); - if (allocateFully) { - Set<String> hostsOfThisTenant = candidates.stream() - .filter(node -> node.type() == NodeType.tenant) - .filter(node -> node.allocation() - .map(a -> a.owner().tenant().equals(this.application.tenant())) - .orElse(false)) - .flatMap(node -> node.parentHostname().stream()) - .collect(Collectors.toSet()); - candidates = candidates.stream() - .filter(node -> hostsOfThisTenant.contains(node.hostname())) - .collect(Collectors.toList()); - } + for (Node host : candidates) { if ( spareHosts.contains(host) && !allocateForReplacement) continue; if ( ! capacity.hasCapacity(host, requestedNodes.resources().get())) continue; diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/DynamicDockerProvisionTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/DynamicDockerProvisionTest.java index 84850358798..697b1674822 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/DynamicDockerProvisionTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/DynamicDockerProvisionTest.java @@ -79,19 +79,6 @@ public class DynamicDockerProvisionTest { } @Test - public void does_not_allocate_to_available_empty_hosts() { - tester.makeReadyNodes(3, "small", NodeType.host, 10); - tester.activateTenantHosts(); - - ApplicationId application = ProvisioningTester.makeApplicationId(); - NodeResources flavor = new NodeResources(1, 4, 10, 1); - - mockHostProvisioner(hostProvisioner, tester.nodeRepository().flavors().getFlavorOrThrow("small")); - tester.prepare(application, clusterSpec("myContent.t2.a2"), 2, 1, flavor); - verify(hostProvisioner).provisionHosts(List.of(100, 101), flavor, application, Version.emptyVersion); - } - - @Test public void allocates_to_hosts_already_hosting_nodes_by_this_tenant() { ApplicationId application = ProvisioningTester.makeApplicationId(); NodeResources flavor = new NodeResources(1, 4, 10, 1); |