diff options
author | Ola Aunrønning <olaa@verizonmedia.com> | 2021-06-15 17:31:50 +0200 |
---|---|---|
committer | Ola Aunrønning <olaa@verizonmedia.com> | 2021-06-15 17:31:50 +0200 |
commit | 0f21830a9e41d0e917ec84c8499f43af209cdd7e (patch) | |
tree | 5c814642dc394645a3e387c8fcd239d5b010ed2f /node-repository | |
parent | fa5312e8cc46c008e180812dd7002d1eb6c9bc92 (diff) |
Deprovision nodes if not parked by operator
Diffstat (limited to 'node-repository')
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()); } |