aboutsummaryrefslogtreecommitdiffstats
path: root/node-repository/src/main/java
diff options
context:
space:
mode:
authorMartin Polden <mpolden@mpolden.no>2022-05-18 15:39:51 +0200
committerMartin Polden <mpolden@mpolden.no>2022-05-18 15:39:51 +0200
commit550194c7b1f86616971b67bec5cdf662e4d98b9e (patch)
tree99888f1ecfc2a8bd30100e2429ad971178f6830c /node-repository/src/main/java
parent7335f8dcf8fc19453270463f6316ae6e12ec763e (diff)
Let CapacityPolicies decide exclusivity based on cloud account
Diffstat (limited to 'node-repository/src/main/java')
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/CapacityPolicies.java1
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeAllocation.java2
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeSpec.java5
3 files changed, 6 insertions, 2 deletions
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 91b10121217..00671e14768 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
@@ -117,6 +117,7 @@ public class CapacityPolicies {
* A security feature which only makes sense for prod.
*/
public boolean decideExclusivity(Capacity capacity, boolean requestedExclusivity) {
+ if (zone.environment() == Environment.prod && capacity.cloudAccount().isPresent()) return true; // Implicit exclusive when using custom cloud account
return requestedExclusivity && (capacity.isRequired() || zone.environment() == Environment.prod);
}
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 768fa51f029..a26df62be27 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
@@ -193,7 +193,7 @@ class NodeAllocation {
// In dynamic provisioned zones, exclusivity is violated if...
if (nodeRepository.zone().getCloud().dynamicProvisioning()) {
- // If either the parent is dedicated to a cluster type different from this cluster
+ // If either the parent is dedicated to a cluster type different from this cluster
return ! candidate.parent.flatMap(Node::exclusiveToClusterType).map(cluster.type()::equals).orElse(true) ||
// or this cluster is requiring exclusivity, but the host is exclusive to a different owner
(requestedNodes.isExclusive() && !candidate.parent.flatMap(Node::exclusiveToApplicationId).map(application::equals).orElse(false));
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeSpec.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeSpec.java
index cbd15a979d1..90cd4a440f2 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeSpec.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeSpec.java
@@ -101,9 +101,12 @@ public interface NodeSpec {
private CountNodeSpec(int count, NodeResources resources, boolean exclusive, boolean canFail, Optional<CloudAccount> cloudAccount) {
this.count = count;
this.requestedNodeResources = Objects.requireNonNull(resources, "Resources must be specified");
- this.exclusive = exclusive || cloudAccount.isPresent(); // Implicitly exclusive if using a custom cloud account
+ this.exclusive = exclusive;
this.canFail = canFail;
this.cloudAccount = Objects.requireNonNull(cloudAccount);
+ if (cloudAccount.isPresent() && !exclusive) {
+ throw new IllegalArgumentException("Node spec with custom cloud account requires exclusive=true");
+ }
}
@Override