diff options
author | Jon Bratseth <bratseth@vespa.ai> | 2024-05-12 18:21:07 +0200 |
---|---|---|
committer | Jon Bratseth <bratseth@vespa.ai> | 2024-05-12 18:21:07 +0200 |
commit | 4cdc7e11b72be1752e5624dd28d6654cd54475d9 (patch) | |
tree | 67738c6d79545fb4d48dac2daf8141dac365195b /node-repository/src/main/java | |
parent | 00b6a2b9cf73cd6ac4308ec6cf8e623c809623ee (diff) |
Make CapacityPolicies independent of NodeRepository
Diffstat (limited to 'node-repository/src/main/java')
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)); |