aboutsummaryrefslogtreecommitdiffstats
path: root/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/AllocationOptimizer.java
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@gmail.com>2020-05-18 16:10:12 +0200
committerJon Bratseth <bratseth@gmail.com>2020-05-18 16:10:12 +0200
commita7bd707706e7bfbc57bfbaa123e94b5bc2e456c7 (patch)
treee8b4601f6f277a4d4c512e90e9d39a4977bb011d /node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/AllocationOptimizer.java
parent8140f0441cfdf1c49d78b4c6d43c5f6d4e2aaa6b (diff)
Simplify
Diffstat (limited to 'node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/AllocationOptimizer.java')
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/AllocationOptimizer.java29
1 files changed, 6 insertions, 23 deletions
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/AllocationOptimizer.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/AllocationOptimizer.java
index d0969e13952..e3f3a98a560 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/AllocationOptimizer.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/AllocationOptimizer.java
@@ -15,7 +15,7 @@ import java.util.Optional;
public class AllocationOptimizer {
// The min and max nodes to consider when not using application supplied limits
- private static final int minimumNodes = 3; // Since this number includes redundancy it cannot be lower than 2
+ private static final int minimumNodes = 2; // Since this number includes redundancy it cannot be lower than 2
private static final int maximumNodes = 150;
// When a query is issued on a node the cost is the sum of a fixed cost component and a cost component
@@ -39,9 +39,12 @@ public class AllocationOptimizer {
public Optional<AllocatableClusterResources> findBestAllocation(ResourceTarget target,
AllocatableClusterResources current,
Limits limits) {
+ if (limits.isEmpty())
+ limits = new Limits(new ClusterResources(minimumNodes, 1, NodeResources.unspecified),
+ new ClusterResources(maximumNodes, maximumNodes, NodeResources.unspecified));
Optional<AllocatableClusterResources> bestAllocation = Optional.empty();
- for (int groups = minGroups(limits); groups <= maxGroups(limits); groups++) {
- for (int nodes = minNodes(limits); nodes <= maxNodes(limits); nodes++) {
+ for (int groups = limits.min().groups(); groups <= limits.max().groups(); groups++) {
+ for (int nodes = limits.min().nodes(); nodes <= limits.max().nodes(); nodes++) {
if (nodes % groups != 0) continue;
int groupSize = nodes / groups;
@@ -64,26 +67,6 @@ public class AllocationOptimizer {
return bestAllocation;
}
- private int minNodes(Limits limits) {
- if (limits.isEmpty()) return minimumNodes;
- return limits.min().nodes();
- }
-
- private int maxNodes(Limits limits) {
- if (limits.isEmpty()) return maximumNodes;
- return limits.max().nodes();
- }
-
- private int minGroups(Limits limits) {
- if (limits.isEmpty()) return 1;
- return limits.min().groups();
- }
-
- private int maxGroups(Limits limits) {
- if (limits.isEmpty()) return maximumNodes;
- return limits.max().groups();
- }
-
/**
* For the observed load this instance is initialized with, returns the resources needed per node to be at
* ideal load given a target node count