summaryrefslogtreecommitdiffstats
path: root/node-repository
diff options
context:
space:
mode:
authorOla Aunronning <olaa@yahooinc.com>2024-02-26 14:05:59 +0100
committerOla Aunronning <olaa@yahooinc.com>2024-02-26 14:05:59 +0100
commit2d76bd7d5701c70b06ee24fa5962dc6833ebb445 (patch)
tree61d7c61ffd8c0e95b0d9fb3b1ff8fa052536998a /node-repository
parent1f4fe9ac7726c7501cf4414f9fc009a8564096ce (diff)
Empty exclusive host metric considers deallocation time
Diffstat (limited to 'node-repository')
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/MetricsReporter.java7
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/MetricsReporterTest.java8
2 files changed, 13 insertions, 2 deletions
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/MetricsReporter.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/MetricsReporter.java
index b82d1809085..69ae4fddb63 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/MetricsReporter.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/MetricsReporter.java
@@ -397,13 +397,16 @@ public class MetricsReporter extends NodeRepositoryMaintainer {
private void updateEmptyExclusiveHosts(NodeList nodes) {
Instant now = nodeRepository().clock().instant();
- Duration minActivePeriod = Duration.ofMinutes(10);
+ Instant tenMinutesAgo = now.minus(Duration.ofMinutes(10));
int emptyHosts = nodes.parents().state(State.active)
.matching(node -> (node.type() != NodeType.host && node.type().isHost()) ||
node.exclusiveToApplicationId().isPresent())
.matching(host -> host.history().hasEventBefore(History.Event.Type.activated,
- now.minus(minActivePeriod)))
+ tenMinutesAgo))
.matching(host -> nodes.childrenOf(host).isEmpty())
+ .matching(host -> host.hostEmptyAt()
+ .map(time -> time.isBefore(tenMinutesAgo))
+ .orElse(true))
.size();
metric.set(ConfigServerMetrics.NODES_EMPTY_EXCLUSIVE.baseName(), emptyHosts, null);
}
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/MetricsReporterTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/MetricsReporterTest.java
index 152f743900b..75ebf376e9f 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/MetricsReporterTest.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/MetricsReporterTest.java
@@ -360,6 +360,14 @@ public class MetricsReporterTest {
metricsReporter.maintain();
assertEquals(hosts.size(), metric.values.get("nodes.emptyExclusive").intValue());
+ // Hosts are not considered empty if children were just deallocated
+ tester.patchNodes(hosts, (host) -> host.withHostEmptyAt(tester.clock().instant()));
+ metricsReporter.maintain();
+ assertEquals(0, metric.values.get("nodes.emptyExclusive").intValue());
+ tester.clock().advance(Duration.ofMinutes(10));
+ metricsReporter.maintain();
+ assertEquals(hosts.size(), metric.values.get("nodes.emptyExclusive").intValue());
+
// Deploy application
ClusterSpec spec = ClusterSpec.request(ClusterSpec.Type.container, ClusterSpec.Id.from("c1")).vespaVersion("1").build();
Capacity capacity = Capacity.from(new ClusterResources(4, 1, resources));