summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjonmv <venstad@gmail.com>2023-11-10 15:57:51 +0100
committerjonmv <venstad@gmail.com>2023-11-10 15:57:51 +0100
commit420ef8a588a95d15e16765bdf12ae8be746a4e20 (patch)
tree6b4cde730c1a1227dddd3ead5d21f8e9e913b6c3
parent301c83ac05b11b0ad9c623b495f8b41448432660 (diff)
Check for equailty of cloud account instead
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/LoadBalancerProvisioner.java6
1 files changed, 3 insertions, 3 deletions
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/LoadBalancerProvisioner.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/LoadBalancerProvisioner.java
index 968e963f1a8..04813b476ca 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/LoadBalancerProvisioner.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/LoadBalancerProvisioner.java
@@ -280,16 +280,16 @@ public class LoadBalancerProvisioner {
private Optional<LoadBalancerInstance> provisionFromPool(LoadBalancerSpec spec, NodeType type) {
if (type != NodeType.tenant) return Optional.empty();
if ( ! spec.settings().isDefault()) return Optional.empty();
- if ( ! spec.cloudAccount().isUnspecified()) return Optional.empty();
if (preProvisionPoolSize.value() == 0) return Optional.empty();
try (Lock lock = db.lock(preProvisionOwner)) {
long tail = db.readLoadBalancerPoolTail();
if (tail >= db.readLoadBalancerPoolHead()) return Optional.empty();
ClusterSpec.Id slot = slotId(tail);
+ Optional<LoadBalancer> candidate = db.readLoadBalancer(new LoadBalancerId(preProvisionOwner, slot));
+ if (candidate.flatMap(LoadBalancer::instance).map(instance -> ! instance.cloudAccount().equals(spec.cloudAccount())).orElse(false)) return Optional.empty();
db.incrementLoadBalancerPoolTail(); // Acquire now; if we fail below, no one else will use the possibly inconsistent instance.
- LoadBalancer chosen = db.readLoadBalancer(new LoadBalancerId(preProvisionOwner, slotId(tail)))
- .orElseThrow(() -> new IllegalStateException("could not find load balancer " + slot + " in pre-provisioned pool"));
+ LoadBalancer chosen = candidate.orElseThrow(() -> new IllegalStateException("could not find load balancer " + slot + " in pre-provisioned pool"));
if (chosen.state() != State.active || chosen.instance().isEmpty())
throw new IllegalStateException("expected active load balancer in pre-provisioned pool, but got " + chosen);
service.reallocate(chosen.instance().get(), spec);