From 1a6256ca5af8353ba257e32535edb5670307df7a Mon Sep 17 00:00:00 2001 From: Jon Bratseth Date: Wed, 24 Mar 2021 10:25:53 +0100 Subject: Refactor --- .../com/yahoo/config/provision/NodeResources.java | 2 ++ .../vespa/hosted/provision/NodeRepoStats.java | 26 +++++++++------------- .../vespa/hosted/provision/autoscale/Load.java | 10 +++++++++ 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 computeLoad(NodeList allNodes, List allNodeTimeseries) { - NodeResources totalActiveResources = new NodeResources(0, 0, 0, 0); + NodeResources totalActiveResources = NodeResources.zero(); Load load = Load.zero(); for (var nodeTimeseries : allNodeTimeseries) { Optional 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())); + } + } -- cgit v1.2.3