diff options
author | valerijf <valerijf@yahoo-inc.com> | 2017-05-30 13:14:31 +0200 |
---|---|---|
committer | valerijf <valerijf@yahoo-inc.com> | 2017-05-30 13:14:31 +0200 |
commit | ebefe966da7f8e97f9fd217ae8ad836368656491 (patch) | |
tree | 02783278e4f1e16d979740c1bcfee30cae7e5189 /node-repository | |
parent | 80798a8e57622b84e1901e1435409356ab025459 (diff) |
NodeRetirer to set wantToUnprovision flag when retiring a node
Diffstat (limited to 'node-repository')
2 files changed, 16 insertions, 3 deletions
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/NodeRetirer.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/NodeRetirer.java index d662d3a5fef..9136ab5da2e 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/NodeRetirer.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/NodeRetirer.java @@ -96,9 +96,12 @@ public class NodeRetirer extends Maintainer { Flavor flavorWithMinSpareNodes = getMinAmongstKeys(numSpareNodesByFlavor, possibleReplacementFlavors); long spareNodesForMinFlavor = numSpareNodesByFlavor.getOrDefault(flavorWithMinSpareNodes, 0L); if (spareNodesForMinFlavor > 0) { - log.info("Setting node " + retireableNode + " to wantToRetire. Policy: " + + log.info("Setting node " + retireableNode + " to wantToRetire and wantToUnprovision. Policy: " + retirementPolicy.getClass().getSimpleName()); - Node updatedNode = retireableNode.with(retireableNode.status().withWantToRetire(true)); + Node updatedNode = retireableNode + .with(retireableNode.status() + .withWantToRetire(true) + .withWantToUnprovision(true)); nodeRepository().write(updatedNode); numSpareNodesByFlavor.put(flavorWithMinSpareNodes, spareNodesForMinFlavor - 1); numNodesAllowedToRetire--; @@ -148,6 +151,8 @@ public class NodeRetirer extends Maintainer { } /** + * Parks and sets wantToUnprovision for a subset of size 'limit' of nodes + * * @param nodesToPark Nodes that we want to park * @param limit Maximum number of nodes we want to park * @return True iff we were able to park all the nodes @@ -155,7 +160,10 @@ public class NodeRetirer extends Maintainer { boolean limitedPark(Set<Node> nodesToPark, long limit) { nodesToPark.stream() .limit(limit) - .forEach(node -> nodeRepository().park(node.hostname(), Agent.NodeRetirer, "Policy: " + retirementPolicy.getClass().getSimpleName())); + .forEach(node -> { + nodeRepository().write(node.with(node.status().withWantToUnprovision(true))); + nodeRepository().park(node.hostname(), Agent.NodeRetirer, "Policy: " + retirementPolicy.getClass().getSimpleName()); + }); return limit >= nodesToPark.size(); } diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/NodeRetirerTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/NodeRetirerTest.java index f3a234588fd..0b0f3e48cfb 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/NodeRetirerTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/NodeRetirerTest.java @@ -73,6 +73,7 @@ public class NodeRetirerTest { .forEach(node -> { Agent parkingAgent = node.history().event(History.Event.Type.parked).orElseThrow(RuntimeException::new).agent(); assertEquals(Agent.NodeRetirer, parkingAgent); + assertTrue("Nodes parked by NodeRetirer should also have wantToUnprovision flag set", node.status().wantToUnprovision()); tester.nodeRepository.write(node.withIpAddresses(Collections.singleton("::2"))); tester.nodeRepository.setDirty(node.hostname()); tester.nodeRepository.setReady(node.hostname()); @@ -143,6 +144,10 @@ public class NodeRetirerTest { // min flavor count for both flavor clusters is now 0, so no further change is expected retireThenAssertSpareAndParkedCounts(new long[]{2, 40, 25, 0, 0, 1}, new long[]{6, 3, 5, 2, 1}); retireThenAssertSpareAndParkedCounts(new long[]{2, 40, 25, 0, 0, 1}, new long[]{6, 3, 5, 2, 1}); + + tester.nodeRepository.getNodes(Node.State.parked) + .forEach(node -> assertTrue("Nodes parked by NodeRetirer should also have wantToUnprovision flag set", + node.status().wantToUnprovision())); } @Test |