summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjonmv <venstad@gmail.com>2023-06-27 16:31:58 +0200
committerjonmv <venstad@gmail.com>2023-06-27 16:31:58 +0200
commit06a0d7ea5218ad469d41ae287b6303b978de4342 (patch)
treeccfc6d95601a92443a364fe34bea34f2c01da53d
parente37214ce7fb389b8703b301e3e1facd198f8a30e (diff)
Greatly reduce lock acquisitions
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/FailedExpirer.java2
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/Nodes.java2
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())