diff options
author | Martin Polden <mpolden@mpolden.no> | 2020-05-15 11:58:47 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-05-15 11:58:47 +0200 |
commit | ca294b0a05520dff341016d2fc75056ac75b0d8e (patch) | |
tree | 33fc6007b34008ecf20fc99021c04017ccd054ba /node-repository/src/main/java | |
parent | d05fbb6d8eae73144cf6b5f4c5eb794f3b157389 (diff) | |
parent | a2843bab022dd8c653824c87fa1aaaf2c8dac205 (diff) |
Merge pull request #13263 from vespa-engine/mpolden/os-retire-host-completely
Explicitly retire children on host OS upgrade
Diffstat (limited to 'node-repository/src/main/java')
-rw-r--r-- | node-repository/src/main/java/com/yahoo/vespa/hosted/provision/Node.java | 2 | ||||
-rw-r--r-- | node-repository/src/main/java/com/yahoo/vespa/hosted/provision/os/RetiringUpgrader.java | 32 |
2 files changed, 20 insertions, 14 deletions
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/Node.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/Node.java index d42efd7ba29..45ed8db3491 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/Node.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/Node.java @@ -398,7 +398,7 @@ public final class Node { public enum State { - /** This host has been requested (from OpenStack) but is not yet ready for use */ + /** This node has been requested, but is not yet ready for use */ provisioned, /** This node is free and ready for use */ 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 2601060146b..8b11c10e3dd 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 @@ -9,8 +9,10 @@ import com.yahoo.vespa.hosted.provision.NodeRepository; import java.time.Duration; import java.time.Instant; +import java.util.List; import java.util.Optional; import java.util.logging.Logger; +import java.util.stream.Collectors; /** * An upgrader that retires and deprovisions nodes on stale OS versions. Retirement of each node is spread out in time, @@ -55,21 +57,25 @@ public class RetiringUpgrader implements Upgrader { // No action needed in this implementation. } - /** Retire and deprovision given node */ - private void retire(Node node, Version target, Instant now) { - try (var lock = nodeRepository.lock(node)) { - Optional<Node> currentNode = nodeRepository.getNode(node.hostname()); + /** Retire and deprovision given host and its children */ + private void retire(Node host, Version target, Instant now) { + if (!host.type().isDockerHost()) throw new IllegalArgumentException("Cannot retire non-host " + host); + try (var lock = nodeRepository.lock(host)) { + Optional<Node> currentNode = nodeRepository.getNode(host.hostname()); if (currentNode.isEmpty()) return; - node = currentNode.get(); - NodeType nodeType = node.type(); - LOG.info("Retiring and deprovisioning " + node + ": On stale OS version " + - node.status().osVersion().current().map(Version::toFullString).orElse("<unset>") + + host = currentNode.get(); + NodeType nodeType = host.type(); + List<Node> nodesToRetire = nodeRepository.list().childrenOf(host).stream() + .map(child -> child.with(child.status().withWantToRetire(true))) + .collect(Collectors.toList()); + LOG.info("Retiring and deprovisioning " + host + ": On stale OS version " + + host.status().osVersion().current().map(Version::toFullString).orElse("<unset>") + ", want " + target); - nodeRepository.write(node.with(node.status() - .withWantToRetire(true) - .withWantToDeprovision(true) - .withOsVersion(node.status().osVersion().withWanted(Optional.of(target)))), - lock); + nodesToRetire.add(host.with(host.status() + .withWantToRetire(true) + .withWantToDeprovision(true) + .withOsVersion(host.status().osVersion().withWanted(Optional.of(target))))); + nodeRepository.write(nodesToRetire, lock); nodeRepository.osVersions().writeChange((change) -> change.withRetirementAt(now, nodeType)); } } |