diff options
author | Ola Aunronning <olaa@yahooinc.com> | 2024-02-26 14:05:59 +0100 |
---|---|---|
committer | Ola Aunronning <olaa@yahooinc.com> | 2024-02-26 14:05:59 +0100 |
commit | 2d76bd7d5701c70b06ee24fa5962dc6833ebb445 (patch) | |
tree | 61d7c61ffd8c0e95b0d9fb3b1ff8fa052536998a /node-repository | |
parent | 1f4fe9ac7726c7501cf4414f9fc009a8564096ce (diff) |
Empty exclusive host metric considers deallocation time
Diffstat (limited to 'node-repository')
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)); |