summaryrefslogtreecommitdiffstats
path: root/node-repository
diff options
context:
space:
mode:
authorMartin Polden <mpolden@mpolden.no>2021-06-15 13:33:53 +0200
committerMartin Polden <mpolden@mpolden.no>2021-06-15 13:52:41 +0200
commit1c3d7774e761183ab7970e3d5a1561d6dfbca4e0 (patch)
treedb1d249435f9e4ed09143e7acfcecc2c7d2fe53e /node-repository
parent4521c56ba2f790999a96feb3e7cb2d5bd9134f2b (diff)
Do not recycle deprovisioning hosts
Diffstat (limited to 'node-repository')
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/ParkedExpirer.java31
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/ParkedExpirerTest.java11
2 files changed, 21 insertions, 21 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 c5259ee84c4..ec7826658e3 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
@@ -4,13 +4,13 @@ package com.yahoo.vespa.hosted.provision.maintenance;
import com.yahoo.config.provision.NodeType;
import com.yahoo.jdisc.Metric;
import com.yahoo.vespa.hosted.provision.Node;
+import com.yahoo.vespa.hosted.provision.NodeList;
import com.yahoo.vespa.hosted.provision.NodeRepository;
import com.yahoo.vespa.hosted.provision.node.Agent;
import com.yahoo.vespa.hosted.provision.node.History;
import java.time.Duration;
import java.time.Instant;
-import java.util.ArrayList;
import java.util.Comparator;
import java.util.logging.Logger;
@@ -26,7 +26,6 @@ public class ParkedExpirer extends NodeRepositoryMaintainer {
private static final int MAX_ALLOWED_PARKED_HOSTS = 20;
private static final Logger log = Logger.getLogger(ParkedExpirer.class.getName());
-
private final NodeRepository nodeRepository;
ParkedExpirer(NodeRepository nodeRepository, Duration interval, Metric metric) {
@@ -39,25 +38,25 @@ public class ParkedExpirer extends NodeRepositoryMaintainer {
if (!nodeRepository.zone().getCloud().dynamicProvisioning())
return 1.0;
- var parkedHosts = new ArrayList<>(nodeRepository.nodes().list(Node.State.parked)
- .nodeType(NodeType.host)
- .asList());
-
+ NodeList parkedHosts = nodeRepository.nodes()
+ .list(Node.State.parked)
+ .nodeType(NodeType.host)
+ .not().deprovisioning();
int hostsToExpire = Math.max(0, parkedHosts.size() - MAX_ALLOWED_PARKED_HOSTS);
- nodeRepository.nodes().list(Node.State.parked).nodeType(NodeType.host)
- .sortedBy(Comparator.comparing(this::getParkedTime))
- .first(hostsToExpire)
- .forEach(host -> {
- log.info("Allowed number of parked nodes exceeded. Recycling " + host.hostname());
- nodeRepository.nodes().deallocate(host, Agent.ParkedExpirer, "Expired by ParkedExpirer");
- });
+ 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");
+ });
return 1.0;
}
- private Instant getParkedTime(Node node) {
+ private Instant parkedAt(Node node) {
return node.history().event(History.Event.Type.parked)
- .map(History.Event::at)
- .orElse(Instant.EPOCH); // Should not happen
+ .map(History.Event::at)
+ .orElse(Instant.EPOCH); // Should not happen
}
+
}
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 7fb22f33453..bc60801c1d6 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
@@ -48,8 +48,8 @@ public class ParkedExpirerTest {
var expirer = new ParkedExpirer(tester.nodeRepository(), Duration.ofMinutes(4), new TestMetric());
expirer.maintain();
- assertEquals(5, tester.nodeRepository().nodes().list(Node.State.dirty).size());
- assertEquals(20, tester.nodeRepository().nodes().list(Node.State.parked).size());
+ assertEquals(4, tester.nodeRepository().nodes().list(Node.State.dirty).size());
+ assertEquals(21, tester.nodeRepository().nodes().list(Node.State.parked).size());
}
@@ -62,9 +62,10 @@ public class ParkedExpirerTest {
private void populateNodeRepo() {
var nodes = IntStream.range(0, 25)
- .mapToObj(i -> Node.create("id-" + i, "host-" + i, new Flavor(NodeResources.unspecified()), Node.State.parked, NodeType.host).build())
- .collect(Collectors.toList());
+ .mapToObj(i -> Node.create("id-" + i, "host-" + i, new Flavor(NodeResources.unspecified()), Node.State.parked, NodeType.host).build())
+ .collect(Collectors.toList());
tester.nodeRepository().database().addNodesInState(nodes, Node.State.parked, Agent.system);
+ tester.nodeRepository().nodes().deprovision(nodes.get(0).hostname(), Agent.system, tester.clock().instant()); // Deprovisioning host is not recycled
}
-} \ No newline at end of file
+}