aboutsummaryrefslogtreecommitdiffstats
path: root/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/versions/OsVersionStatus.java
diff options
context:
space:
mode:
authorMartin Polden <mpolden@mpolden.no>2020-04-22 11:48:21 +0200
committerMartin Polden <mpolden@mpolden.no>2020-04-22 14:26:18 +0200
commitb79f094fd1327d6e124afb9367d8352076216e37 (patch)
treecb5fe54bc6a5560bb7b597c116e8686b450a1608 /controller-server/src/main/java/com/yahoo/vespa/hosted/controller/versions/OsVersionStatus.java
parent32cdca292aa2832a06292a79104efecfe4ffdd5d (diff)
Measure platform and OS change duration per host
Diffstat (limited to 'controller-server/src/main/java/com/yahoo/vespa/hosted/controller/versions/OsVersionStatus.java')
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/versions/OsVersionStatus.java35
1 files changed, 10 insertions, 25 deletions
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 1773a9c122e..1dffd1383bd 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
@@ -16,7 +16,6 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
-import java.util.Optional;
import java.util.Set;
import java.util.stream.Collectors;
@@ -59,9 +58,7 @@ public class OsVersionStatus {
/** Compute the current OS versions in this system. This is expensive and should be called infrequently */
public static OsVersionStatus compute(Controller controller) {
- var osVersionStatus = controller.osVersionStatus();
var osVersions = new HashMap<OsVersion, List<NodeVersion>>();
- var now = controller.clock().instant();
controller.osVersions().forEach(osVersion -> osVersions.put(osVersion, new ArrayList<>()));
for (var application : SystemApplication.all()) {
@@ -71,19 +68,16 @@ public class OsVersionStatus {
.targetVersionsOf(zone.getId())
.osVersion(application.nodeType())
.orElse(Version.emptyVersion);
- controller.serviceRegistry().configServer().nodeRepository()
- .list(zone.getId(), application.id()).stream()
- .filter(node -> OsUpgrader.eligibleForUpgrade(node, application))
- .map(node -> new NodeVersion(node.hostname(), zone.getId(), node.currentOsVersion(), targetOsVersion, now))
- .forEach(nodeVersion -> {
- var newNodeVersion = osVersionStatus.of(nodeVersion.hostname())
- .map(nv -> nv.withCurrentVersion(nodeVersion.currentVersion(), now)
- .withWantedVersion(nodeVersion.wantedVersion()))
- .orElse(nodeVersion);
- var version = new OsVersion(newNodeVersion.currentVersion(), zone.getCloudName());
- osVersions.putIfAbsent(version, new ArrayList<>());
- osVersions.get(version).add(newNodeVersion);
- });
+
+ for (var node : controller.serviceRegistry().configServer().nodeRepository().list(zone.getId(), application.id())) {
+ if (!OsUpgrader.eligibleForUpgrade(node, application)) continue;
+ var suspendedAt = node.suspendedSince();
+ var nodeVersion = new NodeVersion(node.hostname(), zone.getId(), node.currentOsVersion(),
+ targetOsVersion, suspendedAt);
+ var osVersion = new OsVersion(nodeVersion.currentVersion(), zone.getCloudName());
+ osVersions.putIfAbsent(osVersion, new ArrayList<>());
+ osVersions.get(osVersion).add(nodeVersion);
+ }
}
}
@@ -98,15 +92,6 @@ public class OsVersionStatus {
return new OsVersionStatus(newOsVersions.build());
}
- /** Returns version of node identified by given host name */
- private Optional<NodeVersion> of(HostName hostname) {
- return versions.values().stream()
- .map(nodeVersions -> nodeVersions.asMap().get(hostname))
- .map(Optional::ofNullable)
- .flatMap(Optional::stream)
- .findFirst();
- }
-
private static List<ZoneApi> zonesToUpgrade(Controller controller) {
return controller.zoneRegistry().osUpgradePolicies().stream()
.flatMap(upgradePolicy -> upgradePolicy.asList().stream())