diff options
9 files changed, 20 insertions, 20 deletions
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/NodeRepository.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/NodeRepository.java index 47f3b73024c..899e8c12c06 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/NodeRepository.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/NodeRepository.java @@ -659,7 +659,7 @@ public class NodeRepository extends AbstractComponent { illegal("Could not set " + node + " active. It has no allocation."); // TODO: Work out a safe lock acquisition strategy for moves, e.g. migrate to lockNode. - try (Mutex lock = lockOnly(node)) { + try (Mutex lock = lock(node)) { if (toState == State.active) { for (Node currentActive : getNodes(node.allocation().get().owner(), State.active)) { if (node.allocation().get().membership().cluster().equals(currentActive.allocation().get().membership().cluster()) @@ -925,11 +925,11 @@ public class NodeRepository extends AbstractComponent { public Mutex lockUnallocated() { return db.lockInactive(); } /** Returns a lock, and an up to date node fetched under an appropriate lock, if it exists. */ - public Optional<NodeMutex> lockNode(Node node) { + public Optional<NodeMutex> lockAndGet(Node node) { Node staleNode = node; for (int i = 0; i < 4; ++i) { - Mutex lock = lockOnly(staleNode); + Mutex lock = lock(staleNode); Optional<Mutex> lockToClose = Optional.of(lock); try { Optional<Node> freshNode = getNode(staleNode.hostname(), staleNode.state()); @@ -956,21 +956,21 @@ public class NodeRepository extends AbstractComponent { } /** Returns a lock, and an up to date node fetched under an appropriate lock, if it exists. */ - public Optional<NodeMutex> lockNode(String hostname) { - return getNode(hostname).flatMap(this::lockNode); + public Optional<NodeMutex> lockAndGet(String hostname) { + return getNode(hostname).flatMap(this::lockAndGet); } /** Returns a lock, and an up to date node fetched under an appropriate lock. */ - public NodeMutex lockRequiredNode(Node node) { - return lockNode(node).orElseThrow(() -> new IllegalArgumentException("No such node: " + node.hostname())); + public NodeMutex lockAndGetRequired(Node node) { + return lockAndGet(node).orElseThrow(() -> new IllegalArgumentException("No such node: " + node.hostname())); } /** Returns a lock, and an up to date node fetched under an appropriate lock. */ - public NodeMutex lockRequiredNode(String hostname) { - return lockNode(hostname).orElseThrow(() -> new IllegalArgumentException("No such node: " + hostname)); + public NodeMutex lockAndGetRequired(String hostname) { + return lockAndGet(hostname).orElseThrow(() -> new IllegalArgumentException("No such node: " + hostname)); } - private Mutex lockOnly(Node node) { + private Mutex lock(Node node) { return node.allocation().isPresent() ? lock(node.allocation().get().owner()) : lockUnallocated(); } diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/MaintenanceDeployment.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/MaintenanceDeployment.java index b082b696ad4..66ddf7f9ffe 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/MaintenanceDeployment.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/MaintenanceDeployment.java @@ -193,7 +193,7 @@ class MaintenanceDeployment implements Closeable { /** Returns true only if this operation changes the state of the wantToRetire flag */ private boolean markWantToRetire(Node node, boolean wantToRetire, Agent agent, NodeRepository nodeRepository) { - Optional<NodeMutex> nodeMutex = nodeRepository.lockNode(node); + Optional<NodeMutex> nodeMutex = nodeRepository.lockAndGet(node); if (nodeMutex.isEmpty()) return false; try (var nodeLock = nodeMutex.get()) { diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/os/RetiringUpgrader.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/os/RetiringUpgrader.java index c8f4fc14dea..68ac96fdf1d 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/os/RetiringUpgrader.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/os/RetiringUpgrader.java @@ -62,7 +62,7 @@ public class RetiringUpgrader implements Upgrader { /** Retire and deprovision given host and its children */ private void retire(Node host, Version target, Instant now, NodeList allNodes) { if (!host.type().isHost()) throw new IllegalArgumentException("Cannot retire non-host " + host); - Optional<NodeMutex> nodeMutex = nodeRepository.lockNode(host); + Optional<NodeMutex> nodeMutex = nodeRepository.lockAndGet(host); if (nodeMutex.isEmpty()) return; try (var lock = nodeMutex.get()) { host = lock.node(); 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 7d5d53c882e..2ec3912181b 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 @@ -131,7 +131,7 @@ class Activator { if (parentNode.get().reservedTo().isEmpty()) continue; // Above is an optimization to avoid unnecessary locking - now repeat all conditions under lock - Optional<NodeMutex> parent = nodeRepository.lockNode(node.parentHostname().get()); + Optional<NodeMutex> parent = nodeRepository.lockAndGet(node.parentHostname().get()); if (parent.isEmpty()) continue; try (var lock = parent.get()) { if (lock.node().reservedTo().isEmpty()) continue; diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/NodesV2ApiHandler.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/NodesV2ApiHandler.java index 9f8ba7d84a3..b5454d97cfd 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/NodesV2ApiHandler.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/NodesV2ApiHandler.java @@ -160,7 +160,7 @@ public class NodesV2ApiHandler extends LoggingRequestHandler { private HttpResponse handlePATCH(HttpRequest request) { String path = request.getUri().getPath(); if (path.startsWith("/nodes/v2/node/")) { - try (NodeMutex lock = nodeRepository.lockRequiredNode(nodeFromRequest(request))) { + try (NodeMutex lock = nodeRepository.lockAndGetRequired(nodeFromRequest(request))) { var patchedNodes = new NodePatcher(nodeFlavors, request.getData(), lock.node(), () -> nodeRepository.list(lock), nodeRepository.clock()).apply(); nodeRepository.write(patchedNodes, lock); @@ -209,7 +209,7 @@ public class NodesV2ApiHandler extends LoggingRequestHandler { } private HttpResponse deleteNode(String hostname) { - Optional<NodeMutex> nodeMutex = nodeRepository.lockNode(hostname); + Optional<NodeMutex> nodeMutex = nodeRepository.lockAndGet(hostname); if (nodeMutex.isEmpty()) throw new NotFoundException("No node with hostname '" + hostname + "'"); try (var lock = nodeMutex.get()) { if (lock.node().state() == Node.State.deprovisioned) { diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockDeployer.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockDeployer.java index 7cc170ce92b..9461cb00c5f 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockDeployer.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockDeployer.java @@ -196,7 +196,7 @@ public class MockDeployer implements Deployer { lastDeployTimes.put(applicationId, clock.instant()); for (Node node : nodeRepository.list().owner(applicationId).state(Node.State.active).wantToRetire().asList()) { - try (NodeMutex lock = nodeRepository.lockRequiredNode(node)) { + try (NodeMutex lock = nodeRepository.lockAndGetRequired(node)) { nodeRepository.write(lock.node().retire(nodeRepository.clock().instant()), lock); } } diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/NodeRepositoryTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/NodeRepositoryTest.java index 668ff640304..bcf53a07490 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/NodeRepositoryTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/NodeRepositoryTest.java @@ -182,7 +182,7 @@ public class NodeRepositoryTest { assertFalse(tester.nodeRepository().getNode("host1").get().history().hasEventAfter(History.Event.Type.deprovisioned, testStart)); // Set host 1 properties and deprovision it - try (var lock = tester.nodeRepository().lockRequiredNode("host1")) { + try (var lock = tester.nodeRepository().lockAndGetRequired("host1")) { Node host1 = lock.node().withWantToRetire(true, true, Agent.system, tester.nodeRepository().clock().instant()); host1 = host1.withFirmwareVerifiedAt(tester.clock().instant()); host1 = host1.with(host1.status().withIncreasedFailCount()); diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/InPlaceResizeProvisionTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/InPlaceResizeProvisionTest.java index f1a9ae7eae0..62b153c7e12 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/InPlaceResizeProvisionTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/InPlaceResizeProvisionTest.java @@ -206,7 +206,7 @@ public class InPlaceResizeProvisionTest { // ... same with setting a node to want to retire Node nodeToWantoToRetire = listCluster(content1).not().retired().asList().get(0); - try (NodeMutex lock = tester.nodeRepository().lockRequiredNode(nodeToWantoToRetire)) { + try (NodeMutex lock = tester.nodeRepository().lockAndGetRequired(nodeToWantoToRetire)) { tester.nodeRepository().write(lock.node().withWantToRetire(true, Agent.system, tester.clock().instant()), lock); } diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisioningTester.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisioningTester.java index 4adeab43842..ebd856e96a0 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisioningTester.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisioningTester.java @@ -152,7 +152,7 @@ public class ProvisioningTester { public List<Node> patchNodes(List<Node> nodes, UnaryOperator<Node> patcher) { List<Node> updated = new ArrayList<>(); for (var node : nodes) { - try (var lock = nodeRepository.lockRequiredNode(node)) { + try (var lock = nodeRepository.lockAndGetRequired(node)) { node = patcher.apply(lock.node()); nodeRepository.write(node, lock); updated.add(node); @@ -186,7 +186,7 @@ public class ProvisioningTester { // Add ip addresses and activate parent host if necessary for (HostSpec prepared : preparedNodes) { - try (var lock = nodeRepository.lockRequiredNode(prepared.hostname())) { + try (var lock = nodeRepository.lockAndGetRequired(prepared.hostname())) { Node node = lock.node(); if (node.ipConfig().primary().isEmpty()) { node = node.with(new IP.Config(Set.of("::" + 0 + ":0"), Set.of())); |