diff options
author | Martin Polden <mpolden@mpolden.no> | 2023-01-04 11:07:39 +0100 |
---|---|---|
committer | Martin Polden <mpolden@mpolden.no> | 2023-01-10 12:47:08 +0100 |
commit | 0433a3ae96b1200f24385ce24a4b7e58b6a4c723 (patch) | |
tree | 928badf4f3975a34eabcbcaba995b8ff8346e34e /node-repository | |
parent | c6191deb7c5fd1501c1d07b3cae0c8e8b9486434 (diff) |
Read node objects from unified path
Diffstat (limited to 'node-repository')
27 files changed, 210 insertions, 238 deletions
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/MaintenanceDeployment.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/MaintenanceDeployment.java index a94adc5aaae..bcc571355e3 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/MaintenanceDeployment.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/MaintenanceDeployment.java @@ -190,7 +190,8 @@ class MaintenanceDeployment implements Closeable { markPreferToRetire(node, false, agent, nodeRepository); // Necessary if this failed, no-op otherwise // Immediately clean up if we reserved the node but could not activate or reserved a node on the wrong host - expectedNewNode.flatMap(node -> nodeRepository.nodes().node(node.hostname(), Node.State.reserved)) + expectedNewNode.flatMap(node -> nodeRepository.nodes().node(node.hostname())) + .filter(node -> node.state() == Node.State.reserved) .ifPresent(node -> nodeRepository.nodes().deallocate(node, agent, "Expired by " + agent)); } } diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/NodeHealthTracker.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/NodeHealthTracker.java index b602d2ac7cd..94683d463af 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/NodeHealthTracker.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/NodeHealthTracker.java @@ -96,7 +96,8 @@ public class NodeHealthTracker extends NodeRepositoryMaintainer { /** Get node by given hostname and application. The applicationLock must be held when calling this */ private Optional<Node> getNode(String hostname, ApplicationId application, @SuppressWarnings("unused") Mutex applicationLock) { - return nodeRepository().nodes().node(hostname, Node.State.active) + return nodeRepository().nodes().node(hostname) + .filter(node -> node.state() == Node.State.active) .filter(node -> node.allocation().isPresent()) .filter(node -> node.allocation().get().owner().equals(application)); } diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/IP.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/IP.java index c0d0b220767..b2becc7ecfd 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/IP.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/IP.java @@ -131,8 +131,9 @@ public class IP { * @throws IllegalArgumentException if there are IP conflicts with existing nodes */ public static List<Node> verify(List<Node> nodes, LockedNodeList allNodes) { + NodeList sortedNodes = allNodes.sortedBy(Comparator.comparing(Node::hostname)); for (var node : nodes) { - for (var other : allNodes) { + for (var other : sortedNodes) { if (node.equals(other)) continue; if (canAssignIpOf(other, node)) continue; diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/Nodes.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/Nodes.java index b507d66e14f..5c2a6601ad8 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/Nodes.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/Nodes.java @@ -76,11 +76,11 @@ public class Nodes { public void rewrite() { Instant start = clock.instant(); int nodesWritten = 0; - for (Node.State state : Node.State.values()) { - List<Node> nodes = db.readNodes(state); + Map<Node.State, NodeList> nodes = list().groupingBy(Node::state); + for (var kv : nodes.entrySet()) { // TODO(mpolden): This should take the lock before writing - db.writeTo(state, nodes, Agent.system, Optional.empty()); - nodesWritten += nodes.size(); + db.writeTo(kv.getKey(), kv.getValue().asList(), Agent.system, Optional.empty()); + nodesWritten += kv.getValue().size(); } Instant end = clock.instant(); log.log(Level.INFO, String.format("Rewrote %d nodes in %s", nodesWritten, Duration.between(start, end))); @@ -88,24 +88,19 @@ public class Nodes { // ---------------- Query API ---------------------------------------------------------------- - /** - * Finds and returns the node with the hostname in any of the given states, or empty if not found - * - * @param hostname the full host name of the node - * @param inState the states the node may be in. If no states are given, it will be returned from any state - * @return the node, or empty if it was not found in any of the given states - */ - public Optional<Node> node(String hostname, Node.State... inState) { - return db.readNode(hostname, inState); + /** Finds and returns the node with given hostname, or empty if not found */ + public Optional<Node> node(String hostname) { + return db.readNode(hostname); } /** - * Returns a list of nodes in this repository in any of the given states + * Returns an unsorted list of all nodes in this repository, in any of the given states * - * @param inState the states to return nodes from. If no states are given, all nodes of the given type are returned + * @param inState the states to return nodes from. If no states are given, all nodes are returned */ public NodeList list(Node.State... inState) { - return NodeList.copyOf(db.readNodes(inState)); + NodeList nodes = NodeList.copyOf(db.readNodes()); + return inState.length == 0 ? nodes : nodes.state(Set.of(inState)); } /** Returns a locked list of all nodes in this repository */ @@ -768,13 +763,9 @@ public class Nodes { for (int i = 0; i < maxRetries; ++i) { Mutex lockToClose = lock(staleNode, timeout); try { - // As an optimization we first try finding the node in the same state - Optional<Node> freshNode = node(staleNode.hostname(), staleNode.state()); + Optional<Node> freshNode = node(staleNode.hostname()); if (freshNode.isEmpty()) { - freshNode = node(staleNode.hostname()); - if (freshNode.isEmpty()) { - return Optional.empty(); - } + return Optional.empty(); } if (node.type() != NodeType.tenant || diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/CachingCurator.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/CachingCurator.java index 90d30a3a8bc..589468c48b8 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/CachingCurator.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/CachingCurator.java @@ -208,7 +208,7 @@ public class CachingCurator { List<String> getChildren(Path path); /** - * Returns the a copy of the content of this child - which may be empty. + * Returns a copy of the content of this child - which may be empty. */ Optional<byte[]> getData(Path path); diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/CuratorDb.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/CuratorDb.java index cebc185360a..b9821b48fba 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/CuratorDb.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/CuratorDb.java @@ -96,7 +96,7 @@ public class CuratorDb { db.create(nodesPath); // TODO(mpolden): Remove state paths after migration to nodesPath for (Node.State state : Node.State.values()) - db.create(toPath(state)); + db.create(toLegacyPath(state)); db.create(applicationsPath); db.create(inactiveJobsPath); db.create(infrastructureVersionsPath); @@ -117,7 +117,7 @@ public class CuratorDb { node = node.with(node.history().recordStateTransition(null, expectedState, agent, clock.instant())); // TODO(mpolden): Remove after migration to nodesPath byte[] serialized = nodeSerializer.toJson(node); - curatorTransaction.add(CuratorOperations.create(toPath(node).getAbsolute(), serialized)); + curatorTransaction.add(CuratorOperations.create(toLegacyPath(node).getAbsolute(), serialized)); curatorTransaction.add(CuratorOperations.create(nodePath(node).getAbsolute(), serialized)); } @@ -137,7 +137,7 @@ public class CuratorDb { /** Removes given nodes in transaction */ public void removeNodes(List<Node> nodes, NestedTransaction transaction) { for (Node node : nodes) { - Path path = toPath(node.state(), node.hostname()); + Path path = toLegacyPath(node.state(), node.hostname()); CuratorTransaction curatorTransaction = db.newCuratorTransactionIn(transaction); // TODO(mpolden): Remove after migration to nodesPath curatorTransaction.add(CuratorOperations.delete(path.getAbsolute())); @@ -237,8 +237,8 @@ public class CuratorDb { private void writeNode(Node.State toState, CuratorTransaction curatorTransaction, Node node, Node newNode) { byte[] nodeData = nodeSerializer.toJson(newNode); { // TODO(mpolden): Remove this after migration to nodesPath - String currentNodePath = toPath(node).getAbsolute(); - String newNodePath = toPath(toState, newNode.hostname()).getAbsolute(); + String currentNodePath = toLegacyPath(node).getAbsolute(); + String newNodePath = toLegacyPath(toState, newNode.hostname()).getAbsolute(); if (newNodePath.equals(currentNodePath)) { curatorTransaction.add(CuratorOperations.setData(currentNodePath, nodeData)); } else { @@ -255,61 +255,39 @@ public class CuratorDb { return node.status(); } - /** - * Returns all nodes which are in one of the given states. - * If no states are given this returns all nodes. - * - * @return the nodes in a mutable list owned by the caller - */ - public List<Node> readNodes(Node.State ... states) { - List<Node> nodes = new ArrayList<>(); - if (states.length == 0) - states = Node.State.values(); + /** Returns all existing nodes */ + public List<Node> readNodes() { CachingCurator.Session session = db.getSession(); - for (Node.State state : states) { - for (String hostname : session.getChildren(toPath(state))) { - Optional<Node> node = readNode(session, hostname, state); - node.ifPresent(nodes::add); // node might disappear between getChildren and getNode - } - } - return nodes; + return session.getChildren(nodesPath).stream() + .flatMap(hostname -> readNode(session, hostname).stream()) + .toList(); } - /** - * Returns a particular node, or empty if this node is not in any of the given states. - * If no states are given this returns the node if it is present in any state. - */ - public Optional<Node> readNode(CachingCurator.Session session, String hostname, Node.State ... states) { - if (states.length == 0) - states = Node.State.values(); - for (Node.State state : states) { - Optional<byte[]> nodeData = session.getData(toPath(state, hostname)); - if (nodeData.isPresent()) - return nodeData.map((data) -> nodeSerializer.fromJson(state, data)); - } - return Optional.empty(); + private Optional<Node> readNode(CachingCurator.Session session, String hostname) { + return session.getData(nodePath(hostname)).map(nodeSerializer::fromJson); } - /** - * Returns a particular node, or empty if this noe is not in any of the given states. - * If no states are given this returns the node if it is present in any state. - */ - public Optional<Node> readNode(String hostname, Node.State ... states) { - return readNode(db.getSession(), hostname, states); + /** Read node with given hostname, if any such node exists */ + public Optional<Node> readNode(String hostname) { + return readNode(db.getSession(), hostname); } - private Path toPath(Node.State nodeState) { return root.append(toDir(nodeState)); } + private Path toLegacyPath(Node.State nodeState) { return root.append(toDir(nodeState)); } - private Path toPath(Node node) { + private Path toLegacyPath(Node node) { return root.append(toDir(node.state())).append(node.hostname()); } - private Path toPath(Node.State nodeState, String nodeName) { + private Path toLegacyPath(Node.State nodeState, String nodeName) { return root.append(toDir(nodeState)).append(nodeName); } private Path nodePath(Node node) { - return nodesPath.append(node.hostname()); + return nodePath(node.hostname()); + } + + private Path nodePath(String hostname) { + return nodesPath.append(hostname); } /** Creates and returns the path to the lock for this application */ 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 f448266b94b..39cccafb8ef 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 @@ -40,7 +40,6 @@ import com.yahoo.vespa.hosted.provision.node.Status; import com.yahoo.vespa.hosted.provision.node.TrustStoreItem; import java.io.IOException; -import java.nio.charset.StandardCharsets; import java.time.Instant; import java.util.ArrayList; import java.util.Collection; @@ -266,19 +265,16 @@ public class NodeSerializer { // ---------------- Deserialization -------------------------------------------------- - public Node fromJson(Node.State state, byte[] data) { - long key = Hashing.sipHash24().newHasher() - .putString(state.name(), StandardCharsets.UTF_8) - .putBytes(data).hash() - .asLong(); + public Node fromJson(byte[] data) { + long key = Hashing.sipHash24().newHasher().putBytes(data).hash().asLong(); try { - return cache.get(key, () -> nodeFromSlime(state, SlimeUtils.jsonToSlime(data).get())); + return cache.get(key, () -> nodeFromSlime(SlimeUtils.jsonToSlime(data).get())); } catch (ExecutionException e) { throw new UncheckedExecutionException(e); } } - private Node nodeFromSlime(Node.State state, Inspector object) { + private Node nodeFromSlime(Inspector object) { Flavor flavor = flavorFromSlime(object); return new Node(object.field(idKey).asString(), new IP.Config(ipAddressesFromSlime(object, ipAddressesKey), @@ -288,7 +284,7 @@ public class NodeSerializer { SlimeUtils.optionalString(object.field(parentHostnameKey)), flavor, statusFromSlime(object), - state, + nodeStateFromString(object.field(stateKey).asString()), allocationFromSlime(flavor.resources(), object.field(instanceKey)), historyFromSlime(object), nodeTypeFromString(object.field(nodeTypeKey).asString()), diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/NodesResponse.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/NodesResponse.java index 942f029bc6a..fd466108063 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/NodesResponse.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/NodesResponse.java @@ -105,16 +105,12 @@ class NodesResponse extends SlimeJsonResponse { } /** Outputs the nodes in the given states to a node array */ - private void nodesToSlime(Set<Node.State> statesToRead, Cursor parentObject) { + private void nodesToSlime(Set<Node.State> states, Cursor parentObject) { Cursor nodeArray = parentObject.setArray("nodes"); - boolean sortByNodeType = statesToRead.size() == 1; - statesToRead.stream().sorted().forEach(state -> { - NodeList nodes = nodeRepository.nodes().list(state); - if (sortByNodeType) { - nodes = nodes.sortedBy(Comparator.comparing(Node::type)); - } - toSlime(nodes, nodeArray); - }); + NodeList nodes = nodeRepository.nodes().list() + .state(states) + .sortedBy(Comparator.comparing(Node::hostname)); + toSlime(nodes, nodeArray); } private void toSlime(NodeList nodes, Cursor array) { diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/NodeRepositoryTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/NodeRepositoryTest.java index 0a179babc10..7d9a48f6773 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/NodeRepositoryTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/NodeRepositoryTest.java @@ -214,8 +214,6 @@ public class NodeRepositoryTest { tester.addHost("id2", "host1", "default", NodeType.host); host1 = tester.nodeRepository().nodes().node("host1").get(); assertEquals("This is the newly added node", "id2", host1.id()); - assertFalse("The old 'host1' is removed", - tester.nodeRepository().nodes().node("host1", Node.State.deprovisioned).isPresent()); assertFalse("Not transferred from deprovisioned host", host1.status().wantToRetire()); assertFalse("Not transferred from deprovisioned host", host1.status().wantToDeprovision()); assertTrue("Transferred from deprovisioned host", host1.history().hasEventAfter(History.Event.Type.deprovisioned, testStart)); diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/RealDataScenarioTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/RealDataScenarioTest.java index e569e9b0382..dc1e1320ff2 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/RealDataScenarioTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/RealDataScenarioTest.java @@ -48,7 +48,6 @@ import java.util.function.Consumer; import java.util.logging.Logger; import java.util.regex.Matcher; import java.util.regex.Pattern; -import java.util.stream.Collectors; import java.util.stream.IntStream; import static com.yahoo.config.provision.NodeResources.DiskSpeed.any; @@ -142,7 +141,7 @@ public class RealDataScenarioTest { Consumer<String> consumer = input -> { if (state.get() != null) { String json = input.substring(input.indexOf("{\""), input.lastIndexOf('}') + 1); - Node node = nodeSerializer.fromJson(state.get(), json.getBytes(UTF_8)); + Node node = nodeSerializer.fromJson(json.getBytes(UTF_8)); nodeRepository.database().addNodesInState(List.of(node), state.get(), Agent.system); state.set(null); } else { diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/MetricsReporterTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/MetricsReporterTest.java index 4f23ea3a578..44050fa747c 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/MetricsReporterTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/MetricsReporterTest.java @@ -40,7 +40,6 @@ import java.util.Map; import java.util.Optional; import java.util.Set; import java.util.TreeMap; -import java.util.stream.Collectors; import static org.junit.Assert.assertEquals; import static org.mockito.ArgumentMatchers.any; @@ -118,14 +117,14 @@ public class MetricsReporterTest { expectedMetrics.put("suspendedSeconds", 123L); expectedMetrics.put("numberOfServices", 0L); - expectedMetrics.put("cache.nodeObject.hitRate", 0.6D); + expectedMetrics.put("cache.nodeObject.hitRate", 0.7142857142857143D); expectedMetrics.put("cache.nodeObject.evictionCount", 0L); expectedMetrics.put("cache.nodeObject.size", 2L); nodeRepository.nodes().list(); - expectedMetrics.put("cache.curator.hitRate", 0.52D); + expectedMetrics.put("cache.curator.hitRate", 2D/3D); expectedMetrics.put("cache.curator.evictionCount", 0L); - expectedMetrics.put("cache.curator.size", 12L); + expectedMetrics.put("cache.curator.size", 3L); tester.clock().setInstant(Instant.ofEpochSecond(124)); diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/os/OsVersionsTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/os/OsVersionsTest.java index 9f9e6b85545..b5735cfae84 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/os/OsVersionsTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/os/OsVersionsTest.java @@ -121,17 +121,16 @@ public class OsVersionsTest { // Activate target for (int i = 0; i < totalNodes; i += maxActiveUpgrades) { versions.resumeUpgradeOf(NodeType.host, true); - var nodes = hostNodes.get(); - var nodesUpgrading = nodes.changingOsVersion(); + NodeList nodes = hostNodes.get(); + NodeList nodesUpgrading = nodes.changingOsVersion(); assertEquals("Target is changed for a subset of nodes", maxActiveUpgrades, nodesUpgrading.size()); assertEquals("Wanted version is set for nodes upgrading", version1, minVersion(nodesUpgrading, OsVersion::wanted)); - var nodesOnLowestVersion = nodes.asList().stream() - .sorted(Comparator.comparing(node -> node.status().osVersion().current().orElse(Version.emptyVersion))) - .toList() - .subList(0, maxActiveUpgrades); + NodeList nodesOnLowestVersion = nodes.sortedBy(Comparator.comparing(node -> node.status().osVersion().current().orElse(Version.emptyVersion))) + .first(maxActiveUpgrades); assertEquals("Nodes on lowest version are told to upgrade", - nodesUpgrading.asList(), nodesOnLowestVersion); + nodesUpgrading.hostnames(), + nodesOnLowestVersion.hostnames()); completeReprovisionOf(nodesUpgrading.asList()); } diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/persistence/CuratorDbTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/persistence/CuratorDbTest.java index 42a0dd982ad..c0d6ab90f06 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/persistence/CuratorDbTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/persistence/CuratorDbTest.java @@ -28,10 +28,10 @@ public class CuratorDbTest { @Test public void can_read_stored_host_information() throws Exception { - String zkline = "{\"hostname\":\"host1\",\"ipAddresses\":[\"127.0.0.1\"],\"additionalIpAddresses\":[\"127.0.0.2\"],\"openStackId\":\"7951bb9d-3989-4a60-a21c-13690637c8ea\",\"flavor\":\"default\",\"created\":1421054425159, \"type\":\"host\"}"; - curator.framework().create().creatingParentsIfNeeded().forPath("/provision/v1/ready/host1", zkline.getBytes()); + String zkline = "{\"hostname\":\"host1\",\"state\":\"ready\",\"ipAddresses\":[\"127.0.0.1\"],\"additionalIpAddresses\":[\"127.0.0.2\"],\"openStackId\":\"7951bb9d-3989-4a60-a21c-13690637c8ea\",\"flavor\":\"default\",\"created\":1421054425159, \"type\":\"host\"}"; + curator.framework().create().creatingParentsIfNeeded().forPath("/provision/v1/nodes/host1", zkline.getBytes()); - List<Node> allocatedNodes = zkClient.readNodes(Node.State.ready); + List<Node> allocatedNodes = zkClient.readNodes(); assertEquals(1, allocatedNodes.size()); assertEquals(NodeType.host, allocatedNodes.get(0).type()); } diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/persistence/NodeSerializerTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/persistence/NodeSerializerTest.java index ab487cc7d04..d61a3d95a65 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/persistence/NodeSerializerTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/persistence/NodeSerializerTest.java @@ -67,7 +67,7 @@ public class NodeSerializerTest { public void provisioned_node_serialization() { Node node = createNode(); - Node copy = nodeSerializer.fromJson(Node.State.provisioned, nodeSerializer.toJson(node)); + Node copy = nodeSerializer.fromJson(nodeSerializer.toJson(node)); assertEquals(node.hostname(), copy.hostname()); assertEquals(node.id(), copy.id()); assertEquals(node.state(), copy.state()); @@ -99,7 +99,7 @@ public class NodeSerializerTest { node = node.downAt(Instant.ofEpochMilli(5), Agent.system) .upAt(Instant.ofEpochMilli(6), Agent.system) .downAt(Instant.ofEpochMilli(7), Agent.system); - Node copy = nodeSerializer.fromJson(Node.State.provisioned, nodeSerializer.toJson(node)); + Node copy = nodeSerializer.fromJson(nodeSerializer.toJson(node)); assertEquals(node.id(), copy.id()); assertEquals(node.hostname(), copy.hostname()); @@ -129,6 +129,7 @@ public class NodeSerializerTest { String nodeData = "{\n" + " \"type\" : \"tenant\",\n" + + " \"state\" : \"provisioned\",\n" + " \"rebootGeneration\" : 1,\n" + " \"currentRebootGeneration\" : 2,\n" + " \"flavor\" : \"large\",\n" + @@ -159,7 +160,7 @@ public class NodeSerializerTest { " \"ipAddresses\" : [\"127.0.0.1\"]\n" + "}"; - Node node = nodeSerializer.fromJson(Node.State.provisioned, Utf8.toBytes(nodeData)); + Node node = nodeSerializer.fromJson(Utf8.toBytes(nodeData)); assertEquals("large", node.flavor().name()); assertEquals(1, node.status().reboot().wanted()); @@ -187,7 +188,7 @@ public class NodeSerializerTest { assertEquals(1, node.history().events().size()); clock.advance(Duration.ofMinutes(2)); node = node.retire(Agent.application, clock.instant()); - Node copy = nodeSerializer.fromJson(Node.State.provisioned, nodeSerializer.toJson(node)); + Node copy = nodeSerializer.fromJson(nodeSerializer.toJson(node)); assertEquals(2, copy.history().events().size()); assertEquals(clock.instant().truncatedTo(MILLIS), copy.history().event(History.Event.Type.retired).get().at()); assertEquals(Agent.application, @@ -195,34 +196,37 @@ public class NodeSerializerTest { assertTrue(copy.allocation().get().membership().retired()); Node removable = copy.with(node.allocation().get().removable(true, true)); - Node removableCopy = nodeSerializer.fromJson(Node.State.provisioned, nodeSerializer.toJson(removable)); + Node removableCopy = nodeSerializer.fromJson( nodeSerializer.toJson(removable)); assertTrue(removableCopy.allocation().get().removable()); assertTrue(removableCopy.allocation().get().reusable()); } @Test public void assimilated_node_deserialization() { - Node node = nodeSerializer.fromJson(Node.State.active, ("{\n" + - " \"type\": \"tenant\",\n" + - " \"hostname\": \"assimilate2.vespahosted.yahoo.tld\",\n" + - " \"ipAddresses\": [\"127.0.0.1\"],\n" + - " \"openStackId\": \"\",\n" + - " \"flavor\": \"ugccloud-container\",\n" + - " \"instance\": {\n" + - " \"tenantId\": \"by_mortent\",\n" + - " \"applicationId\": \"ugc-assimilate\",\n" + - " \"instanceId\": \"default\",\n" + - " \"serviceId\": \"container/ugccloud-container/0/0\",\n" + - " \"restartGeneration\": 0,\n" + - " \"wantedVespaVersion\": \"6.42.2\"\n" + - " }\n" + - "}\n").getBytes()); + Node node = nodeSerializer.fromJson((""" + { + "type": "tenant", + "hostname": "assimilate2.vespahosted.yahoo.tld", + "state": "provisioned", + "ipAddresses": ["127.0.0.1"], + "openStackId": "", + "flavor": "ugccloud-container", + "instance": { + "tenantId": "by_mortent", + "applicationId": "ugc-assimilate", + "instanceId": "default", + "serviceId": "container/ugccloud-container/0/0", + "restartGeneration": 0, + "wantedVespaVersion": "6.42.2" + } + } + """).getBytes()); assertEquals(0, node.history().events().size()); assertTrue(node.allocation().isPresent()); assertEquals("ugccloud-container", node.allocation().get().membership().cluster().id().value()); assertEquals("container", node.allocation().get().membership().cluster().type().name()); assertEquals(0, node.allocation().get().membership().cluster().group().get().index()); - Node copy = nodeSerializer.fromJson(Node.State.provisioned, nodeSerializer.toJson(node)); + Node copy = nodeSerializer.fromJson(nodeSerializer.toJson(node)); assertEquals(0, copy.history().events().size()); } @@ -237,7 +241,7 @@ public class NodeSerializerTest { clock.instant()); node = node.with(node.status().withFailCount(0)); - Node copy2 = nodeSerializer.fromJson(Node.State.provisioned, nodeSerializer.toJson(node)); + Node copy2 = nodeSerializer.fromJson(nodeSerializer.toJson(node)); assertEquals(0, copy2.status().failCount()); } @@ -249,7 +253,7 @@ public class NodeSerializerTest { .parentHostname(parentHostname) .build(); - Node deserializedNode = nodeSerializer.fromJson(State.provisioned, nodeSerializer.toJson(node)); + Node deserializedNode = nodeSerializer.fromJson(nodeSerializer.toJson(node)); assertEquals(parentHostname, deserializedNode.parentHostname().get()); } @@ -257,7 +261,7 @@ public class NodeSerializerTest { @Test public void serializes_multiple_ip_addresses() { byte[] nodeWithMultipleIps = createNodeJson("node4.yahoo.tld", "127.0.0.4", "::4"); - Node deserializedNode = nodeSerializer.fromJson(State.provisioned, nodeWithMultipleIps); + Node deserializedNode = nodeSerializer.fromJson(nodeWithMultipleIps); assertEquals(ImmutableSet.of("127.0.0.4", "::4"), deserializedNode.ipConfig().primary()); } @@ -269,13 +273,13 @@ public class NodeSerializerTest { node = node.with(node.ipConfig().withPool(IP.Pool.of( Set.of("::1", "::2", "::3"), List.of(new Address("a"), new Address("b"), new Address("c"))))); - Node copy = nodeSerializer.fromJson(node.state(), nodeSerializer.toJson(node)); + Node copy = nodeSerializer.fromJson(nodeSerializer.toJson(node)); assertEquals(node.ipConfig().pool().ipSet(), copy.ipConfig().pool().ipSet()); assertEquals(Set.copyOf(node.ipConfig().pool().getAddressList()), Set.copyOf(copy.ipConfig().pool().getAddressList())); // Test round-trip without address pool (handle empty pool) node = createNode(); - copy = nodeSerializer.fromJson(node.state(), nodeSerializer.toJson(node)); + copy = nodeSerializer.fromJson(nodeSerializer.toJson(node)); assertEquals(node.ipConfig().pool().ipSet(), copy.ipConfig().pool().ipSet()); assertEquals(Set.copyOf(node.ipConfig().pool().getAddressList()), Set.copyOf(copy.ipConfig().pool().getAddressList())); } @@ -286,11 +290,12 @@ public class NodeSerializerTest { "{\n" + " \"type\" : \"tenant\",\n" + " \"flavor\" : \"large\",\n" + + " \"state\" : \"provisioned\",\n" + " \"openStackId\" : \"myId\",\n" + " \"hostname\" : \"myHostname\",\n" + " \"ipAddresses\" : [\"127.0.0.1\"]\n" + "}"; - Node node = nodeSerializer.fromJson(State.provisioned, Utf8.toBytes(nodeData)); + Node node = nodeSerializer.fromJson(Utf8.toBytes(nodeData)); assertFalse(node.status().wantToRetire()); } @@ -301,7 +306,7 @@ public class NodeSerializerTest { node = node.with(node.flavor().with(FlavorOverrides.ofDisk(1234)), Agent.system, clock.instant()); assertEquals(1234, node.flavor().resources().diskGb(), 0); - Node copy = nodeSerializer.fromJson(Node.State.provisioned, nodeSerializer.toJson(node)); + Node copy = nodeSerializer.fromJson(nodeSerializer.toJson(node)); assertEquals(1234, copy.flavor().resources().diskGb(), 0); assertEquals(node, copy); assertTrue(node.history().event(History.Event.Type.resized).isPresent()); @@ -312,21 +317,22 @@ public class NodeSerializerTest { String nodeData = "{\n" + " \"type\" : \"tenant\",\n" + + " \"state\" : \"provisioned\",\n" + " \"flavor\" : \"large\",\n" + " \"openStackId\" : \"myId\",\n" + " \"hostname\" : \"myHostname\",\n" + " \"ipAddresses\" : [\"127.0.0.1\"]\n" + "}"; - Node node = nodeSerializer.fromJson(State.provisioned, Utf8.toBytes(nodeData)); + Node node = nodeSerializer.fromJson(Utf8.toBytes(nodeData)); assertFalse(node.status().wantToDeprovision()); } @Test public void want_to_rebuild() { - Node node = nodeSerializer.fromJson(State.active, nodeSerializer.toJson(createNode())); + Node node = nodeSerializer.fromJson(nodeSerializer.toJson(createNode())); assertFalse(node.status().wantToRebuild()); node = node.with(node.status().withWantToRetire(true, false, true)); - node = nodeSerializer.fromJson(State.active, nodeSerializer.toJson(node)); + node = nodeSerializer.fromJson(nodeSerializer.toJson(node)); assertTrue(node.status().wantToRetire()); assertFalse(node.status().wantToDeprovision()); assertTrue(node.status().wantToRebuild()); @@ -337,6 +343,7 @@ public class NodeSerializerTest { String nodeWithWantedVespaVersion = "{\n" + " \"type\" : \"tenant\",\n" + + " \"state\" : \"provisioned\",\n" + " \"flavor\" : \"large\",\n" + " \"openStackId\" : \"myId\",\n" + " \"hostname\" : \"myHostname\",\n" + @@ -349,13 +356,13 @@ public class NodeSerializerTest { " \"wantedVespaVersion\": \"6.42.2\"\n" + " }\n" + "}"; - Node node = nodeSerializer.fromJson(State.active, Utf8.toBytes(nodeWithWantedVespaVersion)); + Node node = nodeSerializer.fromJson(Utf8.toBytes(nodeWithWantedVespaVersion)); assertEquals("6.42.2", node.allocation().get().membership().cluster().vespaVersion().toString()); } @Test public void os_version_serialization() { - Node serialized = nodeSerializer.fromJson(State.provisioned, nodeSerializer.toJson(createNode())); + Node serialized = nodeSerializer.fromJson(nodeSerializer.toJson(createNode())); assertFalse(serialized.status().osVersion().current().isPresent()); // Update OS version @@ -364,7 +371,7 @@ public class NodeSerializerTest { serialized.history().event(History.Event.Type.osUpgraded).isPresent()); serialized = serialized.withCurrentOsVersion(Version.fromString("7.2"), Instant.ofEpochMilli(123)) .withCurrentOsVersion(Version.fromString("7.2"), Instant.ofEpochMilli(456)); - serialized = nodeSerializer.fromJson(State.provisioned, nodeSerializer.toJson(serialized)); + serialized = nodeSerializer.fromJson(nodeSerializer.toJson(serialized)); assertEquals(Version.fromString("7.2"), serialized.status().osVersion().current().get()); var osUpgradedEvents = serialized.history().events().stream() .filter(event -> event.type() == History.Event.Type.osUpgraded) @@ -376,11 +383,11 @@ public class NodeSerializerTest { @Test public void firmware_check_serialization() { - Node node = nodeSerializer.fromJson(State.active, nodeSerializer.toJson(createNode())); + Node node = nodeSerializer.fromJson(nodeSerializer.toJson(createNode())); assertFalse(node.status().firmwareVerifiedAt().isPresent()); node = node.withFirmwareVerifiedAt(Instant.ofEpochMilli(100)); - node = nodeSerializer.fromJson(State.active, nodeSerializer.toJson(node)); + node = nodeSerializer.fromJson(nodeSerializer.toJson(node)); assertEquals(100, node.status().firmwareVerifiedAt().get().toEpochMilli()); assertEquals(Instant.ofEpochMilli(100), node.history().event(History.Event.Type.firmwareVerified).get().at()); } @@ -394,7 +401,7 @@ public class NodeSerializerTest { @Test public void reports_serialization() { - Node node = nodeSerializer.fromJson(State.active, nodeSerializer.toJson(createNode())); + Node node = nodeSerializer.fromJson(nodeSerializer.toJson(createNode())); assertTrue(node.reports().isEmpty()); var slime = new Slime(); @@ -407,7 +414,7 @@ public class NodeSerializerTest { var reports = new Reports.Builder().setReport(report).build(); node = node.with(reports); - node = nodeSerializer.fromJson(State.active, nodeSerializer.toJson(node)); + node = nodeSerializer.fromJson(nodeSerializer.toJson(node)); reports = node.reports(); assertFalse(reports.isEmpty()); @@ -422,11 +429,11 @@ public class NodeSerializerTest { @Test public void model_id_serialization() { - Node node = nodeSerializer.fromJson(State.active, nodeSerializer.toJson(createNode())); + Node node = nodeSerializer.fromJson(nodeSerializer.toJson(createNode())); assertFalse(node.modelName().isPresent()); node = node.withModelName("some model"); - node = nodeSerializer.fromJson(State.active, nodeSerializer.toJson(node)); + node = nodeSerializer.fromJson(nodeSerializer.toJson(node)); assertEquals("some model", node.modelName().get()); } @@ -447,7 +454,7 @@ public class NodeSerializerTest { node = node.with(node.allocation().get().withNetworkPorts(ports)); assertTrue(node.allocation().isPresent()); assertTrue(node.allocation().get().networkPorts().isPresent()); - Node copy = nodeSerializer.fromJson(Node.State.provisioned, nodeSerializer.toJson(node)); + Node copy = nodeSerializer.fromJson(nodeSerializer.toJson(node)); assertTrue(copy.allocation().isPresent()); assertTrue(copy.allocation().get().networkPorts().isPresent()); NetworkPorts portsCopy = node.allocation().get().networkPorts().get(); @@ -457,11 +464,11 @@ public class NodeSerializerTest { @Test public void switch_hostname_serialization() { - Node node = nodeSerializer.fromJson(State.active, nodeSerializer.toJson(createNode())); + Node node = nodeSerializer.fromJson(nodeSerializer.toJson(createNode())); assertFalse(node.switchHostname().isPresent()); String switchHostname = "switch0.example.com"; node = node.withSwitchHostname(switchHostname); - node = nodeSerializer.fromJson(State.active, nodeSerializer.toJson(node)); + node = nodeSerializer.fromJson(nodeSerializer.toJson(node)); assertEquals(switchHostname, node.switchHostname().get()); } @@ -469,25 +476,25 @@ public class NodeSerializerTest { public void exclusive_to_serialization() { Node.Builder builder = Node.create("myId", IP.Config.EMPTY, "myHostname", nodeFlavors.getFlavorOrThrow("default"), NodeType.host); - Node node = nodeSerializer.fromJson(State.provisioned, nodeSerializer.toJson(builder.build())); + Node node = nodeSerializer.fromJson(nodeSerializer.toJson(builder.build())); assertFalse(node.exclusiveToApplicationId().isPresent()); assertFalse(node.exclusiveToClusterType().isPresent()); ApplicationId exclusiveToApp = ApplicationId.from("tenant1", "app1", "instance1"); ClusterSpec.Type exclusiveToCluster = ClusterSpec.Type.admin; node = builder.exclusiveToApplicationId(exclusiveToApp).exclusiveToClusterType(exclusiveToCluster).build(); - node = nodeSerializer.fromJson(State.provisioned, nodeSerializer.toJson(node)); + node = nodeSerializer.fromJson(nodeSerializer.toJson(node)); assertEquals(exclusiveToApp, node.exclusiveToApplicationId().get()); assertEquals(exclusiveToCluster, node.exclusiveToClusterType().get()); } @Test public void truststore_serialization() { - Node node = nodeSerializer.fromJson(State.active, nodeSerializer.toJson(createNode())); + Node node = nodeSerializer.fromJson(nodeSerializer.toJson(createNode())); assertEquals(List.of(), node.trustedCertificates()); List<TrustStoreItem> trustStoreItems = List.of(new TrustStoreItem("foo", Instant.parse("2023-09-01T23:59:59Z")), new TrustStoreItem("bar", Instant.parse("2025-05-20T23:59:59Z"))); node = node.with(trustStoreItems); - node = nodeSerializer.fromJson(State.active, nodeSerializer.toJson(node)); + node = nodeSerializer.fromJson(nodeSerializer.toJson(node)); assertEquals(trustStoreItems, node.trustedCertificates()); } @@ -498,7 +505,7 @@ public class NodeSerializerTest { .cloudAccount(account) .exclusiveToApplicationId(ApplicationId.defaultId()) .build(); - node = nodeSerializer.fromJson(State.provisioned, nodeSerializer.toJson(node)); + node = nodeSerializer.fromJson(nodeSerializer.toJson(node)); assertEquals(account, node.cloudAccount()); } @@ -514,6 +521,7 @@ public class NodeSerializerTest { return ("{\"hostname\":\"" + hostname + "\"," + ipAddressJsonPart + "\"openStackId\":\"myId\"," + + "\"state\":\"provisioned\"," + "\"flavor\":\"default\",\"rebootGeneration\":0," + "\"currentRebootGeneration\":0,\"failCount\":0,\"history\":[],\"type\":\"tenant\"}") .getBytes(StandardCharsets.UTF_8); diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/AclProvisioningTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/AclProvisioningTest.java index d26ac4d3916..30a49a89e12 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/AclProvisioningTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/AclProvisioningTest.java @@ -196,11 +196,16 @@ public class AclProvisioningTest { // ACL for nodes with allocation trust their respective load balancer networks, if any for (var host : hosts) { - var acls = tester.nodeRepository().getChildAcls(host); + List<NodeAcl> acls = tester.nodeRepository().getChildAcls(host); assertEquals(2, acls.size()); - assertEquals(Set.of(), acls.get(0).trustedNetworks()); - assertEquals(application, acls.get(1).node().allocation().get().owner()); - assertEquals(lbNetworks, acls.get(1).trustedNetworks()); + for (var acl : acls) { + if (acl.node().allocation().isPresent()) { + assertEquals(lbNetworks, acl.trustedNetworks()); + assertEquals(application, acl.node().allocation().get().owner()); + } else { + assertEquals(Set.of(), acl.trustedNetworks()); + } + } } } diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/LoadBalancerProvisionerTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/LoadBalancerProvisionerTest.java index 30bd1250430..e32643860f5 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/LoadBalancerProvisionerTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/LoadBalancerProvisionerTest.java @@ -85,8 +85,8 @@ public class LoadBalancerProvisionerTest { assertEquals(4443, get(lbApp1.get().get(0).instance().get().reals(), 1).port()); // A container is failed - Supplier<List<Node>> containers = () -> tester.getNodes(app1).container().asList(); - Node toFail = containers.get().get(0); + Supplier<NodeList> containers = () -> tester.getNodes(app1).container(); + Node toFail = containers.get().first().get(); tester.nodeRepository().nodes().fail(toFail.hostname(), Agent.system, this.getClass().getSimpleName()); // Redeploying replaces failed node and removes it from load balancer @@ -99,8 +99,8 @@ public class LoadBalancerProvisionerTest { .map(Real::hostname) .map(DomainName::value) .noneMatch(hostname -> hostname.equals(toFail.hostname()))); - assertEquals(containers.get().get(0).hostname(), get(loadBalancer.instance().get().reals(), 0).hostname().value()); - assertEquals(containers.get().get(1).hostname(), get(loadBalancer.instance().get().reals(), 1).hostname().value()); + assertEquals(containers.get().state(Node.State.active).hostnames(), + loadBalancer.instance().get().reals().stream().map(r -> r.hostname().value()).collect(Collectors.toSet())); assertSame("State is unchanged", LoadBalancer.State.active, loadBalancer.state()); // Add another container cluster to first app diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisioningTester.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisioningTester.java index 110569a371a..5e9549aafbb 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisioningTester.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisioningTester.java @@ -328,7 +328,7 @@ public class ProvisioningTester { } public void fail(String hostname) { - int beforeFailCount = nodeRepository.nodes().node(hostname, Node.State.active).get().status().failCount(); + int beforeFailCount = nodeRepository.nodes().node(hostname).get().status().failCount(); Node failedNode = nodeRepository.nodes().fail(hostname, Agent.system, "Failing to unit test"); assertTrue(nodeRepository.nodes().list(Node.State.failed).nodeType(NodeType.tenant).asList().contains(failedNode)); assertEquals(beforeFailCount + 1, failedNode.status().failCount()); diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/NodesV2ApiTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/NodesV2ApiTest.java index f5fe0e6aafd..9cc7d81055d 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/NodesV2ApiTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/NodesV2ApiTest.java @@ -796,8 +796,8 @@ public class NodesV2ApiTest { // Filter nodes by osVersion assertResponse(new Request("http://localhost:8080/nodes/v2/node/?osVersion=7.5.2"), "{\"nodes\":[" + - "{\"url\":\"http://localhost:8080/nodes/v2/node/dockerhost2.yahoo.com\"}," + - "{\"url\":\"http://localhost:8080/nodes/v2/node/dockerhost1.yahoo.com\"}" + + "{\"url\":\"http://localhost:8080/nodes/v2/node/dockerhost1.yahoo.com\"}," + + "{\"url\":\"http://localhost:8080/nodes/v2/node/dockerhost2.yahoo.com\"}" + "]}"); } diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/active-nodes.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/active-nodes.json index c46bc6acbd2..15e93ce40a0 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/active-nodes.json +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/active-nodes.json @@ -1,19 +1,19 @@ { "nodes": [ + @include(cfg1.json), + @include(cfg2.json), + @include(docker-node1.json), + @include(docker-node2.json), + @include(docker-node3.json), + @include(docker-node4.json), + @include(docker-node5.json), + @include(node1.json), @include(node10.json), + @include(node13.json), @include(node14.json), + @include(node2.json), @include(node4.json), @include(node6.json), - @include(docker-container1.json), - @include(node13.json), - @include(node2.json), - @include(node1.json), - @include(docker-node3.json), - @include(docker-node4.json), - @include(docker-node5.json), - @include(docker-node2.json), - @include(docker-node1.json), - @include(cfg1.json), - @include(cfg2.json) + @include(docker-container1.json) ] } diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/application2-nodes.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/application2-nodes.json index 4581ecba73d..6ffdb05fa67 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/application2-nodes.json +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/application2-nodes.json @@ -1,6 +1,6 @@ { "nodes": [ - @include(node6.json), - @include(node2.json) + @include(node2.json), + @include(node6.json) ] } diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/content-nodes.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/content-nodes.json index 134d27f5717..cbf79f5b55d 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/content-nodes.json +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/content-nodes.json @@ -1,8 +1,8 @@ { "nodes": [ + @include(node2.json), @include(node4.json), @include(node6.json), - @include(docker-container1.json), - @include(node2.json) + @include(docker-container1.json) ] } diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/enclave-nodes-recursive.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/enclave-nodes-recursive.json index 5c728d77920..540a0086cbf 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/enclave-nodes-recursive.json +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/enclave-nodes-recursive.json @@ -1,6 +1,6 @@ { "nodes": [ - @include(node3.json), - @include(docker-node2.json) + @include(docker-node2.json), + @include(node3.json) ] } diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/enclave-nodes.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/enclave-nodes.json index 5bbc683c92a..33fd4daa699 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/enclave-nodes.json +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/enclave-nodes.json @@ -1,10 +1,10 @@ { "nodes":[ { - "url":"http://localhost:8080/nodes/v2/node/host3.yahoo.com" + "url":"http://localhost:8080/nodes/v2/node/dockerhost2.yahoo.com" }, { - "url":"http://localhost:8080/nodes/v2/node/dockerhost2.yahoo.com" + "url":"http://localhost:8080/nodes/v2/node/host3.yahoo.com" } ] } diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/nodes-recursive-include-deprovisioned.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/nodes-recursive-include-deprovisioned.json index 66b44726e7e..dc6fd3a317d 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/nodes-recursive-include-deprovisioned.json +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/nodes-recursive-include-deprovisioned.json @@ -1,24 +1,24 @@ { "nodes": [ - @include(node7.json), - @include(node3.json), - @include(node10.json), @include(cfg1.json), @include(cfg2.json), + @include(docker-node1.json), + @include(docker-node2.json), @include(docker-node3.json), - @include(node14.json), - @include(node4.json), @include(docker-node4.json), - @include(node6.json), - @include(docker-container1.json), @include(docker-node5.json), - @include(docker-node2.json), + @include(dockerhost6.json), + @include(node1.json), + @include(node10.json), @include(node13.json), + @include(node14.json), @include(node2.json), - @include(docker-node1.json), - @include(node1.json), - @include(node55.json), + @include(node3.json), + @include(node4.json), @include(node5.json), - @include(dockerhost6.json) + @include(node55.json), + @include(node6.json), + @include(node7.json), + @include(docker-container1.json) ] } diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/nodes-recursive.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/nodes-recursive.json index 7b52bc576ae..bd3b743e98e 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/nodes-recursive.json +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/nodes-recursive.json @@ -1,23 +1,23 @@ { "nodes": [ - @include(node7.json), - @include(node3.json), - @include(node10.json), @include(cfg1.json), @include(cfg2.json), + @include(docker-node1.json), + @include(docker-node2.json), @include(docker-node3.json), - @include(node14.json), - @include(node4.json), @include(docker-node4.json), - @include(node6.json), - @include(docker-container1.json), @include(docker-node5.json), - @include(docker-node2.json), + @include(node1.json), + @include(node10.json), @include(node13.json), + @include(node14.json), @include(node2.json), - @include(docker-node1.json), - @include(node1.json), + @include(node3.json), + @include(node4.json), + @include(node5.json), @include(node55.json), - @include(node5.json) + @include(node6.json), + @include(node7.json), + @include(docker-container1.json) ] } diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/nodes.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/nodes.json index 86da5fb6e62..8147f92df31 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/nodes.json +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/nodes.json @@ -1,61 +1,61 @@ { "nodes": [ { - "url": "http://localhost:8080/nodes/v2/node/host7.yahoo.com" + "url": "http://localhost:8080/nodes/v2/node/cfg1.yahoo.com" }, { - "url": "http://localhost:8080/nodes/v2/node/host3.yahoo.com" + "url": "http://localhost:8080/nodes/v2/node/cfg2.yahoo.com" }, { - "url": "http://localhost:8080/nodes/v2/node/host10.yahoo.com" + "url": "http://localhost:8080/nodes/v2/node/dockerhost1.yahoo.com" }, { - "url": "http://localhost:8080/nodes/v2/node/cfg1.yahoo.com" + "url": "http://localhost:8080/nodes/v2/node/dockerhost2.yahoo.com" }, { - "url": "http://localhost:8080/nodes/v2/node/cfg2.yahoo.com" + "url": "http://localhost:8080/nodes/v2/node/dockerhost3.yahoo.com" }, { - "url": "http://localhost:8080/nodes/v2/node/dockerhost3.yahoo.com" + "url": "http://localhost:8080/nodes/v2/node/dockerhost4.yahoo.com" }, { - "url": "http://localhost:8080/nodes/v2/node/host14.yahoo.com" + "url": "http://localhost:8080/nodes/v2/node/dockerhost5.yahoo.com" }, { - "url": "http://localhost:8080/nodes/v2/node/host4.yahoo.com" + "url": "http://localhost:8080/nodes/v2/node/host1.yahoo.com" }, { - "url": "http://localhost:8080/nodes/v2/node/dockerhost4.yahoo.com" + "url": "http://localhost:8080/nodes/v2/node/host10.yahoo.com" }, { - "url": "http://localhost:8080/nodes/v2/node/host6.yahoo.com" + "url": "http://localhost:8080/nodes/v2/node/host13.yahoo.com" }, { - "url": "http://localhost:8080/nodes/v2/node/test-node-pool-102-2" + "url": "http://localhost:8080/nodes/v2/node/host14.yahoo.com" }, { - "url": "http://localhost:8080/nodes/v2/node/dockerhost5.yahoo.com" + "url": "http://localhost:8080/nodes/v2/node/host2.yahoo.com" }, { - "url": "http://localhost:8080/nodes/v2/node/dockerhost2.yahoo.com" + "url": "http://localhost:8080/nodes/v2/node/host3.yahoo.com" }, { - "url": "http://localhost:8080/nodes/v2/node/host13.yahoo.com" + "url": "http://localhost:8080/nodes/v2/node/host4.yahoo.com" }, { - "url": "http://localhost:8080/nodes/v2/node/host2.yahoo.com" + "url": "http://localhost:8080/nodes/v2/node/host5.yahoo.com" }, { - "url": "http://localhost:8080/nodes/v2/node/dockerhost1.yahoo.com" + "url": "http://localhost:8080/nodes/v2/node/host55.yahoo.com" }, { - "url": "http://localhost:8080/nodes/v2/node/host1.yahoo.com" + "url": "http://localhost:8080/nodes/v2/node/host6.yahoo.com" }, { - "url": "http://localhost:8080/nodes/v2/node/host55.yahoo.com" + "url": "http://localhost:8080/nodes/v2/node/host7.yahoo.com" }, { - "url": "http://localhost:8080/nodes/v2/node/host5.yahoo.com" + "url": "http://localhost:8080/nodes/v2/node/test-node-pool-102-2" } ] } diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/states-recursive.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/states-recursive.json index 5ece0e642f1..2bdffea108a 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/states-recursive.json +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/states-recursive.json @@ -20,21 +20,21 @@ "active": { "url": "http://localhost:8080/nodes/v2/state/active", "nodes": [ + @include(cfg1.json), + @include(cfg2.json), + @include(docker-node1.json), + @include(docker-node2.json), + @include(docker-node3.json), + @include(docker-node4.json), + @include(docker-node5.json), + @include(node1.json), @include(node10.json), + @include(node13.json), @include(node14.json), + @include(node2.json), @include(node4.json), @include(node6.json), - @include(docker-container1.json), - @include(node13.json), - @include(node2.json), - @include(node1.json), - @include(docker-node3.json), - @include(docker-node4.json), - @include(docker-node5.json), - @include(docker-node2.json), - @include(docker-node1.json), - @include(cfg1.json), - @include(cfg2.json) + @include(docker-container1.json) ] }, "inactive": { |