aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Polden <mpolden@mpolden.no>2024-01-02 12:06:27 +0100
committerMartin Polden <mpolden@mpolden.no>2024-01-02 12:06:27 +0100
commitefe9562b106294b073696f286b27a383742c0371 (patch)
tree8dbe3907836b77d216268ab144c5a640afbc2680
parenta78d5c73dae2abc43e806be2151d50bef61c1cc2 (diff)
Skip check of OS version availability in node response
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/os/OsUpgrader.java11
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/os/OsVersions.java10
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/NodesResponse.java2
3 files changed, 12 insertions, 11 deletions
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 9e931463999..f56e75518a3 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
@@ -53,6 +53,7 @@ public abstract class OsUpgrader {
/** Returns whether node can upgrade to version at given instant */
final boolean canUpgradeTo(Version version, Instant instant, Node node) {
+ if (deferringUpgrade(node, instant)) return false;
Set<Version> versions = nodeRepository.osVersions().availableTo(node, version);
boolean versionAvailable = versions.contains(version);
if (!versionAvailable) {
@@ -60,9 +61,13 @@ public abstract class OsUpgrader {
version.toFullString() + ", but this version does not exist in " +
node.cloudAccount() + ". Found " + versions.stream().sorted().toList());
}
- return versionAvailable &&
- (node.status().osVersion().downgrading() || // Fast-track downgrades
- node.history().age(instant).compareTo(gracePeriod()) > 0);
+ return versionAvailable;
+ }
+
+ /** Returns whether node is deferring upgrade at given instant */
+ final boolean deferringUpgrade(Node node, Instant instant) {
+ return !node.status().osVersion().downgrading() && // Never defer downgrades
+ node.history().age(instant).compareTo(gracePeriod()) <= 0;
}
/** The duration this leaves new nodes alone before scheduling any upgrade */
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/os/OsVersions.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/os/OsVersions.java
index 0bc074cba23..f5706d3b8c9 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/os/OsVersions.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/os/OsVersions.java
@@ -159,13 +159,9 @@ public class OsVersions {
}
}
- /** Returns whether node can be upgraded now */
- public boolean canUpgrade(Node node) {
- Optional<Version> wantedVersion = node.status().osVersion().wanted();
- if (wantedVersion.isEmpty()) {
- return false;
- }
- return chooseUpgrader(node.type(), Optional.empty()).canUpgradeTo(wantedVersion.get(), nodeRepository.clock().instant(), node);
+ /** Returns whether node is currently deferring its upgrade */
+ public boolean deferringUpgrade(Node node) {
+ return chooseUpgrader(node.type(), Optional.empty()).deferringUpgrade(node, nodeRepository.clock().instant());
}
/** Returns the upgrader to use when upgrading given node type to target */
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/NodesResponse.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/NodesResponse.java
index 5c379fb1608..b8c841771f5 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/NodesResponse.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/NodesResponse.java
@@ -167,7 +167,7 @@ class NodesResponse extends SlimeJsonResponse {
node.status().osVersion().current().ifPresent(version -> object.setString("currentOsVersion", version.toFullString()));
node.status().osVersion().wanted().ifPresent(version -> object.setString("wantedOsVersion", version.toFullString()));
if (node.type().isHost()) {
- object.setBool("deferOsUpgrade", !nodeRepository.osVersions().canUpgrade(node));
+ object.setBool("deferOsUpgrade", nodeRepository.osVersions().deferringUpgrade(node));
}
node.status().firmwareVerifiedAt().ifPresent(instant -> object.setLong("currentFirmwareCheck", instant.toEpochMilli()));
if (node.type().isHost())