aboutsummaryrefslogtreecommitdiffstats
path: root/node-repository
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@gmail.com>2021-03-24 10:02:29 +0100
committerJon Bratseth <bratseth@gmail.com>2021-03-24 10:02:29 +0100
commit444c3b28b18d168a6721b2a4bf46a0a7b27d2cf4 (patch)
tree94f7545b88fb3d3608732177ace422c4c1050e00 /node-repository
parent5dc0c39101d3ce578890c74ccd076243d36cf2a7 (diff)
Refactor
Diffstat (limited to 'node-repository')
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/NodeRepoStats.java17
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/Load.java25
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/NodeMetricSnapshot.java21
3 files changed, 34 insertions, 29 deletions
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/NodeRepoStats.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/NodeRepoStats.java
index 42bd6a5ef1f..f135b395b3a 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/NodeRepoStats.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/NodeRepoStats.java
@@ -58,7 +58,7 @@ public class NodeRepoStats {
private static Pair<Load, Load> computeLoad(NodeList allNodes, List<NodeTimeseries> allNodeTimeseries) {
NodeResources totalActiveResources = new NodeResources(0, 0, 0, 0);
- double cpu = 0, memory = 0, disk = 0;
+ Load load = Load.zero();
for (var nodeTimeseries : allNodeTimeseries) {
Optional<Node> node = allNodes.node(nodeTimeseries.hostname());
if (node.isEmpty() || node.get().state() != Node.State.active) continue;
@@ -66,24 +66,15 @@ public class NodeRepoStats {
Optional<NodeMetricSnapshot> snapshot = nodeTimeseries.last();
if (snapshot.isEmpty()) continue;
- cpu += snapshot.get().cpu() * node.get().resources().vcpu();
- memory += snapshot.get().memory() * node.get().resources().memoryGb();
- disk += snapshot.get().disk() * node.get().resources().diskGb();
+ load = load.add(snapshot.get().load().multiply(node.get().resources()));
totalActiveResources = totalActiveResources.add(node.get().resources().justNumbers());
}
NodeResources totalHostResources = new NodeResources(0, 0, 0, 0);
- for (var host : allNodes.hosts()) {
+ for (var host : allNodes.hosts())
totalHostResources = totalHostResources.add(host.resources().justNumbers());
- }
- Load load = new Load(divide(cpu, totalHostResources.vcpu()),
- divide(memory, totalHostResources.memoryGb()),
- divide(disk, totalHostResources.diskGb()));
- Load activeLoad = new Load(divide(cpu, totalActiveResources.vcpu()),
- divide(memory, totalActiveResources.memoryGb()),
- divide(disk, totalActiveResources.diskGb()));
- return new Pair<>(load, activeLoad);
+ return new Pair<>(load.divide(totalHostResources), load.divide(totalActiveResources));
}
private static List<ApplicationStats> computeApplicationStats(NodeList allNodes,
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 1a13c1bb6d8..1407b03e8dd 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
@@ -1,6 +1,8 @@
// 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.config.provision.NodeResources;
+
/**
* The load of a node or system, measured as fractions of max (1.0) in three dimensions.
*
@@ -20,11 +22,23 @@ public class Load {
public double memory() { return memory; }
public double disk() { return disk; }
+ public Load add(Load other) {
+ return new Load(cpu + other.cpu(), memory + other.memory(), disk + other.disk());
+ }
+
+ public Load multiply(NodeResources resources) {
+ return new Load(cpu * resources.vcpu(), memory * resources.memoryGb(), disk * resources.diskGb());
+ }
+
+ public Load divide(NodeResources resources) {
+ return new Load(divide(cpu, resources.vcpu()), divide(memory, resources.memoryGb()), divide(disk, resources.diskGb()));
+ }
+
private double requireNormalized(double value, String name) {
if (Double.isNaN(value))
- throw new IllegalArgumentException(name + " must be a number between 0 and 1, but is NaN");
- if (value < 0 || value > 1)
- throw new IllegalArgumentException(name + " must be between 0 and 1, but is " + value);
+ throw new IllegalArgumentException(name + " must be a number but is NaN");
+ if (value < 0)
+ throw new IllegalArgumentException(name + " must be zero or lager, but is " + value);
return value;
}
@@ -35,4 +49,9 @@ public class Load {
public static Load zero() { return new Load(0, 0, 0); }
+ private static double divide(double a, double b) {
+ if (a == 0 && b == 0) return 0;
+ return a / b;
+ }
+
}
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 be9f7bd4819..80fa65c7828 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
@@ -12,9 +12,7 @@ public class NodeMetricSnapshot implements Comparable<NodeMetricSnapshot> {
private final Instant at;
- private final double cpu;
- private final double memory;
- private final double disk;
+ private final Load load;
private final long generation;
private final boolean inService;
private final boolean stable;
@@ -24,9 +22,7 @@ public class NodeMetricSnapshot implements Comparable<NodeMetricSnapshot> {
long generation, boolean inService, boolean stable,
double queryRate) {
this.at = at;
- this.cpu = cpu;
- this.memory = memory;
- this.disk = disk;
+ this.load = new Load(cpu, memory, disk);
this.generation = generation;
this.inService = inService;
this.stable = stable;
@@ -34,9 +30,10 @@ public class NodeMetricSnapshot implements Comparable<NodeMetricSnapshot> {
}
public Instant at() { return at; }
- public double cpu() { return cpu; }
- public double memory() { return memory; }
- public double disk() { return disk; }
+ 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 */
public double queryRate() { return queryRate; }
@@ -53,10 +50,8 @@ public class NodeMetricSnapshot implements Comparable<NodeMetricSnapshot> {
}
@Override
- public String toString() { return "metrics at " + at + ":" +
- " cpu: " + cpu +
- " memory: " + memory +
- " disk: " + disk +
+ public String toString() { return "metrics at " + at + ": " +
+ load +
" generation: " + generation +
" inService: " + inService +
" stable: " + stable +