aboutsummaryrefslogtreecommitdiffstats
path: root/node-repository/src
diff options
context:
space:
mode:
authorMartin Polden <mpolden@mpolden.no>2018-08-09 15:29:26 +0200
committerGitHub <noreply@github.com>2018-08-09 15:29:26 +0200
commita6f9ea782e9921498c6a890697824d7d16065f24 (patch)
tree40135476a3a1ceb8072be49f6da79f6a88d85474 /node-repository/src
parent69b2b2680ebeef30bb84d0fd5529ec93841c12e6 (diff)
parent53842016403a8e4fffb5dc044994f2db4e92e55f (diff)
Merge pull request #6533 from vespa-engine/mpolden/prepare-os-version
Preparations for node OS upgrades
Diffstat (limited to 'node-repository/src')
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/Node.java6
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/NodeRepository.java2
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/filter/NodeFilter.java4
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/filter/NodeHostFilter.java3
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/filter/NodeListFilter.java2
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/filter/NodeTypeFilter.java4
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/filter/ParentHostFilter.java4
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/filter/StateFilter.java9
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/CuratorDatabaseClient.java35
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/InfrastructureVersionsSerializer.java42
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/NodeSerializer.java4
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/NodeTypeVersionsSerializer.java47
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/v2/NodesResponse.java3
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/v2/UpgradeResponse.java5
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/MaintenanceTester.java4
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/NodeFailerTest.java6
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/NodeRebooterTest.java4
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/NodeRetirerTest.java2
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node10.json4
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node4-after-changes.json2
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node4.json4
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node5.json2
22 files changed, 86 insertions, 112 deletions
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/Node.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/Node.java
index 09c7f6a88b1..455494b3d49 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/Node.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/Node.java
@@ -154,7 +154,7 @@ public final class Node {
return with(allocation.get().unretire());
}
- /** Returns a copy of this with the current restart generation set to generation */
+ /** Returns a copy of this with the restart generation set to generation */
public Node withRestart(Generation generation) {
final Optional<Allocation> allocation = this.allocation;
if ( ! allocation.isPresent())
@@ -178,13 +178,13 @@ public final class Node {
return new Node(openStackId, ipAddresses, additionalIpAddresses, hostname, parentHostname, flavor, status, state, allocation, history, type);
}
- /** Returns a copy of this with the current reboot generation set to generation */
+ /** Returns a copy of this with the reboot generation set to generation */
public Node withReboot(Generation generation) {
return new Node(openStackId, ipAddresses, additionalIpAddresses, hostname, parentHostname, flavor, status.withReboot(generation), state,
allocation, history, type);
}
- /** Returns a c opy of this with the openStackId set */
+ /** Returns a copy of this with the openStackId set */
public Node withOpenStackId(String openStackId) {
return new Node(openStackId, ipAddresses, additionalIpAddresses, hostname, parentHostname, flavor, status, state, allocation, history, type);
}
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/NodeRepository.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/NodeRepository.java
index 567ba4708f7..5db79beac3c 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/NodeRepository.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/NodeRepository.java
@@ -73,7 +73,6 @@ import java.util.stream.Stream;
public class NodeRepository extends AbstractComponent {
private final CuratorDatabaseClient db;
- private final Curator curator;
private final Clock clock;
private final Zone zone;
private final NodeFlavors flavors;
@@ -96,7 +95,6 @@ public class NodeRepository extends AbstractComponent {
public NodeRepository(NodeFlavors flavors, Curator curator, Clock clock, Zone zone, NameResolver nameResolver,
DockerImage dockerImage, boolean useCuratorClientCache) {
this.db = new CuratorDatabaseClient(flavors, curator, clock, zone, useCuratorClientCache);
- this.curator = curator;
this.zone = zone;
this.clock = clock;
this.flavors = flavors;
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/filter/NodeFilter.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/filter/NodeFilter.java
index 2c19baad7f3..bc433c83b2e 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/filter/NodeFilter.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/filter/NodeFilter.java
@@ -3,8 +3,6 @@ package com.yahoo.vespa.hosted.provision.node.filter;
import com.yahoo.vespa.hosted.provision.Node;
-import java.util.Objects;
-
/**
* A chainable node filter
*
@@ -14,7 +12,7 @@ public abstract class NodeFilter {
private final NodeFilter next;
- /** Creates a node filter with a nchained filter, or null if this is the last filter */
+ /** Creates a node filter with a chained filter, or null if this is the last filter */
protected NodeFilter(NodeFilter next) {
this.next = next;
}
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/filter/NodeHostFilter.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/filter/NodeHostFilter.java
index 76b5cd2ce27..ed66d085972 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/filter/NodeHostFilter.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/filter/NodeHostFilter.java
@@ -20,8 +20,7 @@ public class NodeHostFilter extends NodeFilter {
/** Creates a node filter which filters using the given host filter */
private NodeHostFilter(HostFilter filter, NodeFilter next) {
super(next);
- Objects.requireNonNull(filter, "filter cannot be null, use HostFilter.all()");
- this.filter = filter;
+ this.filter = Objects.requireNonNull(filter, "filter cannot be null, use HostFilter.all()");
}
@Override
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/filter/NodeListFilter.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/filter/NodeListFilter.java
index 34430a8ec0a..9bd9f6400d5 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/filter/NodeListFilter.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/filter/NodeListFilter.java
@@ -20,7 +20,7 @@ public class NodeListFilter extends NodeFilter {
private NodeListFilter(List<Node> nodes, NodeFilter next) {
super(next);
- this.nodes = ImmutableSet.copyOf(nodes);
+ this.nodes = ImmutableSet.copyOf(Objects.requireNonNull(nodes, "nodes cannot be null"));
}
@Override
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/filter/NodeTypeFilter.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/filter/NodeTypeFilter.java
index 91d155ba069..2a50961e0a4 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/filter/NodeTypeFilter.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/filter/NodeTypeFilter.java
@@ -2,7 +2,6 @@
package com.yahoo.vespa.hosted.provision.node.filter;
import com.google.common.collect.ImmutableSet;
-import com.yahoo.config.provision.HostFilter;
import com.yahoo.config.provision.NodeType;
import com.yahoo.text.StringUtilities;
import com.yahoo.vespa.hosted.provision.Node;
@@ -21,8 +20,7 @@ public class NodeTypeFilter extends NodeFilter {
protected NodeTypeFilter(Set<NodeType> types, NodeFilter next) {
super(next);
- Objects.requireNonNull(types, "Node types cannot be null");
- this.types = ImmutableSet.copyOf(types);
+ this.types = ImmutableSet.copyOf(Objects.requireNonNull(types, "Node types cannot be null"));
}
@Override
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/filter/ParentHostFilter.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/filter/ParentHostFilter.java
index 522afc2d859..3c51161d4ca 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/filter/ParentHostFilter.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/filter/ParentHostFilter.java
@@ -2,7 +2,6 @@
package com.yahoo.vespa.hosted.provision.node.filter;
import com.google.common.collect.ImmutableSet;
-import com.yahoo.config.provision.HostFilter;
import com.yahoo.text.StringUtilities;
import com.yahoo.vespa.hosted.provision.Node;
@@ -22,8 +21,7 @@ public class ParentHostFilter extends NodeFilter {
/** Creates a node filter which filters using the given parent host name */
private ParentHostFilter(Set<String> parentHostNames, NodeFilter next) {
super(next);
- Objects.requireNonNull(parentHostNames, "parentHostNames cannot be null.");
- this.parentHostNames = ImmutableSet.copyOf(parentHostNames);
+ this.parentHostNames = ImmutableSet.copyOf(Objects.requireNonNull(parentHostNames, "parentHostNames cannot be null"));
}
@Override
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/filter/StateFilter.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/filter/StateFilter.java
index 0cca49c6adb..5778800d02c 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/filter/StateFilter.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/filter/StateFilter.java
@@ -2,18 +2,11 @@
package com.yahoo.vespa.hosted.provision.node.filter;
import com.google.common.collect.ImmutableSet;
-import com.yahoo.config.provision.ApplicationId;
-import com.yahoo.config.provision.ApplicationName;
-import com.yahoo.config.provision.ClusterMembership;
-import com.yahoo.config.provision.HostFilter;
-import com.yahoo.config.provision.InstanceName;
-import com.yahoo.config.provision.TenantName;
import com.yahoo.text.StringUtilities;
import com.yahoo.vespa.hosted.provision.Node;
import java.util.Collections;
import java.util.Objects;
-import java.util.Optional;
import java.util.Set;
import java.util.stream.Collectors;
@@ -29,7 +22,7 @@ public class StateFilter extends NodeFilter {
/** Creates a node filter which filters using the given host filter */
private StateFilter(Set<Node.State> states, NodeFilter next) {
super(next);
- Objects.requireNonNull(states, "state cannot be null, use an empty optional");
+ Objects.requireNonNull(states, "state cannot be null, use an empty set");
this.states = ImmutableSet.copyOf(states);
}
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/CuratorDatabaseClient.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/CuratorDatabaseClient.java
index f66cec0706a..f559ec0037b 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/CuratorDatabaseClient.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/CuratorDatabaseClient.java
@@ -23,12 +23,13 @@ import java.time.Clock;
import java.time.Duration;
import java.util.ArrayList;
import java.util.Collections;
-import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
+import java.util.TreeMap;
+import java.util.function.Function;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.stream.Collectors;
@@ -47,16 +48,13 @@ public class CuratorDatabaseClient {
private static final Logger log = Logger.getLogger(CuratorDatabaseClient.class.getName());
private static final Path root = Path.fromString("/provision/v1");
-
+ private static final Path lockRoot = root.append("locks");
private static final Duration defaultLockTimeout = Duration.ofMinutes(2);
private final NodeSerializer nodeSerializer;
private final StringSetSerializer stringSetSerializer = new StringSetSerializer();
-
private final CuratorDatabase curatorDatabase;
-
private final Clock clock;
-
private final Zone zone;
public CuratorDatabaseClient(NodeFlavors flavors, Curator curator, Clock clock, Zone zone, boolean useCache) {
@@ -278,9 +276,8 @@ public class CuratorDatabaseClient {
/** Creates an returns the path to the lock for this application */
private Path lockPath(ApplicationId application) {
- Path lockPath =
- root
- .append("locks")
+ Path lockPath =
+ lockRoot
.append(application.tenant().value())
.append(application.application().value())
.append(application.instance().value());
@@ -304,7 +301,7 @@ public class CuratorDatabaseClient {
/** Acquires the single cluster-global, reentrant lock for all non-active nodes */
public Lock lockInactive() {
- return lock(root.append("locks").append("unallocatedLock"), defaultLockTimeout);
+ return lock(lockRoot.append("unallocatedLock"), defaultLockTimeout);
}
/** Acquires the single cluster-global, reentrant lock for active nodes of this application */
@@ -326,11 +323,13 @@ public class CuratorDatabaseClient {
return curatorDatabase.lock(path, timeout);
}
+ private <T> Optional<T> read(Path path, Function<byte[], T> mapper) {
+ return curatorDatabase.getData(path).filter(data -> data.length > 0).map(mapper);
+ }
+
public Set<String> readInactiveJobs() {
try {
- byte[] data = curatorDatabase.getData(inactiveJobsPath()).get();
- if (data.length == 0) return new HashSet<>(); // inactive jobs has never been written
- return stringSetSerializer.fromJson(data);
+ return read(inactiveJobsPath(), stringSetSerializer::fromJson).orElseGet(HashSet::new);
}
catch (RuntimeException e) {
log.log(Level.WARNING, "Error reading inactive jobs, deleting inactive state");
@@ -348,33 +347,31 @@ public class CuratorDatabaseClient {
}
public Lock lockInactiveJobs() {
- return lock(root.append("locks").append("inactiveJobsLock"), defaultLockTimeout);
+ return lock(lockRoot.append("inactiveJobsLock"), defaultLockTimeout);
}
private Path inactiveJobsPath() {
return root.append("inactiveJobs");
}
-
public Map<NodeType, Version> readInfrastructureVersions() {
- byte[] data = curatorDatabase.getData(infrastructureVersionsPath()).get();
- if (data.length == 0) return new HashMap<>(); // infrastructure versions have never been written
- return InfrastructureVersionsSerializer.fromJson(data);
+ return read(infrastructureVersionsPath(), NodeTypeVersionsSerializer::fromJson).orElseGet(TreeMap::new);
}
public void writeInfrastructureVersions(Map<NodeType, Version> infrastructureVersions) {
NestedTransaction transaction = new NestedTransaction();
CuratorTransaction curatorTransaction = curatorDatabase.newCuratorTransactionIn(transaction);
curatorTransaction.add(CuratorOperations.setData(infrastructureVersionsPath().getAbsolute(),
- InfrastructureVersionsSerializer.toJson(infrastructureVersions)));
+ NodeTypeVersionsSerializer.toJson(infrastructureVersions)));
transaction.commit();
}
public Lock lockInfrastructureVersions() {
- return lock(root.append("locks").append("infrastructureVersionsLock"), defaultLockTimeout);
+ return lock(lockRoot.append("infrastructureVersionsLock"), defaultLockTimeout);
}
private Path infrastructureVersionsPath() {
return root.append("infrastructureVersions");
}
+
}
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/InfrastructureVersionsSerializer.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/InfrastructureVersionsSerializer.java
deleted file mode 100644
index a48888fb4f0..00000000000
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/InfrastructureVersionsSerializer.java
+++ /dev/null
@@ -1,42 +0,0 @@
-// 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.provision.persistence;
-
-import com.yahoo.component.Version;
-import com.yahoo.config.provision.NodeType;
-import com.yahoo.slime.Cursor;
-import com.yahoo.slime.Inspector;
-import com.yahoo.slime.ObjectTraverser;
-import com.yahoo.slime.Slime;
-import com.yahoo.vespa.config.SlimeUtils;
-
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * @author freva
- */
-class InfrastructureVersionsSerializer {
-
- private InfrastructureVersionsSerializer() {}
-
- static byte[] toJson(Map<NodeType, Version> versionsByNodeType) {
- try {
- Slime slime = new Slime();
- Cursor object = slime.setObject();
- versionsByNodeType.forEach((nodeType, version) ->
- object.setString(NodeSerializer.toString(nodeType), version.toFullString()));
- return SlimeUtils.toJsonBytes(slime);
- } catch (IOException e) {
- throw new RuntimeException("Serialization of a infrastructure version failed", e);
- }
- }
-
- static Map<NodeType, Version> fromJson(byte[] data) {
- Map<NodeType, Version> infrastructureVersions = new HashMap<>();
- Inspector inspector = SlimeUtils.jsonToSlime(data).get();
- inspector.traverse((ObjectTraverser) (key, value) ->
- infrastructureVersions.put(NodeSerializer.nodeTypeFromString(key), Version.fromString(value.asString())));
- return infrastructureVersions;
- }
-}
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/NodeSerializer.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/NodeSerializer.java
index 4d753599c4e..669f2063ee6 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/NodeSerializer.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/NodeSerializer.java
@@ -163,14 +163,12 @@ public class NodeSerializer {
}
private Status statusFromSlime(Inspector object) {
- // TODO: Simplify after June 2017
- boolean wantToDeprovision = object.field(wantToDeprovisionKey).valid() && object.field(wantToDeprovisionKey).asBool();
return new Status(generationFromSlime(object, rebootGenerationKey, currentRebootGenerationKey),
versionFromSlime(object.field(vespaVersionKey)),
(int)object.field(failCountKey).asLong(),
hardwareFailureDescriptionFromSlime(object),
object.field(wantToRetireKey).asBool(),
- wantToDeprovision,
+ object.field(wantToDeprovisionKey).asBool(),
removeQuotedNulls(hardwareDivergenceFromSlime(object)));
}
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/NodeTypeVersionsSerializer.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/NodeTypeVersionsSerializer.java
new file mode 100644
index 00000000000..dfa79a4fd9a
--- /dev/null
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/NodeTypeVersionsSerializer.java
@@ -0,0 +1,47 @@
+// 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.provision.persistence;
+
+import com.yahoo.component.Version;
+import com.yahoo.config.provision.NodeType;
+import com.yahoo.slime.Cursor;
+import com.yahoo.slime.Inspector;
+import com.yahoo.slime.ObjectTraverser;
+import com.yahoo.slime.Slime;
+import com.yahoo.vespa.config.SlimeUtils;
+
+import java.io.IOException;
+import java.io.UncheckedIOException;
+import java.util.Map;
+import java.util.TreeMap;
+
+/**
+ * Serializer for version numbers that are set per node type.
+ *
+ * @author freva
+ * @author mpolden
+ */
+public class NodeTypeVersionsSerializer {
+
+ private NodeTypeVersionsSerializer() {}
+
+ public static byte[] toJson(Map<NodeType, Version> versions) {
+ Slime slime = new Slime();
+ Cursor object = slime.setObject();
+ versions.forEach((nodeType, version) -> object.setString(NodeSerializer.toString(nodeType),
+ version.toFullString()));
+ try {
+ return SlimeUtils.toJsonBytes(slime);
+ } catch (IOException e) {
+ throw new UncheckedIOException(e);
+ }
+ }
+
+ public static Map<NodeType, Version> fromJson(byte[] data) {
+ Map<NodeType, Version> versions = new TreeMap<>(); // Use TreeMap to sort by node type
+ Inspector inspector = SlimeUtils.jsonToSlime(data).get();
+ inspector.traverse((ObjectTraverser) (key, value) ->
+ versions.put(NodeSerializer.nodeTypeFromString(key), Version.fromString(value.asString())));
+ return versions;
+ }
+
+}
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/v2/NodesResponse.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/v2/NodesResponse.java
index 716de252513..99ebb3e517b 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/v2/NodesResponse.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/v2/NodesResponse.java
@@ -174,9 +174,6 @@ class NodesResponse extends HttpResponse {
.ifPresent(version -> {
object.setString("vespaVersion", version.toFullString());
object.setString("currentDockerImage", nodeRepository.dockerImage().withTag(version).asString());
- // TODO: Remove these when they are no longer read
- object.setString("hostedVersion", version.toFullString());
- object.setString("convergedStateVersion", version.toFullString());
});
object.setLong("failCount", node.status().failCount());
object.setBool("hardwareFailure", node.status().hardwareFailureDescription().isPresent());
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/v2/UpgradeResponse.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/v2/UpgradeResponse.java
index 20a0139a178..3fb712e182f 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/v2/UpgradeResponse.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/v2/UpgradeResponse.java
@@ -32,10 +32,7 @@ public class UpgradeResponse extends HttpResponse {
Cursor root = slime.setObject();
Cursor versionsObject = root.setObject("versions");
- infrastructureVersions.getTargetVersions().entrySet().stream()
- .sorted(Comparator.comparing(Map.Entry::getKey)) // Sort for stable tests
- .forEach(entry ->
- versionsObject.setString(entry.getKey().name(), entry.getValue().toFullString()));
+ infrastructureVersions.getTargetVersions().forEach((nodeType, version) -> versionsObject.setString(nodeType.name(), version.toFullString()));
new JsonFormat(true).encode(stream, slime);
}
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/MaintenanceTester.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/MaintenanceTester.java
index 740e4ff1ca4..69470cf9d4e 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/MaintenanceTester.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/MaintenanceTester.java
@@ -67,4 +67,8 @@ public class MaintenanceTester {
.collect(Collectors.toList());
}
+ public JobControl jobControl() {
+ return new JobControl(nodeRepository.database());
+ }
+
}
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/NodeFailerTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/NodeFailerTest.java
index 63bc04ac671..c483615203d 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/NodeFailerTest.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/NodeFailerTest.java
@@ -8,8 +8,6 @@ import com.yahoo.vespa.applicationmodel.ServiceInstance;
import com.yahoo.vespa.applicationmodel.ServiceStatus;
import com.yahoo.vespa.hosted.provision.Node;
import com.yahoo.vespa.hosted.provision.NodeRepository;
-import com.yahoo.vespa.orchestrator.ApplicationIdNotFoundException;
-import com.yahoo.vespa.orchestrator.ApplicationStateChangeDeniedException;
import org.junit.Test;
import java.time.Duration;
@@ -39,7 +37,7 @@ import static org.mockito.Mockito.when;
public class NodeFailerTest {
@Test
- public void nodes_for_suspended_applications_are_not_failed() throws ApplicationStateChangeDeniedException, ApplicationIdNotFoundException {
+ public void nodes_for_suspended_applications_are_not_failed() {
NodeFailTester tester = NodeFailTester.withTwoApplications();
tester.suspend(NodeFailTester.app1);
@@ -57,7 +55,7 @@ public class NodeFailerTest {
}
@Test
- public void node_failing() throws InterruptedException {
+ public void node_failing() {
NodeFailTester tester = NodeFailTester.withTwoApplications();
// For a day all nodes work so nothing happens
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/NodeRebooterTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/NodeRebooterTest.java
index 7e1f4f60b65..57152d12416 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/NodeRebooterTest.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/NodeRebooterTest.java
@@ -17,7 +17,7 @@ import static org.junit.Assert.assertEquals;
public class NodeRebooterTest {
@Test
- public void testRebootScheduling() throws InterruptedException {
+ public void testRebootScheduling() {
Duration rebootInterval = Duration.ofMinutes(250);
MaintenanceTester tester = new MaintenanceTester();
tester.createReadyTenantNodes(15);
@@ -26,7 +26,7 @@ public class NodeRebooterTest {
// will be performed.
tester.clock.advance(rebootInterval);
- NodeRebooter rebooter = new NodeRebooter(tester.nodeRepository, tester.clock, rebootInterval, new JobControl(tester.nodeRepository().database()));
+ NodeRebooter rebooter = new NodeRebooter(tester.nodeRepository, tester.clock, rebootInterval, tester.jobControl());
maintenanceIntervals(rebooter, tester, 1);
assertEquals("All tenant nodes have reboot scheduled",
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/NodeRetirerTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/NodeRetirerTest.java
index 13ac7b6f2d3..6eeeb3dfe08 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/NodeRetirerTest.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/NodeRetirerTest.java
@@ -32,6 +32,7 @@ import static org.mockito.Mockito.when;
* @author freva
*/
public class NodeRetirerTest {
+
private NodeRetirerTester tester;
private NodeRetirer retirer;
private final RetirementPolicy policy = mock(RetirementPolicy.class);
@@ -171,4 +172,5 @@ public class NodeRetirerTest {
verify(retirer, never()).retireUnallocated();
verify(retirer, never()).retireAllocated();
}
+
}
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node10.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node10.json
index 65e2b1435dc..fe65f34bae5 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node10.json
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node10.json
@@ -35,8 +35,6 @@
"currentRebootGeneration": 0,
"vespaVersion": "5.104.142",
"currentDockerImage": "docker-registry.domain.tld:8080/dist/vespa:5.104.142",
- "hostedVersion": "5.104.142",
- "convergedStateVersion": "5.104.142",
"failCount": 0,
"hardwareFailure": false,
"wantToRetire": false,
@@ -63,4 +61,4 @@
"127.0.0.1"
],
"additionalIpAddresses": []
-} \ No newline at end of file
+}
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node4-after-changes.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node4-after-changes.json
index 9cec6d86421..86f31c5aa62 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node4-after-changes.json
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node4-after-changes.json
@@ -35,8 +35,6 @@
"currentRebootGeneration": 1,
"vespaVersion": "6.43.0",
"currentDockerImage": "docker-registry.domain.tld:8080/dist/vespa:6.43.0",
- "hostedVersion": "6.43.0",
- "convergedStateVersion": "6.43.0",
"failCount": 1,
"hardwareFailure": true,
"hardwareFailureDescription": "memory_mcelog",
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node4.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node4.json
index 1b705a0ee8c..a2f72766d7f 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node4.json
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node4.json
@@ -35,8 +35,6 @@
"currentRebootGeneration": 0,
"vespaVersion": "6.41.0",
"currentDockerImage": "docker-registry.domain.tld:8080/dist/vespa:6.41.0",
- "hostedVersion": "6.41.0",
- "convergedStateVersion": "6.41.0",
"failCount": 0,
"hardwareFailure": false,
"wantToRetire": false,
@@ -68,4 +66,4 @@
"127.0.0.1"
],
"additionalIpAddresses": []
-} \ No newline at end of file
+}
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node5.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node5.json
index f8b9fb72e5e..ceb393f4bf6 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node5.json
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node5.json
@@ -18,8 +18,6 @@
"currentRebootGeneration": 0,
"vespaVersion": "1.2.3",
"currentDockerImage": "docker-registry.domain.tld:8080/dist/vespa:1.2.3",
- "hostedVersion": "1.2.3",
- "convergedStateVersion": "1.2.3",
"failCount": 1,
"hardwareFailure": false,
"wantToRetire": false,