diff options
author | jonmv <venstad@gmail.com> | 2023-06-27 16:31:58 +0200 |
---|---|---|
committer | jonmv <venstad@gmail.com> | 2023-06-27 16:31:58 +0200 |
commit | 06a0d7ea5218ad469d41ae287b6303b978de4342 (patch) | |
tree | ccfc6d95601a92443a364fe34bea34f2c01da53d | |
parent | e37214ce7fb389b8703b301e3e1facd198f8a30e (diff) |
Greatly reduce lock acquisitions
-rw-r--r-- | node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/FailedExpirer.java | 2 | ||||
-rw-r--r-- | node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/Nodes.java | 2 |
2 files changed, 2 insertions, 2 deletions
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/FailedExpirer.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/FailedExpirer.java index cb0a8005e87..4f2201adba0 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/FailedExpirer.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/FailedExpirer.java @@ -76,7 +76,7 @@ public class FailedExpirer extends NodeRepositoryMaintainer { isExpired, (node, lock) -> recycle(node, List.of(), allNodes).get()); - nodeRepository.nodes().performOnRecursively(allNodes.nodeType(NodeType.host), + nodeRepository.nodes().performOnRecursively(allNodes.nodeType(NodeType.host).matching(isExpired), nodes -> isExpired.test(nodes.parent().node()), nodes -> recycle(nodes.parent().node(), nodes.children().stream().map(NodeMutex::node).toList(), diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/Nodes.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/Nodes.java index d3ea1a3def7..b5a8c506c7b 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/Nodes.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/Nodes.java @@ -745,7 +745,7 @@ public class Nodes { public List<Node> performOn(NodeList nodes, Predicate<Node> filter, BiFunction<Node, Mutex, Node> action) { List<Node> resultingNodes = new ArrayList<>(); - nodes.stream().collect(groupingBy(Nodes::applicationIdForLock)) + nodes.matching(filter).stream().collect(groupingBy(Nodes::applicationIdForLock)) .forEach((applicationId, nodeList) -> { // Grouped only to reduce number of lock acquire/release cycles. try (NodeMutexes locked = lockAndGetAll(nodeList, Optional.empty())) { for (NodeMutex node : locked.nodes()) |