diff options
author | Valerij Fredriksen <freva@users.noreply.github.com> | 2020-05-28 13:57:03 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-05-28 13:57:03 +0200 |
commit | 13d1a3491b1daac7a6058300e83014200e30386c (patch) | |
tree | 5646022809030cad69b02ba0da9f26879a4eeb7f /node-repository | |
parent | 8a146d0f9bcfbac5dcaa050aff398e1dd700101a (diff) | |
parent | 24dd7d4c0004c3f6f76e3b9aef35fdcb8951c921 (diff) |
Merge pull request #13417 from vespa-engine/bratseth/use-average-real-resources
Use average real resources
Diffstat (limited to 'node-repository')
2 files changed, 14 insertions, 5 deletions
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/AllocatableClusterResources.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/AllocatableClusterResources.java index b5a5d1e06b4..84f0b962d34 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/AllocatableClusterResources.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/AllocatableClusterResources.java @@ -44,7 +44,7 @@ public class AllocatableClusterResources { public AllocatableClusterResources(List<Node> nodes, NodeRepository nodeRepository) { this.nodes = nodes.size(); this.groups = (int)nodes.stream().map(node -> node.allocation().get().membership().cluster().group()).distinct().count(); - this.realResources = nodeRepository.resourcesCalculator().realResourcesOf(nodes.get(0), nodeRepository); + this.realResources = averageRealResourcesOf(nodes, nodeRepository); // Average since we average metrics over nodes this.advertisedResources = nodes.get(0).flavor().resources(); this.clusterType = nodes.get(0).allocation().get().membership().cluster().type(); this.fulfilment = 1; @@ -119,6 +119,17 @@ public class AllocatableClusterResources { (fulfilment < 1.0 ? " (fulfilment " + fulfilment + ")" : ""); } + private static NodeResources averageRealResourcesOf(List<Node> nodes, NodeRepository nodeRepository) { + NodeResources sum = new NodeResources(0, 0, 0, 0); + for (Node node : nodes) + sum = sum.add(nodeRepository.resourcesCalculator().realResourcesOf(node, nodeRepository).justNumbers()); + return nodes.get(0).flavor().resources().justNonNumbers() + .withVcpu(sum.vcpu() / nodes.size()) + .withMemoryGb(sum.memoryGb() / nodes.size()) + .withDiskGb(sum.diskGb() / nodes.size()) + .withBandwidthGbps(sum.bandwidthGbps() / nodes.size()); + } + /** * Returns the best matching allocatable node resources given ideal node resources, * or empty if none available within the limits. diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeRepositoryProvisioner.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeRepositoryProvisioner.java index 433a69a063e..3ddfb646cf3 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeRepositoryProvisioner.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeRepositoryProvisioner.java @@ -59,10 +59,6 @@ public class NodeRepositoryProvisioner implements Provisioner { private final Optional<LoadBalancerProvisioner> loadBalancerProvisioner; private final NodeResourceLimits nodeResourceLimits; - int getSpareCapacityProd() { - return SPARE_CAPACITY_PROD; - } - @Inject public NodeRepositoryProvisioner(NodeRepository nodeRepository, Zone zone, ProvisionServiceProvider provisionServiceProvider, FlagSource flagSource) { @@ -137,6 +133,8 @@ public class NodeRepositoryProvisioner implements Provisioner { loadBalancerProvisioner.ifPresent(lbProvisioner -> lbProvisioner.deactivate(application, transaction)); } + int getSpareCapacityProd() { return SPARE_CAPACITY_PROD; } + /** * Returns the target cluster resources, a value between the min and max in the requested capacity, * and updates the application store with the received min and max. |