diff options
author | Torbjørn Smørgrav <smorgrav@users.noreply.github.com> | 2017-08-22 13:37:53 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-08-22 13:37:53 +0200 |
commit | ec442090847f02930d4ad950aef1a9909fea17fc (patch) | |
tree | 44e8356817d3c3b430ced20a4a5391e24c3e051a /node-repository/src | |
parent | 4a511bd63e6a869f371ca06aa8995162d518fbf5 (diff) | |
parent | 3402d837ef9795347dbd9f33cb0dc2221c325750 (diff) |
Merge pull request #3181 from vespa-engine/hmusum/only-create-docker-nodes-on-active-docker-hosts
Only create Docker nodes for active Docker hosts
Diffstat (limited to 'node-repository/src')
3 files changed, 23 insertions, 3 deletions
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 3a590b9b0f4..960d0b9d729 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 @@ -185,7 +185,7 @@ public class NodePrioritizer { DockerHostCapacity capacity = new DockerHostCapacity(allNodes); for (Node node : allNodes) { - if (node.type() == NodeType.host) { + if (node.type() == NodeType.host && node.state() == Node.State.active) { boolean conflictingCluster = false; NodeList list = new NodeList(allNodes); NodeList childrenWithSameApp = list.childNodes(node).owner(appId); diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/DynamicDockerProvisioningTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/DynamicDockerProvisioningTest.java index 8254cd23030..f2b5624d3b8 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/DynamicDockerProvisioningTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/DynamicDockerProvisioningTest.java @@ -32,6 +32,7 @@ import java.util.List; import java.util.Map; import java.util.Optional; import java.util.Set; +import java.util.UUID; import java.util.stream.Collectors; import static org.hamcrest.CoreMatchers.is; @@ -46,7 +47,7 @@ import static org.junit.Assert.fail; public class DynamicDockerProvisioningTest { /** - * Test reloaction of nodes that violates headroom. + * Test relocation of nodes that violate headroom. * * Setup 4 docker hosts and allocate one container on each (from two different applications) * No spares - only headroom (4xd-2) @@ -321,6 +322,20 @@ public class DynamicDockerProvisioningTest { assertThat(initialSpareCapacity.size(), is(0)); } + @Test(expected = OutOfCapacityException.class) + public void allocation_should_fail_when_host_is_not_active() { + ProvisioningTester tester = new ProvisioningTester(new Zone(Environment.prod, RegionName.from("us-east")), flavorsConfig()); + enableDynamicAllocation(tester); + + tester.makeProvisionedNodes(3, UUID.randomUUID().toString(), "host-small", NodeType.host, 32); + deployZoneApp(tester); + + ApplicationId application = tester.makeApplicationId(); + Flavor flavor = tester.nodeRepository().getAvailableFlavors().getFlavorOrThrow("d-3"); + tester.prepare(application, ClusterSpec.request(ClusterSpec.Type.content, ClusterSpec.Id.from("myContent"), Version.fromString("6.100")), + 1, 1, flavor.canonicalName()); + } + private ApplicationId makeApplicationId(String tenant, String appName) { return ApplicationId.from(tenant, appName, "default"); } diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisioningTester.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisioningTester.java index bd50a9fc581..6bd158e8311 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisioningTester.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisioningTester.java @@ -229,7 +229,7 @@ public class ProvisioningTester implements AutoCloseable { return makeReadyNodes(n, UUID.randomUUID().toString(), flavor, type, additionalIps); } - public List<Node> makeReadyNodes(int n, String prefix, String flavor, NodeType type, int additionalIps) { + public List<Node> makeProvisionedNodes(int n, String prefix, String flavor, NodeType type, int additionalIps) { List<Node> nodes = new ArrayList<>(n); for (int i = 0; i < n; i++) { Set<String> ips = IntStream.range(additionalIps * i, additionalIps * (i+1)) @@ -245,6 +245,11 @@ public class ProvisioningTester implements AutoCloseable { type)); } nodes = nodeRepository.addNodes(nodes); + return nodes; + } + + public List<Node> makeReadyNodes(int n, String prefix, String flavor, NodeType type, int additionalIps) { + List<Node> nodes = makeProvisionedNodes(n, prefix, flavor, type, additionalIps); nodes = nodeRepository.setDirty(nodes); return nodeRepository.setReady(nodes); } |