diff options
Diffstat (limited to 'node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/Nodes.java')
-rw-r--r-- | node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/Nodes.java | 19 |
1 files changed, 4 insertions, 15 deletions
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 490e7b9ac33..7ac027afbf8 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 @@ -164,8 +164,7 @@ public class Nodes { * with the history of that node. */ public List<Node> addNodes(List<Node> nodes, Agent agent) { - try (NodeMutexes existingNodesLocks = lockAndGetAll(nodes, Optional.empty()); // Locks for any existing nodes we may remove. - Mutex allocationLock = lockUnallocated()) { + try (Mutex allocationLock = lockUnallocated()) { List<Node> nodesToAdd = new ArrayList<>(); List<Node> nodesToRemove = new ArrayList<>(); for (int i = 0; i < nodes.size(); i++) { @@ -378,17 +377,6 @@ public class Nodes { } } - /** Update IP config for nodes in given config */ - public void setIpConfig(HostIpConfig hostIpConfig) { - // Ideally this should hold the unallocated lock over the entire method, but unallocated lock must be taken - // after the application lock, making this impossible - Predicate<Node> nodeInConfig = (node) -> hostIpConfig.contains(node.hostname()); - performOn(nodeInConfig, (node, lock) -> { - IP.Config ipConfig = hostIpConfig.require(node.hostname()); - return write(node.with(ipConfig), lock); - }); - } - /** * Parks this node and returns it in its new state. * @@ -746,7 +734,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()) @@ -984,7 +972,8 @@ public class Nodes { for (NodeMutex node : outOfOrder) unlocked.add(node.node()); outOfOrder.clear(); - Mutex lock = lock(next, budget.timeLeftOrThrow()); + boolean nextLockSameAsPrevious = ! locked.isEmpty() && applicationIdForLock(locked.last().node()).equals(applicationIdForLock(next)); + Mutex lock = nextLockSameAsPrevious ? () -> { } : lock(next, budget.timeLeftOrThrow()); try { Optional<Node> fresh = node(next.hostname()); if (fresh.isEmpty()) { |