diff options
author | Jon Bratseth <bratseth@oath.com> | 2020-04-26 19:08:28 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-04-26 19:08:28 +0200 |
commit | 88a1d5141a2c762310763bf4d3d0abd6262833a4 (patch) | |
tree | 76c574da119467bf0640729449fa527e4fec699b | |
parent | 24538b73e1c976a376226193ab39533cccbd70a4 (diff) | |
parent | 0818b4a010cda88004cb5ad77bb7108de0fc96d8 (diff) |
Merge pull request #13071 from vespa-engine/bratseth/handle-unspecified-resources
Handle unspecified resources
-rw-r--r-- | node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeRepositoryProvisioner.java | 26 |
1 files changed, 12 insertions, 14 deletions
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 434860ccb30..4000354243f 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 @@ -153,13 +153,7 @@ public class NodeRepositoryProvisioner implements Provisioner { if (nodes.isEmpty()) return requested.minResources(); // New deployment: Start at min long groups = nodes.stream().map(node -> node.allocation().get().membership().cluster().group()).distinct().count(); - // Settings which are not autoscaled should always be taken from the currently requested capacity - // and for those min and max are always the same - NodeResources nodeResources = nodes.get(0).allocation().get().requestedResources() - .withBandwidthGbps(requested.minResources().nodeResources().bandwidthGbps()) - .with(requested.minResources().nodeResources().diskSpeed()) - .with(requested.minResources().nodeResources().storageType()); - var currentResources = new ClusterResources(nodes.size(), (int)groups, nodeResources); + var currentResources = new ClusterResources(nodes.size(), (int)groups, nodes.get(0).flavor().resources()); return ensureWithin(requested.minResources(), requested.maxResources(), currentResources); } @@ -178,13 +172,17 @@ public class NodeRepositoryProvisioner implements Provisioner { groups = max.groups(); } } - double vcpu = between(min.nodeResources().vcpu(), max.nodeResources().vcpu(), current.nodeResources().vcpu()); - double memoryGb = between(min.nodeResources().memoryGb(), max.nodeResources().memoryGb(), current.nodeResources().memoryGb()); - double diskGb = between(min.nodeResources().diskGb(), max.nodeResources().diskGb(), current.nodeResources().diskGb()); - NodeResources nodeResources = current.nodeResources().withVcpu(vcpu) - .withMemoryGb(memoryGb) - .withDiskGb(diskGb); - return new ClusterResources(nodes, groups, nodeResources); + if (min.nodeResources() != NodeResources.unspecified && max.nodeResources() != NodeResources.unspecified) { + double vcpu = between(min.nodeResources().vcpu(), max.nodeResources().vcpu(), current.nodeResources().vcpu()); + double memoryGb = between(min.nodeResources().memoryGb(), max.nodeResources().memoryGb(), current.nodeResources().memoryGb()); + double diskGb = between(min.nodeResources().diskGb(), max.nodeResources().diskGb(), current.nodeResources().diskGb()); + // Combine computed scaled resources with requested non-scaled resources (for which min=max) + NodeResources nodeResources = min.nodeResources().withVcpu(vcpu).withMemoryGb(memoryGb).withDiskGb(diskGb); + return new ClusterResources(nodes, groups, nodeResources); + } + else { + return new ClusterResources(nodes, groups, current.nodeResources()); + } } private int between(int min, int max, int n) { |