diff options
author | Jon Bratseth <bratseth@verizonmedia.com> | 2020-01-23 10:29:19 +0100 |
---|---|---|
committer | Jon Bratseth <bratseth@verizonmedia.com> | 2020-01-23 10:29:19 +0100 |
commit | cdba1da4e60182595cd19fcf5945f98bce72d99e (patch) | |
tree | cb32bb79de76c25399afe1e84e6d34397cb91d50 /node-repository | |
parent | 137173a4d6e4914497d10b68a89699b685d6b776 (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.java | 25 |
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); + } } } |