summaryrefslogtreecommitdiffstats
path: root/controller-server
diff options
context:
space:
mode:
authorMartin Polden <mpolden@mpolden.no>2022-07-14 12:00:44 +0200
committerMartin Polden <mpolden@mpolden.no>2022-07-14 12:01:28 +0200
commitf81a884bb91355e73fade9a759f3abe1e2fce128 (patch)
tree21ed83edc2818369cf72d6fe727bf450be8b851a /controller-server
parentb377a884f9ef9f2a83e54fc100aa26d85746d71d (diff)
Include nodes deferring upgrade in version status
Diffstat (limited to 'controller-server')
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/OsUpgrader.java6
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/versions/OsVersionStatus.java2
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/OsUpgraderTest.java10
3 files changed, 10 insertions, 8 deletions
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/OsUpgrader.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/OsUpgrader.java
index 8155476f139..4850f005ac7 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/OsUpgrader.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/OsUpgrader.java
@@ -62,7 +62,7 @@ public class OsUpgrader extends InfrastructureUpgrader<OsVersionTarget> {
protected boolean expectUpgradeOf(Node node, SystemApplication application, ZoneApi zone) {
return cloud.equals(zone.getCloudName()) && // Cloud is managed by this upgrader
application.shouldUpgradeOs() && // Application should upgrade in this cloud
- canUpgrade(node);
+ canUpgrade(node, false);
}
@Override
@@ -102,8 +102,8 @@ public class OsUpgrader extends InfrastructureUpgrader<OsVersionTarget> {
}
/** Returns whether node currently allows upgrades */
- public static boolean canUpgrade(Node node) {
- return !node.deferOsUpgrade() && upgradableNodeStates.contains(node.state());
+ public static boolean canUpgrade(Node node, boolean includeDeferring) {
+ return (includeDeferring || !node.deferOsUpgrade()) && upgradableNodeStates.contains(node.state());
}
private static String name(CloudName cloud) {
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/versions/OsVersionStatus.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/versions/OsVersionStatus.java
index 8ee891ae8a6..d6356f294dc 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/versions/OsVersionStatus.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/versions/OsVersionStatus.java
@@ -66,7 +66,7 @@ public record OsVersionStatus(Map<OsVersion, List<NodeVersion>> versions) {
.orElse(Version.emptyVersion);
for (var node : controller.serviceRegistry().configServer().nodeRepository().list(zone.getVirtualId(), NodeFilter.all().applications(application.id()))) {
- if (!OsUpgrader.canUpgrade(node)) continue;
+ if (!OsUpgrader.canUpgrade(node, true)) continue;
Optional<Instant> suspendedAt = node.suspendedSince();
NodeVersion nodeVersion = new NodeVersion(node.hostname(), zone.getVirtualId(), node.currentOsVersion(),
targetOsVersion, suspendedAt);
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/OsUpgraderTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/OsUpgraderTest.java
index 3a5b4a90baa..0b987bff6ce 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/OsUpgraderTest.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/OsUpgraderTest.java
@@ -94,7 +94,7 @@ public class OsUpgraderTest {
completeUpgrade(version1, SystemApplication.tenantHost, zone1);
statusUpdater.maintain();
assertEquals(5, nodesOn(version1).size());
- assertEquals(10, nodesOn(Version.emptyVersion).size());
+ assertEquals(11, nodesOn(Version.emptyVersion).size());
// zone 2 and 3: begins upgrading
osUpgrader.maintain();
@@ -121,8 +121,10 @@ public class OsUpgraderTest {
osUpgrader.maintain();
assertWanted(version1, SystemApplication.tenantHost, zone1, zone2, zone3, zone4);
statusUpdater.maintain();
- assertTrue("All nodes on target version", tester.controller().osVersionStatus().nodesIn(cloud1).stream()
- .allMatch(node -> node.currentVersion().equals(version1)));
+ assertTrue("All non-deferring nodes are on target version",
+ tester.controller().osVersionStatus().nodesIn(cloud1).stream()
+ .filter(node -> !node.hostname().equals(nodeDeferringOsUpgrade.hostname()))
+ .allMatch(node -> node.currentVersion().equals(version1)));
}
@Test
@@ -274,7 +276,7 @@ public class OsUpgraderTest {
private List<Node> nodesRequiredToUpgrade(ZoneApi zone, SystemApplication application) {
return nodeRepository().list(zone.getVirtualId(), NodeFilter.all().applications(application.id()))
.stream()
- .filter(OsUpgrader::canUpgrade)
+ .filter(node -> OsUpgrader.canUpgrade(node, false))
.collect(Collectors.toList());
}