summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@gmail.com>2020-10-21 08:43:19 +0200
committerJon Bratseth <bratseth@gmail.com>2020-10-22 15:34:50 +0200
commit081c3fb60c09797e64f317563901c3aefa35f3f0 (patch)
tree87d5add0ebc9e45af6c64a9cce84fe12ccf0043e
parent53e5f06cd8e545be91a7fc1e9cf0e7eacb249aae (diff)
Create MetricsDb interface
-rw-r--r--node-repository/src/main/config/node-repository.xml2
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/Autoscaler.java4
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/ClusterTimeseries.java2
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/MemoryMetricsDb.java (renamed from node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/NodeMetricsDb.java)47
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/MetricsDb.java37
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/AutoscalingMaintainer.java7
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/NodeMetricsDbMaintainer.java12
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/NodeRepositoryMaintenance.java14
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/ScalingSuggestionsMaintainer.java4
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/ContainerConfig.java2
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/AutoscalingTester.java6
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/MetricsFetcherDbTest.java2
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/AutoscalingMaintainerTester.java22
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/ScalingSuggestionsMaintainerTest.java13
14 files changed, 104 insertions, 70 deletions
diff --git a/node-repository/src/main/config/node-repository.xml b/node-repository/src/main/config/node-repository.xml
index a51b0a2287d..0f61ff831ef 100644
--- a/node-repository/src/main/config/node-repository.xml
+++ b/node-repository/src/main/config/node-repository.xml
@@ -2,7 +2,7 @@
<!-- Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -->
<component id="com.yahoo.vespa.hosted.provision.provisioning.InfraDeployerImpl" bundle="node-repository"/>
<component id="com.yahoo.vespa.hosted.provision.autoscale.MetricsV2MetricsFetcher" bundle="node-repository"/>
-<component id="com.yahoo.vespa.hosted.provision.autoscale.NodeMetricsDb" bundle="node-repository"/>
+<component id="com.yahoo.vespa.hosted.provision.autoscale.MetricsDb" bundle="node-repository"/>
<component id="com.yahoo.vespa.hosted.provision.provisioning.NodeRepositoryProvisioner" bundle="node-repository" />
<component id="NodeRepository" class="com.yahoo.vespa.hosted.provision.NodeRepository" bundle="node-repository"/>
<component id="com.yahoo.vespa.hosted.provision.maintenance.NodeRepositoryMaintenance" bundle="node-repository"/>
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/Autoscaler.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/Autoscaler.java
index 5b26c53b937..f1835302b18 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/Autoscaler.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/Autoscaler.java
@@ -24,11 +24,11 @@ public class Autoscaler {
/** What difference factor for a resource is worth a reallocation? */
private static final double resourceDifferenceWorthReallocation = 0.1;
- private final NodeMetricsDb metricsDb;
+ private final MetricsDb metricsDb;
private final NodeRepository nodeRepository;
private final AllocationOptimizer allocationOptimizer;
- public Autoscaler(NodeMetricsDb metricsDb, NodeRepository nodeRepository) {
+ public Autoscaler(MetricsDb metricsDb, NodeRepository nodeRepository) {
this.metricsDb = metricsDb;
this.nodeRepository = nodeRepository;
this.allocationOptimizer = new AllocationOptimizer(nodeRepository);
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 52f6a5bbabc..58bc08165d0 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
@@ -26,7 +26,7 @@ public class ClusterTimeseries {
/** The measurements for all hosts in this snapshot */
private final List<NodeTimeseries> nodeTimeseries;
- public ClusterTimeseries(Cluster cluster, List<Node> clusterNodes, NodeMetricsDb db, NodeRepository nodeRepository) {
+ 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();
this.nodeTimeseries = db.getNodeTimeseries(nodeRepository.clock().instant().minus(Autoscaler.scalingWindow(clusterType)),
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/NodeMetricsDb.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/MemoryMetricsDb.java
index 271f8601ae2..c00cd60dfcf 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/NodeMetricsDb.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/MemoryMetricsDb.java
@@ -13,15 +13,14 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
-import java.util.stream.Collectors;
/**
- * An in-memory time-series "database" of node metrics.
+ * An in-memory implementation of the metrics Db.
* Thread model: One writer, many readers.
*
* @author bratseth
*/
-public class NodeMetricsDb {
+public class MemoryMetricsDb implements MetricsDb {
private final NodeRepository nodeRepository;
@@ -31,11 +30,11 @@ public class NodeMetricsDb {
/** Lock all access for now since we modify lists inside a map */
private final Object lock = new Object();
- public NodeMetricsDb(NodeRepository nodeRepository) {
+ public MemoryMetricsDb(NodeRepository nodeRepository) {
this.nodeRepository = nodeRepository;
}
- /** Adds snapshots to this. */
+ @Override
public void add(Collection<Pair<String, MetricSnapshot>> nodeMetrics) {
synchronized (lock) {
for (var value : nodeMetrics) {
@@ -44,21 +43,7 @@ public class NodeMetricsDb {
}
}
- private void add(String hostname, MetricSnapshot snapshot) {
- NodeTimeseries timeseries = db.get(hostname);
- if (timeseries == null) { // new node
- Optional<Node> node = nodeRepository.getNode(hostname);
- if (node.isEmpty()) return;
- if (node.get().allocation().isEmpty()) return;
- timeseries = new NodeTimeseries(hostname,
- node.get().allocation().get().membership().cluster().type(),
- new ArrayList<>());
- db.put(hostname, timeseries);
- }
- db.put(hostname, timeseries.add(snapshot));
- }
-
- /** Must be called intermittently (as long as any add methods are called) to gc old data */
+ @Override
public void gc(Clock clock) {
synchronized (lock) {
// Each measurement is Object + long + float = 16 + 8 + 4 = 28 bytes
@@ -74,10 +59,7 @@ public class NodeMetricsDb {
}
}
- /**
- * Returns a list of measurements with one entry for each of the given host names
- * which have any values after startTime, in the same order
- */
+ @Override
public List<NodeTimeseries> getNodeTimeseries(Instant startTime, List<String> hostnames) {
synchronized (lock) {
List<NodeTimeseries> measurementsList = new ArrayList<>(hostnames.size());
@@ -92,4 +74,21 @@ public class NodeMetricsDb {
}
}
+ @Override
+ public void close() {}
+
+ private void add(String hostname, MetricSnapshot snapshot) {
+ NodeTimeseries timeseries = db.get(hostname);
+ if (timeseries == null) { // new node
+ Optional<Node> node = nodeRepository.getNode(hostname);
+ if (node.isEmpty()) return;
+ if (node.get().allocation().isEmpty()) return;
+ timeseries = new NodeTimeseries(hostname,
+ node.get().allocation().get().membership().cluster().type(),
+ new ArrayList<>());
+ db.put(hostname, timeseries);
+ }
+ db.put(hostname, timeseries.add(snapshot));
+ }
+
}
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/MetricsDb.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/MetricsDb.java
new file mode 100644
index 00000000000..c9cf295cade
--- /dev/null
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/MetricsDb.java
@@ -0,0 +1,37 @@
+// Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.vespa.hosted.provision.autoscale;
+
+import com.yahoo.collections.Pair;
+import com.yahoo.vespa.hosted.provision.NodeRepository;
+
+import java.time.Clock;
+import java.time.Instant;
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * An in-memory time-series database of node metrics.
+ *
+ * @author bratseth
+ */
+public interface MetricsDb {
+
+ /** Adds snapshots to this. */
+ void add(Collection<Pair<String, MetricSnapshot>> nodeMetrics);
+
+ /** Must be called intermittently (as long as add is called) to gc old data */
+ void gc(Clock clock);
+
+ /**
+ * Returns a list of time series for each of the given host names
+ * which have any values after startTime.
+ */
+ List<NodeTimeseries> getNodeTimeseries(Instant startTime, List<String> hostnames);
+
+ void close();
+
+ static MetricsDb createTestInstance(NodeRepository nodeRepository) {
+ return new MemoryMetricsDb(nodeRepository);
+ }
+
+}
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/AutoscalingMaintainer.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/AutoscalingMaintainer.java
index 2a38dec3230..3b01f678982 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/AutoscalingMaintainer.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/AutoscalingMaintainer.java
@@ -11,10 +11,9 @@ import com.yahoo.vespa.hosted.provision.NodeRepository;
import com.yahoo.vespa.hosted.provision.applications.Application;
import com.yahoo.vespa.hosted.provision.applications.Applications;
import com.yahoo.vespa.hosted.provision.applications.Cluster;
-import com.yahoo.vespa.hosted.provision.applications.ScalingEvent;
import com.yahoo.vespa.hosted.provision.autoscale.AllocatableClusterResources;
import com.yahoo.vespa.hosted.provision.autoscale.Autoscaler;
-import com.yahoo.vespa.hosted.provision.autoscale.NodeMetricsDb;
+import com.yahoo.vespa.hosted.provision.autoscale.MetricsDb;
import java.time.Duration;
import java.util.List;
@@ -29,13 +28,13 @@ import java.util.stream.Collectors;
*/
public class AutoscalingMaintainer extends NodeRepositoryMaintainer {
- private final NodeMetricsDb metricsDb;
+ private final MetricsDb metricsDb;
private final Autoscaler autoscaler;
private final Deployer deployer;
private final Metric metric;
public AutoscalingMaintainer(NodeRepository nodeRepository,
- NodeMetricsDb metricsDb,
+ MetricsDb metricsDb,
Deployer deployer,
Metric metric,
Duration interval) {
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/NodeMetricsDbMaintainer.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/NodeMetricsDbMaintainer.java
index 4c312694df1..de8065fe32b 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/NodeMetricsDbMaintainer.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/NodeMetricsDbMaintainer.java
@@ -5,7 +5,7 @@ import com.yahoo.config.provision.ApplicationId;
import com.yahoo.jdisc.Metric;
import com.yahoo.vespa.hosted.provision.NodeRepository;
import com.yahoo.vespa.hosted.provision.autoscale.MetricsFetcher;
-import com.yahoo.vespa.hosted.provision.autoscale.NodeMetricsDb;
+import com.yahoo.vespa.hosted.provision.autoscale.MetricsDb;
import com.yahoo.yolean.Exceptions;
import java.time.Duration;
@@ -22,16 +22,16 @@ public class NodeMetricsDbMaintainer extends NodeRepositoryMaintainer {
private static final int maxWarningsPerInvocation = 2;
private final MetricsFetcher nodeMetrics;
- private final NodeMetricsDb nodeMetricsDb;
+ private final MetricsDb metricsDb;
public NodeMetricsDbMaintainer(NodeRepository nodeRepository,
MetricsFetcher nodeMetrics,
- NodeMetricsDb nodeMetricsDb,
+ MetricsDb metricsDb,
Duration interval,
Metric metric) {
super(nodeRepository, interval, metric);
this.nodeMetrics = nodeMetrics;
- this.nodeMetricsDb = nodeMetricsDb;
+ this.metricsDb = metricsDb;
}
@Override
@@ -39,7 +39,7 @@ public class NodeMetricsDbMaintainer extends NodeRepositoryMaintainer {
int warnings = 0;
for (ApplicationId application : activeNodesByApplication().keySet()) {
try {
- nodeMetricsDb.add(nodeMetrics.fetchMetrics(application));
+ metricsDb.add(nodeMetrics.fetchMetrics(application));
}
catch (Exception e) {
// TODO: Don't warn if this only happens occasionally
@@ -47,7 +47,7 @@ public class NodeMetricsDbMaintainer extends NodeRepositoryMaintainer {
log.log(Level.WARNING, "Could not update metrics for " + application + ": " + Exceptions.toMessageString(e));
}
}
- nodeMetricsDb.gc(nodeRepository().clock());
+ metricsDb.gc(nodeRepository().clock());
// Suppress failures for manual zones for now to avoid noise
if (nodeRepository().zone().environment().isManuallyDeployed()) return true;
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/NodeRepositoryMaintenance.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/NodeRepositoryMaintenance.java
index 35fbd4eed1e..5e3584bfcd0 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/NodeRepositoryMaintenance.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/NodeRepositoryMaintenance.java
@@ -12,7 +12,7 @@ import com.yahoo.jdisc.Metric;
import com.yahoo.vespa.flags.FlagSource;
import com.yahoo.vespa.hosted.provision.NodeRepository;
import com.yahoo.vespa.hosted.provision.autoscale.MetricsFetcher;
-import com.yahoo.vespa.hosted.provision.autoscale.NodeMetricsDb;
+import com.yahoo.vespa.hosted.provision.autoscale.MetricsDb;
import com.yahoo.vespa.hosted.provision.provisioning.ProvisionServiceProvider;
import com.yahoo.vespa.orchestrator.Orchestrator;
import com.yahoo.vespa.service.monitor.ServiceMonitor;
@@ -56,16 +56,16 @@ public class NodeRepositoryMaintenance extends AbstractComponent {
HostLivenessTracker hostLivenessTracker, ServiceMonitor serviceMonitor,
Zone zone, Orchestrator orchestrator, Metric metric,
ProvisionServiceProvider provisionServiceProvider, FlagSource flagSource,
- MetricsFetcher nodeMetrics, NodeMetricsDb nodeMetricsDb) {
+ MetricsFetcher nodeMetrics, MetricsDb metricsDb) {
this(nodeRepository, deployer, infraDeployer, hostLivenessTracker, serviceMonitor, zone, Clock.systemUTC(),
- orchestrator, metric, provisionServiceProvider, flagSource, nodeMetrics, nodeMetricsDb);
+ orchestrator, metric, provisionServiceProvider, flagSource, nodeMetrics, metricsDb);
}
public NodeRepositoryMaintenance(NodeRepository nodeRepository, Deployer deployer, InfraDeployer infraDeployer,
HostLivenessTracker hostLivenessTracker, ServiceMonitor serviceMonitor,
Zone zone, Clock clock, Orchestrator orchestrator, Metric metric,
ProvisionServiceProvider provisionServiceProvider, FlagSource flagSource,
- MetricsFetcher nodeMetrics, NodeMetricsDb nodeMetricsDb) {
+ MetricsFetcher metricsFetcher, MetricsDb metricsDb) {
DefaultTimes defaults = new DefaultTimes(zone, deployer);
nodeFailer = new NodeFailer(deployer, hostLivenessTracker, serviceMonitor, nodeRepository, defaults.failGrace,
@@ -89,9 +89,9 @@ public class NodeRepositoryMaintenance extends AbstractComponent {
spareCapacityMaintainer = new SpareCapacityMaintainer(deployer, nodeRepository, metric, defaults.spareCapacityMaintenanceInterval);
osUpgradeActivator = new OsUpgradeActivator(nodeRepository, defaults.osUpgradeActivatorInterval, metric);
rebalancer = new Rebalancer(deployer, nodeRepository, metric, defaults.rebalancerInterval);
- nodeMetricsDbMaintainer = new NodeMetricsDbMaintainer(nodeRepository, nodeMetrics, nodeMetricsDb, defaults.nodeMetricsCollectionInterval, metric);
- autoscalingMaintainer = new AutoscalingMaintainer(nodeRepository, nodeMetricsDb, deployer, metric, defaults.autoscalingInterval);
- scalingSuggestionsMaintainer = new ScalingSuggestionsMaintainer(nodeRepository, nodeMetricsDb, defaults.scalingSuggestionsInterval, metric);
+ nodeMetricsDbMaintainer = new NodeMetricsDbMaintainer(nodeRepository, metricsFetcher, metricsDb, defaults.nodeMetricsCollectionInterval, metric);
+ autoscalingMaintainer = new AutoscalingMaintainer(nodeRepository, metricsDb, deployer, metric, defaults.autoscalingInterval);
+ scalingSuggestionsMaintainer = new ScalingSuggestionsMaintainer(nodeRepository, metricsDb, defaults.scalingSuggestionsInterval, metric);
switchRebalancer = new SwitchRebalancer(nodeRepository, defaults.switchRebalancerInterval, metric, deployer);
// The DuperModel is filled with infrastructure applications by the infrastructure provisioner, so explicitly run that now
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/ScalingSuggestionsMaintainer.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/ScalingSuggestionsMaintainer.java
index db0e5f03097..c9538d878f2 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/ScalingSuggestionsMaintainer.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/ScalingSuggestionsMaintainer.java
@@ -12,7 +12,7 @@ import com.yahoo.vespa.hosted.provision.applications.Application;
import com.yahoo.vespa.hosted.provision.applications.Applications;
import com.yahoo.vespa.hosted.provision.applications.Cluster;
import com.yahoo.vespa.hosted.provision.autoscale.Autoscaler;
-import com.yahoo.vespa.hosted.provision.autoscale.NodeMetricsDb;
+import com.yahoo.vespa.hosted.provision.autoscale.MetricsDb;
import java.time.Duration;
import java.util.List;
@@ -30,7 +30,7 @@ public class ScalingSuggestionsMaintainer extends NodeRepositoryMaintainer {
private final Autoscaler autoscaler;
public ScalingSuggestionsMaintainer(NodeRepository nodeRepository,
- NodeMetricsDb metricsDb,
+ MetricsDb metricsDb,
Duration interval,
Metric metric) {
super(nodeRepository, interval, metric);
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/ContainerConfig.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/ContainerConfig.java
index 7e2060ed402..26e528d0be9 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/ContainerConfig.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/ContainerConfig.java
@@ -25,7 +25,7 @@ public class ContainerConfig {
" <component id='com.yahoo.vespa.hosted.provision.testutils.ServiceMonitorStub'/>\n" +
" <component id='com.yahoo.vespa.hosted.provision.testutils.MockDuperModel'/>\n" +
" <component id='com.yahoo.vespa.hosted.provision.testutils.MockNodeFlavors'/>\n" +
- " <component id='com.yahoo.vespa.hosted.provision.autoscale.NodeMetricsDb'/>\n" +
+ " <component id='com.yahoo.vespa.hosted.provision.autoscale.MemoryMetricsDb'/>\n" +
" <component id='com.yahoo.vespa.hosted.provision.testutils.MockMetricsFetcher'/>\n" +
" <component id='com.yahoo.vespa.hosted.provision.testutils.MockNodeRepository'/>\n" +
" <component id='com.yahoo.vespa.hosted.provision.testutils.MockProvisionServiceProvider'/>\n" +
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 ffee79eb895..9625996f3a6 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
@@ -41,7 +41,7 @@ class AutoscalingTester {
private final ProvisioningTester provisioningTester;
private final Autoscaler autoscaler;
- private final NodeMetricsDb db;
+ private final MetricsDb db;
private final MockHostResourcesCalculator hostResourcesCalculator;
/** Creates an autoscaling tester with a single host type ready */
@@ -68,7 +68,7 @@ class AutoscalingTester {
.build();
hostResourcesCalculator = new MockHostResourcesCalculator(zone);
- db = new NodeMetricsDb(provisioningTester.nodeRepository());
+ db = MetricsDb.createTestInstance(provisioningTester.nodeRepository());
autoscaler = new Autoscaler(db, nodeRepository());
}
@@ -229,7 +229,7 @@ class AutoscalingTester {
return provisioningTester.nodeRepository();
}
- public NodeMetricsDb nodeMetricsDb() { return db; }
+ public MetricsDb nodeMetricsDb() { return db; }
private static class MockHostResourcesCalculator implements HostResourcesCalculator {
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/MetricsFetcherDbTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/MetricsFetcherDbTest.java
index b2a76cdd103..9dad8ed9df8 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/MetricsFetcherDbTest.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/MetricsFetcherDbTest.java
@@ -36,7 +36,7 @@ public class MetricsFetcherDbTest {
String node0 = hosts.iterator().next().hostname();
ManualClock clock = tester.clock();
- NodeMetricsDb db = new NodeMetricsDb(tester.nodeRepository());
+ MetricsDb db = MetricsDb.createTestInstance(tester.nodeRepository());
Collection<Pair<String, MetricSnapshot>> values = new ArrayList<>();
for (int i = 0; i < 40; i++) {
values.add(new Pair<>(node0, new MetricSnapshot(clock.instant(), 0.9f, 0.6f, 0.6f, 0)));
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 5342e52f5a6..6e8b75a9af5 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
@@ -14,9 +14,9 @@ import com.yahoo.config.provisioning.FlavorsConfig;
import com.yahoo.test.ManualClock;
import com.yahoo.vespa.hosted.provision.Node;
import com.yahoo.vespa.hosted.provision.NodeRepository;
+import com.yahoo.vespa.hosted.provision.autoscale.MemoryMetricsDb;
import com.yahoo.vespa.hosted.provision.autoscale.MetricSnapshot;
-import com.yahoo.vespa.hosted.provision.autoscale.MetricsFetcher;
-import com.yahoo.vespa.hosted.provision.autoscale.NodeMetricsDb;
+import com.yahoo.vespa.hosted.provision.autoscale.MetricsDb;
import com.yahoo.vespa.hosted.provision.provisioning.FlavorConfigBuilder;
import com.yahoo.vespa.hosted.provision.provisioning.ProvisioningTester;
import com.yahoo.vespa.hosted.provision.testutils.MockDeployer;
@@ -34,7 +34,7 @@ import java.util.stream.Collectors;
public class AutoscalingMaintainerTester {
private final ProvisioningTester provisioningTester;
- private final NodeMetricsDb nodeMetricsDb;
+ private final MetricsDb metricsDb;
private final AutoscalingMaintainer maintainer;
private final MockDeployer deployer;
@@ -46,9 +46,9 @@ public class AutoscalingMaintainerTester {
Map<ApplicationId, MockDeployer.ApplicationContext> apps = Arrays.stream(appContexts)
.collect(Collectors.toMap(c -> c.id(), c -> c));
deployer = new MockDeployer(provisioningTester.provisioner(), provisioningTester.clock(), apps);
- nodeMetricsDb = new NodeMetricsDb(provisioningTester.nodeRepository());
+ metricsDb = MetricsDb.createTestInstance(provisioningTester.nodeRepository());
maintainer = new AutoscalingMaintainer(provisioningTester.nodeRepository(),
- nodeMetricsDb,
+ metricsDb,
deployer,
new TestMetric(),
Duration.ofMinutes(1));
@@ -60,7 +60,7 @@ public class AutoscalingMaintainerTester {
public ManualClock clock() { return provisioningTester.clock(); }
public MockDeployer deployer() { return deployer; }
public AutoscalingMaintainer maintainer() { return maintainer; }
- public NodeMetricsDb nodeMetricsDb() { return nodeMetricsDb; }
+ public MetricsDb nodeMetricsDb() { return metricsDb; }
public static ApplicationId makeApplicationId(String name) { return ProvisioningTester.makeApplicationId(name); }
public static ClusterSpec containerClusterSpec() { return ProvisioningTester.containerClusterSpec(); }
@@ -73,11 +73,11 @@ public class AutoscalingMaintainerTester {
List<Node> nodes = nodeRepository().getNodes(applicationId, Node.State.active);
for (int i = 0; i < count; i++) {
for (Node node : nodes)
- nodeMetricsDb.add(List.of(new Pair<>(node.hostname(), new MetricSnapshot(clock().instant(),
- cpu,
- mem,
- disk,
- generation))));
+ metricsDb.add(List.of(new Pair<>(node.hostname(), new MetricSnapshot(clock().instant(),
+ cpu,
+ mem,
+ disk,
+ generation))));
}
}
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 2ebcd84e71a..9c952cc605e 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
@@ -16,8 +16,7 @@ import com.yahoo.config.provisioning.FlavorsConfig;
import com.yahoo.vespa.hosted.provision.Node;
import com.yahoo.vespa.hosted.provision.NodeRepository;
import com.yahoo.vespa.hosted.provision.autoscale.MetricSnapshot;
-import com.yahoo.vespa.hosted.provision.autoscale.MetricsFetcher;
-import com.yahoo.vespa.hosted.provision.autoscale.NodeMetricsDb;
+import com.yahoo.vespa.hosted.provision.autoscale.MetricsDb;
import com.yahoo.vespa.hosted.provision.provisioning.FlavorConfigBuilder;
import com.yahoo.vespa.hosted.provision.provisioning.ProvisioningTester;
import org.junit.Test;
@@ -45,7 +44,7 @@ public class ScalingSuggestionsMaintainerTest {
ApplicationId app2 = ProvisioningTester.makeApplicationId("app2");
ClusterSpec cluster2 = ProvisioningTester.contentClusterSpec();
- NodeMetricsDb nodeMetricsDb = new NodeMetricsDb(tester.nodeRepository());
+ MetricsDb metricsDb = MetricsDb.createTestInstance(tester.nodeRepository());
tester.makeReadyNodes(20, "flt", NodeType.host, 8);
tester.activateTenantHosts();
@@ -57,11 +56,11 @@ public class ScalingSuggestionsMaintainerTest {
new ClusterResources(10, 1, new NodeResources(6.5, 5, 15, 0.1)),
false, true));
- addMeasurements(0.90f, 0.90f, 0.90f, 0, 500, app1, tester.nodeRepository(), nodeMetricsDb);
- addMeasurements(0.99f, 0.99f, 0.99f, 0, 500, app2, tester.nodeRepository(), nodeMetricsDb);
+ addMeasurements(0.90f, 0.90f, 0.90f, 0, 500, app1, tester.nodeRepository(), metricsDb);
+ addMeasurements(0.99f, 0.99f, 0.99f, 0, 500, app2, tester.nodeRepository(), metricsDb);
ScalingSuggestionsMaintainer maintainer = new ScalingSuggestionsMaintainer(tester.nodeRepository(),
- nodeMetricsDb,
+ metricsDb,
Duration.ofMinutes(1),
new TestMetric());
maintainer.maintain();
@@ -73,7 +72,7 @@ public class ScalingSuggestionsMaintainerTest {
}
public void addMeasurements(float cpu, float memory, float disk, int generation, int count, ApplicationId applicationId,
- NodeRepository nodeRepository, NodeMetricsDb db) {
+ NodeRepository nodeRepository, MetricsDb db) {
List<Node> nodes = nodeRepository.getNodes(applicationId, Node.State.active);
for (int i = 0; i < count; i++) {
for (Node node : nodes)