diff options
author | Martin Polden <mpolden@mpolden.no> | 2019-06-27 09:49:47 +0200 |
---|---|---|
committer | Martin Polden <mpolden@mpolden.no> | 2019-06-27 09:59:29 +0200 |
commit | cf86c9add933a23176137af617f19be5e0508c2c (patch) | |
tree | f0ad9792105de290d962b378bb3b70e1daab4c59 /node-repository | |
parent | 0f7b172e464f4a89d22b12fe0e6ff9082e420b8c (diff) |
Avoid reading all load balancers on prepare
Diffstat (limited to 'node-repository')
2 files changed, 10 insertions, 9 deletions
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/CuratorDatabaseClient.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/CuratorDatabaseClient.java index fea30d3660c..bdc9991c1aa 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/CuratorDatabaseClient.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/CuratorDatabaseClient.java @@ -483,7 +483,7 @@ public class CuratorDatabaseClient { Collections::unmodifiableMap)); } - private Optional<LoadBalancer> readLoadBalancer(LoadBalancerId id) { + public Optional<LoadBalancer> readLoadBalancer(LoadBalancerId id) { return read(loadBalancerPath(id), LoadBalancerSerializer::fromJson); } 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 0828f3369a2..4077022c7cc 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 @@ -103,18 +103,19 @@ public class LoadBalancerProvisioner { try (var loadBalancersLock = db.lockLoadBalancers()) { var id = new LoadBalancerId(application, clusterId); var now = nodeRepository.clock().instant(); - var loadBalancer = db.readLoadBalancers().get(id); - if (loadBalancer == null && activate) return; // Nothing to activate as this load balancer was never prepared + var loadBalancer = db.readLoadBalancer(id); + if (loadBalancer.isEmpty() && activate) return; // Nothing to activate as this load balancer was never prepared - var force = loadBalancer != null && loadBalancer.state() != LoadBalancer.State.active; + var force = loadBalancer.isPresent() && loadBalancer.get().state() != LoadBalancer.State.active; var instance = create(application, clusterId, allocatedContainers(application, clusterId), force); - if (loadBalancer == null) { - loadBalancer = new LoadBalancer(id, instance, LoadBalancer.State.reserved, now); + LoadBalancer newLoadBalancer; + if (loadBalancer.isEmpty()) { + newLoadBalancer = new LoadBalancer(id, instance, LoadBalancer.State.reserved, now); } else { - var newState = activate ? LoadBalancer.State.active : loadBalancer.state(); - loadBalancer = loadBalancer.with(instance).with(newState, now); + var newState = activate ? LoadBalancer.State.active : loadBalancer.get().state(); + newLoadBalancer = loadBalancer.get().with(instance).with(newState, now); } - db.writeLoadBalancer(loadBalancer); + db.writeLoadBalancer(newLoadBalancer); } } } |