diff options
author | Håkon Hallingstad <hakon@yahooinc.com> | 2023-11-05 12:32:50 +0100 |
---|---|---|
committer | Håkon Hallingstad <hakon@yahooinc.com> | 2023-11-05 12:32:50 +0100 |
commit | 1daa89e21477af3830d95e895b9034949eee9d98 (patch) | |
tree | 0146b37541c47fc0b47bd8eb6efab5e32b70e6e4 | |
parent | a0c08e57b4fabeb6cfb4b8272cd9d69308a6856e (diff) |
Rename to AllocationParams
23 files changed, 96 insertions, 96 deletions
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/NodeRepository.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/NodeRepository.java index 5a7426a90a9..d31621cf2d5 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/NodeRepository.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/NodeRepository.java @@ -26,7 +26,7 @@ import com.yahoo.vespa.hosted.provision.persistence.CuratorDb; import com.yahoo.vespa.hosted.provision.persistence.DnsNameResolver; import com.yahoo.vespa.hosted.provision.persistence.JobControlFlags; import com.yahoo.vespa.hosted.provision.persistence.NameResolver; -import com.yahoo.vespa.hosted.provision.provisioning.ClusterAllocationParams; +import com.yahoo.vespa.hosted.provision.provisioning.AllocationParams; import com.yahoo.vespa.hosted.provision.provisioning.ContainerImages; import com.yahoo.vespa.hosted.provision.provisioning.FirmwareChecks; import com.yahoo.vespa.hosted.provision.provisioning.HostResourcesCalculator; @@ -198,7 +198,7 @@ public class NodeRepository extends AbstractComponent { public int spareCount() { return spareCount; } /** Returns whether nodes must be allocated to hosts that are exclusive to the cluster type. */ - public boolean exclusiveClusterType(ClusterAllocationParams params, ClusterSpec cluster) { + public boolean exclusiveClusterType(AllocationParams params, ClusterSpec cluster) { return params.sharedHost().hasClusterType(cluster.type().name()); } @@ -207,7 +207,7 @@ public class NodeRepository extends AbstractComponent { * Exclusive allocation requires that the wanted node resources matches the advertised resources of the node * perfectly. */ - public boolean exclusiveAllocation(ClusterAllocationParams params, ClusterSpec clusterSpec) { + public boolean exclusiveAllocation(AllocationParams params, ClusterSpec clusterSpec) { return clusterSpec.isExclusive() || ( clusterSpec.type().isContainer() && zone.system().isPublic() && !zone.environment().isTest() ) || ( !zone().cloud().allowHostSharing() && !params.sharedHost().supportsClusterType(clusterSpec.type().name())); diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/AllocatableResources.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/AllocatableResources.java index 433866a8635..119724ac154 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/AllocatableResources.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/AllocatableResources.java @@ -9,7 +9,7 @@ import com.yahoo.config.provision.NodeResources; import com.yahoo.vespa.hosted.provision.Node; import com.yahoo.vespa.hosted.provision.NodeList; import com.yahoo.vespa.hosted.provision.NodeRepository; -import com.yahoo.vespa.hosted.provision.provisioning.ClusterAllocationParams; +import com.yahoo.vespa.hosted.provision.provisioning.AllocationParams; import java.time.Duration; import java.util.List; @@ -34,7 +34,7 @@ public class AllocatableResources { private final double fulfilment; /** Fake allocatable resources from requested capacity */ - public AllocatableResources(ClusterAllocationParams params, + public AllocatableResources(AllocationParams params, ClusterResources requested, ClusterSpec clusterSpec, NodeRepository nodeRepository) { @@ -169,7 +169,7 @@ public class AllocatableResources { .withBandwidthGbps(sum.bandwidthGbps() / nodes.size()); } - public static Optional<AllocatableResources> from(ClusterAllocationParams params, + public static Optional<AllocatableResources> from(AllocationParams params, ClusterResources wantedResources, ApplicationId applicationId, ClusterSpec clusterSpec, @@ -256,7 +256,7 @@ public class AllocatableResources { } } - private static AllocatableResources calculateAllocatableResources(ClusterAllocationParams params, + private static AllocatableResources calculateAllocatableResources(AllocationParams params, ClusterResources wantedResources, NodeRepository nodeRepository, ApplicationId applicationId, 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 400a231a2c8..c597dc60e70 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 @@ -5,7 +5,7 @@ import com.yahoo.config.provision.ClusterResources; import com.yahoo.config.provision.IntRange; import com.yahoo.config.provision.NodeResources; import com.yahoo.vespa.hosted.provision.NodeRepository; -import com.yahoo.vespa.hosted.provision.provisioning.ClusterAllocationParams; +import com.yahoo.vespa.hosted.provision.provisioning.AllocationParams; import java.util.Optional; @@ -35,7 +35,7 @@ public class AllocationOptimizer { * @return the best allocation, if there are any possible legal allocations, fulfilling the target * fully or partially, within the limits */ - public Optional<AllocatableResources> findBestAllocation(ClusterAllocationParams params, + public Optional<AllocatableResources> findBestAllocation(AllocationParams params, Load loadAdjustment, ClusterModel model, Limits limits) { @@ -76,7 +76,7 @@ public class AllocationOptimizer { } /** Returns the max resources of a host one node may allocate. */ - private NodeResources maxResourcesOf(ClusterAllocationParams params, NodeResources hostResources, ClusterModel model) { + private NodeResources maxResourcesOf(AllocationParams params, NodeResources hostResources, ClusterModel model) { if (nodeRepository.exclusiveAllocation(params, model.clusterSpec())) return hostResources; // static, shared hosts: Allocate at most half of the host cpu to simplify management return hostResources.withVcpu(hostResources.vcpu() / 2); diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/Autoscaler.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/Autoscaler.java index 6aca5548f6e..e739b249696 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/Autoscaler.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/Autoscaler.java @@ -7,7 +7,7 @@ import com.yahoo.vespa.hosted.provision.NodeRepository; import com.yahoo.vespa.hosted.provision.applications.Application; import com.yahoo.vespa.hosted.provision.applications.Cluster; import com.yahoo.vespa.hosted.provision.autoscale.Autoscaling.Status; -import com.yahoo.vespa.hosted.provision.provisioning.ClusterAllocationParams; +import com.yahoo.vespa.hosted.provision.provisioning.AllocationParams; import java.time.Duration; @@ -55,7 +55,7 @@ public class Autoscaler { } private Autoscaling autoscale(Application application, Cluster cluster, NodeList clusterNodes, Limits limits) { - ClusterAllocationParams params = ClusterAllocationParams.from(nodeRepository.flagSource(), application.id(), clusterNodes.clusterSpec().vespaVersion()); + AllocationParams params = AllocationParams.from(nodeRepository.flagSource(), application.id(), clusterNodes.clusterSpec().vespaVersion()); var model = new ClusterModel(params, nodeRepository, application, 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 bcdead6b375..4b82e631c98 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 @@ -8,7 +8,7 @@ import com.yahoo.vespa.hosted.provision.NodeRepository; import com.yahoo.vespa.hosted.provision.applications.Application; import com.yahoo.vespa.hosted.provision.applications.Cluster; import com.yahoo.vespa.hosted.provision.provisioning.CapacityPolicies; -import com.yahoo.vespa.hosted.provision.provisioning.ClusterAllocationParams; +import com.yahoo.vespa.hosted.provision.provisioning.AllocationParams; import java.time.Clock; import java.time.Duration; @@ -47,7 +47,7 @@ public class ClusterModel { // TODO: Measure this, and only take it into account with queries private static final double fixedCpuCostFraction = 0.1; - private final ClusterAllocationParams params; + private final AllocationParams params; private final NodeRepository nodeRepository; private final Application application; private final ClusterSpec clusterSpec; @@ -76,7 +76,7 @@ public class ClusterModel { private Double maxQueryGrowthRate = null; private OptionalDouble averageQueryRate = null; - public ClusterModel(ClusterAllocationParams params, + public ClusterModel(AllocationParams params, NodeRepository nodeRepository, Application application, ClusterSpec clusterSpec, @@ -100,7 +100,7 @@ public class ClusterModel { this.at = clock.instant(); } - ClusterModel(ClusterAllocationParams params, + ClusterModel(AllocationParams params, NodeRepository nodeRepository, Application application, ClusterSpec 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 077c0f0d9c4..8f52f8c5c9f 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 @@ -10,7 +10,7 @@ import com.yahoo.config.provision.NodeResources; import com.yahoo.vespa.hosted.provision.NodeRepository; import com.yahoo.vespa.hosted.provision.applications.Cluster; import com.yahoo.vespa.hosted.provision.provisioning.CapacityPolicies; -import com.yahoo.vespa.hosted.provision.provisioning.ClusterAllocationParams; +import com.yahoo.vespa.hosted.provision.provisioning.AllocationParams; import java.util.Objects; @@ -66,7 +66,7 @@ public class Limits { return resources; } - public Limits fullySpecified(ClusterAllocationParams params, ClusterSpec clusterSpec, NodeRepository nodeRepository, ApplicationId applicationId) { + public Limits fullySpecified(AllocationParams params, 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); diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/HostCapacityMaintainer.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/HostCapacityMaintainer.java index 7512f08ac05..50ccad911b5 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/HostCapacityMaintainer.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/HostCapacityMaintainer.java @@ -25,7 +25,7 @@ import com.yahoo.vespa.hosted.provision.NodeRepository; import com.yahoo.vespa.hosted.provision.node.Agent; import com.yahoo.vespa.hosted.provision.node.History; import com.yahoo.vespa.hosted.provision.node.IP; -import com.yahoo.vespa.hosted.provision.provisioning.ClusterAllocationParams; +import com.yahoo.vespa.hosted.provision.provisioning.AllocationParams; import com.yahoo.vespa.hosted.provision.provisioning.HostProvisionRequest; import com.yahoo.vespa.hosted.provision.provisioning.HostProvisioner; import com.yahoo.vespa.hosted.provision.provisioning.HostProvisioner.HostSharing; @@ -158,7 +158,7 @@ public class HostCapacityMaintainer extends NodeRepositoryMaintainer { private List<Node> provision(NodeList nodeList) { ApplicationId application = ApplicationId.defaultId(); - var params = ClusterAllocationParams.from(flagSource, application, Vtag.currentVersion); + var params = AllocationParams.from(flagSource, application, Vtag.currentVersion); return provisionUntilNoDeficit(params, application, nodeList).stream() .sorted(comparing(node -> node.history().events().stream() @@ -191,7 +191,7 @@ public class HostCapacityMaintainer extends NodeRepositoryMaintainer { * @throws IllegalStateException if there was an algorithmic problem, and in case message * should be sufficient (avoid no stack trace). */ - private List<Node> provisionUntilNoDeficit(ClusterAllocationParams params, ApplicationId application, NodeList nodeList) { + private List<Node> provisionUntilNoDeficit(AllocationParams params, ApplicationId application, NodeList nodeList) { List<ClusterCapacity> preprovisionCapacity = preprovisionCapacityFlag.value(); // Worst-case each ClusterCapacity in preprovisionCapacity will require an allocation. @@ -218,7 +218,7 @@ public class HostCapacityMaintainer extends NodeRepositoryMaintainer { } } - private List<Node> provisionHosts(ClusterAllocationParams params, int count, NodeResources nodeResources, Optional<String> clusterType, NodeList allNodes) { + private List<Node> provisionHosts(AllocationParams params, int count, NodeResources nodeResources, Optional<String> clusterType, NodeList allNodes) { try { if (throttler.throttle(allNodes, Agent.HostCapacityMaintainer)) { throw new NodeAllocationException("Host provisioning is being throttled", true); @@ -264,7 +264,7 @@ public class HostCapacityMaintainer extends NodeRepositoryMaintainer { private Optional<ClusterCapacity> allocatePreprovisionCapacity(ApplicationId application, List<ClusterCapacity> preprovisionCapacity, ArrayList<Node> mutableNodes, - ClusterAllocationParams params) { + AllocationParams params) { for (int clusterIndex = 0; clusterIndex < preprovisionCapacity.size(); ++clusterIndex) { ClusterCapacity clusterCapacity = preprovisionCapacity.get(clusterIndex); LockedNodeList allNodes = new LockedNodeList(mutableNodes, () -> {}); @@ -282,7 +282,7 @@ public class HostCapacityMaintainer extends NodeRepositoryMaintainer { } private List<Node> findCandidates(ApplicationId application, ClusterCapacity clusterCapacity, int clusterIndex, - LockedNodeList allNodes, ClusterAllocationParams params) { + LockedNodeList allNodes, AllocationParams params) { NodeResources nodeResources = toNodeResources(clusterCapacity); // We'll allocate each ClusterCapacity as a unique cluster in a dummy application diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/HostFlavorUpgrader.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/HostFlavorUpgrader.java index a3094b382bf..7fcd5322675 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/HostFlavorUpgrader.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/HostFlavorUpgrader.java @@ -12,7 +12,7 @@ import com.yahoo.vespa.hosted.provision.NodeRepository; import com.yahoo.vespa.hosted.provision.node.Agent; import com.yahoo.vespa.hosted.provision.node.Allocation; import com.yahoo.vespa.hosted.provision.provisioning.HostProvisioner; -import com.yahoo.vespa.hosted.provision.provisioning.ClusterAllocationParams; +import com.yahoo.vespa.hosted.provision.provisioning.AllocationParams; import java.time.Duration; import java.util.HashSet; @@ -72,7 +72,7 @@ public class HostFlavorUpgrader extends NodeRepositoryMaintainer { if (parent.isEmpty()) continue; if (exhaustedFlavors.contains(parent.get().flavor().name())) continue; Allocation allocation = node.allocation().get(); - var params = ClusterAllocationParams.from(nodeRepository().flagSource(), allocation.owner(), allocation.membership().cluster().vespaVersion()); + var params = AllocationParams.from(nodeRepository().flagSource(), allocation.owner(), allocation.membership().cluster().vespaVersion()); Predicate<NodeResources> realHostResourcesWithinLimits = resources -> nodeRepository().nodeResourceLimits().isWithinRealLimits(params, resources, allocation.owner(), allocation.membership().cluster()); if (!hostProvisioner.canUpgradeFlavor(parent.get(), node, realHostResourcesWithinLimits)) continue; if (parent.get().status().wantToUpgradeFlavor() && allocation.membership().retired()) continue; // Already upgrading diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/AllocationParams.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/AllocationParams.java new file mode 100644 index 00000000000..50601978bba --- /dev/null +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/AllocationParams.java @@ -0,0 +1,29 @@ +// Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +package com.yahoo.vespa.hosted.provision.provisioning; + +import com.yahoo.component.Version; +import com.yahoo.config.provision.ApplicationId; +import com.yahoo.vespa.flags.FetchVector; +import com.yahoo.vespa.flags.FlagSource; +import com.yahoo.vespa.flags.Flags; +import com.yahoo.vespa.flags.PermanentFlags; +import com.yahoo.vespa.flags.custom.SharedHost; + +/** + * Miscellaneous constants used while preparing an allocation for a cluster. + * + * <p>Typically used to access feature flags that must be evaluated once at the start of the preparation, + * to avoid inconsistencies if evaluated multiple times during.</p> + * + * @author hakonhall + */ +public record AllocationParams(boolean makeExclusive, SharedHost sharedHost) { + public static AllocationParams from(FlagSource flagSource, ApplicationId application, Version version) { + return new AllocationParams(Flags.MAKE_EXCLUSIVE.bindTo(flagSource) + .with(FetchVector.Dimension.TENANT_ID, application.tenant().value()) + .with(FetchVector.Dimension.INSTANCE_ID, application.serializedForm()) + .with(FetchVector.Dimension.VESPA_VERSION, version.toFullString()) + .value(), + PermanentFlags.SHARED_HOST.bindTo(flagSource).value()); + } +} 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 d831917bff3..2986e4efabb 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 @@ -86,18 +86,18 @@ public class CapacityPolicies { return target; } - public ClusterResources specifyFully(ClusterAllocationParams params, ClusterResources resources, ClusterSpec clusterSpec, ApplicationId applicationId) { + public ClusterResources specifyFully(AllocationParams params, ClusterResources resources, ClusterSpec clusterSpec, ApplicationId applicationId) { return resources.with(specifyFully(params, resources.nodeResources(), clusterSpec, applicationId)); } - public NodeResources specifyFully(ClusterAllocationParams params, NodeResources resources, ClusterSpec clusterSpec, ApplicationId applicationId) { + public NodeResources specifyFully(AllocationParams params, NodeResources resources, ClusterSpec clusterSpec, ApplicationId applicationId) { NodeResources amended = resources.withUnspecifiedFieldsFrom(defaultResources(params, clusterSpec, applicationId).with(DiskSpeed.any)); // TODO jonmv: remove this after all apps are 8.248.8 or above; architecture for admin nodes was not picked up before this. if (clusterSpec.vespaVersion().isBefore(Version.fromString("8.248.8"))) amended = amended.with(resources.architecture()); return amended; } - private NodeResources defaultResources(ClusterAllocationParams params, ClusterSpec clusterSpec, ApplicationId applicationId) { + private NodeResources defaultResources(AllocationParams params, ClusterSpec clusterSpec, ApplicationId applicationId) { if (clusterSpec.type() == ClusterSpec.Type.admin) { Architecture architecture = adminClusterArchitecture(applicationId); diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/ClusterAllocationParams.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/ClusterAllocationParams.java deleted file mode 100644 index 1e2350a65ac..00000000000 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/ClusterAllocationParams.java +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -package com.yahoo.vespa.hosted.provision.provisioning; - -import com.yahoo.component.Version; -import com.yahoo.config.provision.ApplicationId; -import com.yahoo.vespa.flags.FetchVector; -import com.yahoo.vespa.flags.FlagSource; -import com.yahoo.vespa.flags.Flags; -import com.yahoo.vespa.flags.PermanentFlags; -import com.yahoo.vespa.flags.custom.SharedHost; - -/** - * Miscellaneous constants used while preparing an allocation for a cluster. - * - * <p>Typically used to access feature flags that was evaluated once and at the start of the preparation, - * to avoid inconsistencies if evaluated multiple times during preparation.</p> - * - * @author hakonhall - */ -public record ClusterAllocationParams(boolean makeExclusive, SharedHost sharedHost) { - public static ClusterAllocationParams from(FlagSource flagSource, ApplicationId application, Version version) { - return new ClusterAllocationParams(Flags.MAKE_EXCLUSIVE.bindTo(flagSource) - .with(FetchVector.Dimension.TENANT_ID, application.tenant().value()) - .with(FetchVector.Dimension.INSTANCE_ID, application.serializedForm()) - .with(FetchVector.Dimension.VESPA_VERSION, version.toFullString()) - .value(), - PermanentFlags.SHARED_HOST.bindTo(flagSource).value()); - } -} diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/HostProvisioner.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/HostProvisioner.java index f407628399f..dd70d4e6ccd 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/HostProvisioner.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/HostProvisioner.java @@ -53,7 +53,7 @@ public interface HostProvisioner { * @return a runnable that waits for the provisioning request to finish. It can be run without holding any locks, * but may fail with an exception that should be propagated to the user initiating prepare() */ - Runnable provisionHosts(ClusterAllocationParams params, + Runnable provisionHosts(AllocationParams params, HostProvisionRequest request, Predicate<NodeResources> realHostResourcesWithinLimits, Consumer<List<ProvisionedHost>> whenProvisioned) throws NodeAllocationException; diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeAllocation.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeAllocation.java index 0c830d55471..720d4c000b0 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeAllocation.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeAllocation.java @@ -84,10 +84,10 @@ class NodeAllocation { private final NodeRepository nodeRepository; private final Optional<String> requiredHostFlavor; - private final ClusterAllocationParams params; + private final AllocationParams params; NodeAllocation(NodeList allNodes, ApplicationId application, ClusterSpec cluster, NodeSpec requested, - Supplier<Integer> nextIndex, NodeRepository nodeRepository, ClusterAllocationParams params) { + Supplier<Integer> nextIndex, NodeRepository nodeRepository, AllocationParams params) { this.allNodes = allNodes; this.application = application; this.cluster = cluster; diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeCandidate.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeCandidate.java index 5993320e25f..f5f83cdfef0 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeCandidate.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeCandidate.java @@ -596,7 +596,7 @@ public abstract class NodeCandidate implements Nodelike, Comparable<NodeCandidat public ExclusivityViolation violatesExclusivity(ClusterSpec cluster, ApplicationId application, boolean exclusiveClusterType, boolean exclusiveAllocation, boolean exclusiveProvisioning, - boolean hostSharing, NodeList allNodes, ClusterAllocationParams params) { + boolean hostSharing, NodeList allNodes, AllocationParams params) { if (parentHostname().isEmpty()) return ExclusivityViolation.NONE; if (type() != NodeType.tenant) return ExclusivityViolation.NONE; diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodePrioritizer.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodePrioritizer.java index c5788051930..18024d9a8ab 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodePrioritizer.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodePrioritizer.java @@ -41,7 +41,7 @@ public class NodePrioritizer { private final boolean dynamicProvisioning; private final boolean allowHostSharing; private final boolean exclusiveAllocation; - private final ClusterAllocationParams params; + private final AllocationParams params; private final boolean canAllocateToSpareHosts; private final boolean topologyChange; private final int currentClusterSize; @@ -49,7 +49,7 @@ public class NodePrioritizer { public NodePrioritizer(LockedNodeList allNodes, ApplicationId application, ClusterSpec clusterSpec, NodeSpec nodeSpec, boolean dynamicProvisioning, boolean allowHostSharing, IP.Allocation.Context ipAllocationContext, Nodes nodes, - HostResourcesCalculator hostResourcesCalculator, int spareCount, boolean exclusiveAllocation, ClusterAllocationParams params) { + HostResourcesCalculator hostResourcesCalculator, int spareCount, boolean exclusiveAllocation, AllocationParams params) { this.allNodes = allNodes; this.calculator = hostResourcesCalculator; this.capacity = new HostCapacity(this.allNodes, hostResourcesCalculator); 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 931fe425598..cfb95ce835e 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 @@ -85,7 +85,7 @@ public class NodeRepositoryProvisioner implements Provisioner { public List<HostSpec> prepare(ApplicationId application, ClusterSpec cluster, Capacity requested, ProvisionLogger logger) { log.log(Level.FINE, "Received deploy prepare request for " + requested + " for application " + application + ", cluster " + cluster); - var params = ClusterAllocationParams.from(nodeRepository.flagSource(), application, cluster.vespaVersion()); + var params = AllocationParams.from(nodeRepository.flagSource(), application, cluster.vespaVersion()); validate(params, application, cluster, requested, logger); NodeResources resources; @@ -111,7 +111,7 @@ public class NodeRepositoryProvisioner implements Provisioner { requireCompatibleResources(resources, cluster)); } - private void validate(ClusterAllocationParams params, ApplicationId application, ClusterSpec cluster, Capacity requested, ProvisionLogger logger) { + private void validate(AllocationParams params, ApplicationId application, ClusterSpec cluster, Capacity requested, ProvisionLogger logger) { if (cluster.group().isPresent()) throw new IllegalArgumentException("Node requests cannot specify a group"); nodeRepository.nodeResourceLimits().ensureWithinAdvertisedLimits(params, "Min", requested.minResources().nodeResources(), application, cluster); @@ -133,7 +133,7 @@ public class NodeRepositoryProvisioner implements Provisioner { } } - private NodeResources getNodeResources(ClusterAllocationParams params, ClusterSpec cluster, NodeResources nodeResources, ApplicationId applicationId) { + private NodeResources getNodeResources(AllocationParams params, ClusterSpec cluster, NodeResources nodeResources, ApplicationId applicationId) { return capacityPolicies.specifyFully(params, nodeResources, cluster, applicationId); } @@ -166,7 +166,7 @@ public class NodeRepositoryProvisioner implements Provisioner { * Returns the target cluster resources, a value between the min and max in the requested capacity, * and updates the application store with the received min and max. */ - private ClusterResources decideTargetResources(ClusterAllocationParams params, ApplicationId applicationId, ClusterSpec clusterSpec, Capacity requested) { + private ClusterResources decideTargetResources(AllocationParams params, ApplicationId applicationId, ClusterSpec clusterSpec, Capacity requested) { try (Mutex lock = nodeRepository.applications().lock(applicationId)) { var application = nodeRepository.applications().get(applicationId).orElse(Application.empty(applicationId)) .withCluster(clusterSpec.id(), clusterSpec.isExclusive(), requested); @@ -177,7 +177,7 @@ public class NodeRepositoryProvisioner implements Provisioner { } /** Returns the current resources of this cluster, or requested min if none */ - private ClusterResources currentResources(ClusterAllocationParams params, + private ClusterResources currentResources(AllocationParams params, Application application, ClusterSpec clusterSpec, Cluster cluster, @@ -195,13 +195,13 @@ public class NodeRepositoryProvisioner implements Provisioner { return within(params, Limits.of(requested), model, firstDeployment); } - private ClusterResources initialResourcesFrom(ClusterAllocationParams params, Capacity requested, ClusterSpec clusterSpec, ApplicationId applicationId) { + private ClusterResources initialResourcesFrom(AllocationParams params, Capacity requested, ClusterSpec clusterSpec, ApplicationId applicationId) { return capacityPolicies.specifyFully(params, requested.minResources(), clusterSpec, applicationId); } /** Make the minimal adjustments needed to the current resources to stay within the limits */ - private ClusterResources within(ClusterAllocationParams params, + private ClusterResources within(AllocationParams params, Limits limits, ClusterModel model, boolean firstDeployment) { @@ -281,7 +281,7 @@ public class NodeRepositoryProvisioner implements Provisioner { return nodeResources; } - private IllegalArgumentException newNoAllocationPossible(ClusterAllocationParams params, ClusterSpec spec, Limits limits) { + private IllegalArgumentException newNoAllocationPossible(AllocationParams params, ClusterSpec spec, Limits limits) { StringBuilder message = new StringBuilder("No allocation possible within ").append(limits); if (nodeRepository.exclusiveAllocation(params, spec) && findNearestNodeResources(limits).isPresent()) diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeResourceLimits.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeResourceLimits.java index 47b0a61d448..dee594f16bb 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeResourceLimits.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeResourceLimits.java @@ -31,7 +31,7 @@ public class NodeResourceLimits { } /** Validates the resources applications ask for (which are in "advertised" resource space) */ - public void ensureWithinAdvertisedLimits(ClusterAllocationParams params, String type, NodeResources requested, ApplicationId applicationId, ClusterSpec cluster) { + public void ensureWithinAdvertisedLimits(AllocationParams params, String type, NodeResources requested, ApplicationId applicationId, ClusterSpec cluster) { boolean exclusive = nodeRepository.exclusiveAllocation(params, cluster); if (! requested.vcpuIsUnspecified() && requested.vcpu() < minAdvertisedVcpu(applicationId, cluster, exclusive)) illegal(type, "vcpu", "", cluster, requested.vcpu(), minAdvertisedVcpu(applicationId, cluster, exclusive)); @@ -48,14 +48,14 @@ public class NodeResourceLimits { } /** Returns whether the real resources we'll end up with on a given tenant node are within limits */ - public boolean isWithinRealLimits(ClusterAllocationParams params, NodeCandidate candidateNode, ApplicationId applicationId, ClusterSpec cluster) { + public boolean isWithinRealLimits(AllocationParams params, NodeCandidate candidateNode, ApplicationId applicationId, ClusterSpec cluster) { if (candidateNode.type() != NodeType.tenant) return true; // Resource limits only apply to tenant nodes return isWithinRealLimits(params, nodeRepository.resourcesCalculator().realResourcesOf(candidateNode, nodeRepository), applicationId, cluster); } /** Returns whether the real resources we'll end up with on a given tenant node are within limits */ - public boolean isWithinRealLimits(ClusterAllocationParams params, NodeResources realResources, ApplicationId applicationId, ClusterSpec cluster) { + public boolean isWithinRealLimits(AllocationParams params, NodeResources realResources, ApplicationId applicationId, ClusterSpec cluster) { if (realResources.isUnspecified()) return true; if (realResources.vcpu() < minRealVcpu(params, applicationId, cluster)) return false; @@ -115,7 +115,7 @@ public class NodeResourceLimits { return 4; } - private double minRealVcpu(ClusterAllocationParams params, ApplicationId applicationId, ClusterSpec cluster) { + private double minRealVcpu(AllocationParams params, ApplicationId applicationId, ClusterSpec cluster) { return minAdvertisedVcpu(applicationId, cluster, nodeRepository.exclusiveAllocation(params, cluster)); } diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/Preparer.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/Preparer.java index 3eaec67a89a..68027d990ea 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/Preparer.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/Preparer.java @@ -67,7 +67,7 @@ public class Preparer { // Note: This operation may make persisted changes to the set of reserved and inactive nodes, // but it may not change the set of active nodes, as the active nodes must stay in sync with the // active config model which is changed on activate - public List<Node> prepare(ClusterAllocationParams params, ApplicationId application, ClusterSpec cluster, NodeSpec requested) { + public List<Node> prepare(AllocationParams params, ApplicationId application, ClusterSpec cluster, NodeSpec requested) { log.log(Level.FINE, () -> "Preparing " + cluster.type().name() + " " + cluster.id() + " with requested resources " + requested.resources().orElse(NodeResources.unspecified())); @@ -89,14 +89,14 @@ public class Preparer { } } - private ApplicationMutex parentLockOrNull(ClusterAllocationParams params, NodeType type) { + private ApplicationMutex parentLockOrNull(AllocationParams params, NodeType type) { return NodeCandidate.canMakeHostExclusive(params.makeExclusive(), type, nodeRepository.zone().cloud().allowHostSharing()) ? nodeRepository.applications().lock(InfrastructureApplication.withNodeType(type.parentNodeType()).id()) : null; } /// Note that this will write to the node repo. - private List<Node> prepareWithLocks(ApplicationId application, ClusterSpec cluster, NodeSpec requested, NodeIndices indices, ClusterAllocationParams params) { + private List<Node> prepareWithLocks(ApplicationId application, ClusterSpec cluster, NodeSpec requested, NodeIndices indices, AllocationParams params) { Runnable waiter = null; List<Node> acceptedNodes; try (Mutex lock = nodeRepository.applications().lock(application); @@ -187,7 +187,7 @@ public class Preparer { } private NodeAllocation prepareAllocation(ApplicationId application, ClusterSpec cluster, NodeSpec requested, - Supplier<Integer> nextIndex, LockedNodeList allNodes, ClusterAllocationParams params) { + Supplier<Integer> nextIndex, LockedNodeList allNodes, AllocationParams params) { validateAccount(requested.cloudAccount(), application, allNodes); NodeAllocation allocation = new NodeAllocation(allNodes, application, cluster, requested, nextIndex, nodeRepository, params); var allocationContext = IP.Allocation.Context.from(nodeRepository.zone().cloud().name(), @@ -231,7 +231,7 @@ public class Preparer { (hostType == NodeType.host || hostType.isConfigServerHostLike()); } - private HostSharing hostSharing(ClusterAllocationParams params, ClusterSpec cluster, NodeType hostType) { + private HostSharing hostSharing(AllocationParams params, ClusterSpec cluster, NodeType hostType) { if ( hostType.isSharable()) return nodeRepository.exclusiveProvisioning(cluster) ? HostSharing.provision : nodeRepository.exclusiveAllocation(params, cluster) ? HostSharing.exclusive : diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/ApplicationSerializer.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/ApplicationSerializer.java index 5fca466d8ee..b3a1e7d819d 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/ApplicationSerializer.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/ApplicationSerializer.java @@ -13,7 +13,7 @@ import com.yahoo.vespa.hosted.provision.applications.ScalingEvent; import com.yahoo.vespa.hosted.provision.autoscale.Autoscaling; import com.yahoo.vespa.hosted.provision.autoscale.Limits; import com.yahoo.vespa.hosted.provision.autoscale.Load; -import com.yahoo.vespa.hosted.provision.provisioning.ClusterAllocationParams; +import com.yahoo.vespa.hosted.provision.provisioning.AllocationParams; import java.net.URI; import java.util.List; @@ -25,7 +25,7 @@ import java.util.List; */ public class ApplicationSerializer { - public static Slime toSlime(ClusterAllocationParams params, + public static Slime toSlime(AllocationParams params, Application application, NodeList applicationNodes, NodeRepository nodeRepository, @@ -35,7 +35,7 @@ public class ApplicationSerializer { return slime; } - private static void toSlime(ClusterAllocationParams params, + private static void toSlime(AllocationParams params, Application application, NodeList applicationNodes, NodeRepository nodeRepository, @@ -46,7 +46,7 @@ public class ApplicationSerializer { clustersToSlime(params, application, applicationNodes, nodeRepository, object.setObject("clusters")); } - private static void clustersToSlime(ClusterAllocationParams params, + private static void clustersToSlime(AllocationParams params, Application application, NodeList applicationNodes, NodeRepository nodeRepository, @@ -54,7 +54,7 @@ public class ApplicationSerializer { application.clusters().values().forEach(cluster -> toSlime(params, application, cluster, applicationNodes, nodeRepository, clustersObject)); } - private static void toSlime(ClusterAllocationParams params, + private static void toSlime(AllocationParams params, Application application, Cluster cluster, NodeList applicationNodes, diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/NodesV2ApiHandler.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/NodesV2ApiHandler.java index 5f96895b655..7728e8611da 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/NodesV2ApiHandler.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/NodesV2ApiHandler.java @@ -47,7 +47,7 @@ import com.yahoo.vespa.hosted.provision.node.filter.NodeOsVersionFilter; import com.yahoo.vespa.hosted.provision.node.filter.NodeTypeFilter; import com.yahoo.vespa.hosted.provision.node.filter.ParentHostFilter; import com.yahoo.vespa.hosted.provision.maintenance.InfraApplicationRedeployer; -import com.yahoo.vespa.hosted.provision.provisioning.ClusterAllocationParams; +import com.yahoo.vespa.hosted.provision.provisioning.AllocationParams; import com.yahoo.vespa.hosted.provision.restapi.NodesResponse.ResponseType; import com.yahoo.vespa.orchestrator.Orchestrator; import com.yahoo.yolean.Exceptions; @@ -465,7 +465,7 @@ public class NodesV2ApiHandler extends ThreadedHttpRequestHandler { Optional<Application> application = nodeRepository.applications().get(id); if (application.isEmpty()) return ErrorResponse.notFoundError("No application '" + id + "'"); - var params = ClusterAllocationParams.from(nodeRepository.flagSource(), id, Vtag.currentVersion); + var params = AllocationParams.from(nodeRepository.flagSource(), id, Vtag.currentVersion); Slime slime = ApplicationSerializer.toSlime(params, application.get(), nodeRepository.nodes().list(Node.State.active).owner(id), diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockHostProvisioner.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockHostProvisioner.java index 7bf6aec60ca..3814632adce 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockHostProvisioner.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockHostProvisioner.java @@ -12,7 +12,7 @@ import com.yahoo.config.provision.NodeType; import com.yahoo.vespa.hosted.provision.Node; import com.yahoo.vespa.hosted.provision.node.Agent; import com.yahoo.vespa.hosted.provision.node.IP; -import com.yahoo.vespa.hosted.provision.provisioning.ClusterAllocationParams; +import com.yahoo.vespa.hosted.provision.provisioning.AllocationParams; import com.yahoo.vespa.hosted.provision.provisioning.FatalProvisioningException; import com.yahoo.vespa.hosted.provision.provisioning.HostIpConfig; import com.yahoo.vespa.hosted.provision.provisioning.HostProvisionRequest; @@ -74,7 +74,7 @@ public class MockHostProvisioner implements HostProvisioner { } @Override - public Runnable provisionHosts(ClusterAllocationParams params, + public Runnable provisionHosts(AllocationParams params, HostProvisionRequest request, Predicate<NodeResources> realHostResourcesWithinLimits, Consumer<List<ProvisionedHost>> whenProvisioned) throws NodeAllocationException { @@ -268,7 +268,7 @@ public class MockHostProvisioner implements HostProvisioner { /** Fail call to {@link MockHostProvisioner#provision(com.yahoo.vespa.hosted.provision.Node)} */ failProvisioning, - /** Fail call to {@link MockHostProvisioner#provisionHosts(ClusterAllocationParams, HostProvisionRequest, Predicate, Consumer)} */ + /** Fail call to {@link MockHostProvisioner#provisionHosts(AllocationParams, HostProvisionRequest, Predicate, Consumer)} */ failProvisionRequest, /** Fail call to {@link MockHostProvisioner#deprovision(com.yahoo.vespa.hosted.provision.Node)} */ diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/ClusterModelTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/ClusterModelTest.java index 561cc279669..36b2917132a 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/ClusterModelTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/ClusterModelTest.java @@ -10,7 +10,7 @@ import com.yahoo.test.ManualClock; import com.yahoo.vespa.hosted.provision.applications.Application; import com.yahoo.vespa.hosted.provision.applications.Cluster; import com.yahoo.vespa.hosted.provision.applications.Status; -import com.yahoo.vespa.hosted.provision.provisioning.ClusterAllocationParams; +import com.yahoo.vespa.hosted.provision.provisioning.AllocationParams; import com.yahoo.vespa.hosted.provision.provisioning.ProvisioningTester; import org.junit.Test; @@ -90,7 +90,7 @@ public class ClusterModelTest { Cluster cluster = cluster(); application = application.with(cluster); var nodeRepository = new ProvisioningTester.Builder().build().nodeRepository(); - var params = ClusterAllocationParams.from(nodeRepository.flagSource(), application.id(), clusterSpec.vespaVersion()); + var params = AllocationParams.from(nodeRepository.flagSource(), application.id(), clusterSpec.vespaVersion()); return new ClusterModel(params, nodeRepository, application.with(status), diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/Fixture.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/Fixture.java index c79cbb06ad9..58b16c601a0 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/Fixture.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/Fixture.java @@ -26,7 +26,7 @@ import com.yahoo.vespa.hosted.provision.autoscale.awsnodes.AwsHostResourcesCalcu import com.yahoo.vespa.hosted.provision.autoscale.awsnodes.AwsNodeTypes; import com.yahoo.vespa.hosted.provision.provisioning.DynamicProvisioningTester; import com.yahoo.vespa.hosted.provision.provisioning.HostResourcesCalculator; -import com.yahoo.vespa.hosted.provision.provisioning.ClusterAllocationParams; +import com.yahoo.vespa.hosted.provision.provisioning.AllocationParams; import java.time.Duration; import java.util.Arrays; @@ -40,7 +40,7 @@ import java.util.Optional; */ public class Fixture { - final ClusterAllocationParams params; + final AllocationParams params; final DynamicProvisioningTester tester; final ApplicationId applicationId; final ClusterSpec clusterSpec; @@ -50,7 +50,7 @@ public class Fixture { Autoscaling lastAutoscaling = Autoscaling.empty(); public Fixture(Fixture.Builder builder, Optional<ClusterResources> initialResources, int hostCount) { - params = ClusterAllocationParams.from(builder.flagSource, builder.application, builder.cluster.vespaVersion()); + params = AllocationParams.from(builder.flagSource, builder.application, builder.cluster.vespaVersion()); applicationId = builder.application; clusterSpec = builder.cluster; capacity = builder.capacity; |