summaryrefslogtreecommitdiffstats
path: root/node-repository
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@gmail.com>2021-03-24 10:45:25 +0100
committerJon Bratseth <bratseth@gmail.com>2021-03-24 10:45:25 +0100
commit5952a324edca0939fbab3ea9939e16ef509fd40f (patch)
tree2bffc45b9a082f3662f8fc6f701aa0995530ca95 /node-repository
parent1a6256ca5af8353ba257e32535edb5670307df7a (diff)
Refactor
Diffstat (limited to 'node-repository')
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/ClusterModel.java2
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/ClusterNodesTimeseries.java24
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/Load.java4
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/NodeMetricSnapshot.java3
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/QuestMetricsDb.java6
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/ResourceTarget.java6
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/ApplicationSerializer.java6
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/MetricsV2MetricsFetcherTest.java18
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/QuestMetricsDbTest.java6
9 files changed, 36 insertions, 39 deletions
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/ClusterModel.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/ClusterModel.java
index acf227e3de2..de5d1805a2e 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/ClusterModel.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/ClusterModel.java
@@ -96,7 +96,7 @@ public class ClusterModel {
return queryFractionOfMax = clusterTimeseries().queryFractionOfMax(scalingDuration(), clock);
}
- public double averageLoad(Resource resource) { return nodeTimeseries().averageLoad(resource); }
+ public Load averageLoad() { return nodeTimeseries().averageLoad(); }
public double idealLoad(Resource resource) {
switch (resource) {
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/ClusterNodesTimeseries.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/ClusterNodesTimeseries.java
index c097abd8208..a7396f29d92 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/ClusterNodesTimeseries.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/ClusterNodesTimeseries.java
@@ -42,21 +42,17 @@ public class ClusterNodesTimeseries {
/** Returns the number of nodes measured in this */
public int nodesMeasured() { return timeseries.size(); }
- /** Returns the average load of this resource in this */
- public double averageLoad(Resource resource) {
- int measurementCount = timeseries.stream().mapToInt(m -> m.size()).sum();
- if (measurementCount == 0) return 0;
- double measurementSum = timeseries.stream().flatMap(m -> m.asList().stream()).mapToDouble(m -> value(resource, m)).sum();
- return measurementSum / measurementCount;
- }
-
- private double value(Resource resource, NodeMetricSnapshot snapshot) {
- switch (resource) {
- case cpu: return snapshot.cpu();
- case memory: return snapshot.memory();
- case disk: return snapshot.disk();
- default: throw new IllegalArgumentException("Got an unknown resource " + resource);
+ /** Returns the average load in this */
+ public Load averageLoad() {
+ Load total = Load.zero();
+ int count = 0;
+ for (var nodeTimeseries : timeseries) {
+ for (var snapshot : nodeTimeseries.asList()) {
+ total = total.add(snapshot.load());
+ count++;
+ }
}
+ return total.divide(count);
}
private List<NodeTimeseries> filter(List<NodeTimeseries> timeseries, Predicate<NodeMetricSnapshot> filter) {
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/Load.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/Load.java
index 64649b1a0ef..ce7aa2d8e66 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/Load.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/Load.java
@@ -34,6 +34,10 @@ public class Load {
return new Load(divide(cpu, resources.vcpu()), divide(memory, resources.memoryGb()), divide(disk, resources.diskGb()));
}
+ public Load divide(double divisor) {
+ return new Load(divide(cpu, divisor), divide(memory, divisor), divide(disk, divisor));
+ }
+
public NodeResources scaled(NodeResources resources) {
return resources.withVcpu(cpu * resources.vcpu())
.withMemoryGb(memory * resources.memoryGb())
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/NodeMetricSnapshot.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/NodeMetricSnapshot.java
index 80fa65c7828..ddf6dbdf003 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/NodeMetricSnapshot.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/NodeMetricSnapshot.java
@@ -30,9 +30,6 @@ public class NodeMetricSnapshot implements Comparable<NodeMetricSnapshot> {
}
public Instant at() { return at; }
- public double cpu() { return load.cpu(); } // TODO: Remove
- public double memory() { return load.memory(); } // TODO: Remove
- public double disk() { return load.disk(); } // TODO: Remove
public Load load() { return load; }
/** Queries per second */
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/QuestMetricsDb.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/QuestMetricsDb.java
index 459a7919bbe..c4e7a2a8518 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/QuestMetricsDb.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/QuestMetricsDb.java
@@ -113,9 +113,9 @@ public class QuestMetricsDb extends AbstractComponent implements MetricsDb {
TableWriter.Row row = writer.newRow(atMillis * 1000); // in microseconds
row.putStr(0, snapshot.getFirst());
// (1 is timestamp)
- row.putFloat(2, (float)snapshot.getSecond().cpu());
- row.putFloat(3, (float)snapshot.getSecond().memory());
- row.putFloat(4, (float)snapshot.getSecond().disk());
+ row.putFloat(2, (float)snapshot.getSecond().load().cpu());
+ row.putFloat(3, (float)snapshot.getSecond().load().memory());
+ row.putFloat(4, (float)snapshot.getSecond().load().disk());
row.putLong(5, snapshot.getSecond().generation());
row.putBool(6, snapshot.getSecond().inService());
row.putBool(7, snapshot.getSecond().stable());
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/ResourceTarget.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/ResourceTarget.java
index b1a1e86b08d..e2b35c0ecfa 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/ResourceTarget.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/ResourceTarget.java
@@ -53,11 +53,11 @@ public class ResourceTarget {
/** Create a target of achieving ideal load given a current load */
public static ResourceTarget idealLoad(ClusterModel clusterModel,
AllocatableClusterResources current) {
- return new ResourceTarget(nodeUsage(Resource.cpu, clusterModel.averageLoad(Resource.cpu), current)
+ return new ResourceTarget(nodeUsage(Resource.cpu, clusterModel.averageLoad().cpu(), current)
/ clusterModel.idealLoad(Resource.cpu),
- nodeUsage(Resource.memory, clusterModel.averageLoad(Resource.memory), current)
+ nodeUsage(Resource.memory, clusterModel.averageLoad().memory(), current)
/ clusterModel.idealLoad(Resource.memory),
- nodeUsage(Resource.disk, clusterModel.averageLoad(Resource.disk), current)
+ nodeUsage(Resource.disk, clusterModel.averageLoad().disk(), current)
/ clusterModel.idealLoad(Resource.disk),
true);
}
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/ApplicationSerializer.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/ApplicationSerializer.java
index 176bf195f1f..d6ad5c654e2 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/ApplicationSerializer.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/ApplicationSerializer.java
@@ -94,11 +94,11 @@ public class ApplicationSerializer {
}
private static void clusterUtilizationToSlime(ClusterModel clusterModel, Cursor utilizationObject) {
- utilizationObject.setDouble("cpu", clusterModel.averageLoad(Resource.cpu));
+ utilizationObject.setDouble("cpu", clusterModel.averageLoad().cpu());
utilizationObject.setDouble("idealCpu", clusterModel.idealLoad(Resource.cpu));
- utilizationObject.setDouble("memory", clusterModel.averageLoad(Resource.memory));
+ utilizationObject.setDouble("memory", clusterModel.averageLoad().memory());
utilizationObject.setDouble("idealMemory", clusterModel.idealLoad(Resource.memory));
- utilizationObject.setDouble("disk", clusterModel.averageLoad(Resource.disk));
+ utilizationObject.setDouble("disk", clusterModel.averageLoad().disk());
utilizationObject.setDouble("idealDisk", clusterModel.idealLoad(Resource.disk));
}
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/MetricsV2MetricsFetcherTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/MetricsV2MetricsFetcherTest.java
index ef85e228cc7..5f1a36e7b56 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/MetricsV2MetricsFetcherTest.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/MetricsV2MetricsFetcherTest.java
@@ -51,14 +51,14 @@ public class MetricsV2MetricsFetcherTest {
assertEquals(2, values.size());
assertEquals("host-1.yahoo.com", values.get(0).getFirst());
- assertEquals(0.162, values.get(0).getSecond().cpu(), delta);
- assertEquals(0.231, values.get(0).getSecond().memory(), delta);
- assertEquals(0.820, values.get(0).getSecond().disk(), delta);
+ assertEquals(0.162, values.get(0).getSecond().load().cpu(), delta);
+ assertEquals(0.231, values.get(0).getSecond().load().memory(), delta);
+ assertEquals(0.820, values.get(0).getSecond().load().disk(), delta);
assertEquals("host-2.yahoo.com", values.get(1).getFirst());
- assertEquals(0.2, values.get(1).getSecond().cpu(), delta);
- assertEquals(0.0, values.get(1).getSecond().memory(), delta);
- assertEquals(0.4, values.get(1).getSecond().disk(), delta);
+ assertEquals(0.2, values.get(1).getSecond().load().cpu(), delta);
+ assertEquals(0.0, values.get(1).getSecond().load().memory(), delta);
+ assertEquals(0.4, values.get(1).getSecond().load().disk(), delta);
assertEquals(45.0, values.get(1).getSecond().queryRate(), delta);
}
@@ -69,9 +69,9 @@ public class MetricsV2MetricsFetcherTest {
httpClient.requestsReceived.get(1));
assertEquals(1, values.size());
assertEquals("host-3.yahoo.com", values.get(0).getFirst());
- assertEquals(0.10, values.get(0).getSecond().cpu(), delta);
- assertEquals(0.15, values.get(0).getSecond().memory(), delta);
- assertEquals(0.20, values.get(0).getSecond().disk(), delta);
+ assertEquals(0.10, values.get(0).getSecond().load().cpu(), delta);
+ assertEquals(0.15, values.get(0).getSecond().load().memory(), delta);
+ assertEquals(0.20, values.get(0).getSecond().load().disk(), delta);
assertEquals(3, values.get(0).getSecond().generation(), delta);
assertTrue(values.get(0).getSecond().stable());
}
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/QuestMetricsDbTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/QuestMetricsDbTest.java
index f465a57d76a..1e42cb4d4cb 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/QuestMetricsDbTest.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/QuestMetricsDbTest.java
@@ -54,9 +54,9 @@ public class QuestMetricsDbTest {
assertEquals(1000, nodeTimeSeries1.get(0).size());
NodeMetricSnapshot snapshot = nodeTimeSeries1.get(0).asList().get(0);
assertEquals(startTime.plus(Duration.ofSeconds(1)), snapshot.at());
- assertEquals(0.1, snapshot.cpu(), delta);
- assertEquals(0.2, snapshot.memory(), delta);
- assertEquals(0.4, snapshot.disk(), delta);
+ assertEquals(0.1, snapshot.load().cpu(), delta);
+ assertEquals(0.2, snapshot.load().memory(), delta);
+ assertEquals(0.4, snapshot.load().disk(), delta);
assertEquals(1, snapshot.generation(), delta);
assertEquals(30, snapshot.queryRate(), delta);