aboutsummaryrefslogtreecommitdiffstats
path: root/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/os
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@gmail.com>2022-07-05 13:11:59 +0200
committerMartin Polden <mpolden@mpolden.no>2022-07-07 16:08:39 +0200
commit47059d7888c9a278f2ccb038c2014b88cf6eda6a (patch)
treef2b40de33d712e15ff9f8dd1715ab446f525af20 /node-repository/src/main/java/com/yahoo/vespa/hosted/provision/os
parent6d01ee5b7573a455ce1c09c2fa140f724b71383c (diff)
Add a grace period before upgrading new nodes
Diffstat (limited to 'node-repository/src/main/java/com/yahoo/vespa/hosted/provision/os')
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/os/DelegatingOsUpgrader.java1
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/os/OsUpgrader.java12
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/os/RebuildingOsUpgrader.java1
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/os/RetiringOsUpgrader.java1
4 files changed, 15 insertions, 0 deletions
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/os/DelegatingOsUpgrader.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/os/DelegatingOsUpgrader.java
index 30fd2713017..9c938dd87ec 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/os/DelegatingOsUpgrader.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/os/DelegatingOsUpgrader.java
@@ -41,6 +41,7 @@ public class DelegatingOsUpgrader implements OsUpgrader {
int numberToUpgrade = Math.max(0, maxActiveUpgrades - activeNodes.changingOsVersionTo(target.version()).size());
NodeList nodesToUpgrade = activeNodes.not().changingOsVersionTo(target.version())
.osVersionIsBefore(target.version())
+ .matching(node -> shouldUpgrade(node, nodeRepository.clock().instant()))
.byIncreasingOsVersion()
.first(numberToUpgrade);
if (nodesToUpgrade.size() == 0) return;
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/os/OsUpgrader.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/os/OsUpgrader.java
index 5310ef339ed..9abb0a29628 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/os/OsUpgrader.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/os/OsUpgrader.java
@@ -2,6 +2,11 @@
package com.yahoo.vespa.hosted.provision.os;
import com.yahoo.config.provision.NodeType;
+import com.yahoo.vespa.hosted.provision.Node;
+import com.yahoo.vespa.hosted.provision.node.History;
+
+import java.time.Duration;
+import java.time.Instant;
/**
* Interface for an OS upgrader.
@@ -10,10 +15,17 @@ import com.yahoo.config.provision.NodeType;
*/
public interface OsUpgrader {
+ /** The duration we should leave new nodes along before scheduling OS upgrades */
+ Duration gracePeriod = Duration.ofDays(30);
+
/** Trigger upgrade to given target */
void upgradeTo(OsVersionTarget target);
/** Disable OS upgrade for all nodes of given type */
void disableUpgrade(NodeType type);
+ default boolean shouldUpgrade(Node node, Instant now) {
+ return node.history().age(now).toSeconds() > gracePeriod.toSeconds();
+ }
+
}
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/os/RebuildingOsUpgrader.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/os/RebuildingOsUpgrader.java
index efc377e6cc3..ffedbd241d7 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/os/RebuildingOsUpgrader.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/os/RebuildingOsUpgrader.java
@@ -76,6 +76,7 @@ public class RebuildingOsUpgrader implements OsUpgrader {
NodeList candidates = hostsOfTargetType.state(Node.State.active)
.not().rebuilding()
.osVersionIsBefore(target.version())
+ .matching(node -> shouldUpgrade(node, nodeRepository.clock().instant()))
.byIncreasingOsVersion();
for (Node host : candidates) {
if (hostsToRebuild.size() == rebuildLimit) break;
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/os/RetiringOsUpgrader.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/os/RetiringOsUpgrader.java
index d923c78a929..dba79cd70ca 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/os/RetiringOsUpgrader.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/os/RetiringOsUpgrader.java
@@ -38,6 +38,7 @@ public class RetiringOsUpgrader implements OsUpgrader {
Instant now = nodeRepository.clock().instant();
NodeList candidates = candidates(now, target, allNodes);
candidates.not().deprovisioning()
+ .matching(node -> shouldUpgrade(node, nodeRepository.clock().instant()))
.byIncreasingOsVersion()
.first(1)
.forEach(node -> deprovision(node, target.version(), now));