diff options
author | Geir Storli <geirst@verizonmedia.com> | 2021-02-08 11:00:00 +0000 |
---|---|---|
committer | Geir Storli <geirst@verizonmedia.com> | 2021-02-08 11:00:00 +0000 |
commit | 69d91455d41b70d9a417c491a468a5e8ee426fd0 (patch) | |
tree | 3151543ac64b951ffa79c795097183a694b9a503 | |
parent | 6a6d1dd303c60bc96b7020ff2c6b2334dea540d5 (diff) |
Nodes above limit should only count each node once.
2 files changed, 16 insertions, 2 deletions
diff --git a/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/ResourceUsageStats.java b/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/ResourceUsageStats.java index c02397cb043..aef5b1be468 100644 --- a/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/ResourceUsageStats.java +++ b/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/ResourceUsageStats.java @@ -63,10 +63,9 @@ public class ResourceUsageStats { maxMemoryUsage = Double.max(maxMemoryUsage, resourceUsageOf(memoryResource, node)); } } - int nodesAboveLimit = (feedBlock.isPresent() ? feedBlock.get().getConcreteExhaustions().size() : 0); return new ResourceUsageStats(maxDiskUsage / limitOf(diskResource, feedBlockLimits), maxMemoryUsage / limitOf(memoryResource, feedBlockLimits), - nodesAboveLimit); + calculateNodesAboveLimit(feedBlock)); } private static double resourceUsageOf(String type, ContentNode node) { @@ -74,6 +73,14 @@ public class ResourceUsageStats { return result.isPresent() ? result.get().getUsage() : 0.0; } + private static int calculateNodesAboveLimit(Optional<ClusterStateBundle.FeedBlock> feedBlock) { + if (!feedBlock.isPresent()) { + return 0; + } + var exhaustions = feedBlock.get().getConcreteExhaustions(); + return (int) exhaustions.stream().map(resource -> resource.node).distinct().count(); + } + private static double limitOf(String type, Map<String, Double> limits) { var result = limits.get(type); return (result != null) ? result : 1.0; diff --git a/clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/ResourceUsageStatsTest.java b/clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/ResourceUsageStatsTest.java index 0f5d27d46e3..9eeb36265e0 100644 --- a/clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/ResourceUsageStatsTest.java +++ b/clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/ResourceUsageStatsTest.java @@ -54,6 +54,13 @@ public class ResourceUsageStatsTest { assertEquals(2, stats.getNodesAboveLimit()); } + @Test + public void nodes_above_limit_counts_each_node_only_once() { + var stats = ResourceUsageStats.calculateFrom(Collections.emptyList(), Collections.emptyMap(), + createFeedBlock(exhaustion(1, "disk"), exhaustion(1, "memory"))); + assertEquals(1, stats.getNodesAboveLimit()); + } + private static Collection<NodeInfo> createNodeInfo(FeedBlockUtil.NodeAndUsages... nodeAndUsages) { return createFixtureWithReportedUsages(nodeAndUsages).cluster().getNodeInfo(); } |