diff options
author | HÃ¥kon Hallingstad <hakon.hallingstad@gmail.com> | 2024-02-13 10:18:22 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-02-13 10:18:22 +0100 |
commit | fce871062ca09cd433eceb3d58b615350fe5afc3 (patch) | |
tree | 38b6137be5909ca466a593b983e0c9ae7036972c | |
parent | 2ce5384ed3b703047714ec42c57dc943fbc49fa7 (diff) | |
parent | 47d6a83c73f8d1698bdc76aca4f02557a2b64187 (diff) |
Merge pull request #30252 from vespa-engine/freva/signal-deprovision
Return whether deprovisioning has completed
3 files changed, 7 insertions, 4 deletions
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/HostDeprovisioner.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/HostDeprovisioner.java index 0a33252303a..4026a294111 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/HostDeprovisioner.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/HostDeprovisioner.java @@ -46,8 +46,8 @@ public class HostDeprovisioner extends NodeRepositoryMaintainer { // holding it over longer periods // * We are about to remove these hosts anyway, so only reason we'd want to hold the lock is // if we want to support aborting deprovision if operator manually intervenes - hostProvisioner.deprovision(host); - nodeRepository().nodes().removeRecursively(host, true); + if (hostProvisioner.deprovision(host)) + nodeRepository().nodes().removeRecursively(host, true); } catch (RuntimeException e) { failures++; log.log(Level.WARNING, "Failed to deprovision " + host.hostname() + ", will retry in " + interval(), e); diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/HostProvisioner.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/HostProvisioner.java index 4214f543c60..02b40284548 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/HostProvisioner.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/HostProvisioner.java @@ -76,8 +76,10 @@ public interface HostProvisioner { * Therefore, this method should probably only be called for hosts that have no children. * * @param host host to deprovision. + * @return true if the was successfully deprovisioned, false if the deprovisioning is still in progress. This method + * should be called again later until it returns true. */ - void deprovision(Node host); + boolean deprovision(Node host); /** Replace the root (OS) disk of hosts. Implementations of this are expected to be idempotent. * diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockHostProvisioner.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockHostProvisioner.java index 73985075319..6a48323cea4 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockHostProvisioner.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockHostProvisioner.java @@ -119,10 +119,11 @@ public class MockHostProvisioner implements HostProvisioner { } @Override - public void deprovision(Node host) { + public boolean deprovision(Node host) { if (behaviour(Behaviour.failDeprovisioning)) throw new FatalProvisioningException("Failed to deprovision node"); provisionedHosts.removeIf(provisionedHost -> provisionedHost.hostHostname().equals(host.hostname())); deprovisionedHosts++; + return true; } @Override |