diff options
author | Martin Polden <mpolden@mpolden.no> | 2019-06-27 09:50:21 +0200 |
---|---|---|
committer | Martin Polden <mpolden@mpolden.no> | 2019-06-27 09:59:29 +0200 |
commit | 1d291d7da0d62590a9d2cec9cb8e15953efa0464 (patch) | |
tree | 9d9442fb3fc2d856539166ff53794bad78de0e42 /node-repository | |
parent | cf86c9add933a23176137af617f19be5e0508c2c (diff) |
Read and write all load balancers on construction
Diffstat (limited to 'node-repository')
2 files changed, 19 insertions, 7 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 bdc9991c1aa..bb70aafa312 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 @@ -473,14 +473,19 @@ public class CuratorDatabaseClient { // Load balancers - public Map<LoadBalancerId, LoadBalancer> readLoadBalancers() { + public List<LoadBalancerId> readLoadBalancerIds() { return curatorDatabase.getChildren(loadBalancersRoot).stream() .map(LoadBalancerId::fromSerializedForm) - .map(this::readLoadBalancer) - .filter(Optional::isPresent) - .map(Optional::get) - .collect(collectingAndThen(toMap(LoadBalancer::id, Function.identity()), - Collections::unmodifiableMap)); + .collect(Collectors.toUnmodifiableList()); + } + + public Map<LoadBalancerId, LoadBalancer> readLoadBalancers() { + return readLoadBalancerIds().stream() + .map(this::readLoadBalancer) + .filter(Optional::isPresent) + .map(Optional::get) + .collect(collectingAndThen(toMap(LoadBalancer::id, Function.identity()), + Collections::unmodifiableMap)); } public Optional<LoadBalancer> readLoadBalancer(LoadBalancerId id) { @@ -489,7 +494,7 @@ public class CuratorDatabaseClient { public void writeLoadBalancer(LoadBalancer loadBalancer) { NestedTransaction transaction = new NestedTransaction(); - writeLoadBalancers(Collections.singletonList(loadBalancer), transaction); + writeLoadBalancers(List.of(loadBalancer), transaction); transaction.commit(); } 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 4077022c7cc..4f0081b6a7f 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 @@ -48,6 +48,13 @@ public class LoadBalancerProvisioner { this.nodeRepository = nodeRepository; this.db = nodeRepository.database(); this.service = service; + // Read and write all load balancers to make sure they are stored in the latest version of the serialization format + try (var lock = db.lockLoadBalancers()) { + for (var id : db.readLoadBalancerIds()) { + var loadBalancer = db.readLoadBalancer(id); + loadBalancer.ifPresent(db::writeLoadBalancer); + } + } } /** |