summaryrefslogtreecommitdiffstats
path: root/node-repository
diff options
context:
space:
mode:
authorJon Marius Venstad <jonmv@users.noreply.github.com>2023-06-21 14:47:39 +0200
committerGitHub <noreply@github.com>2023-06-21 14:47:39 +0200
commitab9a09b3952447af9a3cbc6ca977dd57a7a5ff2f (patch)
tree7f68975d74a3bae40aae40498b6a59aafc7bbbb6 /node-repository
parent11c19a352cc404ec6b2d316db05f982277f8dfc4 (diff)
parent7bff70a7cf3def1ff089ee448c95ce3151e59fb9 (diff)
Merge pull request #27504 from vespa-engine/freva/unallocated-lock-while-reading
Read nodes with unallocated lock
Diffstat (limited to 'node-repository')
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/HostResumeProvisioner.java10
1 files changed, 9 insertions, 1 deletions
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/HostResumeProvisioner.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/HostResumeProvisioner.java
index 01d2c08a219..e1624183607 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/HostResumeProvisioner.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/HostResumeProvisioner.java
@@ -3,6 +3,7 @@ package com.yahoo.vespa.hosted.provision.maintenance;
import com.yahoo.config.provision.NodeType;
import com.yahoo.jdisc.Metric;
+import com.yahoo.transaction.Mutex;
import com.yahoo.vespa.hosted.provision.Node;
import com.yahoo.vespa.hosted.provision.NodeList;
import com.yahoo.vespa.hosted.provision.NodeRepository;
@@ -37,7 +38,14 @@ public class HostResumeProvisioner extends NodeRepositoryMaintainer {
@Override
protected double maintain() {
- NodeList allNodes = nodeRepository().nodes().list();
+ NodeList allNodes;
+ // Host and child nodes are written in separate transactions, but both are written while holding the
+ // unallocated lock. Hold the unallocated lock while reading nodes to ensure we get all the children
+ // of newly provisioned hosts.
+ try (Mutex ignored = nodeRepository().nodes().lockUnallocated()) {
+ allNodes = nodeRepository().nodes().list();
+ }
+
NodeList hosts = allNodes.state(Node.State.provisioned).nodeType(NodeType.host, NodeType.confighost, NodeType.controllerhost);
int failures = 0;
for (Node host : hosts) {