aboutsummaryrefslogtreecommitdiffstats
path: root/node-repository/src/main
diff options
context:
space:
mode:
Diffstat (limited to 'node-repository/src/main')
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/os/OsUpgrader.java10
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/os/OsVersionChange.java24
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/os/RebuildingOsUpgrader.java4
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/os/RetiringOsUpgrader.java11
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/OsVersionChangeSerializer.java4
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());