diff options
author | Martin Polden <mpolden@mpolden.no> | 2021-06-15 13:33:53 +0200 |
---|---|---|
committer | Martin Polden <mpolden@mpolden.no> | 2021-06-15 13:52:41 +0200 |
commit | 1c3d7774e761183ab7970e3d5a1561d6dfbca4e0 (patch) | |
tree | db1d249435f9e4ed09143e7acfcecc2c7d2fe53e /node-repository | |
parent | 4521c56ba2f790999a96feb3e7cb2d5bd9134f2b (diff) |
Do not recycle deprovisioning hosts
Diffstat (limited to 'node-repository')
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 +} |