aboutsummaryrefslogtreecommitdiffstats
path: root/node-repository/src/main/java/com/yahoo
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/src/main/java/com/yahoo
parent1a6256ca5af8353ba257e32535edb5670307df7a (diff)
Refactor
Diffstat (limited to 'node-repository/src/main/java/com/yahoo')
-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
7 files changed, 24 insertions, 27 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));
}