diff options
author | Martin Polden <mpolden@mpolden.no> | 2019-09-18 13:49:09 +0200 |
---|---|---|
committer | Martin Polden <mpolden@mpolden.no> | 2019-09-19 13:12:19 +0200 |
commit | 2d41d8885eb6bbc9d53a6a23db5fe093bdd1b268 (patch) | |
tree | 713fe53e791c3812520a62c162b6d6a6da9ad178 /node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/OsUpgradeActivator.java | |
parent | e4ed026dc80e6bdfb3ea300d23e570718d5fac0d (diff) |
Pause OS upgrade when coinciding with Vespa upgrade
Diffstat (limited to 'node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/OsUpgradeActivator.java')
-rw-r--r-- | node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/OsUpgradeActivator.java | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/OsUpgradeActivator.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/OsUpgradeActivator.java new file mode 100644 index 00000000000..e197689eda2 --- /dev/null +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/OsUpgradeActivator.java @@ -0,0 +1,37 @@ +// Copyright 2019 Oath Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +package com.yahoo.vespa.hosted.provision.maintenance; + +import com.yahoo.config.provision.NodeType; +import com.yahoo.vespa.hosted.provision.NodeRepository; + +import java.time.Duration; + +/** + * This maintainer (de)activates OS upgrades according to Vespa upgrade status of nodes in this repository. + * + * If a node is upgrading to a new Vespa version, any ongoing OS upgrade will be paused for all nodes of that type. OS + * upgrades will resume once all nodes of that type have completed their Vespa upgrade. + * + * @author mpolden + */ +public class OsUpgradeActivator extends Maintainer { + + public OsUpgradeActivator(NodeRepository nodeRepository, Duration interval) { + super(nodeRepository, interval); + } + + @Override + protected void maintain() { + for (var nodeType : NodeType.values()) { + if (!nodeType.isDockerHost()) continue; + var active = canUpgradeOsOf(nodeType); + nodeRepository().osVersions().setActive(nodeType, active); + } + } + + /** Returns whether to allow OS upgrade of nodes of given type */ + private boolean canUpgradeOsOf(NodeType type) { + return nodeRepository().list().nodeType(type).changingVersion().asList().isEmpty(); + } + +} |