summaryrefslogtreecommitdiffstats
path: root/node-repository
diff options
context:
space:
mode:
authorMartin Polden <mpolden@mpolden.no>2019-06-27 09:50:21 +0200
committerMartin Polden <mpolden@mpolden.no>2019-06-27 09:59:29 +0200
commit1d291d7da0d62590a9d2cec9cb8e15953efa0464 (patch)
tree9d9442fb3fc2d856539166ff53794bad78de0e42 /node-repository
parentcf86c9add933a23176137af617f19be5e0508c2c (diff)
Read and write all load balancers on construction
Diffstat (limited to 'node-repository')
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/CuratorDatabaseClient.java19
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/LoadBalancerProvisioner.java7
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);
+ }
+ }
}
/**