aboutsummaryrefslogtreecommitdiffstats
path: root/node-repository
diff options
context:
space:
mode:
authorjonmv <venstad@gmail.com>2023-11-10 15:57:51 +0100
committerjonmv <venstad@gmail.com>2023-11-10 16:01:25 +0100
commit0683219b08f692a1c1e6648625cf28544215657a (patch)
tree50eaaa5456930c8748db3e8bb4e1034592181c59 /node-repository
parent70731c8d30e071cd3a7f64f51c7db3870747ab93 (diff)
Check for equailty of cloud account instead
Diffstat (limited to 'node-repository')
-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);