From 6ca46051cc701b80f35cb40952eb08ec5b14cca9 Mon Sep 17 00:00:00 2001 From: Jon Bratseth Date: Wed, 8 Nov 2017 16:15:17 +0100 Subject: In-place flavor downsize complete --- .../hosted/provision/provisioning/Activator.java | 6 +++--- .../hosted/provision/provisioning/NodeSpec.java | 1 - .../provisioning/AclProvisioningTest.java | 4 ++-- .../provisioning/DockerProvisioningTest.java | 2 +- .../provision/provisioning/ProvisioningTest.java | 25 +++++++++++++++++++++- .../provision/provisioning/ProvisioningTester.java | 3 ++- 6 files changed, 32 insertions(+), 9 deletions(-) (limited to 'node-repository') diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/Activator.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/Activator.java index bc50de719aa..5ffa99e0de1 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/Activator.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/Activator.java @@ -97,10 +97,10 @@ class Activator { List updated = new ArrayList<>(); for (Node node : nodes) { HostSpec hostSpec = getHost(node.hostname(), hosts); - node = hostSpec.membership().get().retired() - ? node.retire(clock.instant()) - : node.unretire(); + node = hostSpec.membership().get().retired() ? node.retire(clock.instant()) : node.unretire(); node = node.with(node.allocation().get().with(hostSpec.membership().get())); + if (hostSpec.flavor().isPresent()) // Docker nodes may change flavor + node = node.with(hostSpec.flavor().get()); updated.add(node); } return updated; diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeSpec.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeSpec.java index dba6c527038..2fbbf78e7e8 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeSpec.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeSpec.java @@ -79,7 +79,6 @@ public interface NodeSpec { @Override public boolean isCompatible(Flavor flavor) { if (flavor.satisfies(requestedFlavor)) return true; - return requestedFlavorCanBeAchievedByResizing(flavor); } diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/AclProvisioningTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/AclProvisioningTest.java index 134808b7114..c38d6f6bd40 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/AclProvisioningTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/AclProvisioningTest.java @@ -178,8 +178,8 @@ public class AclProvisioningTest { // Populate repo List dockerHostNodes = tester.makeReadyNodes(2, "default", NodeType.host); Node dockerHostNodeUnderTest = dockerHostNodes.get(0); - List dockerNodes = tester.makeReadyDockerNodes(5, "docker1", - dockerHostNodeUnderTest.hostname()); + List dockerNodes = tester.makeReadyDockerNodes(5, "dockerSmall", + dockerHostNodeUnderTest.hostname()); List acls = tester.nodeRepository().getNodeAcls(dockerHostNodeUnderTest, true); diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/DockerProvisioningTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/DockerProvisioningTest.java index d17aa8ef741..a6760ef37ce 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/DockerProvisioningTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/DockerProvisioningTest.java @@ -24,7 +24,7 @@ import static org.junit.Assert.assertEquals; */ public class DockerProvisioningTest { - private static final String dockerFlavor = "docker1"; + private static final String dockerFlavor = "dockerSmall"; @Test public void docker_application_deployment() { diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisioningTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisioningTest.java index dea65f432ec..afdce0d25cc 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisioningTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisioningTest.java @@ -231,6 +231,29 @@ public class ProvisioningTest { 0, tester.getNodes(application1, Node.State.active).retired().flavor("large").size()); } + @Test + public void application_deployment_with_inplace_downsize() { + ProvisioningTester tester = new ProvisioningTester(new Zone(Environment.prod, RegionName.from("us-east"))); + + ApplicationId application1 = tester.makeApplicationId(); + + tester.makeReadyNodes(14, "dockerLarge"); + + // deploy + SystemState state1 = prepare(application1, 2, 2, 4, 4, "dockerLarge", tester); + tester.activate(application1, state1.allHosts); + + // redeploy with smaller docker flavor - causes in-place flavor change + SystemState state2 = prepare(application1, 2, 2, 4, 4, "dockerSmall", tester); + tester.activate(application1, state2.allHosts); + + assertEquals(12, tester.getNodes(application1, Node.State.active).asList().size()); + for (Node node : tester.getNodes(application1, Node.State.active).asList()) + assertEquals("Node changed flavor in place", "dockerSmall", node.flavor().name()); + assertEquals("No nodes are retired", + 0, tester.getNodes(application1, Node.State.active).retired().size()); + } + @Test public void application_deployment_multiple_flavors_default_per_type() { ConfigserverConfig.Builder config = new ConfigserverConfig.Builder(); @@ -506,7 +529,7 @@ public class ProvisioningTest { fail("Expected exception"); } catch (IllegalArgumentException e) { - assertEquals("Unknown flavor 'nonexisting'. Flavors are [default, docker1, large, old-large1, old-large2, small, v-4-8-100]", e.getMessage()); + assertEquals("Unknown flavor 'nonexisting'. Flavors are [default, dockerLarge, dockerSmall, large, old-large1, old-large2, small, v-4-8-100]", e.getMessage()); } } 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 d9ce04513a5..3c932f492db 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 @@ -94,7 +94,8 @@ public class ProvisioningTester implements AutoCloseable { FlavorConfigBuilder b = new FlavorConfigBuilder(); b.addFlavor("default", 2., 4., 100, Flavor.Type.BARE_METAL).cost(3); b.addFlavor("small", 1., 2., 50, Flavor.Type.BARE_METAL).cost(2); - b.addFlavor("docker1", 1., 1., 10, Flavor.Type.DOCKER_CONTAINER).cost(1); + b.addFlavor("dockerSmall", 1., 1., 10, Flavor.Type.DOCKER_CONTAINER).cost(1); + b.addFlavor("dockerLarge", 2., 1., 20, Flavor.Type.DOCKER_CONTAINER).cost(3); b.addFlavor("v-4-8-100", 4., 8., 100, Flavor.Type.VIRTUAL_MACHINE).cost(4); b.addFlavor("old-large1", 2., 4., 100, Flavor.Type.BARE_METAL).cost(6); b.addFlavor("old-large2", 2., 5., 100, Flavor.Type.BARE_METAL).cost(14); -- cgit v1.2.3