diff options
author | Jon Bratseth <bratseth@gmail.com> | 2021-03-24 10:25:53 +0100 |
---|---|---|
committer | Jon Bratseth <bratseth@gmail.com> | 2021-03-24 10:25:53 +0100 |
commit | 1a6256ca5af8353ba257e32535edb5670307df7a (patch) | |
tree | 0d2df8157d33dcce83bbd4e7525c264b12a8e2a1 | |
parent | 444c3b28b18d168a6721b2a4bf46a0a7b27d2cf4 (diff) |
Refactor
3 files changed, 22 insertions, 16 deletions
diff --git a/config-provisioning/src/main/java/com/yahoo/config/provision/NodeResources.java b/config-provisioning/src/main/java/com/yahoo/config/provision/NodeResources.java index 7f563b876a7..0548bc7520f 100644 --- a/config-provisioning/src/main/java/com/yahoo/config/provision/NodeResources.java +++ b/config-provisioning/src/main/java/com/yahoo/config/provision/NodeResources.java @@ -316,4 +316,6 @@ public class NodeResources { return value; } + public static NodeResources zero() { return new NodeResources(0, 0, 0, 0); } + } 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 f135b395b3a..ca18028ad5a 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 @@ -57,7 +57,7 @@ public class NodeRepoStats { } private static Pair<Load, Load> computeLoad(NodeList allNodes, List<NodeTimeseries> allNodeTimeseries) { - NodeResources totalActiveResources = new NodeResources(0, 0, 0, 0); + NodeResources totalActiveResources = NodeResources.zero(); Load load = Load.zero(); for (var nodeTimeseries : allNodeTimeseries) { Optional<Node> node = allNodes.node(nodeTimeseries.hostname()); @@ -70,7 +70,7 @@ public class NodeRepoStats { totalActiveResources = totalActiveResources.add(node.get().resources().justNumbers()); } - NodeResources totalHostResources = new NodeResources(0, 0, 0, 0); + NodeResources totalHostResources = NodeResources.zero(); for (var host : allNodes.hosts()) totalHostResources = totalHostResources.add(host.resources().justNumbers()); @@ -86,25 +86,19 @@ public class NodeRepoStats { .matching(node -> ! node.allocation().get().owner().instance().isTester()) .groupingBy(node -> node.allocation().get().owner()).entrySet()) { - NodeResources totalResources = new NodeResources(0, 0, 0, 0); - double utilizedCost = 0; - double totalCpu = 0, totalMemory = 0, totalDisk = 0; + NodeResources totalResources = NodeResources.zero(); + NodeResources totalUtilizedResources = NodeResources.zero(); for (var node : applicationNodes.getValue()) { var snapshot = snapshotsByHost.get(node.hostname()); if (snapshot == null) continue; - double cpu = snapshot.cpu() * node.resources().vcpu(); - double memory = snapshot.memory() * node.resources().memoryGb(); - double disk = snapshot.disk() * node.resources().diskGb(); - utilizedCost += new NodeResources(cpu, memory, disk, 0).cost(); - totalCpu += cpu; - totalMemory += memory; - totalDisk += disk; + totalResources = totalResources.add(node.resources().justNumbers()); + totalUtilizedResources = totalUtilizedResources.add(snapshot.load().scaled(node.resources().justNumbers())); } - Load load = new Load(divide(totalCpu, totalResources.vcpu()), - divide(totalMemory, totalResources.memoryGb()), - divide(totalDisk, totalResources.diskGb())); - applicationStats.add(new ApplicationStats(applicationNodes.getKey(), load, totalResources.cost(), utilizedCost)); + applicationStats.add(new ApplicationStats(applicationNodes.getKey(), + Load.byDividing(totalUtilizedResources, totalResources), + totalResources.cost(), + totalUtilizedResources.cost())); } Collections.sort(applicationStats); return applicationStats; 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 1407b03e8dd..64649b1a0ef 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,12 @@ public class Load { return new Load(divide(cpu, resources.vcpu()), divide(memory, resources.memoryGb()), divide(disk, resources.diskGb())); } + public NodeResources scaled(NodeResources resources) { + return resources.withVcpu(cpu * resources.vcpu()) + .withMemoryGb(memory * resources.memoryGb()) + .withDiskGb(disk * resources.diskGb()); + } + private double requireNormalized(double value, String name) { if (Double.isNaN(value)) throw new IllegalArgumentException(name + " must be a number but is NaN"); @@ -54,4 +60,8 @@ public class Load { return a / b; } + public static Load byDividing(NodeResources a, NodeResources b) { + return new Load(divide(a.vcpu(), b.vcpu()), divide(a.memoryGb(), b.memoryGb()), divide(a.diskGb(), b.diskGb())); + } + } |