summaryrefslogtreecommitdiffstats
path: root/node-repository
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@verizonmedia.com>2020-01-23 10:29:19 +0100
committerJon Bratseth <bratseth@verizonmedia.com>2020-01-23 10:29:19 +0100
commitcdba1da4e60182595cd19fcf5945f98bce72d99e (patch)
treecb32bb79de76c25399afe1e84e6d34397cb91d50 /node-repository
parent137173a4d6e4914497d10b68a89699b685d6b776 (diff)
Lock node-admin app
Diffstat (limited to 'node-repository')
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/Activator.java25
1 files changed, 10 insertions, 15 deletions
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/Activator.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/Activator.java
index 57f75159093..36034b62cfb 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/Activator.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/Activator.java
@@ -94,21 +94,16 @@ class Activator {
/** When a tenant node is activated on a host, we can open up that host for use by others */
private void unreserveParentsOf(List<Node> nodes) {
- List<String> reservedParents = nodes.stream()
- .filter(node -> node.parentHostname().isPresent())
- .map(node -> nodeRepository.getNode(node.parentHostname().get()))
- .filter(parent -> parent.isPresent())
- .filter(parent -> parent.get().reservedTo().isPresent())
- .map(parent -> parent.get().hostname())
- .collect(Collectors.toList());
- if (reservedParents.isEmpty()) return;
-
- try (Mutex lock = nodeRepository.lockUnallocated()) {
- List<Node> unreserved = reservedParents.stream()
- .map(hostname -> nodeRepository.getNode(hostname).get())
- .map(host -> host.withoutReservedTo())
- .collect(Collectors.toList());
- nodeRepository.write(unreserved, lock);
+ for (Node node : nodes) {
+ if ( node.parentHostname().isEmpty()) continue;
+ Optional<Node> parent = nodeRepository.getNode(node.parentHostname().get());
+ if (parent.isEmpty()) continue;
+ if (parent.get().reservedTo().isEmpty()) continue;
+ try (Mutex lock = nodeRepository.lock(parent.get())) {
+ Optional<Node> lockedParent = nodeRepository.getNode(parent.get().hostname());
+ if (lockedParent.isEmpty()) continue;
+ nodeRepository.write(lockedParent.get().withoutReservedTo(), lock);
+ }
}
}