aboutsummaryrefslogtreecommitdiffstats
path: root/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/MemoryMetricsDb.java
diff options
context:
space:
mode:
Diffstat (limited to 'node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/MemoryMetricsDb.java')
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/MemoryMetricsDb.java59
1 files changed, 12 insertions, 47 deletions
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/MemoryMetricsDb.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/MemoryMetricsDb.java
index bf8d354665a..1b1e5933604 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/MemoryMetricsDb.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/MemoryMetricsDb.java
@@ -2,12 +2,9 @@
package com.yahoo.vespa.hosted.provision.autoscale;
import com.yahoo.collections.Pair;
-import com.yahoo.config.provision.ApplicationId;
-import com.yahoo.config.provision.ClusterSpec;
import com.yahoo.vespa.hosted.provision.Node;
import com.yahoo.vespa.hosted.provision.NodeRepository;
-import java.time.Clock;
import java.time.Duration;
import java.time.Instant;
import java.util.ArrayList;
@@ -29,10 +26,8 @@ public class MemoryMetricsDb implements MetricsDb {
private final NodeRepository nodeRepository;
- /** Metric time series by node (hostname). Each list of metric snapshots is sorted by increasing timestamp */
- private final Map<String, NodeTimeseries> nodeTimeseries = new HashMap<>();
-
- private final Map<Pair<ApplicationId, ClusterSpec.Id>, ClusterTimeseries> clusterTimeseries = new HashMap<>();
+ /** Metric time seriest by node (hostname). Each list of metric snapshots is sorted by increasing timestamp */
+ private final Map<String, NodeTimeseries> db = new HashMap<>();
/** Lock all access for now since we modify lists inside a map */
private final Object lock = new Object();
@@ -42,10 +37,7 @@ public class MemoryMetricsDb implements MetricsDb {
}
@Override
- public Clock clock() { return nodeRepository.clock(); }
-
- @Override
- public void addNodeMetrics(Collection<Pair<String, NodeMetricSnapshot>> nodeMetrics) {
+ public void add(Collection<Pair<String, MetricSnapshot>> nodeMetrics) {
synchronized (lock) {
for (var value : nodeMetrics) {
add(value.getFirst(), value.getSecond());
@@ -54,48 +46,27 @@ public class MemoryMetricsDb implements MetricsDb {
}
@Override
- public void addClusterMetrics(ApplicationId application, Map<ClusterSpec.Id, ClusterMetricSnapshot> clusterMetrics) {
- synchronized (lock) {
- for (var value : clusterMetrics.entrySet()) {
- add(application, value.getKey(), value.getValue());
- }
- }
- }
-
- public void clearClusterMetrics(ApplicationId application, ClusterSpec.Id cluster) {
- synchronized (lock) {
- clusterTimeseries.remove(new Pair<>(application, cluster));
- }
- }
-
- @Override
public List<NodeTimeseries> getNodeTimeseries(Duration period, Set<String> hostnames) {
Instant startTime = nodeRepository.clock().instant().minus(period);
synchronized (lock) {
return hostnames.stream()
- .map(hostname -> nodeTimeseries.getOrDefault(hostname, new NodeTimeseries(hostname, List.of())).justAfter(startTime))
+ .map(hostname -> db.getOrDefault(hostname, new NodeTimeseries(hostname, List.of())).justAfter(startTime))
.collect(Collectors.toList());
}
}
@Override
- public ClusterTimeseries getClusterTimeseries(ApplicationId application, ClusterSpec.Id cluster) {
- return clusterTimeseries.computeIfAbsent(new Pair<>(application, cluster),
- __ -> new ClusterTimeseries(cluster, new ArrayList<>()));
- }
-
- @Override
public void gc() {
synchronized (lock) {
// Each measurement is Object + long + float = 16 + 8 + 4 = 28 bytes
// 12 hours with 1k nodes and 3 resources and 1 measurement/sec is about 5Gb
- for (String hostname : nodeTimeseries.keySet()) {
- var timeseries = nodeTimeseries.get(hostname);
+ for (String hostname : db.keySet()) {
+ var timeseries = db.get(hostname);
timeseries = timeseries.justAfter(nodeRepository.clock().instant().minus(Autoscaler.maxScalingWindow()));
if (timeseries.isEmpty())
- nodeTimeseries.remove(hostname);
+ db.remove(hostname);
else
- nodeTimeseries.put(hostname, timeseries);
+ db.put(hostname, timeseries);
}
}
}
@@ -103,22 +74,16 @@ public class MemoryMetricsDb implements MetricsDb {
@Override
public void close() {}
- private void add(String hostname, NodeMetricSnapshot snapshot) {
- NodeTimeseries timeseries = nodeTimeseries.get(hostname);
+ private void add(String hostname, MetricSnapshot snapshot) {
+ NodeTimeseries timeseries = db.get(hostname);
if (timeseries == null) { // new node
Optional<Node> node = nodeRepository.nodes().node(hostname);
if (node.isEmpty()) return;
if (node.get().allocation().isEmpty()) return;
timeseries = new NodeTimeseries(hostname, new ArrayList<>());
- nodeTimeseries.put(hostname, timeseries);
+ db.put(hostname, timeseries);
}
- nodeTimeseries.put(hostname, timeseries.add(snapshot));
- }
-
- private void add(ApplicationId application, ClusterSpec.Id cluster, ClusterMetricSnapshot snapshot) {
- var key = new Pair<>(application, cluster);
- var existing = clusterTimeseries.computeIfAbsent(key, __ -> new ClusterTimeseries(cluster, new ArrayList<>()));
- clusterTimeseries.put(key, existing.add(snapshot));
+ db.put(hostname, timeseries.add(snapshot));
}
}