aboutsummaryrefslogtreecommitdiffstats
path: root/node-repository/src/main/java
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@vespa.ai>2024-05-12 18:21:07 +0200
committerJon Bratseth <bratseth@vespa.ai>2024-05-12 18:21:07 +0200
commit4cdc7e11b72be1752e5624dd28d6654cd54475d9 (patch)
tree67738c6d79545fb4d48dac2daf8141dac365195b /node-repository/src/main/java
parent00b6a2b9cf73cd6ac4308ec6cf8e623c809623ee (diff)
Make CapacityPolicies independent of NodeRepository
Diffstat (limited to 'node-repository/src/main/java')
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/ClusterModel.java9
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/Limits.java2
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/CapacityPolicies.java15
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeRepositoryProvisioner.java2
4 files changed, 16 insertions, 12 deletions
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 2173e9a4aa9..ece84cfd909 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
@@ -48,6 +48,7 @@ public class ClusterModel {
private static final double fixedCpuCostFraction = 0.1;
private final NodeRepository nodeRepository;
+ private final CapacityPolicies capacityPolicies;
private final Application application;
private final ClusterSpec clusterSpec;
private final Cluster cluster;
@@ -84,6 +85,7 @@ public class ClusterModel {
MetricsDb metricsDb,
Clock clock) {
this.nodeRepository = nodeRepository;
+ this.capacityPolicies = new CapacityPolicies(nodeRepository.zone(), nodeRepository.exclusivity(), nodeRepository.flagSource());
this.application = application;
this.clusterSpec = clusterSpec;
this.cluster = cluster;
@@ -108,6 +110,7 @@ public class ClusterModel {
ClusterTimeseries clusterTimeseries,
ClusterNodesTimeseries nodeTimeseries) {
this.nodeRepository = nodeRepository;
+ this.capacityPolicies = new CapacityPolicies(nodeRepository.zone(), nodeRepository.exclusivity(), nodeRepository.flagSource());
this.application = application;
this.clusterSpec = clusterSpec;
this.cluster = cluster;
@@ -436,9 +439,9 @@ public class ClusterModel {
double averageReal() {
if (nodes.isEmpty()) { // we're estimating
- var initialResources = new CapacityPolicies(nodeRepository).specifyFully(cluster.minResources().nodeResources(),
- clusterSpec,
- application.id());
+ var initialResources = capacityPolicies.specifyFully(cluster.minResources().nodeResources(),
+ clusterSpec,
+ application.id());
return nodeRepository.resourcesCalculator().requestToReal(initialResources,
cloudAccount(),
nodeRepository.exclusivity().allocation(clusterSpec),
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/Limits.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/Limits.java
index ab93e585c88..2cd06706d7f 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/Limits.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/Limits.java
@@ -68,7 +68,7 @@ public class Limits {
public Limits fullySpecified(ClusterSpec clusterSpec, NodeRepository nodeRepository, ApplicationId applicationId) {
if (this.isEmpty()) throw new IllegalStateException("Unspecified limits can not be made fully specified");
- var capacityPolicies = new CapacityPolicies(nodeRepository);
+ var capacityPolicies = new CapacityPolicies(nodeRepository.zone(), nodeRepository.exclusivity(), nodeRepository.flagSource());
return new Limits(capacityPolicies.specifyFully(min, clusterSpec, applicationId),
capacityPolicies.specifyFully(max, clusterSpec, applicationId),
groupSize);
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/CapacityPolicies.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/CapacityPolicies.java
index 79e65b21003..bb9aaccd1e3 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/CapacityPolicies.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/CapacityPolicies.java
@@ -8,12 +8,13 @@ import com.yahoo.config.provision.CloudName;
import com.yahoo.config.provision.ClusterResources;
import com.yahoo.config.provision.ClusterSpec;
import com.yahoo.config.provision.Environment;
+import com.yahoo.config.provision.Exclusivity;
import com.yahoo.config.provision.NodeResources;
import com.yahoo.config.provision.NodeResources.DiskSpeed;
import com.yahoo.config.provision.Zone;
+import com.yahoo.vespa.flags.FlagSource;
import com.yahoo.vespa.flags.PermanentFlags;
import com.yahoo.vespa.flags.StringFlag;
-import com.yahoo.vespa.hosted.provision.NodeRepository;
import java.util.Map;
import java.util.TreeMap;
@@ -30,14 +31,14 @@ import static java.util.Objects.requireNonNull;
*/
public class CapacityPolicies {
- private final NodeRepository nodeRepository;
private final Zone zone;
+ private final Exclusivity exclusivity;
private final StringFlag adminClusterNodeArchitecture;
- public CapacityPolicies(NodeRepository nodeRepository) {
- this.nodeRepository = nodeRepository;
- this.zone = nodeRepository.zone();
- this.adminClusterNodeArchitecture = PermanentFlags.ADMIN_CLUSTER_NODE_ARCHITECTURE.bindTo(nodeRepository.flagSource());
+ public CapacityPolicies(Zone zone, Exclusivity exclusivity, FlagSource flagSource) {
+ this.zone = zone;
+ this.exclusivity = exclusivity;
+ this.adminClusterNodeArchitecture = PermanentFlags.ADMIN_CLUSTER_NODE_ARCHITECTURE.bindTo(flagSource);
}
public Capacity applyOn(Capacity capacity, ApplicationId application, boolean exclusive) {
@@ -106,7 +107,7 @@ public class CapacityPolicies {
if (clusterSpec.type() == ClusterSpec.Type.admin) {
Architecture architecture = adminClusterArchitecture(applicationId);
- if (nodeRepository.exclusivity().allocation(clusterSpec)) {
+ if (exclusivity.allocation(clusterSpec)) {
return smallestExclusiveResources().with(architecture);
}
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 596afc3cb6b..89c508f7fa8 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
@@ -66,7 +66,7 @@ public class NodeRepositoryProvisioner implements Provisioner {
Metric metric) {
this.nodeRepository = nodeRepository;
this.allocationOptimizer = new AllocationOptimizer(nodeRepository);
- this.capacityPolicies = new CapacityPolicies(nodeRepository);
+ this.capacityPolicies = new CapacityPolicies(nodeRepository.zone(), nodeRepository.exclusivity(), nodeRepository.flagSource());
this.zone = zone;
this.loadBalancerProvisioner = provisionServiceProvider.getLoadBalancerService()
.map(lbService -> new LoadBalancerProvisioner(nodeRepository, lbService));