diff options
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()); } |