summaryrefslogtreecommitdiffstats
path: root/node-repository
diff options
context:
space:
mode:
authorOla Aunrønning <olaa@verizonmedia.com>2021-06-15 17:31:50 +0200
committerOla Aunrønning <olaa@verizonmedia.com>2021-06-15 17:31:50 +0200
commit0f21830a9e41d0e917ec84c8499f43af209cdd7e (patch)
tree5c814642dc394645a3e387c8fcd239d5b010ed2f /node-repository
parentfa5312e8cc46c008e180812dd7002d1eb6c9bc92 (diff)
Deprovision nodes if not parked by operator
Diffstat (limited to 'node-repository')
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/ParkedExpirer.java10
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/ParkedExpirerTest.java8
2 files changed, 13 insertions, 5 deletions
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/ParkedExpirer.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/ParkedExpirer.java
index ec7826658e3..dec1f49145b 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/ParkedExpirer.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/ParkedExpirer.java
@@ -41,13 +41,14 @@ public class ParkedExpirer extends NodeRepositoryMaintainer {
NodeList parkedHosts = nodeRepository.nodes()
.list(Node.State.parked)
.nodeType(NodeType.host)
+ .not().matching(this::parkedByOperator)
.not().deprovisioning();
int hostsToExpire = Math.max(0, parkedHosts.size() - MAX_ALLOWED_PARKED_HOSTS);
parkedHosts.sortedBy(Comparator.comparing(this::parkedAt))
.first(hostsToExpire)
.forEach(host -> {
log.info("Allowed number of parked nodes exceeded. Recycling " + host.hostname());
- nodeRepository.nodes().deallocate(host, Agent.ParkedExpirer, "Expired by ParkedExpirer");
+ nodeRepository.nodes().deprovision(host.hostname(), Agent.ParkedExpirer, Instant.now());
});
return 1.0;
@@ -59,4 +60,11 @@ public class ParkedExpirer extends NodeRepositoryMaintainer {
.orElse(Instant.EPOCH); // Should not happen
}
+ private boolean parkedByOperator(Node node) {
+ return node.history().event(History.Event.Type.parked)
+ .map(History.Event::agent)
+ .map(Agent.operator::equals)
+ .orElse(false);
+ }
+
}
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/ParkedExpirerTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/ParkedExpirerTest.java
index bc60801c1d6..c85a38cc6aa 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/ParkedExpirerTest.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/ParkedExpirerTest.java
@@ -36,8 +36,8 @@ public class ParkedExpirerTest {
var expirer = new ParkedExpirer(tester.nodeRepository(), Duration.ofMinutes(4), new TestMetric());
expirer.maintain();
- assertEquals(0, tester.nodeRepository().nodes().list(Node.State.dirty).size());
- assertEquals(25, tester.nodeRepository().nodes().list(Node.State.parked).size());
+ assertEquals(1, tester.nodeRepository().nodes().list().deprovisioning().size());
+ assertEquals(24, tester.nodeRepository().nodes().list().not().deprovisioning().size());
}
@Test
@@ -48,8 +48,8 @@ public class ParkedExpirerTest {
var expirer = new ParkedExpirer(tester.nodeRepository(), Duration.ofMinutes(4), new TestMetric());
expirer.maintain();
- assertEquals(4, tester.nodeRepository().nodes().list(Node.State.dirty).size());
- assertEquals(21, tester.nodeRepository().nodes().list(Node.State.parked).size());
+ assertEquals(5, tester.nodeRepository().nodes().list().deprovisioning().size());
+ assertEquals(20, tester.nodeRepository().nodes().list().not().deprovisioning().size());
}