diff options
16 files changed, 71 insertions, 163 deletions
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/MetricsReporter.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/MetricsReporter.java index 3f65c2e49cd..e23cda4dae0 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/MetricsReporter.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/MetricsReporter.java @@ -9,7 +9,6 @@ import com.yahoo.jdisc.Metric; import com.yahoo.vespa.hosted.controller.Application; import com.yahoo.vespa.hosted.controller.Controller; import com.yahoo.vespa.hosted.controller.Instance; -import com.yahoo.vespa.hosted.controller.api.integration.billing.PlanId; import com.yahoo.vespa.hosted.controller.api.integration.deployment.ApplicationVersion; import com.yahoo.vespa.hosted.controller.application.ApplicationList; import com.yahoo.vespa.hosted.controller.application.Deployment; @@ -19,7 +18,6 @@ import com.yahoo.vespa.hosted.controller.deployment.DeploymentStatusList; import com.yahoo.vespa.hosted.controller.deployment.JobList; import com.yahoo.vespa.hosted.controller.rotation.RotationLock; import com.yahoo.vespa.hosted.controller.versions.NodeVersion; -import com.yahoo.vespa.hosted.controller.versions.NodeVersions; import com.yahoo.vespa.hosted.controller.versions.VersionStatus; import com.yahoo.vespa.hosted.controller.versions.VespaVersion; @@ -221,11 +219,11 @@ public class MetricsReporter extends ControllerMaintainer { return changeDurations(controller().osVersionStatus().versions().values(), Function.identity()); } - private <V> Map<NodeVersion, Duration> changeDurations(Collection<V> versions, Function<V, NodeVersions> versionsGetter) { + private <V> Map<NodeVersion, Duration> changeDurations(Collection<V> versions, Function<V, List<NodeVersion>> versionsGetter) { var now = clock.instant(); var durations = new HashMap<NodeVersion, Duration>(); for (var version : versions) { - for (var nodeVersion : versionsGetter.apply(version).asMap().values()) { + for (var nodeVersion : versionsGetter.apply(version)) { durations.put(nodeVersion, nodeVersion.changeDuration(now)); } } diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/NodeVersionSerializer.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/NodeVersionSerializer.java index 2861e8922a5..857087ab0b3 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/NodeVersionSerializer.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/NodeVersionSerializer.java @@ -1,7 +1,6 @@ // 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.controller.persistence; -import com.google.common.collect.ImmutableMap; import com.yahoo.component.Version; import com.yahoo.config.provision.HostName; import com.yahoo.config.provision.zone.ZoneId; @@ -10,7 +9,9 @@ import com.yahoo.slime.Cursor; import com.yahoo.slime.Inspector; import com.yahoo.slime.SlimeUtils; import com.yahoo.vespa.hosted.controller.versions.NodeVersion; -import com.yahoo.vespa.hosted.controller.versions.NodeVersions; + +import java.util.ArrayList; +import java.util.List; /** * Serializer for {@link com.yahoo.vespa.hosted.controller.versions.NodeVersion}. @@ -31,8 +32,8 @@ public class NodeVersionSerializer { private static final String wantedVersionField = "wantedVersion"; private static final String suspendedAtField = "suspendedAt"; - public void nodeVersionsToSlime(NodeVersions nodeVersions, Cursor array) { - for (var nodeVersion : nodeVersions.asMap().values()) { + public void nodeVersionsToSlime(List<NodeVersion> nodeVersions, Cursor array) { + for (var nodeVersion : nodeVersions) { var nodeVersionObject = array.addObject(); nodeVersionObject.setString(hostnameField, nodeVersion.hostname().value()); nodeVersionObject.setString(zoneField, nodeVersion.zone().value()); @@ -42,16 +43,16 @@ public class NodeVersionSerializer { } } - public NodeVersions nodeVersionsFromSlime(Inspector array, Version version) { - var nodeVersions = ImmutableMap.<HostName, NodeVersion>builder(); + public List<NodeVersion> nodeVersionsFromSlime(Inspector array, Version version) { + List<NodeVersion> nodeVersions = new ArrayList<>(); array.traverse((ArrayTraverser) (i, entry) -> { var hostname = HostName.from(entry.field(hostnameField).asString()); var zone = ZoneId.from(entry.field(zoneField).asString()); var wantedVersion = Version.fromString(entry.field(wantedVersionField).asString()); var suspendedAt = SlimeUtils.optionalInstant(entry.field(suspendedAtField)); - nodeVersions.put(hostname, new NodeVersion(hostname, zone, version, wantedVersion, suspendedAt)); + nodeVersions.add(new NodeVersion(hostname, zone, version, wantedVersion, suspendedAt)); }); - return new NodeVersions(nodeVersions.build()); + return nodeVersions; } } diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/OsVersionStatusSerializer.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/OsVersionStatusSerializer.java index 8899ff89c0d..e2420993cb2 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/OsVersionStatusSerializer.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/OsVersionStatusSerializer.java @@ -7,10 +7,11 @@ import com.yahoo.slime.ArrayTraverser; import com.yahoo.slime.Cursor; import com.yahoo.slime.Inspector; import com.yahoo.slime.Slime; -import com.yahoo.vespa.hosted.controller.versions.NodeVersions; +import com.yahoo.vespa.hosted.controller.versions.NodeVersion; import com.yahoo.vespa.hosted.controller.versions.OsVersion; import com.yahoo.vespa.hosted.controller.versions.OsVersionStatus; +import java.util.List; import java.util.Objects; /** @@ -54,8 +55,8 @@ public class OsVersionStatusSerializer { return new OsVersionStatus(osVersionsFromSlime(slime.get().field(versionsField))); } - private ImmutableMap<OsVersion, NodeVersions> osVersionsFromSlime(Inspector array) { - var versions = ImmutableSortedMap.<OsVersion, NodeVersions>naturalOrder(); + private ImmutableMap<OsVersion, List<NodeVersion>> osVersionsFromSlime(Inspector array) { + var versions = ImmutableSortedMap.<OsVersion, List<NodeVersion>>naturalOrder(); array.traverse((ArrayTraverser) (i, object) -> { OsVersion osVersion = osVersionSerializer.fromSlime(object); versions.put(osVersion, nodeVersionSerializer.nodeVersionsFromSlime(object.field(nodeVersionsField), osVersion.version())); diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/VersionStatusSerializer.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/VersionStatusSerializer.java index eccda7332e1..0288a251798 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/VersionStatusSerializer.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/VersionStatusSerializer.java @@ -2,13 +2,12 @@ package com.yahoo.vespa.hosted.controller.persistence; import com.yahoo.component.Version; -import com.yahoo.config.provision.ApplicationId; import com.yahoo.slime.ArrayTraverser; import com.yahoo.slime.Cursor; import com.yahoo.slime.Inspector; import com.yahoo.slime.Slime; import com.yahoo.slime.SlimeUtils; -import com.yahoo.vespa.hosted.controller.versions.NodeVersions; +import com.yahoo.vespa.hosted.controller.versions.NodeVersion; import com.yahoo.vespa.hosted.controller.versions.VersionStatus; import com.yahoo.vespa.hosted.controller.versions.VespaVersion; @@ -85,7 +84,7 @@ public class VersionStatusSerializer { nodeVersionsToSlime(version.nodeVersions(), object.setArray(nodeVersionsField)); } - private void nodeVersionsToSlime(NodeVersions nodeVersions, Cursor array) { + private void nodeVersionsToSlime(List<NodeVersion> nodeVersions, Cursor array) { nodeVersionSerializer.nodeVersionsToSlime(nodeVersions, array); } @@ -116,12 +115,4 @@ public class VersionStatusSerializer { ); } - private List<ApplicationId> applicationsFromSlime(Inspector array) { - List<ApplicationId> applications = new ArrayList<>(); - array.traverse((ArrayTraverser) (i, entry) -> applications.add( - ApplicationId.fromSerializedForm(entry.asString())) - ); - return Collections.unmodifiableList(applications); - } - } diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/deployment/DeploymentApiHandler.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/deployment/DeploymentApiHandler.java index 5d819ec9804..6ec0533c358 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/deployment/DeploymentApiHandler.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/deployment/DeploymentApiHandler.java @@ -4,7 +4,6 @@ package com.yahoo.vespa.hosted.controller.restapi.deployment; import com.yahoo.config.application.api.DeploymentInstanceSpec; import com.yahoo.config.application.api.DeploymentSpec; import com.yahoo.config.provision.ApplicationId; -import com.yahoo.config.provision.HostName; import com.yahoo.container.jdisc.HttpRequest; import com.yahoo.container.jdisc.HttpResponse; import com.yahoo.container.jdisc.LoggingRequestHandler; @@ -109,9 +108,9 @@ public class DeploymentApiHandler extends LoggingRequestHandler { versionObject.setBool("systemVersion", version.isSystemVersion()); Cursor configServerArray = versionObject.setArray("configServers"); - for (HostName hostname : version.nodeVersions().hostnames()) { + for (var nodeVersion : version.nodeVersions()) { Cursor configServerObject = configServerArray.addObject(); - configServerObject.setString("hostname", hostname.value()); + configServerObject.setString("hostname", nodeVersion.hostname().value()); } DeploymentStatistics statistics = deploymentStatistics.get(version.versionNumber()); diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/os/OsApiHandler.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/os/OsApiHandler.java index b34c6685693..5a8e2c2fa62 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/os/OsApiHandler.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/os/OsApiHandler.java @@ -176,7 +176,7 @@ public class OsApiHandler extends AuditLoggingRequestHandler { target.ifPresent(t -> currentVersionObject.setString("upgradeBudget", t.upgradeBudget().toString())); currentVersionObject.setString("cloud", osVersion.cloud().value()); Cursor nodesArray = currentVersionObject.setArray("nodes"); - nodeVersions.asMap().values().forEach(nodeVersion -> { + nodeVersions.forEach(nodeVersion -> { Cursor nodeObject = nodesArray.addObject(); nodeObject.setString("hostname", nodeVersion.hostname().value()); nodeObject.setString("environment", nodeVersion.zone().environment().value()); diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/versions/NodeVersion.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/versions/NodeVersion.java index 15136ed79eb..8a1714e86d6 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/versions/NodeVersion.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/versions/NodeVersion.java @@ -61,7 +61,7 @@ public class NodeVersion { return Duration.between(suspendedAt.get(), instant).abs(); } - /** The most recent time the node referenced by this suspended. This is empty if the node is not suspended. */ + /** The most recent time the node referenced in this suspended. This is empty if the node is not suspended. */ public Optional<Instant> suspendedAt() { return suspendedAt; } diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/versions/NodeVersions.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/versions/NodeVersions.java deleted file mode 100644 index e2791c0bfe5..00000000000 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/versions/NodeVersions.java +++ /dev/null @@ -1,77 +0,0 @@ -// 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.controller.versions; - -import com.google.common.collect.ImmutableMap; -import com.yahoo.component.Version; -import com.yahoo.config.provision.HostName; - -import java.util.Collection; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.Set; -import java.util.function.Predicate; - -/** - * A filterable list of {@link NodeVersion}s. This is immutable. - * - * @author mpolden - */ -public class NodeVersions { - - private final ImmutableMap<HostName, NodeVersion> nodeVersions; - - public NodeVersions(Map<HostName, NodeVersion> nodeVersions) { - this.nodeVersions = ImmutableMap.copyOf(Objects.requireNonNull(nodeVersions)); - } - - public Map<HostName, NodeVersion> asMap() { - return nodeVersions; - } - - /** Returns host names in this */ - public Set<HostName> hostnames() { - return nodeVersions.keySet(); - } - - /** Returns a copy of this containing only node versions of given version */ - public NodeVersions matching(Version version) { - return copyOf(nodeVersions.values(), nodeVersion -> nodeVersion.currentVersion().equals(version)); - } - - /** Returns number of node versions in this */ - public int size() { - return nodeVersions.size(); - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - NodeVersions that = (NodeVersions) o; - return nodeVersions.equals(that.nodeVersions); - } - - @Override - public int hashCode() { - return Objects.hash(nodeVersions); - } - - public static NodeVersions copyOf(List<NodeVersion> nodeVersions) { - return copyOf(nodeVersions, (ignored) -> true); - } - - public static NodeVersions copyOf(Map<HostName, NodeVersion> nodeVersions) { - return new NodeVersions(nodeVersions); - } - - private static NodeVersions copyOf(Collection<NodeVersion> nodeVersions, Predicate<NodeVersion> predicate) { - var newNodeVersions = ImmutableMap.<HostName, NodeVersion>builder(); - for (var nodeVersion : nodeVersions) { - if (!predicate.test(nodeVersion)) continue; - newNodeVersions.put(nodeVersion.hostname(), nodeVersion); - } - return new NodeVersions(newNodeVersions.build()); - } - -} 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 69808a987fc..78c7b36181e 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 @@ -4,18 +4,19 @@ package com.yahoo.vespa.hosted.controller.versions; import com.google.common.collect.ImmutableMap; import com.yahoo.component.Version; import com.yahoo.config.provision.CloudName; -import com.yahoo.config.provision.HostName; import com.yahoo.config.provision.zone.ZoneApi; import com.yahoo.vespa.hosted.controller.Controller; import com.yahoo.vespa.hosted.controller.application.SystemApplication; import com.yahoo.vespa.hosted.controller.maintenance.OsUpgrader; +import java.time.Instant; import java.util.ArrayList; import java.util.Collection; 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; @@ -28,15 +29,15 @@ public class OsVersionStatus { public static final OsVersionStatus empty = new OsVersionStatus(ImmutableMap.of()); - private final Map<OsVersion, NodeVersions> versions; + private final Map<OsVersion, List<NodeVersion>> versions; /** Public for serialization purpose only. Use {@link OsVersionStatus#compute(Controller)} for an up-to-date status */ - public OsVersionStatus(ImmutableMap<OsVersion, NodeVersions> versions) { + public OsVersionStatus(Map<OsVersion, List<NodeVersion>> versions) { this.versions = ImmutableMap.copyOf(Objects.requireNonNull(versions, "versions must be non-null")); } /** All known OS versions and their nodes */ - public Map<OsVersion, NodeVersions> versions() { + public Map<OsVersion, List<NodeVersion>> versions() { return versions; } @@ -44,8 +45,9 @@ public class OsVersionStatus { public List<NodeVersion> nodesIn(CloudName cloud) { return versions.entrySet().stream() .filter(entry -> entry.getKey().cloud().equals(cloud)) - .flatMap(entry -> entry.getValue().asMap().values().stream()) - .collect(Collectors.toUnmodifiableList()); + .map(Map.Entry::getValue) + .findFirst() + .orElseGet(List::of); } /** Returns versions that exist in given cloud */ @@ -58,38 +60,30 @@ 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 osVersions = new HashMap<OsVersion, List<NodeVersion>>(); + Map<OsVersion, List<NodeVersion>> osVersions = new HashMap<>(); controller.osVersionTargets().forEach(target -> osVersions.put(target.osVersion(), new ArrayList<>())); for (var application : SystemApplication.all()) { for (var zone : zonesToUpgrade(controller)) { if (!application.shouldUpgradeOs()) continue; - var targetOsVersion = controller.serviceRegistry().configServer().nodeRepository() - .targetVersionsOf(zone.getVirtualId()) - .osVersion(application.nodeType()) - .orElse(Version.emptyVersion); + Version targetOsVersion = controller.serviceRegistry().configServer().nodeRepository() + .targetVersionsOf(zone.getVirtualId()) + .osVersion(application.nodeType()) + .orElse(Version.emptyVersion); for (var node : controller.serviceRegistry().configServer().nodeRepository().list(zone.getVirtualId(), application.id())) { if (!OsUpgrader.canUpgrade(node)) continue; - var suspendedAt = node.suspendedSince(); - var nodeVersion = new NodeVersion(node.hostname(), zone.getVirtualId(), node.currentOsVersion(), - targetOsVersion, suspendedAt); - var osVersion = new OsVersion(nodeVersion.currentVersion(), zone.getCloudName()); + Optional<Instant> suspendedAt = node.suspendedSince(); + NodeVersion nodeVersion = new NodeVersion(node.hostname(), zone.getVirtualId(), node.currentOsVersion(), + targetOsVersion, suspendedAt); + OsVersion osVersion = new OsVersion(nodeVersion.currentVersion(), zone.getCloudName()); osVersions.computeIfAbsent(osVersion, (k) -> new ArrayList<>()) .add(nodeVersion); } } } - var newOsVersions = ImmutableMap.<OsVersion, NodeVersions>builder(); - for (var osVersion : osVersions.entrySet()) { - var nodeVersions = ImmutableMap.<HostName, NodeVersion>builder(); - for (var nodeVersion : osVersion.getValue()) { - nodeVersions.put(nodeVersion.hostname(), nodeVersion); - } - newOsVersions.put(osVersion.getKey(), new NodeVersions(nodeVersions.build())); - } - return new OsVersionStatus(newOsVersions.build()); + return new OsVersionStatus(osVersions); } private static List<ZoneApi> zonesToUpgrade(Controller controller) { diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/versions/VersionStatus.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/versions/VersionStatus.java index c45cea29c33..beefaadb2a1 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/versions/VersionStatus.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/versions/VersionStatus.java @@ -12,7 +12,6 @@ import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.HashMap; -import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Optional; @@ -86,7 +85,7 @@ public class VersionStatus { /** Create a full, updated version status. This is expensive and should be done infrequently */ public static VersionStatus compute(Controller controller) { VersionStatus versionStatus = controller.readVersionStatus(); - NodeVersions systemApplicationVersions = findSystemApplicationVersions(controller, versionStatus); + List<NodeVersion> systemApplicationVersions = findSystemApplicationVersions(controller, versionStatus); Map<ControllerVersion, List<HostName>> controllerVersions = findControllerVersions(controller); Map<Version, List<HostName>> infrastructureVersions = new HashMap<>(); @@ -94,9 +93,9 @@ public class VersionStatus { infrastructureVersions.computeIfAbsent(kv.getKey().version(), (k) -> new ArrayList<>()) .addAll(kv.getValue()); } - for (var kv : systemApplicationVersions.asMap().entrySet()) { - infrastructureVersions.computeIfAbsent(kv.getValue().currentVersion(), (k) -> new ArrayList<>()) - .add(kv.getKey()); + for (var nodeVersion : systemApplicationVersions) { + infrastructureVersions.computeIfAbsent(nodeVersion.currentVersion(), (k) -> new ArrayList<>()) + .add(nodeVersion.hostname()); } // The system version is the oldest infrastructure version, if that version is newer than the current system @@ -130,11 +129,14 @@ public class VersionStatus { try { boolean isReleased = Collections.binarySearch(releasedVersions, statistics.version()) >= 0; + List<NodeVersion> nodeVersions = systemApplicationVersions.stream() + .filter(nodeVersion -> nodeVersion.currentVersion().equals(statistics.version())) + .collect(Collectors.toList()); VespaVersion vespaVersion = createVersion(statistics, controllerVersions.keySet(), systemVersion, isReleased, - systemApplicationVersions.matching(statistics.version()), + nodeVersions, controller, versionStatus); versions.add(vespaVersion); @@ -149,8 +151,8 @@ public class VersionStatus { return new VersionStatus(versions); } - private static NodeVersions findSystemApplicationVersions(Controller controller, VersionStatus versionStatus) { - var nodeVersions = new LinkedHashMap<HostName, NodeVersion>(); + private static List<NodeVersion> findSystemApplicationVersions(Controller controller, VersionStatus versionStatus) { + List<NodeVersion> nodeVersions = new ArrayList<>(); for (var zone : controller.zoneRegistry().zones().controllerUpgraded().zones()) { for (var application : SystemApplication.notController()) { var nodes = controller.serviceRegistry().configServer().nodeRepository() @@ -168,11 +170,11 @@ public class VersionStatus { var version = configConverged ? node.currentVersion() : controller.systemVersion(versionStatus); var nodeVersion = new NodeVersion(node.hostname(), zone.getId(), version, node.wantedVersion(), node.suspendedSince()); - nodeVersions.put(nodeVersion.hostname(), nodeVersion); + nodeVersions.add(nodeVersion); } } } - return NodeVersions.copyOf(nodeVersions); + return nodeVersions; } private static Map<ControllerVersion, List<HostName>> findControllerVersions(Controller controller) { @@ -194,7 +196,7 @@ public class VersionStatus { Set<ControllerVersion> controllerVersions, Version systemVersion, boolean isReleased, - NodeVersions nodeVersions, + List<NodeVersion> nodeVersions, Controller controller, VersionStatus versionStatus) { ControllerVersion latestVersion = controllerVersions.stream().max(Comparator.naturalOrder()).get(); diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/versions/VespaVersion.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/versions/VespaVersion.java index 3510a4f78cd..d61e0e37fae 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/versions/VespaVersion.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/versions/VespaVersion.java @@ -9,6 +9,7 @@ import com.yahoo.vespa.hosted.controller.application.InstanceList; import java.time.Instant; import java.time.ZoneOffset; +import java.util.List; import static com.yahoo.config.application.api.DeploymentSpec.UpgradePolicy; @@ -28,12 +29,12 @@ public class VespaVersion implements Comparable<VespaVersion> { private final boolean isControllerVersion; private final boolean isSystemVersion; private final boolean isReleased; - private final NodeVersions nodeVersions; + private final List<NodeVersion> nodeVersions; private final Confidence confidence; public VespaVersion(Version version, String releaseCommit, Instant committedAt, boolean isControllerVersion, boolean isSystemVersion, boolean isReleased, - NodeVersions nodeVersions, + List<NodeVersion> nodeVersions, Confidence confidence) { this.version = version; this.releaseCommit = releaseCommit; @@ -104,7 +105,7 @@ public class VespaVersion implements Comparable<VespaVersion> { public boolean isReleased() { return isReleased; } /** Returns the versions of nodes allocated to system applications (across all zones) */ - public NodeVersions nodeVersions() { + public List<NodeVersion> nodeVersions() { return nodeVersions; } 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 664a1fdc83c..092f72274e5 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 @@ -235,7 +235,7 @@ public class OsUpgraderTest { private List<NodeVersion> nodesOn(Version version) { return tester.controller().osVersionStatus().versions().entrySet().stream() .filter(entry -> entry.getKey().version().equals(version)) - .flatMap(entry -> entry.getValue().asMap().values().stream()) + .flatMap(entry -> entry.getValue().stream()) .collect(Collectors.toList()); } diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/OsVersionStatusUpdaterTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/OsVersionStatusUpdaterTest.java index 95f6af06230..307540a9694 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/OsVersionStatusUpdaterTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/OsVersionStatusUpdaterTest.java @@ -45,8 +45,8 @@ public class OsVersionStatusUpdaterTest { var osVersions = tester.controller().osVersionStatus().versions(); assertEquals(2, osVersions.size()); - assertFalse("All nodes on unknown version", osVersions.get(new OsVersion(Version.emptyVersion, cloud)).asMap().isEmpty()); - assertTrue("No nodes on current target", osVersions.get(new OsVersion(version1, cloud)).asMap().isEmpty()); + assertFalse("All nodes on unknown version", osVersions.get(new OsVersion(Version.emptyVersion, cloud)).isEmpty()); + assertTrue("No nodes on current target", osVersions.get(new OsVersion(version1, cloud)).isEmpty()); } } diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/OsVersionStatusSerializerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/OsVersionStatusSerializerTest.java index efdf412ab77..cff845c9dbe 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/OsVersionStatusSerializerTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/OsVersionStatusSerializerTest.java @@ -1,19 +1,19 @@ // Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.hosted.controller.persistence; -import com.google.common.collect.ImmutableMap; import com.yahoo.component.Version; import com.yahoo.config.provision.CloudName; import com.yahoo.config.provision.HostName; import com.yahoo.config.provision.zone.ZoneId; import com.yahoo.vespa.hosted.controller.versions.NodeVersion; -import com.yahoo.vespa.hosted.controller.versions.NodeVersions; import com.yahoo.vespa.hosted.controller.versions.OsVersion; import com.yahoo.vespa.hosted.controller.versions.OsVersionStatus; import org.junit.Test; import java.time.Instant; +import java.util.LinkedHashMap; import java.util.List; +import java.util.Map; import java.util.Optional; import static org.junit.Assert.assertEquals; @@ -27,19 +27,19 @@ public class OsVersionStatusSerializerTest { public void serialization() { Version version1 = Version.fromString("7.1"); Version version2 = Version.fromString("7.2"); - var versions = ImmutableMap.<OsVersion, NodeVersions>builder(); + Map<OsVersion, List<NodeVersion>> versions = new LinkedHashMap<>(); - versions.put(new OsVersion(version1, CloudName.defaultName()), NodeVersions.copyOf(List.of( + versions.put(new OsVersion(version1, CloudName.defaultName()), List.of( new NodeVersion(HostName.from("node1"), ZoneId.from("prod", "us-west"), version1, version2, Optional.of(Instant.ofEpochMilli(11))), new NodeVersion(HostName.from("node2"), ZoneId.from("prod", "us-east"), version1, version2, Optional.of(Instant.ofEpochMilli(22))) - ))); - versions.put(new OsVersion(version2, CloudName.defaultName()), NodeVersions.copyOf(List.of( + )); + versions.put(new OsVersion(version2, CloudName.defaultName()), List.of( new NodeVersion(HostName.from("node3"), ZoneId.from("prod", "us-west"), version2, version2, Optional.of(Instant.ofEpochMilli(33))), new NodeVersion(HostName.from("node4"), ZoneId.from("prod", "us-east"), version2, version2, Optional.of(Instant.ofEpochMilli(44))) - ))); + )); OsVersionStatusSerializer serializer = new OsVersionStatusSerializer(new OsVersionSerializer(), new NodeVersionSerializer()); - OsVersionStatus status = new OsVersionStatus(versions.build()); + OsVersionStatus status = new OsVersionStatus(versions); OsVersionStatus serialized = serializer.fromSlime(serializer.toSlime(status)); assertEquals(status.versions(), serialized.versions()); } diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/VersionStatusSerializerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/VersionStatusSerializerTest.java index 41d59239321..a8bc83ff2ac 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/VersionStatusSerializerTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/VersionStatusSerializerTest.java @@ -5,7 +5,6 @@ import com.yahoo.component.Version; import com.yahoo.config.provision.HostName; import com.yahoo.config.provision.zone.ZoneId; import com.yahoo.vespa.hosted.controller.versions.NodeVersion; -import com.yahoo.vespa.hosted.controller.versions.NodeVersions; import com.yahoo.vespa.hosted.controller.versions.VersionStatus; import com.yahoo.vespa.hosted.controller.versions.VespaVersion; import org.junit.Test; @@ -53,12 +52,12 @@ public class VersionStatusSerializerTest { } - private static NodeVersions nodeVersions(Version version, Version wantedVersion, String... hostnames) { + private static List<NodeVersion> nodeVersions(Version version, Version wantedVersion, String... hostnames) { var nodeVersions = new ArrayList<NodeVersion>(); for (var hostname : hostnames) { nodeVersions.add(new NodeVersion(HostName.from(hostname), ZoneId.from("prod", "us-north-1"), version, wantedVersion, Optional.empty())); } - return NodeVersions.copyOf(nodeVersions); + return nodeVersions; } } diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/deployment/DeploymentApiTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/deployment/DeploymentApiTest.java index 3d07b5d51d4..cd24ec170c5 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/deployment/DeploymentApiTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/deployment/DeploymentApiTest.java @@ -13,7 +13,6 @@ import com.yahoo.vespa.hosted.controller.deployment.DeploymentTester; import com.yahoo.vespa.hosted.controller.restapi.ContainerTester; import com.yahoo.vespa.hosted.controller.restapi.ControllerContainerTest; import com.yahoo.vespa.hosted.controller.versions.NodeVersion; -import com.yahoo.vespa.hosted.controller.versions.NodeVersions; import com.yahoo.vespa.hosted.controller.versions.VersionStatus; import com.yahoo.vespa.hosted.controller.versions.VespaVersion; import org.junit.Test; @@ -86,8 +85,8 @@ public class DeploymentApiTest extends ControllerContainerTest { version.isControllerVersion(), version.isSystemVersion(), version.isReleased(), - NodeVersions.copyOf(List.of(new NodeVersion(HostName.from("config1.test"), ZoneId.defaultId(), version.versionNumber(), version.versionNumber(), Optional.empty()), - new NodeVersion(HostName.from("config2.test"), ZoneId.defaultId(), version.versionNumber(), version.versionNumber(), Optional.empty()))), + List.of(new NodeVersion(HostName.from("config1.test"), ZoneId.defaultId(), version.versionNumber(), version.versionNumber(), Optional.empty()), + new NodeVersion(HostName.from("config2.test"), ZoneId.defaultId(), version.versionNumber(), version.versionNumber(), Optional.empty())), version.confidence() ); } |