summaryrefslogtreecommitdiffstats
path: root/node-repository
diff options
context:
space:
mode:
authorvalerijf <valerijf@yahoo-inc.com>2017-05-30 13:14:31 +0200
committervalerijf <valerijf@yahoo-inc.com>2017-05-30 13:14:31 +0200
commitebefe966da7f8e97f9fd217ae8ad836368656491 (patch)
tree02783278e4f1e16d979740c1bcfee30cae7e5189 /node-repository
parent80798a8e57622b84e1901e1435409356ab025459 (diff)
NodeRetirer to set wantToUnprovision flag when retiring a node
Diffstat (limited to 'node-repository')
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/NodeRetirer.java14
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/NodeRetirerTest.java5
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