diff options
Diffstat (limited to 'node-repository/src/main')
5 files changed, 19 insertions, 34 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 258609f043e..120b7f00b38 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 @@ -8,6 +8,7 @@ import com.yahoo.vespa.hosted.provision.Node; import com.yahoo.vespa.hosted.provision.NodeList; import com.yahoo.vespa.hosted.provision.NodeRepository; +import java.time.Duration; import java.time.Instant; /** @@ -43,8 +44,13 @@ public abstract class OsUpgrader { } /** Returns whether node can upgrade at given instant */ - boolean canUpgradeAt(Instant instant, Node node) { - return true; + final boolean canUpgradeAt(Instant instant, Node node) { + return node.history().age(instant).compareTo(gracePeriod()) > 0; + } + + /** The duration this leaves new nodes alone before scheduling any upgrade */ + private Duration gracePeriod() { + return Duration.ofDays(1); } } diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/os/OsVersionChange.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/os/OsVersionChange.java index bdc40742ea4..a21c8aa539b 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/os/OsVersionChange.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/os/OsVersionChange.java @@ -1,42 +1,36 @@ // Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.hosted.provision.os; -import com.google.common.collect.ImmutableSortedMap; import com.yahoo.component.Version; import com.yahoo.config.provision.NodeType; -import java.util.HashMap; -import java.util.Map; -import java.util.Objects; +import java.util.Collections; +import java.util.SortedMap; +import java.util.TreeMap; /** * The OS version change being deployed in a {@link com.yahoo.vespa.hosted.provision.NodeRepository}. * * @author mpolden */ -public record OsVersionChange(Map<NodeType, OsVersionTarget> targets) { +public record OsVersionChange(SortedMap<NodeType, OsVersionTarget> targets) { - public static final OsVersionChange NONE = new OsVersionChange(Map.of()); + public static final OsVersionChange NONE = new OsVersionChange(new TreeMap<>()); - public OsVersionChange(Map<NodeType, OsVersionTarget> targets) { - this.targets = ImmutableSortedMap.copyOf(Objects.requireNonNull(targets)); - } - - /** Version targets in this */ - public Map<NodeType, OsVersionTarget> targets() { - return targets; + public OsVersionChange(SortedMap<NodeType, OsVersionTarget> targets) { + this.targets = Collections.unmodifiableSortedMap(new TreeMap<>(targets)); } /** Returns a copy of this with target for given node type removed */ public OsVersionChange withoutTarget(NodeType nodeType) { - var targets = new HashMap<>(this.targets); + var targets = new TreeMap<>(this.targets); targets.remove(nodeType); return new OsVersionChange(targets); } /** Returns a copy of this with given target added */ public OsVersionChange withTarget(Version version, NodeType nodeType) { - var copy = new HashMap<>(this.targets); + var copy = new TreeMap<>(this.targets); copy.compute(nodeType, (key, prevTarget) -> new OsVersionTarget(nodeType, version)); return new OsVersionChange(copy); } 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 f329c4cb695..f6779d08fd7 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 @@ -93,8 +93,4 @@ public class RebuildingOsUpgrader extends OsUpgrader { nodeRepository.nodes().upgradeOs(NodeListFilter.from(host), Optional.of(target)); } - private static void illegal(String msg) { - throw new IllegalArgumentException(msg); - } - } 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 de0ef085bc6..4d98885b72c 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 @@ -9,7 +9,6 @@ import com.yahoo.vespa.hosted.provision.NodeRepository; import com.yahoo.vespa.hosted.provision.node.Agent; import com.yahoo.vespa.hosted.provision.node.filter.NodeListFilter; -import java.time.Duration; import java.time.Instant; import java.util.Optional; import java.util.logging.Logger; @@ -46,11 +45,6 @@ public class RetiringOsUpgrader extends OsUpgrader { // No action needed in this implementation. } - @Override - public boolean canUpgradeAt(Instant instant, Node node) { - return node.history().age(instant).compareTo(gracePeriod()) > 0; - } - /** Returns nodes that are candidates for upgrade */ private NodeList candidates(Instant instant, OsVersionTarget target, NodeList allNodes) { NodeList activeNodes = allNodes.state(Node.State.active).nodeType(target.nodeType()); @@ -74,9 +68,4 @@ public class RetiringOsUpgrader extends OsUpgrader { nodeRepository.nodes().upgradeOs(NodeListFilter.from(host), Optional.of(target)); } - /** The duration this leaves new nodes alone before scheduling any upgrade */ - private Duration gracePeriod() { - return Duration.ofDays(1); - } - } diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/OsVersionChangeSerializer.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/OsVersionChangeSerializer.java index 1f05e807a69..fd9e5eb34a9 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/OsVersionChangeSerializer.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/OsVersionChangeSerializer.java @@ -11,7 +11,7 @@ import com.yahoo.vespa.hosted.provision.os.OsVersionTarget; import java.io.IOException; import java.io.UncheckedIOException; -import java.util.HashMap; +import java.util.TreeMap; /** * Serializer for {@link OsVersionChange}. @@ -43,7 +43,7 @@ public class OsVersionChangeSerializer { } public static OsVersionChange fromJson(byte[] data) { - var targets = new HashMap<NodeType, OsVersionTarget>(); + var targets = new TreeMap<NodeType, OsVersionTarget>(); var inspector = SlimeUtils.jsonToSlime(data).get(); inspector.field(TARGETS_FIELD).traverse((ArrayTraverser) (idx, arrayInspector) -> { var version = Version.fromString(arrayInspector.field(VERSION_FIELD).asString()); |