aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorValerij Fredriksen <valerijf@vespa.ai>2023-10-25 16:32:11 +0200
committerValerij Fredriksen <valerijf@vespa.ai>2023-10-25 16:32:11 +0200
commit1e4db6b537090b41e1582dd03b958301260ae475 (patch)
tree19be0c0bc615b2a8bd23ca5d4e879cc4e5c4ba2a
parent4f51d748cd49f5c14d008d7232a78e333151cdbd (diff)
Take lock before starting to provision in HCM
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/HostCapacityMaintainer.java20
1 files changed, 11 insertions, 9 deletions
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/HostCapacityMaintainer.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/HostCapacityMaintainer.java
index 7155a49ef58..4526933fb4a 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/HostCapacityMaintainer.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/HostCapacityMaintainer.java
@@ -229,15 +229,17 @@ public class HostCapacityMaintainer extends NodeRepositoryMaintainer {
sharingMode, clusterType.map(ClusterSpec.Type::valueOf), Optional.empty(),
nodeRepository().zone().cloud().account(), false);
List<Node> hosts = new ArrayList<>();
- hostProvisioner.provisionHosts(request,
- resources -> true,
- provisionedHosts -> {
- hosts.addAll(provisionedHosts.stream()
- .map(host -> host.generateHost(Duration.ZERO))
- .map(host -> host.withExclusiveToApplicationId(null))
- .toList());
- nodeRepository().nodes().addNodes(hosts, Agent.HostCapacityMaintainer);
- });
+ try (var lock = nodeRepository().nodes().lockUnallocated()) {
+ hostProvisioner.provisionHosts(request,
+ resources -> true,
+ provisionedHosts -> {
+ hosts.addAll(provisionedHosts.stream()
+ .map(host -> host.generateHost(Duration.ZERO))
+ .map(host -> host.withExclusiveToApplicationId(null))
+ .toList());
+ nodeRepository().nodes().addNodes(hosts, Agent.HostCapacityMaintainer);
+ });
+ }
return hosts;
} catch (NodeAllocationException | IllegalArgumentException | IllegalStateException e) {
throw new NodeAllocationException("Failed to provision " + count + " " + nodeResources + ": " + e.getMessage(),