aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorValerij Fredriksen <freva@users.noreply.github.com>2020-10-19 17:16:19 +0200
committerGitHub <noreply@github.com>2020-10-19 17:16:19 +0200
commit98f3df8f0778a18a3995e4070828c28092c1edb3 (patch)
treeef4b83db72335a3d1262c9587de68cf7382b81ca
parent8e62622c4c67450f72a70d95aa6036a0758871a2 (diff)
parentd721c00185c088b6844c288dbd9291d57d20fb12 (diff)
Merge pull request #14952 from vespa-engine/freva/aws-alloc
Allow non-exclusive allocation in AWS
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeAllocation.java15
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodePrioritizer.java13
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/DynamicDockerProvisionTest.java13
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);