summaryrefslogtreecommitdiffstats
path: root/node-repository
diff options
context:
space:
mode:
authorValerij Fredriksen <freva@users.noreply.github.com>2020-05-28 13:57:03 +0200
committerGitHub <noreply@github.com>2020-05-28 13:57:03 +0200
commit13d1a3491b1daac7a6058300e83014200e30386c (patch)
tree5646022809030cad69b02ba0da9f26879a4eeb7f /node-repository
parent8a146d0f9bcfbac5dcaa050aff398e1dd700101a (diff)
parent24dd7d4c0004c3f6f76e3b9aef35fdcb8951c921 (diff)
Merge pull request #13417 from vespa-engine/bratseth/use-average-real-resources
Use average real resources
Diffstat (limited to 'node-repository')
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/AllocatableClusterResources.java13
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeRepositoryProvisioner.java6
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.