diff options
author | Jon Bratseth <bratseth@gmail.com> | 2021-03-24 10:45:25 +0100 |
---|---|---|
committer | Jon Bratseth <bratseth@gmail.com> | 2021-03-24 10:45:25 +0100 |
commit | 5952a324edca0939fbab3ea9939e16ef509fd40f (patch) | |
tree | 2bffc45b9a082f3662f8fc6f701aa0995530ca95 /node-repository/src/main/java/com/yahoo | |
parent | 1a6256ca5af8353ba257e32535edb5670307df7a (diff) |
Refactor
Diffstat (limited to 'node-repository/src/main/java/com/yahoo')
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)); } |