aboutsummaryrefslogtreecommitdiffstats
path: root/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/OsUpgradeActivator.java
diff options
context:
space:
mode:
authorMartin Polden <mpolden@mpolden.no>2019-09-18 13:49:09 +0200
committerMartin Polden <mpolden@mpolden.no>2019-09-19 13:12:19 +0200
commit2d41d8885eb6bbc9d53a6a23db5fe093bdd1b268 (patch)
tree713fe53e791c3812520a62c162b6d6a6da9ad178 /node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/OsUpgradeActivator.java
parente4ed026dc80e6bdfb3ea300d23e570718d5fac0d (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.java37
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();
+ }
+
+}