summaryrefslogtreecommitdiffstats
path: root/node-repository/src/main/java
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@gmail.com>2022-08-03 16:00:30 +0200
committerJon Bratseth <bratseth@gmail.com>2022-08-03 16:00:30 +0200
commitbeeee393fd2479ae092936ea313e92cebe3899e3 (patch)
tree7c51d820759b8d542014e3edce795a8fd255b89a /node-repository/src/main/java
parent075a95282a5c54d13e1e506764ed70e57cdc3826 (diff)
Now we can adjust for redundancy when preserving
Diffstat (limited to 'node-repository/src/main/java')
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/AllocationOptimizer.java12
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/ClusterModel.java2
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/ResourceTarget.java19
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeRepositoryProvisioner.java2
4 files changed, 12 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 48ba701849c..8c01696d275 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
@@ -51,8 +51,8 @@ public class AllocationOptimizer {
// Adjust for redundancy: Node in group if groups = 1, an extra group if multiple groups
// TODO: Make the best choice between those two based on size and redundancy setting instead
- int nodesAdjustedForRedundancy = target.adjustForRedundancy() ? clusterModel.nodesAdjustedForRedundancy(nodes, groups) : nodes;
- int groupsAdjustedForRedundancy = target.adjustForRedundancy() ? clusterModel.groupsAdjustedForRedundancy(nodes, groups) : groups;
+ int nodesAdjustedForRedundancy = clusterModel.nodesAdjustedForRedundancy(nodes, groups);
+ int groupsAdjustedForRedundancy = clusterModel.groupsAdjustedForRedundancy(nodes, groups);
ClusterResources next = new ClusterResources(nodes,
groups,
@@ -79,12 +79,8 @@ public class AllocationOptimizer {
ResourceTarget target,
AllocatableClusterResources current,
ClusterModel clusterModel) {
- int currentNodes = clusterModel.nodeCount();
- int currentGroups = clusterModel.groupCount();
- if (target.adjustForRedundancy()) {
- currentNodes = clusterModel.nodesAdjustedForRedundancy(clusterModel.nodeCount(), clusterModel.groupCount());
- currentGroups = clusterModel.groupsAdjustedForRedundancy(clusterModel.nodeCount(), clusterModel.groupCount());
- }
+ int currentNodes = clusterModel.nodesAdjustedForRedundancy(clusterModel.nodeCount(), clusterModel.groupCount());
+ int currentGroups = clusterModel.groupsAdjustedForRedundancy(clusterModel.nodeCount(), clusterModel.groupCount());
var scaled = clusterModel.loadWith(nodes, groups)
.scaled(Load.one().divide(clusterModel.loadWith(currentNodes, currentGroups)).scaled(target.resources()));
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/ClusterModel.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/ClusterModel.java
index 5af1325dd91..abcd626e64a 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/ClusterModel.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/ClusterModel.java
@@ -152,7 +152,7 @@ public class ClusterModel {
return (int)Math.ceil((double)nodeCount() / groupCount());
}
- /** Returns the load with the given nodes+groups relative to achieving the target with the allocation in this. */
+ /** Returns the relative load adjustment given these nodes+groups relative to node nodes+groups in this. */
public Load loadWith(int nodes, int groups) {
if (clusterSpec().type() == ClusterSpec.Type.content) { // load scales with node share of content
int groupSize = nodes / groups;
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/ResourceTarget.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/ResourceTarget.java
index 8d2f98187b3..7bc019caabb 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/ResourceTarget.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/ResourceTarget.java
@@ -16,38 +16,31 @@ import java.util.OptionalDouble;
*/
public class ResourceTarget {
- private final boolean adjustForRedundancy;
-
/** The target real resources per node, assuming the node assignment where this was decided */
private final NodeResources resources;
- private ResourceTarget(NodeResources resources, boolean adjustForRedundancy) {
+ private ResourceTarget(NodeResources resources) {
this.resources = resources;
- this.adjustForRedundancy = adjustForRedundancy;
}
- /** Are the target resources given by this including redundancy or not */
- public boolean adjustForRedundancy() { return adjustForRedundancy; }
-
/** Returns the target resources per node in terms of the current allocation */
public NodeResources resources() { return resources; }
@Override
public String toString() {
- return "target " + resources + (adjustForRedundancy ? "(with redundancy adjustment) " : "");
+ return "target " + resources;
}
/** Create a target of achieving ideal load given a current load */
public static ResourceTarget idealLoad(ClusterModel clusterModel,
AllocatableClusterResources current) {
- System.out.println("Adjustment: " + clusterModel.loadAdjustment());
- System.out.println("Target: " + new ResourceTarget(clusterModel.loadAdjustment().scaled(current.realResources().nodeResources()), false));
- return new ResourceTarget(clusterModel.loadAdjustment().scaled(current.realResources().nodeResources()), true);
+ return new ResourceTarget(clusterModel.loadAdjustment().scaled(current.realResources().nodeResources()));
}
/** Crete a target of preserving a current allocation */
- public static ResourceTarget preserve(AllocatableClusterResources current) {
- return new ResourceTarget(current.realResources().nodeResources(), false);
+ public static ResourceTarget preserve(ClusterModel clusterModel,
+ AllocatableClusterResources current) {
+ return new ResourceTarget(current.realResources().nodeResources());
}
}
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 4ffe04d748c..8e00a623e1c 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
@@ -196,7 +196,7 @@ public class NodeRepositoryProvisioner implements Provisioner {
if (! firstDeployment && currentAsAdvertised.isWithin(limits.min(), limits.max())) return currentAsAdvertised;
// Otherwise, find an allocation that preserves the current resources as well as possible
- return allocationOptimizer.findBestAllocation(ResourceTarget.preserve(current),
+ return allocationOptimizer.findBestAllocation(ResourceTarget.preserve(clusterModel, current),
current,
clusterModel,
limits)