aboutsummaryrefslogtreecommitdiffstats
path: root/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning
diff options
context:
space:
mode:
authorHåkon Hallingstad <hakon@yahooinc.com>2023-11-05 12:32:50 +0100
committerHåkon Hallingstad <hakon@yahooinc.com>2023-11-05 12:32:50 +0100
commit1daa89e21477af3830d95e895b9034949eee9d98 (patch)
tree0146b37541c47fc0b47bd8eb6efab5e32b70e6e4 /node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning
parenta0c08e57b4fabeb6cfb4b8272cd9d69308a6856e (diff)
Rename to AllocationParams
Diffstat (limited to 'node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning')
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/AllocationParams.java29
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/CapacityPolicies.java6
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/ClusterAllocationParams.java29
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/HostProvisioner.java2
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeAllocation.java4
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeCandidate.java2
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodePrioritizer.java4
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeRepositoryProvisioner.java16
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeResourceLimits.java8
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/Preparer.java10
10 files changed, 55 insertions, 55 deletions
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 :