diff options
author | Jon Bratseth <bratseth@gmail.com> | 2020-11-30 13:51:38 +0100 |
---|---|---|
committer | Jon Bratseth <bratseth@gmail.com> | 2020-11-30 13:51:38 +0100 |
commit | 9a2bce1b48ebcaa807e79ce7bb048ff2e93c6473 (patch) | |
tree | afd749352bdf6531232209b0d9c91560221c3798 /node-repository | |
parent | ac7af6d0b2e4f2fe8399d26518262d5d7396c794 (diff) |
Filter at read time
Diffstat (limited to 'node-repository')
6 files changed, 25 insertions, 12 deletions
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/ClusterTimeseries.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/ClusterTimeseries.java index e325e797ca5..db45a364d18 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/ClusterTimeseries.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/ClusterTimeseries.java @@ -7,9 +7,11 @@ import com.yahoo.vespa.hosted.provision.NodeRepository; import com.yahoo.vespa.hosted.provision.applications.Cluster; import java.time.Instant; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.function.Predicate; import java.util.stream.Collectors; /** @@ -27,10 +29,13 @@ public class ClusterTimeseries { public ClusterTimeseries(Cluster cluster, List<Node> clusterNodes, MetricsDb db, NodeRepository nodeRepository) { this.clusterNodes = clusterNodes; ClusterSpec.Type clusterType = clusterNodes.get(0).allocation().get().membership().cluster().type(); - var allTimeseries = db.getNodeTimeseries(nodeRepository.clock().instant().minus(Autoscaler.scalingWindow(clusterType)), - clusterNodes.stream().map(Node::hostname).collect(Collectors.toSet())); - Map<String, Instant> startTimePerNode = metricStartTimes(cluster, clusterNodes, allTimeseries, nodeRepository); - nodeTimeseries = filterStale(allTimeseries, startTimePerNode); + var timeseries = db.getNodeTimeseries(nodeRepository.clock().instant().minus(Autoscaler.scalingWindow(clusterType)), + clusterNodes.stream().map(Node::hostname).collect(Collectors.toSet())); + Map<String, Instant> startTimePerNode = metricStartTimes(cluster, clusterNodes, timeseries, nodeRepository); + timeseries = filterStale(timeseries, startTimePerNode); + timeseries = filter(timeseries, snapshot -> snapshot.inService()); + timeseries = filter(timeseries, snapshot -> snapshot.stable()); + this.nodeTimeseries = timeseries; } /** @@ -95,4 +100,8 @@ public class ClusterTimeseries { return timeseries.stream().map(m -> m.justAfter(startTimePerHost.get(m.hostname()))).collect(Collectors.toList()); } + private List<NodeTimeseries> filter(List<NodeTimeseries> timeseries, Predicate<MetricSnapshot> filter) { + return timeseries.stream().map(nodeTimeseries -> nodeTimeseries.filter(filter)).collect(Collectors.toList()); + } + } diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/NodeTimeseries.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/NodeTimeseries.java index 6cba3928b8f..bebe87929ff 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/NodeTimeseries.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/NodeTimeseries.java @@ -7,6 +7,7 @@ import java.time.Instant; import java.util.ArrayList; import java.util.Collections; import java.util.List; +import java.util.function.Predicate; import java.util.stream.Collectors; /** @@ -41,6 +42,10 @@ public class NodeTimeseries { return new NodeTimeseries(hostname(), list); } + public NodeTimeseries filter(Predicate<MetricSnapshot> filter) { + return new NodeTimeseries(hostname, snapshots.stream().filter(filter).collect(Collectors.toList())); + } + public NodeTimeseries justAfter(Instant oldestTime) { return new NodeTimeseries(hostname, snapshots.stream() diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/AutoscalingTester.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/AutoscalingTester.java index eb3be65d364..783aabcd412 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/AutoscalingTester.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/AutoscalingTester.java @@ -139,7 +139,7 @@ class AutoscalingTester { disk, 0, true, - false)))); + true)))); } } } @@ -170,7 +170,7 @@ class AutoscalingTester { disk, 0, true, - false)))); + true)))); } } } @@ -186,7 +186,7 @@ class AutoscalingTester { disk, generation, true, - false)))); + true)))); } } } diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/AutoscalingMaintainerTester.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/AutoscalingMaintainerTester.java index 7c9156ca984..f47202e1580 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/AutoscalingMaintainerTester.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/AutoscalingMaintainerTester.java @@ -78,7 +78,7 @@ public class AutoscalingMaintainerTester { disk, generation, true, - false)))); + true)))); } } diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/NodeMetricsDbMaintainerTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/NodeMetricsDbMaintainerTest.java index 4c5e8f96676..4f0b0d55742 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/NodeMetricsDbMaintainerTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/NodeMetricsDbMaintainerTest.java @@ -52,9 +52,8 @@ public class NodeMetricsDbMaintainerTest { List<MetricSnapshot> allSnapshots = timeseriesList.stream() .flatMap(timeseries -> timeseries.asList().stream()) .collect(Collectors.toList()); - assertEquals(0.14, allSnapshots.get(0).cpu(), 0.000001); - assertTrue(allSnapshots.get(0).inService()); - assertFalse(allSnapshots.get(1).inService()); + assertTrue(allSnapshots.stream().anyMatch(snapshot -> snapshot.inService())); + assertTrue(allSnapshots.stream().anyMatch(snapshot -> ! snapshot.inService())); } private static class MockHttpClient implements MetricsV2MetricsFetcher.HttpClient { diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/ScalingSuggestionsMaintainerTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/ScalingSuggestionsMaintainerTest.java index 062f17e6e1e..35da31077f4 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/ScalingSuggestionsMaintainerTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/ScalingSuggestionsMaintainerTest.java @@ -82,7 +82,7 @@ public class ScalingSuggestionsMaintainerTest { disk, generation, true, - false)))); + true)))); } } |