diff options
author | Jon Bratseth <bratseth@gmail.com> | 2023-01-22 15:13:07 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-01-22 15:13:07 +0100 |
commit | 45577c7d7d2c70637d63f89702c3229df312edc3 (patch) | |
tree | 77d7095ffeb6a631ee701546a8f0b18735bf47bd /config-model/src/main/java/com/yahoo/config | |
parent | 85bb4e8d16ec06bba6c3b45ea7cb1f084f5e988d (diff) | |
parent | 1d5806f068309e18b70fee03b7a22e111c180607 (diff) |
Merge pull request #25667 from vespa-engine/bratseth/group-size
Support a group size constraint in content clusters
Diffstat (limited to 'config-model/src/main/java/com/yahoo/config')
-rw-r--r-- | config-model/src/main/java/com/yahoo/config/model/provision/InMemoryProvisioner.java | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/config-model/src/main/java/com/yahoo/config/model/provision/InMemoryProvisioner.java b/config-model/src/main/java/com/yahoo/config/model/provision/InMemoryProvisioner.java index f44849e185f..105a9669d1f 100644 --- a/config-model/src/main/java/com/yahoo/config/model/provision/InMemoryProvisioner.java +++ b/config-model/src/main/java/com/yahoo/config/model/provision/InMemoryProvisioner.java @@ -1,6 +1,7 @@ // Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.config.model.provision; +import com.yahoo.collections.IntRange; import com.yahoo.collections.ListMap; import com.yahoo.collections.Pair; import com.yahoo.config.model.api.HostProvisioner; @@ -153,13 +154,18 @@ public class InMemoryProvisioner implements HostProvisioner { requested = requested.withLimits(requested.minResources().withNodes(1), requested.maxResources().withNodes(1)); } - if (useMaxResources) - return prepare(cluster, requested.maxResources(), requested.isRequired(), requested.canFail()); - else - return prepare(cluster, requested.minResources(), requested.isRequired(), requested.canFail()); + IntRange groupRange = IntRange.of(requested.minResources().groups(), requested.maxResources().groups()); + if (useMaxResources) { + int groups = groupRange.fit(requested.maxResources().nodes() / requested.groupSize().to().orElse(1)); + return prepare(cluster, requested.maxResources(),groups, requested.isRequired(), requested.canFail()); + } + else { + int groups = groupRange.fit(requested.minResources().nodes() / requested.groupSize().from().orElse(1)); + return prepare(cluster, requested.minResources(), groups, requested.isRequired(), requested.canFail()); + } } - public List<HostSpec> prepare(ClusterSpec cluster, ClusterResources requested, boolean required, boolean canFail) { + public List<HostSpec> prepare(ClusterSpec cluster, ClusterResources requested, int groups, boolean required, boolean canFail) { if (cluster.group().isPresent() && requested.groups() > 1) throw new IllegalArgumentException("Cannot both be specifying a group and ask for groups to be created"); @@ -169,7 +175,7 @@ public class InMemoryProvisioner implements HostProvisioner { if (alwaysReturnOneNode) nodes = 1; - int groups = Math.min(requested.groups(), nodes); + groups = Math.min(groups, nodes); List<HostSpec> allocation = new ArrayList<>(); if (groups == 1) { |