diff options
author | Morten Tokle <morten.tokle@gmail.com> | 2017-02-17 10:37:46 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-02-17 10:37:46 +0100 |
commit | 1e128ce03e253e69e8bf1145e595fcddf88465a0 (patch) | |
tree | 05acda1349ee71adf76dc9fd919064167022d239 /node-repository | |
parent | 6be1754eaef156e766d8d5a99f118eb9a851c1ab (diff) | |
parent | 14a54842883a22f7981414cb0d29559d517a1a5f (diff) |
Merge pull request #1798 from yahoo/mpolden/never-offer-nodes-having-retired-flavor
Never offer nodes having retired flavor
Diffstat (limited to 'node-repository')
2 files changed, 32 insertions, 0 deletions
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/GroupPreparer.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/GroupPreparer.java index f9406b74fd0..275098ebae5 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/GroupPreparer.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/GroupPreparer.java @@ -238,6 +238,9 @@ class GroupPreparer { ++rejectedWithClashingParentHost; continue; } + if (offered.flavor().isRetired()) { + continue; + } Node alloc = offered.allocate(application, ClusterMembership.from(cluster, highestIndex.add(1)), clock.instant()); accepted.add(acceptNode(alloc, wantToRetireNode)); } 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 abaa7b17bd7..e0cf89d5ad3 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 @@ -572,6 +572,35 @@ public class ProvisioningTest { assertTrue("Nodes are retired by system", retired.asList().stream().allMatch(retiredBySystem)); } } + + @Test + public void application_deployment_does_not_use_unallocated_nodes_having_retired_flavor() { + String flavorToRetire = "default"; + String replacementFlavor = "new-default"; + + FlavorConfigBuilder b = new FlavorConfigBuilder(); + b.addFlavor(flavorToRetire, 1., 1., 10, Flavor.Type.BARE_METAL).cost(2).retired(true); + FlavorsConfig.Flavor.Builder newDefault = b.addFlavor(replacementFlavor, 2., 2., 20, + Flavor.Type.BARE_METAL).cost(2); + b.addReplaces(flavorToRetire, newDefault); + + ProvisioningTester tester = new ProvisioningTester(new Zone(Environment.prod, RegionName.from("us-east")), + b.build()); + ApplicationId application = tester.makeApplicationId(); + + // Add nodes + tester.makeReadyNodes(4, flavorToRetire); + tester.makeReadyNodes(4, replacementFlavor); + + SystemState state = prepare(application, 2, 0, 2, 0, + flavorToRetire, tester); + + tester.activate(application, state.allHosts); + + List<Node> nodes = tester.getNodes(application).asList(); + assertTrue("Allocated nodes have flavor " + replacementFlavor, + nodes.stream().allMatch(n -> n.flavor().name().equals(replacementFlavor))); + } private void assertCorrectFlavorPreferences(boolean largeIsStock) { FlavorConfigBuilder b = new FlavorConfigBuilder(); |