aboutsummaryrefslogtreecommitdiffstats
path: root/node-repository
diff options
context:
space:
mode:
authorValerij Fredriksen <valerij92@gmail.com>2021-01-21 15:41:29 +0100
committerValerij Fredriksen <valerij92@gmail.com>2021-01-21 15:41:29 +0100
commit4cc9fbdfe1e368f401581762af156063cef327d7 (patch)
tree731139d34b427cab2cea7021a711d2267c48d102 /node-repository
parenta38d2c9c684fa9639803bbc82a7b7129c335a7cb (diff)
Use the same activation transaction to write LBs
Diffstat (limited to 'node-repository')
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/LoadBalancerProvisioner.java15
1 files changed, 9 insertions, 6 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 0b5a04ca42c..b66dab58e55 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
@@ -7,6 +7,7 @@ import com.yahoo.config.provision.ApplicationTransaction;
import com.yahoo.config.provision.ClusterSpec;
import com.yahoo.config.provision.HostName;
import com.yahoo.config.provision.NodeType;
+import com.yahoo.config.provision.ProvisionLock;
import com.yahoo.config.provision.TenantName;
import com.yahoo.config.provision.exception.LoadBalancerServiceException;
import com.yahoo.transaction.NestedTransaction;
@@ -85,7 +86,9 @@ public class LoadBalancerProvisioner {
ClusterSpec.Id clusterId = effectiveId(cluster);
List<Node> nodes = nodesOf(clusterId, application);
LoadBalancerId loadBalancerId = requireNonClashing(new LoadBalancerId(application, clusterId));
- provision(loadBalancerId, nodes, false);
+ ApplicationTransaction transaction = new ApplicationTransaction(new ProvisionLock(application, lock), new NestedTransaction());
+ provision(transaction, loadBalancerId, nodes, false);
+ transaction.nested().commit();
}
}
@@ -102,7 +105,7 @@ public class LoadBalancerProvisioner {
public void activate(Set<ClusterSpec> clusters, ApplicationTransaction transaction) {
for (var cluster : loadBalancedClustersOf(transaction.application()).entrySet()) {
// Provision again to ensure that load balancer instance is re-configured with correct nodes
- provision(transaction.application(), cluster.getKey(), cluster.getValue(), true);
+ provision(transaction, cluster.getKey(), cluster.getValue());
}
// Deactivate any surplus load balancers, i.e. load balancers for clusters that have been removed
var surplusLoadBalancers = surplusLoadBalancersOf(transaction.application(), clusters.stream()
@@ -175,7 +178,7 @@ public class LoadBalancerProvisioner {
}
/** Idempotently provision a load balancer for given application and cluster */
- private void provision(LoadBalancerId id, List<Node> nodes, boolean activate) {
+ private void provision(ApplicationTransaction transaction, LoadBalancerId id, List<Node> nodes, boolean activate) {
var now = nodeRepository.clock().instant();
var loadBalancer = db.readLoadBalancer(id);
if (loadBalancer.isEmpty() && activate) return; // Nothing to activate as this load balancer was never prepared
@@ -192,11 +195,11 @@ public class LoadBalancerProvisioner {
log.log(Level.FINE, "Moving " + newLoadBalancer.id() + " to state " + newLoadBalancer.state());
}
}
- db.writeLoadBalancer(newLoadBalancer);
+ db.writeLoadBalancers(List.of(newLoadBalancer), transaction.nested());
}
- private void provision(ApplicationId application, ClusterSpec.Id clusterId, List<Node> nodes, boolean activate) {
- provision(new LoadBalancerId(application, clusterId), nodes, activate);
+ private void provision(ApplicationTransaction transaction, ClusterSpec.Id clusterId, List<Node> nodes) {
+ provision(transaction, new LoadBalancerId(transaction.application(), clusterId), nodes, true);
}
private LoadBalancerInstance provisionInstance(LoadBalancerId id, List<Node> nodes, boolean force) {