summaryrefslogtreecommitdiffstats
path: root/node-repository
diff options
context:
space:
mode:
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());
}