aboutsummaryrefslogtreecommitdiffstats
path: root/node-repository
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@yahoo-inc.com>2017-11-08 16:15:17 +0100
committerJon Bratseth <bratseth@yahoo-inc.com>2017-11-08 16:15:17 +0100
commit6ca46051cc701b80f35cb40952eb08ec5b14cca9 (patch)
treee5e8ef19b2930097b313bdb8d72028793bf4678d /node-repository
parentde07a398d52413413ff1688411707cd67de69164 (diff)
In-place flavor downsize complete
Diffstat (limited to 'node-repository')
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/Activator.java6
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeSpec.java1
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/AclProvisioningTest.java4
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/DockerProvisioningTest.java2
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisioningTest.java25
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisioningTester.java3
6 files changed, 32 insertions, 9 deletions
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<Node> 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<Node> dockerHostNodes = tester.makeReadyNodes(2, "default", NodeType.host);
Node dockerHostNodeUnderTest = dockerHostNodes.get(0);
- List<Node> dockerNodes = tester.makeReadyDockerNodes(5, "docker1",
- dockerHostNodeUnderTest.hostname());
+ List<Node> dockerNodes = tester.makeReadyDockerNodes(5, "dockerSmall",
+ dockerHostNodeUnderTest.hostname());
List<NodeAcl> 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
@@ -232,6 +232,29 @@ public class ProvisioningTest {
}
@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();
config.environment("prod");
@@ -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);