diff options
Diffstat (limited to 'node-repository/src/test/java/com')
38 files changed, 615 insertions, 614 deletions
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 5f357b9e4b0..0617884d227 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 @@ -32,19 +32,19 @@ public class NodeRepositoryTest { @Test public void add_and_remove() { NodeRepositoryTester tester = new NodeRepositoryTester(); - assertEquals(0, tester.nodeRepository().getNodes().size()); + assertEquals(0, tester.nodeRepository().nodes().getNodes().size()); tester.addHost("id1", "host1", "default", NodeType.host); tester.addHost("id2", "host2", "default", NodeType.host); tester.addHost("id3", "host3", "default", NodeType.host); - assertEquals(3, tester.nodeRepository().getNodes().size()); + assertEquals(3, tester.nodeRepository().nodes().getNodes().size()); - tester.nodeRepository().park("host2", true, Agent.system, "Parking to unit test"); - tester.nodeRepository().removeRecursively("host2"); + tester.nodeRepository().nodes().park("host2", true, Agent.system, "Parking to unit test"); + tester.nodeRepository().nodes().removeRecursively("host2"); - assertEquals(3, tester.nodeRepository().getNodes().size()); - assertEquals(1, tester.nodeRepository().getNodes(Node.State.deprovisioned).size()); + assertEquals(3, tester.nodeRepository().nodes().getNodes().size()); + assertEquals(1, tester.nodeRepository().nodes().getNodes(Node.State.deprovisioned).size()); } @Test @@ -53,14 +53,14 @@ public class NodeRepositoryTest { tester.addHost("id1", "host1", "docker", NodeType.tenant); try { - tester.nodeRepository().removeRecursively("host1"); // host1 is in state provisioned + tester.nodeRepository().nodes().removeRecursively("host1"); // host1 is in state provisioned fail("Should not be able to delete docker container node by itself in state provisioned"); } catch (IllegalArgumentException ignored) { // Expected } - tester.nodeRepository().setReady("host1", Agent.system, getClass().getSimpleName()); - tester.nodeRepository().removeRecursively("host1"); + tester.nodeRepository().nodes().setReady("host1", Agent.system, getClass().getSimpleName()); + tester.nodeRepository().nodes().removeRecursively("host1"); } @Test @@ -74,14 +74,14 @@ public class NodeRepositoryTest { tester.setNodeState("host2", Node.State.dirty); tester.setNodeState("cfg1", Node.State.dirty); - tester.nodeRepository().markNodeAvailableForNewAllocation("host1", Agent.system, getClass().getSimpleName()); - assertEquals(Node.State.ready, tester.nodeRepository().getNode("host1").get().state()); + tester.nodeRepository().nodes().markNodeAvailableForNewAllocation("host1", Agent.system, getClass().getSimpleName()); + assertEquals(Node.State.ready, tester.nodeRepository().nodes().getNode("host1").get().state()); - tester.nodeRepository().markNodeAvailableForNewAllocation("host2", Agent.system, getClass().getSimpleName()); - assertFalse(tester.nodeRepository().getNode("host2").isPresent()); + tester.nodeRepository().nodes().markNodeAvailableForNewAllocation("host2", Agent.system, getClass().getSimpleName()); + assertFalse(tester.nodeRepository().nodes().getNode("host2").isPresent()); - tester.nodeRepository().markNodeAvailableForNewAllocation("cfg1", Agent.system, getClass().getSimpleName()); - assertEquals(Node.State.ready, tester.nodeRepository().getNode("cfg1").get().state()); + tester.nodeRepository().nodes().markNodeAvailableForNewAllocation("cfg1", Agent.system, getClass().getSimpleName()); + assertEquals(Node.State.ready, tester.nodeRepository().nodes().getNode("cfg1").get().state()); } @Test @@ -92,17 +92,17 @@ public class NodeRepositoryTest { tester.setNodeState("host1", Node.State.dirty); tester.setNodeState("host2", Node.State.dirty); - Node node2 = tester.nodeRepository().getNode("host2").orElseThrow(); + Node node2 = tester.nodeRepository().nodes().getNode("host2").orElseThrow(); var reportsBuilder = new Reports.Builder(node2.reports()); reportsBuilder.setReport(Report.basicReport("reportId", Report.Type.HARD_FAIL, Instant.EPOCH, "hardware failure")); node2 = node2.with(reportsBuilder.build()); - tester.nodeRepository().write(node2, () -> {}); + tester.nodeRepository().nodes().write(node2, () -> {}); - tester.nodeRepository().markNodeAvailableForNewAllocation("host1", Agent.system, getClass().getSimpleName()); - assertEquals(Node.State.ready, tester.nodeRepository().getNode("host1").get().state()); + tester.nodeRepository().nodes().markNodeAvailableForNewAllocation("host1", Agent.system, getClass().getSimpleName()); + assertEquals(Node.State.ready, tester.nodeRepository().nodes().getNode("host1").get().state()); try { - tester.nodeRepository().markNodeAvailableForNewAllocation("host2", Agent.system, getClass().getSimpleName()); + tester.nodeRepository().nodes().markNodeAvailableForNewAllocation("host2", Agent.system, getClass().getSimpleName()); fail(); } catch (IllegalArgumentException e) { assertTrue(e.getMessage().contains("hardware failure")); @@ -120,29 +120,29 @@ public class NodeRepositoryTest { tester.addNode("node12", "node12", "host1", "docker", NodeType.tenant); tester.addNode("node20", "node20", "host2", "docker", NodeType.tenant); tester.setNodeState("node11", Node.State.active); - assertEquals(6, tester.nodeRepository().getNodes().size()); + assertEquals(6, tester.nodeRepository().nodes().getNodes().size()); try { - tester.nodeRepository().removeRecursively("host1"); + tester.nodeRepository().nodes().removeRecursively("host1"); fail("Should not be able to delete host node, one of the children is in state active"); } catch (IllegalArgumentException ignored) { // Expected } - assertEquals(6, tester.nodeRepository().getNodes().size()); + assertEquals(6, tester.nodeRepository().nodes().getNodes().size()); // Should be OK to delete host2 as both host2 and its only child, node20, are in state provisioned - tester.nodeRepository().removeRecursively("host2"); - assertEquals(5, tester.nodeRepository().getNodes().size()); - assertEquals(Node.State.deprovisioned, tester.nodeRepository().getNode("host2").get().state()); + tester.nodeRepository().nodes().removeRecursively("host2"); + assertEquals(5, tester.nodeRepository().nodes().getNodes().size()); + assertEquals(Node.State.deprovisioned, tester.nodeRepository().nodes().getNode("host2").get().state()); // Now node10 is in provisioned, set node11 to failed and node12 to ready, and it should be OK to delete host1 - tester.nodeRepository().fail("node11", Agent.system, getClass().getSimpleName()); - tester.nodeRepository().setReady("node12", Agent.system, getClass().getSimpleName()); - tester.nodeRepository().removeRecursively("node12"); // Remove one of the children first instead - assertEquals(4, tester.nodeRepository().getNodes().size()); - tester.nodeRepository().removeRecursively("host1"); - assertEquals(Node.State.deprovisioned, tester.nodeRepository().getNode("host1").get().state()); - assertEquals(IP.Config.EMPTY.primary(), tester.nodeRepository().getNode("host1").get().ipConfig().primary()); + tester.nodeRepository().nodes().fail("node11", Agent.system, getClass().getSimpleName()); + tester.nodeRepository().nodes().setReady("node12", Agent.system, getClass().getSimpleName()); + tester.nodeRepository().nodes().removeRecursively("node12"); // Remove one of the children first instead + assertEquals(4, tester.nodeRepository().nodes().getNodes().size()); + tester.nodeRepository().nodes().removeRecursively("host1"); + assertEquals(Node.State.deprovisioned, tester.nodeRepository().nodes().getNode("host1").get().state()); + assertEquals(IP.Config.EMPTY.primary(), tester.nodeRepository().nodes().getNode("host1").get().ipConfig().primary()); } @Test @@ -155,20 +155,20 @@ public class NodeRepositoryTest { tester.addNode("id2", cfg1, cfghost1, "docker", NodeType.config); tester.setNodeState(cfghost1, Node.State.active); tester.setNodeState(cfg1, Node.State.active); - assertEquals(2, tester.nodeRepository().getNodes().size()); + assertEquals(2, tester.nodeRepository().nodes().getNodes().size()); try { - tester.nodeRepository().removeRecursively(cfghost1); + tester.nodeRepository().nodes().removeRecursively(cfghost1); fail("Should not be able to delete host node, one of the children is in state active"); } catch (IllegalArgumentException ignored) { } - assertEquals(2, tester.nodeRepository().getNodes().size()); + assertEquals(2, tester.nodeRepository().nodes().getNodes().size()); // Fail host and container - tester.nodeRepository().failRecursively(cfghost1, Agent.system, getClass().getSimpleName()); + tester.nodeRepository().nodes().failRecursively(cfghost1, Agent.system, getClass().getSimpleName()); // Remove recursively - tester.nodeRepository().removeRecursively(cfghost1); - assertEquals(0, tester.nodeRepository().list().not().state(Node.State.deprovisioned).size()); + tester.nodeRepository().nodes().removeRecursively(cfghost1); + assertEquals(0, tester.nodeRepository().nodes().list().not().state(Node.State.deprovisioned).size()); } @Test @@ -179,29 +179,29 @@ public class NodeRepositoryTest { tester.clock().advance(Duration.ofSeconds(1)); tester.addHost("id1", "host1", "default", NodeType.host); tester.addHost("id2", "host2", "default", NodeType.host); - assertFalse(tester.nodeRepository().getNode("host1").get().history().hasEventAfter(History.Event.Type.deprovisioned, testStart)); + assertFalse(tester.nodeRepository().nodes().getNode("host1").get().history().hasEventAfter(History.Event.Type.deprovisioned, testStart)); // Set host 1 properties and deprovision it - try (var lock = tester.nodeRepository().lockAndGetRequired("host1")) { + try (var lock = tester.nodeRepository().nodes().lockAndGetRequired("host1")) { Node host1 = lock.node().withWantToRetire(true, true, Agent.system, tester.nodeRepository().clock().instant()); host1 = host1.withFirmwareVerifiedAt(tester.clock().instant()); host1 = host1.with(host1.status().withIncreasedFailCount()); host1 = host1.with(host1.reports().withReport(Report.basicReport("id", Report.Type.HARD_FAIL, tester.clock().instant(), "Test report"))); - tester.nodeRepository().write(host1, lock); + tester.nodeRepository().nodes().write(host1, lock); } - tester.nodeRepository().removeRecursively("host1"); + tester.nodeRepository().nodes().removeRecursively("host1"); // Host 1 is deprovisioned and unwanted properties are cleared - Node host1 = tester.nodeRepository().getNode("host1").get(); + Node host1 = tester.nodeRepository().nodes().getNode("host1").get(); assertEquals(Node.State.deprovisioned, host1.state()); assertTrue(host1.history().hasEventAfter(History.Event.Type.deprovisioned, testStart)); // Adding it again preserves some information from the deprovisioned host and removes it tester.addHost("id2", "host1", "default", NodeType.host); - host1 = tester.nodeRepository().getNode("host1").get(); + host1 = tester.nodeRepository().nodes().getNode("host1").get(); assertEquals("This is the newly added node", "id2", host1.id()); assertFalse("The old 'host1' is removed", - tester.nodeRepository().getNode("host1", Node.State.deprovisioned).isPresent()); + tester.nodeRepository().nodes().getNode("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)); @@ -225,15 +225,15 @@ public class NodeRepositoryTest { tester.setNodeState("node12", Node.State.active); tester.setNodeState("node20", Node.State.failed); - assertEquals(6, tester.nodeRepository().getNodes().size()); + assertEquals(6, tester.nodeRepository().nodes().getNodes().size()); // Should be OK to dirty host2 as it is in provisioned and its only child is in failed - tester.nodeRepository().deallocateRecursively("host2", Agent.system, NodeRepositoryTest.class.getSimpleName()); + tester.nodeRepository().nodes().deallocateRecursively("host2", Agent.system, NodeRepositoryTest.class.getSimpleName()); assertEquals(asSet("host2", "node20"), filterNodes(tester, node -> node.state() == Node.State.dirty)); // Cant dirty host1, node11 is ready and node12 is active try { - tester.nodeRepository().deallocateRecursively("host1", Agent.system, NodeRepositoryTest.class.getSimpleName()); + tester.nodeRepository().nodes().deallocateRecursively("host1", Agent.system, NodeRepositoryTest.class.getSimpleName()); fail("Should not be able to dirty host1"); } catch (IllegalArgumentException ignored) { } // Expected; @@ -248,27 +248,27 @@ public class NodeRepositoryTest { String reason = NodeRepositoryTest.class.getSimpleName(); try { - tester.nodeRepository().breakfixRecursively("node1", Agent.system, reason); + tester.nodeRepository().nodes().breakfixRecursively("node1", Agent.system, reason); fail("Should not be able to breakfix tenant node"); } catch (IllegalArgumentException ignored) {} try { - tester.nodeRepository().breakfixRecursively("host1", Agent.system, reason); + tester.nodeRepository().nodes().breakfixRecursively("host1", Agent.system, reason); fail("Should not be able to breakfix host in state not in [parked, failed]"); } catch (IllegalArgumentException ignored) {} tester.setNodeState("host1", Node.State.failed); tester.setNodeState("node1", Node.State.active); try { - tester.nodeRepository().breakfixRecursively("host1", Agent.system, reason); + tester.nodeRepository().nodes().breakfixRecursively("host1", Agent.system, reason); fail("Should not be able to breakfix host with active tenant node"); } catch (IllegalArgumentException ignored) {} tester.setNodeState("node1", Node.State.failed); - tester.nodeRepository().breakfixRecursively("host1", Agent.system, reason); + tester.nodeRepository().nodes().breakfixRecursively("host1", Agent.system, reason); - assertEquals(1, tester.nodeRepository().getNodes().size()); - Node node = tester.nodeRepository().getNodes().get(0); + assertEquals(1, tester.nodeRepository().nodes().getNodes().size()); + Node node = tester.nodeRepository().nodes().getNodes().get(0); assertEquals("host1", node.hostname()); assertEquals(Node.State.breakfixed, node.state()); } @@ -278,7 +278,7 @@ public class NodeRepositoryTest { } private static Set<String> filterNodes(NodeRepositoryTester tester, Predicate<Node> filter) { - return tester.nodeRepository() + return tester.nodeRepository().nodes() .getNodes().stream() .filter(filter) .map(Node::hostname) diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/NodeRepositoryTester.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/NodeRepositoryTester.java index f6ad119b80b..5e3b474e48b 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/NodeRepositoryTester.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/NodeRepositoryTester.java @@ -52,7 +52,7 @@ public class NodeRepositoryTester { public MockCurator curator() { return curator; } public List<Node> getNodes(NodeType type, Node.State ... inState) { - return nodeRepository.getNodes(type, inState); + return nodeRepository.nodes().getNodes(type, inState); } public Node addHost(String id, String hostname, String flavor, NodeType type) { @@ -70,7 +70,7 @@ public class NodeRepositoryTester { private Node addNode(String id, String hostname, String parentHostname, Flavor flavor, NodeType type) { IP.Config ipConfig = new IP.Config(nodeRepository.nameResolver().resolveAll(hostname), Set.of()); Node node = Node.create(id, ipConfig, hostname, flavor, type).parentHostname(parentHostname).build(); - return nodeRepository.addNodes(List.of(node), Agent.system).get(0); + return nodeRepository.nodes().addNodes(List.of(node), Agent.system).get(0); } /** @@ -79,7 +79,7 @@ public class NodeRepositoryTester { * of valid state transitions */ public void setNodeState(String hostname, Node.State state) { - Node node = nodeRepository.getNode(hostname).orElseThrow(RuntimeException::new); + Node node = nodeRepository.nodes().getNode(hostname).orElseThrow(RuntimeException::new); nodeRepository.database().writeTo(state, node, Agent.system, Optional.empty()); } 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 af14876c20c..b17c8fc35b6 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 @@ -80,7 +80,7 @@ public class RealDataScenarioTest { }; deploy(tester, app, specs, capacities); - tester.nodeRepository().list(app).cluster(specs[1].id()).forEach(System.out::println); + tester.nodeRepository().nodes().list(app).cluster(specs[1].id()).forEach(System.out::println); } private void deploy(ProvisioningTester tester, ApplicationId app, ClusterSpec[] specs, Capacity[] capacities) { diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/AutoscalingIntegrationTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/AutoscalingIntegrationTest.java index 8ef2fd72d08..5f7b4bc865c 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/AutoscalingIntegrationTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/AutoscalingIntegrationTest.java @@ -56,11 +56,11 @@ public class AutoscalingIntegrationTest { Application application = tester.nodeRepository().applications().get(application1).orElse(new Application(application1)) .withCluster(cluster1.id(), false, min, max); - try (Mutex lock = tester.nodeRepository().lock(application1)) { + try (Mutex lock = tester.nodeRepository().nodes().lock(application1)) { tester.nodeRepository().applications().put(application, lock); } var scaledResources = autoscaler.suggest(application.clusters().get(cluster1.id()), - tester.nodeRepository().list(application1)); + tester.nodeRepository().nodes().list(application1)); assertTrue(scaledResources.isPresent()); } diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/AutoscalingTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/AutoscalingTest.java index a217d97ac27..a5f3d5f2828 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/AutoscalingTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/AutoscalingTest.java @@ -116,7 +116,7 @@ public class AutoscalingTest { // deploy with slow tester.deploy(application1, cluster1, 5, 1, hostResources); - tester.nodeRepository().getNodes(application1).stream() + tester.nodeRepository().nodes().getNodes(application1).stream() .allMatch(n -> n.allocation().get().requestedResources().diskSpeed() == NodeResources.DiskSpeed.slow); tester.clock().advance(Duration.ofDays(2)); @@ -132,7 +132,7 @@ public class AutoscalingTest { assertEquals("Disk speed from min/max is used", NodeResources.DiskSpeed.any, scaledResources.nodeResources().diskSpeed()); tester.deploy(application1, cluster1, scaledResources); - tester.nodeRepository().getNodes(application1).stream() + tester.nodeRepository().nodes().getNodes(application1).stream() .allMatch(n -> n.allocation().get().requestedResources().diskSpeed() == NodeResources.DiskSpeed.any); } diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/AutoscalingTester.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/AutoscalingTester.java index 43302c4fe23..e3148ad5de0 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/AutoscalingTester.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/AutoscalingTester.java @@ -95,19 +95,19 @@ class AutoscalingTester { } public void makeReady(String hostname) { - Node node = nodeRepository().getNode(hostname).get(); + Node node = nodeRepository().nodes().getNode(hostname).get(); provisioningTester.patchNode(node, (n) -> n.with(new IP.Config(Set.of("::" + 0 + ":0"), Set.of()))); - Node host = nodeRepository().getNode(node.parentHostname().get()).get(); + Node host = nodeRepository().nodes().getNode(node.parentHostname().get()).get(); host = host.with(new IP.Config(Set.of("::" + 0 + ":0"), Set.of("::" + 0 + ":2"))); if (host.state() == Node.State.provisioned) - nodeRepository().setReady(List.of(host), Agent.system, getClass().getSimpleName()); + nodeRepository().nodes().setReady(List.of(host), Agent.system, getClass().getSimpleName()); } public void deactivateRetired(ApplicationId application, ClusterSpec cluster, ClusterResources resources) { - try (Mutex lock = nodeRepository().lock(application)){ - for (Node node : nodeRepository().getNodes(application, Node.State.active)) { + try (Mutex lock = nodeRepository().nodes().lock(application)){ + for (Node node : nodeRepository().nodes().getNodes(application, Node.State.active)) { if (node.allocation().get().membership().retired()) - nodeRepository().write(node.with(node.allocation().get().removable(true)), lock); + nodeRepository().nodes().write(node.with(node.allocation().get().removable(true)), lock); } } deploy(application, cluster, resources); @@ -125,7 +125,7 @@ class AutoscalingTester { */ public void addCpuMeasurements(float value, float otherResourcesLoad, int count, ApplicationId applicationId) { - List<Node> nodes = nodeRepository().getNodes(applicationId, Node.State.active); + List<Node> nodes = nodeRepository().nodes().getNodes(applicationId, Node.State.active); float oneExtraNodeFactor = (float)(nodes.size() - 1.0) / (nodes.size()); for (int i = 0; i < count; i++) { clock().advance(Duration.ofMinutes(1)); @@ -156,7 +156,7 @@ class AutoscalingTester { */ public void addMemMeasurements(float value, float otherResourcesLoad, int count, ApplicationId applicationId) { - List<Node> nodes = nodeRepository().getNodes(applicationId, Node.State.active); + List<Node> nodes = nodeRepository().nodes().getNodes(applicationId, Node.State.active); float oneExtraNodeFactor = (float)(nodes.size() - 1.0) / (nodes.size()); for (int i = 0; i < count; i++) { clock().advance(Duration.ofMinutes(1)); @@ -181,7 +181,7 @@ class AutoscalingTester { public void addMeasurements(float cpu, float memory, float disk, int generation, boolean inService, boolean stable, int count, ApplicationId applicationId) { - List<Node> nodes = nodeRepository().getNodes(applicationId, Node.State.active); + List<Node> nodes = nodeRepository().nodes().getNodes(applicationId, Node.State.active); for (int i = 0; i < count; i++) { clock().advance(Duration.ofMinutes(1)); for (Node node : nodes) { @@ -200,22 +200,22 @@ class AutoscalingTester { ClusterResources min, ClusterResources max) { Application application = nodeRepository().applications().get(applicationId).orElse(new Application(applicationId)) .withCluster(clusterId, false, min, max); - try (Mutex lock = nodeRepository().lock(applicationId)) { + try (Mutex lock = nodeRepository().nodes().lock(applicationId)) { nodeRepository().applications().put(application, lock); } return autoscaler.autoscale(application.clusters().get(clusterId), - nodeRepository().list(applicationId, Node.State.active)); + nodeRepository().nodes().list(applicationId, Node.State.active)); } public Autoscaler.Advice suggest(ApplicationId applicationId, ClusterSpec.Id clusterId, ClusterResources min, ClusterResources max) { Application application = nodeRepository().applications().get(applicationId).orElse(new Application(applicationId)) .withCluster(clusterId, false, min, max); - try (Mutex lock = nodeRepository().lock(applicationId)) { + try (Mutex lock = nodeRepository().nodes().lock(applicationId)) { nodeRepository().applications().put(application, lock); } return autoscaler.suggest(application.clusters().get(clusterId), - nodeRepository().list(applicationId, Node.State.active)); + nodeRepository().nodes().list(applicationId, Node.State.active)); } public ClusterResources assertResources(String message, diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/MetricsV2MetricsFetcherTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/MetricsV2MetricsFetcherTest.java index 14626a40070..1ea4abab17b 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/MetricsV2MetricsFetcherTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/MetricsV2MetricsFetcherTest.java @@ -77,8 +77,8 @@ public class MetricsV2MetricsFetcherTest { { httpClient.cannedResponse = cannedResponseForApplication2; - try (Mutex lock = tester.nodeRepository().lock(application1)) { - tester.nodeRepository().write(tester.nodeRepository().getNodes(application2, Node.State.active) + try (Mutex lock = tester.nodeRepository().nodes().lock(application1)) { + tester.nodeRepository().nodes().write(tester.nodeRepository().nodes().getNodes(application2, Node.State.active) .get(0).retire(tester.clock().instant()), lock); } List<Pair<String, MetricSnapshot>> values = new ArrayList<>(fetcher.fetchMetrics(application2).get().metrics()); diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/AutoscalingMaintainerTester.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/AutoscalingMaintainerTester.java index f53ae1baad2..d6e6a7548c2 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/AutoscalingMaintainerTester.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/AutoscalingMaintainerTester.java @@ -71,7 +71,7 @@ public class AutoscalingMaintainerTester { } public void addMeasurements(float cpu, float mem, float disk, long generation, int count, ApplicationId applicationId) { - List<Node> nodes = nodeRepository().getNodes(applicationId, Node.State.active); + List<Node> nodes = nodeRepository().nodes().getNodes(applicationId, Node.State.active); for (int i = 0; i < count; i++) { for (Node node : nodes) metricsDb.add(List.of(new Pair<>(node.hostname(), new MetricSnapshot(clock().instant(), diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/CapacityCheckerTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/CapacityCheckerTest.java index 5e72cfc53ac..038d5729f0e 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/CapacityCheckerTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/CapacityCheckerTest.java @@ -28,7 +28,7 @@ public class CapacityCheckerTest { tester.populateNodeRepositoryFromJsonFile(Paths.get(path)); var failurePath = tester.capacityChecker.worstCaseHostLossLeadingToFailure(); assertTrue(failurePath.isPresent()); - assertTrue(tester.nodeRepository.getNodes(NodeType.host).containsAll(failurePath.get().hostsCausingFailure)); + assertTrue(tester.nodeRepository.nodes().getNodes(NodeType.host).containsAll(failurePath.get().hostsCausingFailure)); assertEquals(5, failurePath.get().hostsCausingFailure.size()); } @@ -39,7 +39,7 @@ public class CapacityCheckerTest { 10, new NodeResources(-1, 10, 100, 1), 10, 0, new NodeResources(1, 10, 100, 1), 10); int overcommittedHosts = tester.capacityChecker.findOvercommittedHosts().size(); - assertEquals(tester.nodeRepository.getNodes(NodeType.host).size(), overcommittedHosts); + assertEquals(tester.nodeRepository.nodes().getNodes(NodeType.host).size(), overcommittedHosts); } @Test @@ -63,7 +63,7 @@ public class CapacityCheckerTest { assertTrue(failurePath.isPresent()); assertTrue("Computing worst case host loss if all hosts have to be removed should result in an non-empty failureReason with empty nodes.", failurePath.get().failureReason.tenant.isEmpty() && failurePath.get().failureReason.host.isEmpty()); - assertEquals(tester.nodeRepository.getNodes(NodeType.host).size(), failurePath.get().hostsCausingFailure.size()); + assertEquals(tester.nodeRepository.nodes().getNodes(NodeType.host).size(), failurePath.get().hostsCausingFailure.size()); } { diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/CapacityCheckerTester.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/CapacityCheckerTester.java index 5dfd1193581..a94d91374fc 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/CapacityCheckerTester.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/CapacityCheckerTester.java @@ -75,7 +75,7 @@ public class CapacityCheckerTester { } private void updateCapacityChecker() { - this.capacityChecker = new CapacityChecker(nodeRepository.list()); + this.capacityChecker = new CapacityChecker(nodeRepository.nodes().list()); } List<NodeModel> createDistinctChildren(int amount, List<NodeResources> childResources) { @@ -191,12 +191,12 @@ public class CapacityCheckerTester { int numEmptyHosts, NodeResources emptyHostExcessCapacity, int emptyHostExcessIps) { List<NodeModel> possibleChildren = createDistinctChildren(numDistinctChildren, childResources); Map<ApplicationId, List<Node>> hostsWithChildren = createHostsWithChildren(childrenPerHost, possibleChildren, numHosts, hostExcessCapacity, hostExcessIps); - nodeRepository.addNodes(hostsWithChildren.getOrDefault(tenantHostApp, List.of()), Agent.system); + nodeRepository.nodes().addNodes(hostsWithChildren.getOrDefault(tenantHostApp, List.of()), Agent.system); hostsWithChildren.forEach((applicationId, nodes) -> { if (applicationId.equals(tenantHostApp)) return; - nodeRepository.addNodes(nodes, Agent.system); + nodeRepository.nodes().addNodes(nodes, Agent.system); }); - nodeRepository.addNodes(createEmptyHosts(numHosts, numEmptyHosts, emptyHostExcessCapacity, emptyHostExcessIps), Agent.system); + nodeRepository.nodes().addNodes(createEmptyHosts(numHosts, numEmptyHosts, emptyHostExcessCapacity, emptyHostExcessIps), Agent.system); updateCapacityChecker(); } @@ -314,9 +314,9 @@ public class CapacityCheckerTester { } } - nodeRepository.addNodes(hosts, Agent.system); + nodeRepository.nodes().addNodes(hosts, Agent.system); nodes.forEach((application, applicationNodes) -> { - nodeRepository.addNodes(applicationNodes, Agent.system); + nodeRepository.nodes().addNodes(applicationNodes, Agent.system); }); updateCapacityChecker(); } diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/DynamicProvisioningMaintainerTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/DynamicProvisioningMaintainerTest.java index c67f6657c7f..2f735742ed5 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/DynamicProvisioningMaintainerTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/DynamicProvisioningMaintainerTest.java @@ -62,9 +62,9 @@ public class DynamicProvisioningMaintainerTest { var tester = new DynamicProvisioningTester().addInitialNodes(); tester.hostProvisioner.with(Behaviour.failDeprovisioning); // To avoid deleting excess nodes - Node host3 = tester.nodeRepository.getNode("host3").orElseThrow(); - Node host4 = tester.nodeRepository.getNode("host4").orElseThrow(); - Node host41 = tester.nodeRepository.getNode("host4-1").orElseThrow(); + Node host3 = tester.nodeRepository.nodes().getNode("host3").orElseThrow(); + Node host4 = tester.nodeRepository.nodes().getNode("host4").orElseThrow(); + Node host41 = tester.nodeRepository.nodes().getNode("host4-1").orElseThrow(); assertTrue("No IP addresses assigned", Stream.of(host3, host4, host41).map(node -> node.ipConfig().primary()).allMatch(Set::isEmpty)); @@ -73,9 +73,9 @@ public class DynamicProvisioningMaintainerTest { Node host41new = host41.with(host41.ipConfig().withPrimary(Set.of("::4:1", "::4:2"))); tester.maintainer.maintain(); - assertEquals(host3new, tester.nodeRepository.getNode("host3").get()); - assertEquals(host4new, tester.nodeRepository.getNode("host4").get()); - assertEquals(host41new, tester.nodeRepository.getNode("host4-1").get()); + assertEquals(host3new, tester.nodeRepository.nodes().getNode("host3").get()); + assertEquals(host4new, tester.nodeRepository.nodes().getNode("host4").get()); + assertEquals(host41new, tester.nodeRepository.nodes().getNode("host4-1").get()); } @Test @@ -88,29 +88,29 @@ public class DynamicProvisioningMaintainerTest { tester.maintainer.maintain(); assertEquals(Set.of("host4", "host4-1"), - tester.nodeRepository.getNodes(Node.State.failed).stream().map(Node::hostname).collect(Collectors.toSet())); + tester.nodeRepository.nodes().getNodes(Node.State.failed).stream().map(Node::hostname).collect(Collectors.toSet())); } @Test public void finds_nodes_that_need_deprovisioning_without_pre_provisioning() { var tester = new DynamicProvisioningTester().addInitialNodes(); - assertTrue(tester.nodeRepository.getNode("host2").isPresent()); - assertTrue(tester.nodeRepository.getNode("host3").isPresent()); + assertTrue(tester.nodeRepository.nodes().getNode("host2").isPresent()); + assertTrue(tester.nodeRepository.nodes().getNode("host3").isPresent()); tester.maintainer.maintain(); - assertTrue(tester.nodeRepository.getNode("host2").isEmpty()); - assertTrue(tester.nodeRepository.getNode("host3").isEmpty()); + assertTrue(tester.nodeRepository.nodes().getNode("host2").isEmpty()); + assertTrue(tester.nodeRepository.nodes().getNode("host3").isEmpty()); } @Test public void does_not_deprovision_when_preprovisioning_enabled() { var tester = new DynamicProvisioningTester().addInitialNodes(); tester.flagSource.withListFlag(PermanentFlags.PREPROVISION_CAPACITY.id(), List.of(new ClusterCapacity(1, 1, 3, 2, 1.0)), ClusterCapacity.class); - Optional<Node> failedHost = tester.nodeRepository.getNode("host2"); + Optional<Node> failedHost = tester.nodeRepository.nodes().getNode("host2"); assertTrue(failedHost.isPresent()); tester.maintainer.maintain(); - assertTrue("Failed host is deprovisioned", tester.nodeRepository.getNode(failedHost.get().hostname()).isEmpty()); + assertTrue("Failed host is deprovisioned", tester.nodeRepository.nodes().getNode(failedHost.get().hostname()).isEmpty()); assertEquals(1, tester.hostProvisioner.deprovisionedHosts); } @@ -123,24 +123,24 @@ public class DynamicProvisioningMaintainerTest { ClusterCapacity.class); assertEquals(0, tester.hostProvisioner.provisionedHosts.size()); - assertEquals(11, tester.nodeRepository.getNodes().size()); - assertTrue(tester.nodeRepository.getNode("host2").isPresent()); - assertTrue(tester.nodeRepository.getNode("host2-1").isPresent()); - assertTrue(tester.nodeRepository.getNode("host3").isPresent()); - assertTrue(tester.nodeRepository.getNode("hostname100").isEmpty()); - assertTrue(tester.nodeRepository.getNode("hostname101").isEmpty()); + assertEquals(11, tester.nodeRepository.nodes().getNodes().size()); + assertTrue(tester.nodeRepository.nodes().getNode("host2").isPresent()); + assertTrue(tester.nodeRepository.nodes().getNode("host2-1").isPresent()); + assertTrue(tester.nodeRepository.nodes().getNode("host3").isPresent()); + assertTrue(tester.nodeRepository.nodes().getNode("hostname100").isEmpty()); + assertTrue(tester.nodeRepository.nodes().getNode("hostname101").isEmpty()); tester.maintainer.maintain(); assertEquals(2, tester.hostProvisioner.provisionedHosts.size()); assertEquals(2, tester.provisionedHostsMatching(new NodeResources(48, 128, 1000, 10))); - List<Node> nodesAfter = tester.nodeRepository.getNodes(); + List<Node> nodesAfter = tester.nodeRepository.nodes().getNodes(); assertEquals(11, nodesAfter.size()); // 2 removed, 2 added - assertTrue("Failed host 'host2' is deprovisioned", tester.nodeRepository.getNode("host2").isEmpty()); - assertTrue("Node on deprovisioned host removed", tester.nodeRepository.getNode("host2-1").isEmpty()); - assertTrue("Host satisfying 16-24-100-1 is kept", tester.nodeRepository.getNode("host3").isPresent()); - assertTrue("New 48-128-1000-10 host added", tester.nodeRepository.getNode("hostname100").isPresent()); - assertTrue("New 48-128-1000-10 host added", tester.nodeRepository.getNode("hostname101").isPresent()); + assertTrue("Failed host 'host2' is deprovisioned", tester.nodeRepository.nodes().getNode("host2").isEmpty()); + assertTrue("Node on deprovisioned host removed", tester.nodeRepository.nodes().getNode("host2-1").isEmpty()); + assertTrue("Host satisfying 16-24-100-1 is kept", tester.nodeRepository.nodes().getNode("host3").isPresent()); + assertTrue("New 48-128-1000-10 host added", tester.nodeRepository.nodes().getNode("hostname100").isPresent()); + assertTrue("New 48-128-1000-10 host added", tester.nodeRepository.nodes().getNode("hostname101").isPresent()); } @Test @@ -154,11 +154,11 @@ public class DynamicProvisioningMaintainerTest { ClusterCapacity.class); assertEquals(0, tester.hostProvisioner.provisionedHosts.size()); - assertEquals(11, tester.nodeRepository.getNodes().size()); - assertTrue(tester.nodeRepository.getNode("host2").isPresent()); - assertTrue(tester.nodeRepository.getNode("host2-1").isPresent()); - assertTrue(tester.nodeRepository.getNode("host3").isPresent()); - assertTrue(tester.nodeRepository.getNode("hostname100").isEmpty()); + assertEquals(11, tester.nodeRepository.nodes().getNodes().size()); + assertTrue(tester.nodeRepository.nodes().getNode("host2").isPresent()); + assertTrue(tester.nodeRepository.nodes().getNode("host2-1").isPresent()); + assertTrue(tester.nodeRepository.nodes().getNode("host3").isPresent()); + assertTrue(tester.nodeRepository.nodes().getNode("hostname100").isEmpty()); // The first cluster will be allocated to host3 and a new host hostname100. // hostname100 will be a large shared host specified above. @@ -194,10 +194,10 @@ public class DynamicProvisioningMaintainerTest { assertEquals(2, tester.hostProvisioner.provisionedHosts.size()); assertEquals(2, tester.provisionedHostsMatching(new NodeResources(48, 128, 1000, 10))); - assertEquals(10, tester.nodeRepository.getNodes().size()); // 3 removed, 2 added - assertTrue("preprovision capacity is prefered on shared hosts", tester.nodeRepository.getNode("host3").isEmpty()); - assertTrue(tester.nodeRepository.getNode("hostname100").isPresent()); - assertTrue(tester.nodeRepository.getNode("hostname101").isPresent()); + assertEquals(10, tester.nodeRepository.nodes().getNodes().size()); // 3 removed, 2 added + assertTrue("preprovision capacity is prefered on shared hosts", tester.nodeRepository.nodes().getNode("host3").isEmpty()); + assertTrue(tester.nodeRepository.nodes().getNode("hostname100").isPresent()); + assertTrue(tester.nodeRepository.nodes().getNode("hostname101").isPresent()); // If the preprovision capacity is reduced, we should see shared hosts deprovisioned. @@ -210,13 +210,13 @@ public class DynamicProvisioningMaintainerTest { assertEquals("one provisioned host has been deprovisioned, so there are 2 -> 1 provisioned hosts", 1, tester.hostProvisioner.provisionedHosts.size()); assertEquals(1, tester.provisionedHostsMatching(new NodeResources(48, 128, 1000, 10))); - assertEquals(9, tester.nodeRepository.getNodes().size()); // 4 removed, 2 added - if (tester.nodeRepository.getNode("hostname100").isPresent()) { + assertEquals(9, tester.nodeRepository.nodes().getNodes().size()); // 4 removed, 2 added + if (tester.nodeRepository.nodes().getNode("hostname100").isPresent()) { assertTrue("hostname101 is superfluous and should have been deprovisioned", - tester.nodeRepository.getNode("hostname101").isEmpty()); + tester.nodeRepository.nodes().getNode("hostname101").isEmpty()); } else { assertTrue("hostname101 is required for preprovision capacity", - tester.nodeRepository.getNode("hostname101").isPresent()); + tester.nodeRepository.nodes().getNode("hostname101").isPresent()); } } @@ -224,11 +224,11 @@ public class DynamicProvisioningMaintainerTest { private void verifyFirstMaintain(DynamicProvisioningTester tester) { assertEquals(1, tester.hostProvisioner.provisionedHosts.size()); assertEquals(1, tester.provisionedHostsMatching(new NodeResources(48, 128, 1000, 10))); - assertEquals(10, tester.nodeRepository.getNodes().size()); // 2 removed, 1 added - assertTrue("Failed host 'host2' is deprovisioned", tester.nodeRepository.getNode("host2").isEmpty()); - assertTrue("Node on deprovisioned host removed", tester.nodeRepository.getNode("host2-1").isEmpty()); - assertTrue("One 1-30-20-3 node fits on host3", tester.nodeRepository.getNode("host3").isPresent()); - assertTrue("New 48-128-1000-10 host added", tester.nodeRepository.getNode("hostname100").isPresent()); + assertEquals(10, tester.nodeRepository.nodes().getNodes().size()); // 2 removed, 1 added + assertTrue("Failed host 'host2' is deprovisioned", tester.nodeRepository.nodes().getNode("host2").isEmpty()); + assertTrue("Node on deprovisioned host removed", tester.nodeRepository.nodes().getNode("host2-1").isEmpty()); + assertTrue("One 1-30-20-3 node fits on host3", tester.nodeRepository.nodes().getNode("host3").isPresent()); + assertTrue("New 48-128-1000-10 host added", tester.nodeRepository.nodes().getNode("hostname100").isPresent()); } @Test @@ -282,7 +282,7 @@ public class DynamicProvisioningMaintainerTest { tester.hostProvisioner.with(Behaviour.failDeprovisioning); tester.maintainer.maintain(); - assertTrue(tester.nodeRepository.getNode(host2.hostname()).isPresent()); + assertTrue(tester.nodeRepository.nodes().getNode(host2.hostname()).isPresent()); } @Test @@ -317,8 +317,8 @@ public class DynamicProvisioningMaintainerTest { tester.assertNodesUnchanged(); // Activate hosts - List<Node> provisioned = tester.nodeRepository.list().state(Node.State.provisioned).asList(); - tester.nodeRepository.setReady(provisioned, Agent.system, this.getClass().getSimpleName()); + List<Node> provisioned = tester.nodeRepository.nodes().list().state(Node.State.provisioned).asList(); + tester.nodeRepository.nodes().setReady(provisioned, Agent.system, this.getClass().getSimpleName()); tester.provisioningTester.activateTenantHosts(); // Allocating nodes to a host does not result in provisioning of additional capacity @@ -326,7 +326,7 @@ public class DynamicProvisioningMaintainerTest { NodeResources applicationNodeResources = new NodeResources(4, 8, 50, 0.1); tester.provisioningTester.deploy(application, Capacity.from(new ClusterResources(2, 1, applicationNodeResources))); - assertEquals(2, tester.nodeRepository.list().owner(application).size()); + assertEquals(2, tester.nodeRepository.nodes().list().owner(application).size()); tester.assertNodesUnchanged(); // Clearing flag does nothing @@ -338,10 +338,10 @@ public class DynamicProvisioningMaintainerTest { List.of(new ClusterCapacity(3, 0, 0, 0, 0.0)), ClusterCapacity.class); assertEquals(0, tester.provisionedHostsMatching(sharedHostNodeResources)); - assertTrue(tester.nodeRepository.getNode("hostname102").isEmpty()); + assertTrue(tester.nodeRepository.nodes().getNode("hostname102").isEmpty()); tester.maintainer.maintain(); assertEquals(1, tester.provisionedHostsMatching(sharedHostNodeResources)); - assertTrue(tester.nodeRepository.getNode("hostname102").isPresent()); + assertTrue(tester.nodeRepository.nodes().getNode("hostname102").isPresent()); // Next maintenance run does nothing tester.assertNodesUnchanged(); @@ -366,14 +366,14 @@ public class DynamicProvisioningMaintainerTest { ClusterCapacity.class); assertEquals(1, tester.provisionedHostsMatching(sharedHostNodeResources)); - assertTrue(tester.nodeRepository.getNode("hostname102").isPresent()); - assertTrue(tester.nodeRepository.getNode("hostname103").isEmpty()); - assertTrue(tester.nodeRepository.getNode("hostname104").isEmpty()); + assertTrue(tester.nodeRepository.nodes().getNode("hostname102").isPresent()); + assertTrue(tester.nodeRepository.nodes().getNode("hostname103").isEmpty()); + assertTrue(tester.nodeRepository.nodes().getNode("hostname104").isEmpty()); tester.maintainer.maintain(); assertEquals(3, tester.provisionedHostsMatching(sharedHostNodeResources)); - assertTrue(tester.nodeRepository.getNode("hostname102").isPresent()); - assertTrue(tester.nodeRepository.getNode("hostname103").isPresent()); - assertTrue(tester.nodeRepository.getNode("hostname104").isPresent()); + assertTrue(tester.nodeRepository.nodes().getNode("hostname102").isPresent()); + assertTrue(tester.nodeRepository.nodes().getNode("hostname103").isPresent()); + assertTrue(tester.nodeRepository.nodes().getNode("hostname104").isPresent()); } @Test @@ -381,7 +381,7 @@ public class DynamicProvisioningMaintainerTest { var tester = new DynamicProvisioningTester().addInitialNodes(); tester.hostProvisioner.with(Behaviour.failDnsUpdate); - Supplier<List<Node>> provisioning = () -> tester.nodeRepository.getNodes(NodeType.host, Node.State.provisioned); + Supplier<List<Node>> provisioning = () -> tester.nodeRepository.nodes().getNodes(NodeType.host, Node.State.provisioned); assertEquals(2, provisioning.get().size()); tester.maintainer.maintain(); @@ -482,9 +482,9 @@ public class DynamicProvisioningMaintainerTest { } private void assertNodesUnchanged() { - List<Node> nodes = nodeRepository.getNodes(); + List<Node> nodes = nodeRepository.nodes().getNodes(); maintainer.maintain(); - assertEquals("Nodes are unchanged after maintenance run", nodes, nodeRepository.getNodes()); + assertEquals("Nodes are unchanged after maintenance run", nodes, nodeRepository.nodes().getNodes()); } } diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/FailedExpirerTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/FailedExpirerTest.java index 9f2f7541c91..d02d08f7736 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/FailedExpirerTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/FailedExpirerTest.java @@ -268,7 +268,7 @@ public class FailedExpirerTest { } public Node get(String hostname) { - return nodeRepository.getNode(hostname) + return nodeRepository.nodes().getNode(hostname) .orElseThrow(() -> new IllegalArgumentException("No such node: " + hostname)); } @@ -292,8 +292,8 @@ public class FailedExpirerTest { public FailureScenario failNode(int times, String... hostname) { Stream.of(hostname).forEach(h -> { Node node = get(h); - nodeRepository.write(node.with(node.status().withFailCount(times)), () -> {}); - nodeRepository.fail(h, Agent.system, "Failed by unit test"); + nodeRepository.nodes().write(node.with(node.status().withFailCount(times)), () -> {}); + nodeRepository.nodes().fail(h, Agent.system, "Failed by unit test"); }); return this; } @@ -302,8 +302,8 @@ public class FailedExpirerTest { Stream.of(hostname).forEach(h -> { Node node = get(h); Report report = Report.basicReport("reportId", Report.Type.HARD_FAIL, Instant.EPOCH, "hardware failure"); - nodeRepository.write(node.with(new Reports().withReport(report)), () -> {}); - nodeRepository.fail(h, Agent.system, "Failed by unit test"); + nodeRepository.nodes().write(node.with(new Reports().withReport(report)), () -> {}); + nodeRepository.nodes().fail(h, Agent.system, "Failed by unit test"); }); return this; } @@ -312,8 +312,8 @@ public class FailedExpirerTest { List<Node> nodes = Stream.of(hostname) .map(this::get) .collect(Collectors.toList()); - nodes = nodeRepository.deallocate(nodes, Agent.system, getClass().getSimpleName()); - nodeRepository.setReady(nodes, Agent.system, getClass().getSimpleName()); + nodes = nodeRepository.nodes().deallocate(nodes, Agent.system, getClass().getSimpleName()); + nodeRepository.nodes().setReady(nodes, Agent.system, getClass().getSimpleName()); return this; } @@ -340,7 +340,8 @@ public class FailedExpirerTest { public void assertNodesIn(Node.State state, String... hostnames) { assertEquals(Stream.of(hostnames).collect(Collectors.toSet()), - nodeRepository.getNodes(state).stream() + nodeRepository.nodes() + .getNodes(state).stream() .map(Node::hostname) .collect(Collectors.toSet())); } diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/InactiveAndFailedExpirerTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/InactiveAndFailedExpirerTest.java index 20c1bd78a52..4bee276af6d 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/InactiveAndFailedExpirerTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/InactiveAndFailedExpirerTest.java @@ -65,14 +65,14 @@ public class InactiveAndFailedExpirerTest { // Inactive times out tester.advanceTime(Duration.ofMinutes(14)); new InactiveExpirer(tester.nodeRepository(), Duration.ofMinutes(10), new TestMetric()).run(); - assertEquals(0, tester.nodeRepository().getNodes(Node.State.inactive).size()); - List<Node> dirty = tester.nodeRepository().getNodes(Node.State.dirty); + assertEquals(0, tester.nodeRepository().nodes().getNodes(Node.State.inactive).size()); + List<Node> dirty = tester.nodeRepository().nodes().getNodes(Node.State.dirty); assertEquals(2, dirty.size()); assertFalse(dirty.get(0).allocation().isPresent()); assertFalse(dirty.get(1).allocation().isPresent()); // One node is set back to ready - Node ready = tester.nodeRepository().setReady(Collections.singletonList(dirty.get(0)), Agent.system, getClass().getSimpleName()).get(0); + Node ready = tester.nodeRepository().nodes().setReady(Collections.singletonList(dirty.get(0)), Agent.system, getClass().getSimpleName()).get(0); assertEquals("Allocated history is removed on readying", Arrays.asList(History.Event.Type.provisioned, History.Event.Type.readied), ready.history().events().stream().map(History.Event::type).collect(Collectors.toList())); @@ -80,8 +80,8 @@ public class InactiveAndFailedExpirerTest { // Dirty times out for the other one tester.advanceTime(Duration.ofMinutes(14)); new DirtyExpirer(tester.nodeRepository(), Duration.ofMinutes(10), new TestMetric()).run(); - assertEquals(0, tester.nodeRepository().getNodes(NodeType.tenant, Node.State.dirty).size()); - List<Node> failed = tester.nodeRepository().getNodes(NodeType.tenant, Node.State.failed); + assertEquals(0, tester.nodeRepository().nodes().getNodes(NodeType.tenant, Node.State.dirty).size()); + List<Node> failed = tester.nodeRepository().nodes().getNodes(NodeType.tenant, Node.State.failed); assertEquals(1, failed.size()); assertEquals(1, failed.get(0).status().failCount()); } @@ -108,7 +108,7 @@ public class InactiveAndFailedExpirerTest { // Inactive times out and node is moved to dirty tester.advanceTime(Duration.ofMinutes(14)); new InactiveExpirer(tester.nodeRepository(), Duration.ofMinutes(10), new TestMetric()).run(); - List<Node> dirty = tester.nodeRepository().getNodes(Node.State.dirty); + List<Node> dirty = tester.nodeRepository().nodes().getNodes(Node.State.dirty); assertEquals(2, dirty.size()); // Reboot generation is increased @@ -154,12 +154,12 @@ public class InactiveAndFailedExpirerTest { doThrow(new RuntimeException()).when(orchestrator).acquirePermissionToRemove(any()); new RetiredExpirer(tester.nodeRepository(), tester.orchestrator(), deployer, new TestMetric(), Duration.ofDays(30), Duration.ofMinutes(10)).run(); - assertEquals(1, tester.nodeRepository().getNodes(Node.State.inactive).size()); + assertEquals(1, tester.nodeRepository().nodes().getNodes(Node.State.inactive).size()); // Inactive times out and one node is moved to parked tester.advanceTime(Duration.ofMinutes(11)); // Trigger InactiveExpirer new InactiveExpirer(tester.nodeRepository(), Duration.ofMinutes(10), new TestMetric()).run(); - assertEquals(1, tester.nodeRepository().getNodes(Node.State.parked).size()); + assertEquals(1, tester.nodeRepository().nodes().getNodes(Node.State.parked).size()); } @Test @@ -181,8 +181,8 @@ public class InactiveAndFailedExpirerTest { // See that nodes are moved to dirty immediately. new InactiveExpirer(tester.nodeRepository(), Duration.ofMinutes(10), new TestMetric()).run(); - assertEquals(0, tester.nodeRepository().getNodes(Node.State.inactive).size()); - List<Node> dirty = tester.nodeRepository().getNodes(Node.State.dirty); + assertEquals(0, tester.nodeRepository().nodes().getNodes(Node.State.inactive).size()); + List<Node> dirty = tester.nodeRepository().nodes().getNodes(Node.State.dirty); assertEquals(1, dirty.size()); assertFalse(dirty.get(0).allocation().isPresent()); @@ -206,7 +206,7 @@ public class InactiveAndFailedExpirerTest { tester.patchNodes(inactiveNodes, (node) -> node.withWantToRetire(true, true, Agent.system, tester.clock().instant())); tester.advanceTime(Duration.ofMinutes(11)); new InactiveExpirer(tester.nodeRepository(), Duration.ofMinutes(10), new TestMetric()).run(); - assertEquals(2, tester.nodeRepository().getNodes(Node.State.parked).size()); + assertEquals(2, tester.nodeRepository().nodes().getNodes(Node.State.parked).size()); } } diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/LoadBalancerExpirerTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/LoadBalancerExpirerTest.java index 60ca625d07e..832f8c0c318 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/LoadBalancerExpirerTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/LoadBalancerExpirerTest.java @@ -132,10 +132,10 @@ public class LoadBalancerExpirerTest { } private void dirtyNodesOf(ApplicationId application, ClusterSpec.Id cluster) { - tester.nodeRepository().deallocate(tester.nodeRepository().getNodes(application).stream() - .filter(node -> node.allocation().isPresent()) - .filter(node -> node.allocation().get().membership().cluster().id().equals(cluster)) - .collect(Collectors.toList()), + tester.nodeRepository().nodes().deallocate(tester.nodeRepository().nodes().getNodes(application).stream() + .filter(node -> node.allocation().isPresent()) + .filter(node -> node.allocation().get().membership().cluster().id().equals(cluster)) + .collect(Collectors.toList()), Agent.system, this.getClass().getSimpleName()); } 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 9adba744101..6cfd95e828a 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 @@ -121,7 +121,7 @@ public class MetricsReporterTest { expectedMetrics.put("cache.nodeObject.evictionCount", 0L); expectedMetrics.put("cache.nodeObject.size", 2L); - nodeRepository.list(); + nodeRepository.nodes().list(); expectedMetrics.put("cache.curator.hitRate", 0.52D); expectedMetrics.put("cache.curator.evictionCount", 0L); expectedMetrics.put("cache.curator.size", 12L); @@ -162,26 +162,26 @@ public class MetricsReporterTest { Node dockerHost = Node.create("openStackId1", new IP.Config(Set.of("::1"), ipAddressPool), "dockerHost", nodeFlavors.getFlavorOrThrow("host"), NodeType.host).build(); - nodeRepository.addNodes(List.of(dockerHost), Agent.system); - nodeRepository.deallocateRecursively("dockerHost", Agent.system, getClass().getSimpleName()); - nodeRepository.setReady("dockerHost", Agent.system, getClass().getSimpleName()); + nodeRepository.nodes().addNodes(List.of(dockerHost), Agent.system); + nodeRepository.nodes().deallocateRecursively("dockerHost", Agent.system, getClass().getSimpleName()); + nodeRepository.nodes().setReady("dockerHost", Agent.system, getClass().getSimpleName()); Node container1 = Node.createDockerNode(Set.of("::2"), "container1", "dockerHost", new NodeResources(1, 3, 2, 1), NodeType.tenant).build(); container1 = container1.with(allocation(Optional.of("app1"), container1).get()); - try (Mutex lock = nodeRepository.lockUnallocated()) { - nodeRepository.addDockerNodes(new LockedNodeList(List.of(container1), lock)); + try (Mutex lock = nodeRepository.nodes().lockUnallocated()) { + nodeRepository.nodes().addDockerNodes(new LockedNodeList(List.of(container1), lock)); } Node container2 = Node.createDockerNode(Set.of("::3"), "container2", "dockerHost", new NodeResources(2, 4, 4, 1), NodeType.tenant).build(); container2 = container2.with(allocation(Optional.of("app2"), container2).get()); - try (Mutex lock = nodeRepository.lockUnallocated()) { - nodeRepository.addDockerNodes(new LockedNodeList(List.of(container2), lock)); + try (Mutex lock = nodeRepository.nodes().lockUnallocated()) { + nodeRepository.nodes().addDockerNodes(new LockedNodeList(List.of(container2), lock)); } NestedTransaction transaction = new NestedTransaction(); - nodeRepository.activate(nodeRepository.getNodes(NodeType.host), transaction); + nodeRepository.nodes().activate(nodeRepository.nodes().getNodes(NodeType.host), transaction); transaction.commit(); Orchestrator orchestrator = mock(Orchestrator.class); diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/NodeFailTester.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/NodeFailTester.java index d0473d08ea2..dba3ca6a92e 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/NodeFailTester.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/NodeFailTester.java @@ -102,8 +102,8 @@ public class NodeFailTester { tester.activate(app1, clusterApp1, capacity1); tester.activate(app2, clusterApp2, capacity2); - assertEquals(capacity1.minResources().nodes(), tester.nodeRepository.getNodes(app1, Node.State.active).size()); - assertEquals(capacity2.minResources().nodes(), tester.nodeRepository.getNodes(app2, Node.State.active).size()); + assertEquals(capacity1.minResources().nodes(), tester.nodeRepository.nodes().getNodes(app1, Node.State.active).size()); + assertEquals(capacity2.minResources().nodes(), tester.nodeRepository.nodes().getNodes(app2, Node.State.active).size()); Map<ApplicationId, MockDeployer.ApplicationContext> apps = Map.of( app1, new MockDeployer.ApplicationContext(app1, clusterApp1, capacity1), @@ -132,10 +132,10 @@ public class NodeFailTester { tester.activate(tenantHostApp, clusterNodeAdminApp, allHosts); tester.activate(app1, clusterApp1, capacity1); tester.activate(app2, clusterApp2, capacity2); - assertEquals(Set.of(tester.nodeRepository.getNodes(NodeType.host)), - Set.of(tester.nodeRepository.getNodes(tenantHostApp, Node.State.active))); - assertEquals(capacity1.minResources().nodes(), tester.nodeRepository.getNodes(app1, Node.State.active).size()); - assertEquals(capacity2.minResources().nodes(), tester.nodeRepository.getNodes(app2, Node.State.active).size()); + assertEquals(Set.of(tester.nodeRepository.nodes().getNodes(NodeType.host)), + Set.of(tester.nodeRepository.nodes().getNodes(tenantHostApp, Node.State.active))); + assertEquals(capacity1.minResources().nodes(), tester.nodeRepository.nodes().getNodes(app1, Node.State.active).size()); + assertEquals(capacity2.minResources().nodes(), tester.nodeRepository.nodes().getNodes(app2, Node.State.active).size()); Map<ApplicationId, MockDeployer.ApplicationContext> apps = Map.of( tenantHostApp, new MockDeployer.ApplicationContext(tenantHostApp, clusterNodeAdminApp, allHosts), @@ -163,7 +163,7 @@ public class NodeFailTester { Capacity allNodes = Capacity.fromRequiredNodeType(nodeType); ClusterSpec clusterApp1 = ClusterSpec.request(ClusterSpec.Type.container, ClusterSpec.Id.from("test")).vespaVersion("6.42").build(); tester.activate(app1, clusterApp1, allNodes); - assertEquals(count, tester.nodeRepository.getNodes(nodeType, Node.State.active).size()); + assertEquals(count, tester.nodeRepository.nodes().getNodes(nodeType, Node.State.active).size()); Map<ApplicationId, MockDeployer.ApplicationContext> apps = Map.of( app1, new MockDeployer.ApplicationContext(app1, clusterApp1, allNodes)); @@ -212,7 +212,7 @@ public class NodeFailTester { } public void allNodesMakeAConfigRequestExcept(List<Node> deadNodes) { - for (Node node : nodeRepository.getNodes()) { + for (Node node : nodeRepository.nodes().getNodes()) { if ( ! deadNodes.contains(node)) hostLivenessTracker.receivedRequestFrom(node.hostname()); } @@ -258,18 +258,18 @@ public class NodeFailTester { nodes.add(builder.build()); } - nodes = nodeRepository.addNodes(nodes, Agent.system); - nodes = nodeRepository.deallocate(nodes, Agent.system, getClass().getSimpleName()); - return nodeRepository.setReady(nodes, Agent.system, getClass().getSimpleName()); + nodes = nodeRepository.nodes().addNodes(nodes, Agent.system); + nodes = nodeRepository.nodes().deallocate(nodes, Agent.system, getClass().getSimpleName()); + return nodeRepository.nodes().setReady(nodes, Agent.system, getClass().getSimpleName()); } private List<Node> createHostNodes(int count) { List<Node> nodes = tester.makeProvisionedNodes(count, (index) -> "parent" + index, hostFlavors.getFlavorOrThrow("default"), Optional.empty(), NodeType.host, 10, false); - nodes = nodeRepository.deallocate(nodes, Agent.system, getClass().getSimpleName()); + nodes = nodeRepository.nodes().deallocate(nodes, Agent.system, getClass().getSimpleName()); tester.activateTenantHosts(); - return nodeRepository.setReady(nodes, Agent.system, getClass().getSimpleName()); + return nodeRepository.nodes().setReady(nodes, Agent.system, getClass().getSimpleName()); } // Prefer using this instead of the above 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 d4dbc6f55a5..50b99afbca5 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 @@ -51,11 +51,11 @@ public class NodeFailerTest { String hostWithFailureReports = selectFirstParentHostWithNActiveNodesExcept(tester.nodeRepository, 2); // Set failure report to the parent and all its children. - tester.nodeRepository.getNodes().stream() + tester.nodeRepository.nodes().getNodes().stream() .filter(node -> node.hostname().equals(hostWithFailureReports)) .forEach(node -> { Node updatedNode = node.with(node.reports().withReport(badTotalMemorySizeReport)); - tester.nodeRepository.write(updatedNode, () -> {}); + tester.nodeRepository.nodes().write(updatedNode, () -> {}); }); testNodeFailingWith(tester, hostWithFailureReports); @@ -63,7 +63,7 @@ public class NodeFailerTest { private void testNodeFailingWith(NodeFailTester tester, String hostWithHwFailure) { // The host should have 2 nodes in active and 1 ready - Map<Node.State, List<String>> hostnamesByState = tester.nodeRepository.list().childrenOf(hostWithHwFailure).asList().stream() + Map<Node.State, List<String>> hostnamesByState = tester.nodeRepository.nodes().list().childrenOf(hostWithHwFailure).asList().stream() .collect(Collectors.groupingBy(Node::state, Collectors.mapping(Node::hostname, Collectors.toList()))); assertEquals(2, hostnamesByState.get(Node.State.active).size()); assertEquals(1, hostnamesByState.get(Node.State.ready).size()); @@ -80,7 +80,7 @@ public class NodeFailerTest { Map<Node.State, List<String>> expectedHostnamesByState1Iter = Map.of( Node.State.failed, List.of(hostnamesByState.get(Node.State.ready).get(0), hostnamesByState.get(Node.State.active).get(0)), Node.State.active, hostnamesByState.get(Node.State.active).subList(1, 2)); - Map<Node.State, List<String>> hostnamesByState1Iter = tester.nodeRepository.list().childrenOf(hostWithHwFailure).asList().stream() + Map<Node.State, List<String>> hostnamesByState1Iter = tester.nodeRepository.nodes().list().childrenOf(hostWithHwFailure).asList().stream() .collect(Collectors.groupingBy(Node::state, Collectors.mapping(Node::hostname, Collectors.toList()))); assertEquals(expectedHostnamesByState1Iter, hostnamesByState1Iter); @@ -92,26 +92,26 @@ public class NodeFailerTest { tester.runMaintainers(); // All of the children should be failed now - Set<Node.State> childStates2Iter = tester.nodeRepository.list().childrenOf(hostWithHwFailure).asList().stream() + Set<Node.State> childStates2Iter = tester.nodeRepository.nodes().list().childrenOf(hostWithHwFailure).asList().stream() .map(Node::state).collect(Collectors.toSet()); assertEquals(Set.of(Node.State.failed), childStates2Iter); // The host itself is still active as it too must be allowed to suspend - assertEquals(Node.State.active, tester.nodeRepository.getNode(hostWithHwFailure).get().state()); + assertEquals(Node.State.active, tester.nodeRepository.nodes().getNode(hostWithHwFailure).get().state()); tester.suspend(hostWithHwFailure); tester.runMaintainers(); - assertEquals(Node.State.failed, tester.nodeRepository.getNode(hostWithHwFailure).get().state()); - assertEquals(4, tester.nodeRepository.getNodes(Node.State.failed).size()); + assertEquals(Node.State.failed, tester.nodeRepository.nodes().getNode(hostWithHwFailure).get().state()); + assertEquals(4, tester.nodeRepository.nodes().getNodes(Node.State.failed).size()); } @Test public void hw_fail_only_if_whole_host_is_suspended() { NodeFailTester tester = NodeFailTester.withTwoApplicationsOnDocker(6); String hostWithFailureReports = selectFirstParentHostWithNActiveNodesExcept(tester.nodeRepository, 2); - assertEquals(Node.State.active, tester.nodeRepository.getNode(hostWithFailureReports).get().state()); + assertEquals(Node.State.active, tester.nodeRepository.nodes().getNode(hostWithFailureReports).get().state()); // The host has 2 nodes in active and 1 ready - Map<Node.State, List<String>> hostnamesByState = tester.nodeRepository.list().childrenOf(hostWithFailureReports).asList().stream() + Map<Node.State, List<String>> hostnamesByState = tester.nodeRepository.nodes().list().childrenOf(hostWithFailureReports).asList().stream() .collect(Collectors.groupingBy(Node::state, Collectors.mapping(Node::hostname, Collectors.toList()))); assertEquals(2, hostnamesByState.get(Node.State.active).size()); String activeChild1 = hostnamesByState.get(Node.State.active).get(0); @@ -121,50 +121,50 @@ public class NodeFailerTest { // Set failure report to the parent and all its children. Report badTotalMemorySizeReport = Report.basicReport("badTotalMemorySize", HARD_FAIL, Instant.now(), "too low"); - tester.nodeRepository.getNodes().stream() + tester.nodeRepository.nodes().getNodes().stream() .filter(node -> node.hostname().equals(hostWithFailureReports)) .forEach(node -> { Node updatedNode = node.with(node.reports().withReport(badTotalMemorySizeReport)); - tester.nodeRepository.write(updatedNode, () -> {}); + tester.nodeRepository.nodes().write(updatedNode, () -> {}); }); // The ready node will be failed, but neither the host nor the 2 active nodes since they have not been suspended tester.allNodesMakeAConfigRequestExcept(); tester.runMaintainers(); - assertEquals(Node.State.failed, tester.nodeRepository.getNode(readyChild).get().state()); - assertEquals(Node.State.active, tester.nodeRepository.getNode(hostWithFailureReports).get().state()); - assertEquals(Node.State.active, tester.nodeRepository.getNode(activeChild1).get().state()); - assertEquals(Node.State.active, tester.nodeRepository.getNode(activeChild2).get().state()); + assertEquals(Node.State.failed, tester.nodeRepository.nodes().getNode(readyChild).get().state()); + assertEquals(Node.State.active, tester.nodeRepository.nodes().getNode(hostWithFailureReports).get().state()); + assertEquals(Node.State.active, tester.nodeRepository.nodes().getNode(activeChild1).get().state()); + assertEquals(Node.State.active, tester.nodeRepository.nodes().getNode(activeChild2).get().state()); // Suspending the host will not fail any more since none of the children are suspened tester.suspend(hostWithFailureReports); tester.clock.advance(Duration.ofHours(25)); tester.allNodesMakeAConfigRequestExcept(); tester.runMaintainers(); - assertEquals(Node.State.failed, tester.nodeRepository.getNode(readyChild).get().state()); - assertEquals(Node.State.active, tester.nodeRepository.getNode(hostWithFailureReports).get().state()); - assertEquals(Node.State.active, tester.nodeRepository.getNode(activeChild1).get().state()); - assertEquals(Node.State.active, tester.nodeRepository.getNode(activeChild2).get().state()); + assertEquals(Node.State.failed, tester.nodeRepository.nodes().getNode(readyChild).get().state()); + assertEquals(Node.State.active, tester.nodeRepository.nodes().getNode(hostWithFailureReports).get().state()); + assertEquals(Node.State.active, tester.nodeRepository.nodes().getNode(activeChild1).get().state()); + assertEquals(Node.State.active, tester.nodeRepository.nodes().getNode(activeChild2).get().state()); // Suspending one child node will fail that out. tester.suspend(activeChild1); tester.clock.advance(Duration.ofHours(25)); tester.allNodesMakeAConfigRequestExcept(); tester.runMaintainers(); - assertEquals(Node.State.failed, tester.nodeRepository.getNode(readyChild).get().state()); - assertEquals(Node.State.active, tester.nodeRepository.getNode(hostWithFailureReports).get().state()); - assertEquals(Node.State.failed, tester.nodeRepository.getNode(activeChild1).get().state()); - assertEquals(Node.State.active, tester.nodeRepository.getNode(activeChild2).get().state()); + assertEquals(Node.State.failed, tester.nodeRepository.nodes().getNode(readyChild).get().state()); + assertEquals(Node.State.active, tester.nodeRepository.nodes().getNode(hostWithFailureReports).get().state()); + assertEquals(Node.State.failed, tester.nodeRepository.nodes().getNode(activeChild1).get().state()); + assertEquals(Node.State.active, tester.nodeRepository.nodes().getNode(activeChild2).get().state()); // Suspending the second child node will fail that out and the host. tester.suspend(activeChild2); tester.clock.advance(Duration.ofHours(25)); tester.allNodesMakeAConfigRequestExcept(); tester.runMaintainers(); - assertEquals(Node.State.failed, tester.nodeRepository.getNode(readyChild).get().state()); - assertEquals(Node.State.failed, tester.nodeRepository.getNode(hostWithFailureReports).get().state()); - assertEquals(Node.State.failed, tester.nodeRepository.getNode(activeChild1).get().state()); - assertEquals(Node.State.failed, tester.nodeRepository.getNode(activeChild2).get().state()); + assertEquals(Node.State.failed, tester.nodeRepository.nodes().getNode(readyChild).get().state()); + assertEquals(Node.State.failed, tester.nodeRepository.nodes().getNode(hostWithFailureReports).get().state()); + assertEquals(Node.State.failed, tester.nodeRepository.nodes().getNode(activeChild1).get().state()); + assertEquals(Node.State.failed, tester.nodeRepository.nodes().getNode(activeChild2).get().state()); } @Test @@ -173,39 +173,39 @@ public class NodeFailerTest { tester.suspend(NodeFailTester.app1); // Set two nodes down (one for each application) and wait 65 minutes - String host_from_suspended_app = tester.nodeRepository.getNodes(NodeFailTester.app1, Node.State.active).get(1).hostname(); - String host_from_normal_app = tester.nodeRepository.getNodes(NodeFailTester.app2, Node.State.active).get(3).hostname(); + String host_from_suspended_app = tester.nodeRepository.nodes().getNodes(NodeFailTester.app1, Node.State.active).get(1).hostname(); + String host_from_normal_app = tester.nodeRepository.nodes().getNodes(NodeFailTester.app2, Node.State.active).get(3).hostname(); tester.serviceMonitor.setHostDown(host_from_suspended_app); tester.serviceMonitor.setHostDown(host_from_normal_app); tester.runMaintainers(); tester.clock.advance(Duration.ofMinutes(65)); tester.runMaintainers(); - assertTrue(tester.nodeRepository.getNode(host_from_normal_app).get().isDown()); - assertTrue(tester.nodeRepository.getNode(host_from_suspended_app).get().isDown()); - assertEquals(Node.State.failed, tester.nodeRepository.getNode(host_from_normal_app).get().state()); - assertEquals(Node.State.active, tester.nodeRepository.getNode(host_from_suspended_app).get().state()); + assertTrue(tester.nodeRepository.nodes().getNode(host_from_normal_app).get().isDown()); + assertTrue(tester.nodeRepository.nodes().getNode(host_from_suspended_app).get().isDown()); + assertEquals(Node.State.failed, tester.nodeRepository.nodes().getNode(host_from_normal_app).get().state()); + assertEquals(Node.State.active, tester.nodeRepository.nodes().getNode(host_from_suspended_app).get().state()); } @Test public void zone_is_not_working_if_too_many_nodes_down() { NodeFailTester tester = NodeFailTester.withTwoApplications(); - tester.serviceMonitor.setHostDown(tester.nodeRepository.getNodes(NodeFailTester.app1, Node.State.active).get(0).hostname()); + tester.serviceMonitor.setHostDown(tester.nodeRepository.nodes().getNodes(NodeFailTester.app1, Node.State.active).get(0).hostname()); tester.runMaintainers(); - assertTrue(tester.nodeRepository.isWorking()); + assertTrue(tester.nodeRepository.nodes().isWorking()); - tester.serviceMonitor.setHostDown(tester.nodeRepository.getNodes(NodeFailTester.app1, Node.State.active).get(1).hostname()); + tester.serviceMonitor.setHostDown(tester.nodeRepository.nodes().getNodes(NodeFailTester.app1, Node.State.active).get(1).hostname()); tester.runMaintainers(); - assertTrue(tester.nodeRepository.isWorking()); + assertTrue(tester.nodeRepository.nodes().isWorking()); - tester.serviceMonitor.setHostDown(tester.nodeRepository.getNodes(NodeFailTester.app1, Node.State.active).get(2).hostname()); + tester.serviceMonitor.setHostDown(tester.nodeRepository.nodes().getNodes(NodeFailTester.app1, Node.State.active).get(2).hostname()); tester.runMaintainers(); - assertFalse(tester.nodeRepository.isWorking()); + assertFalse(tester.nodeRepository.nodes().isWorking()); tester.clock.advance(Duration.ofMinutes(65)); tester.runMaintainers(); - assertTrue("Node failing is deactivated", tester.nodeRepository.list(Node.State.failed).isEmpty()); + assertTrue("Node failing is deactivated", tester.nodeRepository.nodes().list(Node.State.failed).isEmpty()); } @Test @@ -219,24 +219,24 @@ public class NodeFailerTest { tester.allNodesMakeAConfigRequestExcept(); assertEquals( 0, tester.deployer.redeployments); - assertEquals(12, tester.nodeRepository.getNodes(NodeType.tenant, Node.State.active).size()); - assertEquals( 0, tester.nodeRepository.getNodes(NodeType.tenant, Node.State.failed).size()); - assertEquals( 4, tester.nodeRepository.getNodes(NodeType.tenant, Node.State.ready).size()); + assertEquals(12, tester.nodeRepository.nodes().getNodes(NodeType.tenant, Node.State.active).size()); + assertEquals( 0, tester.nodeRepository.nodes().getNodes(NodeType.tenant, Node.State.failed).size()); + assertEquals( 4, tester.nodeRepository.nodes().getNodes(NodeType.tenant, Node.State.ready).size()); } // Hardware failures are detected on two ready nodes, which are then failed - Node readyFail1 = tester.nodeRepository.getNodes(NodeType.tenant, Node.State.ready).get(2); - Node readyFail2 = tester.nodeRepository.getNodes(NodeType.tenant, Node.State.ready).get(3); - tester.nodeRepository.write(readyFail1.with(new Reports().withReport(badTotalMemorySizeReport)), () -> {}); - tester.nodeRepository.write(readyFail2.with(new Reports().withReport(badTotalMemorySizeReport)), () -> {}); - assertEquals(4, tester.nodeRepository.getNodes(NodeType.tenant, Node.State.ready).size()); - tester.runMaintainers(); - assertEquals(2, tester.nodeRepository.getNodes(NodeType.tenant, Node.State.ready).size()); - assertEquals(Node.State.failed, tester.nodeRepository.getNode(readyFail1.hostname()).get().state()); - assertEquals(Node.State.failed, tester.nodeRepository.getNode(readyFail2.hostname()).get().state()); - - String downHost1 = tester.nodeRepository.getNodes(NodeFailTester.app1, Node.State.active).get(1).hostname(); - String downHost2 = tester.nodeRepository.getNodes(NodeFailTester.app2, Node.State.active).get(3).hostname(); + Node readyFail1 = tester.nodeRepository.nodes().getNodes(NodeType.tenant, Node.State.ready).get(2); + Node readyFail2 = tester.nodeRepository.nodes().getNodes(NodeType.tenant, Node.State.ready).get(3); + tester.nodeRepository.nodes().write(readyFail1.with(new Reports().withReport(badTotalMemorySizeReport)), () -> {}); + tester.nodeRepository.nodes().write(readyFail2.with(new Reports().withReport(badTotalMemorySizeReport)), () -> {}); + assertEquals(4, tester.nodeRepository.nodes().getNodes(NodeType.tenant, Node.State.ready).size()); + tester.runMaintainers(); + assertEquals(2, tester.nodeRepository.nodes().getNodes(NodeType.tenant, Node.State.ready).size()); + assertEquals(Node.State.failed, tester.nodeRepository.nodes().getNode(readyFail1.hostname()).get().state()); + assertEquals(Node.State.failed, tester.nodeRepository.nodes().getNode(readyFail2.hostname()).get().state()); + + String downHost1 = tester.nodeRepository.nodes().getNodes(NodeFailTester.app1, Node.State.active).get(1).hostname(); + String downHost2 = tester.nodeRepository.nodes().getNodes(NodeFailTester.app2, Node.State.active).get(3).hostname(); tester.serviceMonitor.setHostDown(downHost1); tester.serviceMonitor.setHostDown(downHost2); // nothing happens the first 45 minutes @@ -245,9 +245,9 @@ public class NodeFailerTest { tester.clock.advance(Duration.ofMinutes(5)); tester.allNodesMakeAConfigRequestExcept(); assertEquals( 0, tester.deployer.redeployments); - assertEquals(12, tester.nodeRepository.getNodes(NodeType.tenant, Node.State.active).size()); - assertEquals( 2, tester.nodeRepository.getNodes(NodeType.tenant, Node.State.failed).size()); - assertEquals( 2, tester.nodeRepository.getNodes(NodeType.tenant, Node.State.ready).size()); + assertEquals(12, tester.nodeRepository.nodes().getNodes(NodeType.tenant, Node.State.active).size()); + assertEquals( 2, tester.nodeRepository.nodes().getNodes(NodeType.tenant, Node.State.failed).size()); + assertEquals( 2, tester.nodeRepository.nodes().getNodes(NodeType.tenant, Node.State.ready).size()); } tester.serviceMonitor.setHostUp(downHost1); @@ -256,10 +256,10 @@ public class NodeFailerTest { tester.allNodesMakeAConfigRequestExcept(); tester.runMaintainers(); assertEquals( 1, tester.deployer.redeployments); - assertEquals(12, tester.nodeRepository.getNodes(NodeType.tenant, Node.State.active).size()); - assertEquals( 3, tester.nodeRepository.getNodes(NodeType.tenant, Node.State.failed).size()); - assertEquals( 1, tester.nodeRepository.getNodes(NodeType.tenant, Node.State.ready).size()); - assertEquals(downHost2, tester.nodeRepository.getNodes(NodeType.tenant, Node.State.failed).get(0).hostname()); + assertEquals(12, tester.nodeRepository.nodes().getNodes(NodeType.tenant, Node.State.active).size()); + assertEquals( 3, tester.nodeRepository.nodes().getNodes(NodeType.tenant, Node.State.failed).size()); + assertEquals( 1, tester.nodeRepository.nodes().getNodes(NodeType.tenant, Node.State.ready).size()); + assertEquals(downHost2, tester.nodeRepository.nodes().getNodes(NodeType.tenant, Node.State.failed).get(0).hostname()); // downHost1 fails again tester.serviceMonitor.setHostDown(downHost1); @@ -275,12 +275,12 @@ public class NodeFailerTest { tester.allNodesMakeAConfigRequestExcept(); tester.runMaintainers(); assertEquals( 2, tester.deployer.redeployments); - assertEquals(12, tester.nodeRepository.getNodes(NodeType.tenant, Node.State.active).size()); - assertEquals( 4, tester.nodeRepository.getNodes(NodeType.tenant, Node.State.failed).size()); - assertEquals( 0, tester.nodeRepository.getNodes(NodeType.tenant, Node.State.ready).size()); + assertEquals(12, tester.nodeRepository.nodes().getNodes(NodeType.tenant, Node.State.active).size()); + assertEquals( 4, tester.nodeRepository.nodes().getNodes(NodeType.tenant, Node.State.failed).size()); + assertEquals( 0, tester.nodeRepository.nodes().getNodes(NodeType.tenant, Node.State.ready).size()); // the last host goes down - Node lastNode = tester.highestIndex(tester.nodeRepository.getNodes(NodeFailTester.app1, Node.State.active)); + Node lastNode = tester.highestIndex(tester.nodeRepository.nodes().getNodes(NodeFailTester.app1, Node.State.active)); tester.serviceMonitor.setHostDown(lastNode.hostname()); // it is not failed because there are no ready nodes to replace it for (int minutes = 0; minutes < 75; minutes +=5 ) { @@ -288,9 +288,9 @@ public class NodeFailerTest { tester.clock.advance(Duration.ofMinutes(5)); tester.allNodesMakeAConfigRequestExcept(); assertEquals( 2, tester.deployer.redeployments); - assertEquals(12, tester.nodeRepository.getNodes(NodeType.tenant, Node.State.active).size()); - assertEquals( 4, tester.nodeRepository.getNodes(NodeType.tenant, Node.State.failed).size()); - assertEquals( 0, tester.nodeRepository.getNodes(NodeType.tenant, Node.State.ready).size()); + assertEquals(12, tester.nodeRepository.nodes().getNodes(NodeType.tenant, Node.State.active).size()); + assertEquals( 4, tester.nodeRepository.nodes().getNodes(NodeType.tenant, Node.State.failed).size()); + assertEquals( 0, tester.nodeRepository.nodes().getNodes(NodeType.tenant, Node.State.ready).size()); } // A new node is available @@ -300,11 +300,11 @@ public class NodeFailerTest { tester.runMaintainers(); // The node is now failed assertEquals( 3, tester.deployer.redeployments); - assertEquals(12, tester.nodeRepository.getNodes(NodeType.tenant, Node.State.active).size()); - assertEquals( 5, tester.nodeRepository.getNodes(NodeType.tenant, Node.State.failed).size()); - assertEquals( 0, tester.nodeRepository.getNodes(NodeType.tenant, Node.State.ready).size()); + assertEquals(12, tester.nodeRepository.nodes().getNodes(NodeType.tenant, Node.State.active).size()); + assertEquals( 5, tester.nodeRepository.nodes().getNodes(NodeType.tenant, Node.State.failed).size()); + assertEquals( 0, tester.nodeRepository.nodes().getNodes(NodeType.tenant, Node.State.ready).size()); assertTrue("The index of the last failed node is not reused", - tester.highestIndex(tester.nodeRepository.getNodes(NodeFailTester.app1, Node.State.active)).allocation().get().membership().index() + tester.highestIndex(tester.nodeRepository.nodes().getNodes(NodeFailTester.app1, Node.State.active)).allocation().get().membership().index() > lastNode.allocation().get().membership().index()); } @@ -312,31 +312,31 @@ public class NodeFailerTest { @Test public void re_activate_grace_period_test() { NodeFailTester tester = NodeFailTester.withTwoApplications(); - String downNode = tester.nodeRepository.getNodes(NodeFailTester.app1, Node.State.active).get(1).hostname(); + String downNode = tester.nodeRepository.nodes().getNodes(NodeFailTester.app1, Node.State.active).get(1).hostname(); tester.serviceMonitor.setHostDown(downNode); tester.allNodesMakeAConfigRequestExcept(); tester.runMaintainers(); - assertEquals(0, tester.nodeRepository.getNodes(NodeType.tenant, Node.State.failed).size()); + assertEquals(0, tester.nodeRepository.nodes().getNodes(NodeType.tenant, Node.State.failed).size()); tester.clock.advance(Duration.ofMinutes(75)); tester.allNodesMakeAConfigRequestExcept(); tester.runMaintainers(); - assertEquals(1, tester.nodeRepository.getNodes(NodeType.tenant, Node.State.failed).size()); - assertEquals(Node.State.failed, tester.nodeRepository.getNode(downNode).get().state()); + assertEquals(1, tester.nodeRepository.nodes().getNodes(NodeType.tenant, Node.State.failed).size()); + assertEquals(Node.State.failed, tester.nodeRepository.nodes().getNode(downNode).get().state()); // Re-activate the node. It is still down, but should not be failed out until the grace period has passed again - tester.nodeRepository.reactivate(downNode, Agent.system, getClass().getSimpleName()); + tester.nodeRepository.nodes().reactivate(downNode, Agent.system, getClass().getSimpleName()); tester.clock.advance(Duration.ofMinutes(30)); tester.allNodesMakeAConfigRequestExcept(); tester.runMaintainers(); - assertEquals(0, tester.nodeRepository.getNodes(NodeType.tenant, Node.State.failed).size()); + assertEquals(0, tester.nodeRepository.nodes().getNodes(NodeType.tenant, Node.State.failed).size()); tester.clock.advance(Duration.ofMinutes(45)); tester.allNodesMakeAConfigRequestExcept(); tester.runMaintainers(); - assertEquals(1, tester.nodeRepository.getNodes(NodeType.tenant, Node.State.failed).size()); - assertEquals(Node.State.failed, tester.nodeRepository.getNode(downNode).get().state()); + assertEquals(1, tester.nodeRepository.nodes().getNodes(NodeType.tenant, Node.State.failed).size()); + assertEquals(Node.State.failed, tester.nodeRepository.nodes().getNode(downNode).get().state()); } @Test @@ -349,7 +349,7 @@ public class NodeFailerTest { ClusterSpec cluster = ClusterSpec.request(ClusterSpec.Type.container, ClusterSpec.Id.from("test")).vespaVersion("6.42").build(); tester.activate(NodeFailTester.app1, cluster, capacity); - String downHost = tester.nodeRepository.getNodes(NodeFailTester.app1, Node.State.active).get(0).hostname(); + String downHost = tester.nodeRepository.nodes().getNodes(NodeFailTester.app1, Node.State.active).get(0).hostname(); tester.serviceMonitor.setHostDown(downHost); // nothing happens the first 45 minutes @@ -358,8 +358,8 @@ public class NodeFailerTest { tester.clock.advance(Duration.ofMinutes(5)); tester.allNodesMakeAConfigRequestExcept(); assertEquals(0, tester.deployer.redeployments); - assertEquals(3, tester.nodeRepository.getNodes(NodeType.tenant, Node.State.active).size()); - assertEquals(0, tester.nodeRepository.getNodes(NodeType.tenant, Node.State.failed).size()); + assertEquals(3, tester.nodeRepository.nodes().getNodes(NodeType.tenant, Node.State.active).size()); + assertEquals(0, tester.nodeRepository.nodes().getNodes(NodeType.tenant, Node.State.failed).size()); } // downHost should now be failed and replaced @@ -367,9 +367,9 @@ public class NodeFailerTest { tester.allNodesMakeAConfigRequestExcept(); tester.runMaintainers(); assertEquals(1, tester.deployer.redeployments); - assertEquals(1, tester.nodeRepository.getNodes(NodeType.tenant, Node.State.failed).size()); - assertEquals(3, tester.nodeRepository.getNodes(NodeType.tenant, Node.State.active).size()); - assertEquals(downHost, tester.nodeRepository.getNodes(NodeType.tenant, Node.State.failed).get(0).hostname()); + assertEquals(1, tester.nodeRepository.nodes().getNodes(NodeType.tenant, Node.State.failed).size()); + assertEquals(3, tester.nodeRepository.nodes().getNodes(NodeType.tenant, Node.State.active).size()); + assertEquals(downHost, tester.nodeRepository.nodes().getNodes(NodeType.tenant, Node.State.failed).get(0).hostname()); } @Test @@ -385,10 +385,10 @@ public class NodeFailerTest { tester.clock.advance(Duration.ofMinutes(interval)); tester.allNodesMakeAConfigRequestExcept(); tester.runMaintainers(); - assertEquals( 5, tester.nodeRepository.getNodes(NodeType.tenant, Node.State.ready).size()); + assertEquals( 5, tester.nodeRepository.nodes().getNodes(NodeType.tenant, Node.State.ready).size()); } - List<Node> ready = tester.nodeRepository.getNodes(NodeType.tenant, Node.State.ready); + List<Node> ready = tester.nodeRepository.nodes().getNodes(NodeType.tenant, Node.State.ready); // Two ready nodes and a ready docker node die, but only 2 of those are failed out tester.clock.advance(Duration.ofMinutes(180)); @@ -398,16 +398,16 @@ public class NodeFailerTest { .collect(Collectors.toList()); tester.allNodesMakeAConfigRequestExcept(otherNodes.get(0), otherNodes.get(2), dockerNode); tester.runMaintainers(); - assertEquals( 3, tester.nodeRepository.getNodes(NodeType.tenant, Node.State.ready).size()); - assertEquals( 2, tester.nodeRepository.getNodes(NodeType.tenant, Node.State.failed).size()); + assertEquals( 3, tester.nodeRepository.nodes().getNodes(NodeType.tenant, Node.State.ready).size()); + assertEquals( 2, tester.nodeRepository.nodes().getNodes(NodeType.tenant, Node.State.failed).size()); // Another ready node dies and the node that died earlier, are allowed to fail tester.clock.advance(Duration.ofDays(1)); tester.allNodesMakeAConfigRequestExcept(otherNodes.get(0), otherNodes.get(2), dockerNode, otherNodes.get(3)); tester.runMaintainers(); - assertEquals( 1, tester.nodeRepository.getNodes(NodeType.tenant, Node.State.ready).size()); - assertEquals(otherNodes.get(1), tester.nodeRepository.getNodes(NodeType.tenant, Node.State.ready).get(0)); - assertEquals( 4, tester.nodeRepository.getNodes(NodeType.tenant, Node.State.failed).size()); + assertEquals( 1, tester.nodeRepository.nodes().getNodes(NodeType.tenant, Node.State.ready).size()); + assertEquals(otherNodes.get(1), tester.nodeRepository.nodes().getNodes(NodeType.tenant, Node.State.ready).get(0)); + assertEquals( 4, tester.nodeRepository.nodes().getNodes(NodeType.tenant, Node.State.failed).size()); } @Test @@ -419,17 +419,17 @@ public class NodeFailerTest { tester.clock.advance(Duration.ofMinutes(interval)); tester.allNodesMakeAConfigRequestExcept(); tester.runMaintainers(); - assertEquals( 3, tester.nodeRepository.getNodes(NodeType.host, Node.State.ready).size()); - assertEquals( 0, tester.nodeRepository.getNodes(NodeType.host, Node.State.failed).size()); + assertEquals( 3, tester.nodeRepository.nodes().getNodes(NodeType.host, Node.State.ready).size()); + assertEquals( 0, tester.nodeRepository.nodes().getNodes(NodeType.host, Node.State.failed).size()); } // Two ready nodes and a ready docker node die, but only 2 of those are failed out tester.clock.advance(Duration.ofMinutes(180)); - Node dockerHost = tester.nodeRepository.getNodes(NodeType.host, Node.State.ready).iterator().next(); + Node dockerHost = tester.nodeRepository.nodes().getNodes(NodeType.host, Node.State.ready).iterator().next(); tester.allNodesMakeAConfigRequestExcept(dockerHost); tester.runMaintainers(); - assertEquals( 3, tester.nodeRepository.getNodes(NodeType.host, Node.State.ready).size()); - assertEquals( 0, tester.nodeRepository.getNodes(NodeType.host, Node.State.failed).size()); + assertEquals( 3, tester.nodeRepository.nodes().getNodes(NodeType.host, Node.State.ready).size()); + assertEquals( 0, tester.nodeRepository.nodes().getNodes(NodeType.host, Node.State.failed).size()); } @Test @@ -441,9 +441,9 @@ public class NodeFailerTest { tester.clock.advance(Duration.ofMinutes(interval)); tester.allNodesMakeAConfigRequestExcept(); tester.runMaintainers(); - assertEquals(8, tester.nodeRepository.getNodes(NodeType.tenant, Node.State.active).size()); - assertEquals(13, tester.nodeRepository.getNodes(NodeType.tenant, Node.State.ready).size()); - assertEquals(7, tester.nodeRepository.getNodes(NodeType.host, Node.State.active).size()); + assertEquals(8, tester.nodeRepository.nodes().getNodes(NodeType.tenant, Node.State.active).size()); + assertEquals(13, tester.nodeRepository.nodes().getNodes(NodeType.tenant, Node.State.ready).size()); + assertEquals(7, tester.nodeRepository.nodes().getNodes(NodeType.host, Node.State.active).size()); } @@ -457,9 +457,9 @@ public class NodeFailerTest { tester.clock.advance(Duration.ofMinutes(5)); tester.allNodesMakeAConfigRequestExcept(); assertEquals(0, tester.deployer.redeployments); - assertEquals(8, tester.nodeRepository.getNodes(NodeType.tenant, Node.State.active).size()); - assertEquals(13, tester.nodeRepository.getNodes(NodeType.tenant, Node.State.ready).size()); - assertEquals(7, tester.nodeRepository.getNodes(NodeType.host, Node.State.active).size()); + assertEquals(8, tester.nodeRepository.nodes().getNodes(NodeType.tenant, Node.State.active).size()); + assertEquals(13, tester.nodeRepository.nodes().getNodes(NodeType.tenant, Node.State.ready).size()); + assertEquals(7, tester.nodeRepository.nodes().getNodes(NodeType.host, Node.State.active).size()); } tester.clock.advance(Duration.ofMinutes(30)); @@ -467,14 +467,14 @@ public class NodeFailerTest { tester.runMaintainers(); assertEquals(2 + 1, tester.deployer.redeployments); - assertEquals(3, tester.nodeRepository.getNodes(NodeType.tenant, Node.State.failed).size()); - assertEquals(8, tester.nodeRepository.getNodes(NodeType.tenant, Node.State.active).size()); - assertEquals(10, tester.nodeRepository.getNodes(NodeType.tenant, Node.State.ready).size()); - assertEquals(6, tester.nodeRepository.getNodes(NodeType.host, Node.State.active).size()); + assertEquals(3, tester.nodeRepository.nodes().getNodes(NodeType.tenant, Node.State.failed).size()); + assertEquals(8, tester.nodeRepository.nodes().getNodes(NodeType.tenant, Node.State.active).size()); + assertEquals(10, tester.nodeRepository.nodes().getNodes(NodeType.tenant, Node.State.ready).size()); + assertEquals(6, tester.nodeRepository.nodes().getNodes(NodeType.host, Node.State.active).size()); // Now lets fail an active tenant node - Node downTenant1 = tester.nodeRepository.getNodes(NodeType.tenant, Node.State.active).get(0); + Node downTenant1 = tester.nodeRepository.nodes().getNodes(NodeType.tenant, Node.State.active).get(0); tester.serviceMonitor.setHostDown(downTenant1.hostname()); // nothing happens during the entire day because of the failure throttling @@ -482,7 +482,7 @@ public class NodeFailerTest { tester.runMaintainers(); tester.clock.advance(Duration.ofMinutes(interval)); tester.allNodesMakeAConfigRequestExcept(); - assertEquals(3 + 1, tester.nodeRepository.getNodes(Node.State.failed).size()); + assertEquals(3 + 1, tester.nodeRepository.nodes().getNodes(Node.State.failed).size()); } tester.clock.advance(Duration.ofMinutes(30)); @@ -490,10 +490,10 @@ public class NodeFailerTest { tester.runMaintainers(); assertEquals(3 + 1, tester.deployer.redeployments); - assertEquals(4, tester.nodeRepository.getNodes(NodeType.tenant, Node.State.failed).size()); - assertEquals(8, tester.nodeRepository.getNodes(NodeType.tenant, Node.State.active).size()); - assertEquals(9, tester.nodeRepository.getNodes(NodeType.tenant, Node.State.ready).size()); - assertEquals(6, tester.nodeRepository.getNodes(NodeType.host, Node.State.active).size()); + assertEquals(4, tester.nodeRepository.nodes().getNodes(NodeType.tenant, Node.State.failed).size()); + assertEquals(8, tester.nodeRepository.nodes().getNodes(NodeType.tenant, Node.State.active).size()); + assertEquals(9, tester.nodeRepository.nodes().getNodes(NodeType.tenant, Node.State.ready).size()); + assertEquals(6, tester.nodeRepository.nodes().getNodes(NodeType.host, Node.State.active).size()); // Lets fail another host, make sure it is not the same where downTenant1 is a child @@ -505,10 +505,10 @@ public class NodeFailerTest { tester.runMaintainers(); assertEquals(5 + 2, tester.deployer.redeployments); - assertEquals(7, tester.nodeRepository.getNodes(NodeType.tenant, Node.State.failed).size()); - assertEquals(8, tester.nodeRepository.getNodes(NodeType.tenant, Node.State.active).size()); - assertEquals(6, tester.nodeRepository.getNodes(NodeType.tenant, Node.State.ready).size()); - assertEquals(5, tester.nodeRepository.getNodes(NodeType.host, Node.State.active).size()); + assertEquals(7, tester.nodeRepository.nodes().getNodes(NodeType.tenant, Node.State.failed).size()); + assertEquals(8, tester.nodeRepository.nodes().getNodes(NodeType.tenant, Node.State.active).size()); + assertEquals(6, tester.nodeRepository.nodes().getNodes(NodeType.tenant, Node.State.ready).size()); + assertEquals(5, tester.nodeRepository.nodes().getNodes(NodeType.host, Node.State.active).size()); // We have only 5 hosts remaining, so if we fail another host, we should only be able to redeploy app1's // node, while app2's should remain @@ -520,10 +520,10 @@ public class NodeFailerTest { tester.runMaintainers(); assertEquals(6 + 2, tester.deployer.redeployments); - assertEquals(9, tester.nodeRepository.getNodes(NodeType.tenant, Node.State.failed).size()); - assertEquals(8, tester.nodeRepository.getNodes(NodeType.tenant, Node.State.active).size()); - assertEquals(4, tester.nodeRepository.getNodes(NodeType.tenant, Node.State.ready).size()); - assertEquals(5, tester.nodeRepository.getNodes(NodeType.host, Node.State.active).size()); + assertEquals(9, tester.nodeRepository.nodes().getNodes(NodeType.tenant, Node.State.failed).size()); + assertEquals(8, tester.nodeRepository.nodes().getNodes(NodeType.tenant, Node.State.active).size()); + assertEquals(4, tester.nodeRepository.nodes().getNodes(NodeType.tenant, Node.State.ready).size()); + assertEquals(5, tester.nodeRepository.nodes().getNodes(NodeType.host, Node.State.active).size()); } @Test @@ -545,7 +545,7 @@ public class NodeFailerTest { tester.clock.advance(Duration.ofMinutes(5)); tester.allNodesMakeAConfigRequestExcept(); - assertEquals(count, tester.nodeRepository.getNodes(nodeType, Node.State.active).size()); + assertEquals(count, tester.nodeRepository.nodes().getNodes(nodeType, Node.State.active).size()); } Set<String> downHosts = Set.of("host2", "host3"); @@ -558,7 +558,7 @@ public class NodeFailerTest { tester.clock.advance(Duration.ofMinutes(5)); tester.allNodesMakeAConfigRequestExcept(); assertEquals( 0, tester.deployer.redeployments); - assertEquals(count, tester.nodeRepository.getNodes(nodeType, Node.State.active).size()); + assertEquals(count, tester.nodeRepository.nodes().getNodes(nodeType, Node.State.active).size()); } tester.clock.advance(Duration.ofMinutes(60)); @@ -566,15 +566,15 @@ public class NodeFailerTest { // one down host should now be failed, but not two as we are only allowed to fail one proxy assertEquals(expectedFailCount, tester.deployer.redeployments); - assertEquals(count - expectedFailCount, tester.nodeRepository.getNodes(nodeType, Node.State.active).size()); - assertEquals(expectedFailCount, tester.nodeRepository.getNodes(nodeType, Node.State.failed).size()); - tester.nodeRepository.getNodes(nodeType, Node.State.failed) + assertEquals(count - expectedFailCount, tester.nodeRepository.nodes().getNodes(nodeType, Node.State.active).size()); + assertEquals(expectedFailCount, tester.nodeRepository.nodes().getNodes(nodeType, Node.State.failed).size()); + tester.nodeRepository.nodes().getNodes(nodeType, Node.State.failed) .forEach(node -> assertTrue(downHosts.contains(node.hostname()))); // trying to fail again will still not fail the other down host tester.clock.advance(Duration.ofMinutes(60)); tester.runMaintainers(); - assertEquals(count - expectedFailCount, tester.nodeRepository.getNodes(nodeType, Node.State.active).size()); + assertEquals(count - expectedFailCount, tester.nodeRepository.nodes().getNodes(nodeType, Node.State.active).size()); } @Test @@ -586,10 +586,10 @@ public class NodeFailerTest { tester.runMaintainers(); assertEquals(Node.State.ready, readyNode.state()); - tester.nodeRepository.write(readyNode.with(new Reports().withReport(badTotalMemorySizeReport)), () -> {}); + tester.nodeRepository.nodes().write(readyNode.with(new Reports().withReport(badTotalMemorySizeReport)), () -> {}); tester.runMaintainers(); - assertEquals(1, tester.nodeRepository.getNodes(Node.State.failed).size()); + assertEquals(1, tester.nodeRepository.nodes().getNodes(Node.State.failed).size()); } @Test @@ -599,7 +599,7 @@ public class NodeFailerTest { // 50 regular tenant nodes, 10 hosts with each 3 tenant nodes, total 90 nodes NodeFailTester tester = NodeFailTester.withTwoApplicationsOnDocker(10); List<Node> readyNodes = tester.createReadyNodes(50, 30); - List<Node> hosts = tester.nodeRepository.getNodes(NodeType.host); + List<Node> hosts = tester.nodeRepository.nodes().getNodes(NodeType.host); List<Node> deadNodes = readyNodes.subList(0, 4); // 2 hours pass, 4 physical nodes die @@ -610,7 +610,7 @@ public class NodeFailerTest { // 2 nodes are failed (the minimum amount that are always allowed to fail) tester.runMaintainers(); - assertEquals(2, tester.nodeRepository.getNodes(Node.State.failed).size()); + assertEquals(2, tester.nodeRepository.nodes().getNodes(Node.State.failed).size()); assertEquals("Throttling is indicated by the metric", 1, tester.metric.values.get(NodeFailer.throttlingActiveMetric)); assertEquals("Throttled node failures", 2, tester.metric.values.get(NodeFailer.throttledNodeFailuresMetric)); @@ -620,7 +620,7 @@ public class NodeFailerTest { tester.allNodesMakeAConfigRequestExcept(deadNodes); } tester.runMaintainers(); - assertEquals(2, tester.nodeRepository.getNodes(Node.State.failed).size()); + assertEquals(2, tester.nodeRepository.nodes().getNodes(Node.State.failed).size()); assertEquals("Throttling is indicated by the metric", 1, tester.metric.values.get(NodeFailer.throttlingActiveMetric)); assertEquals("Throttled node failures", 2, tester.metric.values.get(NodeFailer.throttledNodeFailuresMetric)); @@ -630,7 +630,7 @@ public class NodeFailerTest { tester.allNodesMakeAConfigRequestExcept(deadNodes); } tester.runMaintainers(); - assertEquals(4, tester.nodeRepository.getNodes(Node.State.failed).size()); + assertEquals(4, tester.nodeRepository.nodes().getNodes(Node.State.failed).size()); // 24 more hours pass, nothing happens for (int minutes = 0, interval = 30; minutes < 24 * 60; minutes += interval) { @@ -652,7 +652,7 @@ public class NodeFailerTest { assertEquals(4 + /* already failed */ 2 + /* hosts */ (2 * 3) /* containers per host */, - tester.nodeRepository.getNodes(Node.State.failed).size()); + tester.nodeRepository.nodes().getNodes(Node.State.failed).size()); assertEquals("Throttling is indicated by the metric", 1, tester.metric.values.get(NodeFailer.throttlingActiveMetric)); assertEquals("Throttled host failures", 1, tester.metric.values.get(NodeFailer.throttledHostFailuresMetric)); @@ -662,14 +662,14 @@ public class NodeFailerTest { tester.allNodesMakeAConfigRequestExcept(deadNodes); } tester.runMaintainers(); - assertEquals(12, tester.nodeRepository.getNodes(Node.State.failed).size()); + assertEquals(12, tester.nodeRepository.nodes().getNodes(Node.State.failed).size()); assertEquals("Throttling is indicated by the metric", 1, tester.metric.values.get(NodeFailer.throttlingActiveMetric)); assertEquals("Throttled host failures", 1, tester.metric.values.get(NodeFailer.throttledHostFailuresMetric)); // The final host and its containers are failed out tester.clock.advance(Duration.ofMinutes(30)); tester.runMaintainers(); - assertEquals(16, tester.nodeRepository.getNodes(Node.State.failed).size()); + assertEquals(16, tester.nodeRepository.nodes().getNodes(Node.State.failed).size()); assertEquals("Throttling is not indicated by the metric, as no throttled attempt is made", 0, tester.metric.values.get(NodeFailer.throttlingActiveMetric)); assertEquals("No throttled node failures", 0, tester.metric.values.get(NodeFailer.throttledNodeFailuresMetric)); @@ -677,7 +677,7 @@ public class NodeFailerTest { tester.clock.advance(Duration.ofHours(25)); tester.allNodesMakeAConfigRequestExcept(deadNodes); tester.runMaintainers(); - assertEquals(16, tester.nodeRepository.getNodes(Node.State.failed).size()); + assertEquals(16, tester.nodeRepository.nodes().getNodes(Node.State.failed).size()); assertEquals("Throttling is not indicated by the metric", 0, tester.metric.values.get(NodeFailer.throttlingActiveMetric)); assertEquals("No throttled node failures", 0, tester.metric.values.get(NodeFailer.throttledNodeFailuresMetric)); } @@ -695,7 +695,7 @@ public class NodeFailerTest { } tester.runMaintainers(); // 2% are allowed to fail - assertEquals(10, tester.nodeRepository.getNodes(Node.State.failed).size()); + assertEquals(10, tester.nodeRepository.nodes().getNodes(Node.State.failed).size()); assertEquals("Throttling is indicated by the metric.", 1, tester.metric.values.get(NodeFailer.throttlingActiveMetric)); assertEquals("Throttled node failures", 5, tester.metric.values.get(NodeFailer.throttledNodeFailuresMetric)); @@ -705,7 +705,7 @@ public class NodeFailerTest { tester.allNodesMakeAConfigRequestExcept(deadNodes); } tester.runMaintainers(); - assertEquals(10, tester.nodeRepository.getNodes(Node.State.failed).size()); + assertEquals(10, tester.nodeRepository.nodes().getNodes(Node.State.failed).size()); assertEquals("Throttling is indicated by the metric.", 1, tester.metric.values.get(NodeFailer.throttlingActiveMetric)); assertEquals("Throttled node failures", 5, tester.metric.values.get(NodeFailer.throttledNodeFailuresMetric)); @@ -715,7 +715,7 @@ public class NodeFailerTest { tester.allNodesMakeAConfigRequestExcept(deadNodes); } tester.runMaintainers(); - assertEquals(15, tester.nodeRepository.getNodes(Node.State.failed).size()); + assertEquals(15, tester.nodeRepository.nodes().getNodes(Node.State.failed).size()); assertEquals("Throttling is not indicated by the metric, as no throttled attempt is made.", 0, tester.metric.values.get(NodeFailer.throttlingActiveMetric)); assertEquals("No throttled node failures", 0, tester.metric.values.get(NodeFailer.throttledNodeFailuresMetric)); } @@ -758,7 +758,7 @@ public class NodeFailerTest { */ private static String selectFirstParentHostWithNActiveNodesExcept(NodeRepository nodeRepository, int n, String... except) { Set<String> exceptSet = Arrays.stream(except).collect(Collectors.toSet()); - return nodeRepository.getNodes(NodeType.tenant, Node.State.active).stream() + return nodeRepository.nodes().getNodes(NodeType.tenant, Node.State.active).stream() .collect(Collectors.groupingBy(Node::parentHostname)) .entrySet().stream() .filter(entry -> entry.getValue().size() == n) 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 2abe5ed7ebf..b9f3985172b 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 @@ -94,7 +94,7 @@ public class NodeRebooterTest { while (true) { rebooter.maintain(); simulateReboot(nodeRepository); - List<Node> nodes = nodeRepository.getNodes(NodeType.host, Node.State.ready); + List<Node> nodes = nodeRepository.nodes().getNodes(NodeType.host, Node.State.ready); int count = withCurrentRebootGeneration(1L, nodes).size(); if (count == 2) { break; @@ -103,7 +103,7 @@ public class NodeRebooterTest { } private void assertReadyHosts(int expectedCount, NodeRepository nodeRepository, long generation) { - List<Node> nodes = nodeRepository.getNodes(NodeType.host, Node.State.ready); + List<Node> nodes = nodeRepository.nodes().getNodes(NodeType.host, Node.State.ready); assertEquals(expectedCount, withCurrentRebootGeneration(generation, nodes).size()); } @@ -113,10 +113,10 @@ public class NodeRebooterTest { /** Set current reboot generation to the wanted reboot generation whenever it is larger (i.e record a reboot) */ private void simulateReboot(NodeRepository nodeRepository) { - for (Node node : nodeRepository.getNodes(Node.State.ready, Node.State.active)) { + for (Node node : nodeRepository.nodes().getNodes(Node.State.ready, Node.State.active)) { if (node.status().reboot().wanted() > node.status().reboot().current()) - nodeRepository.write(node.withCurrentRebootGeneration(node.status().reboot().wanted(), - nodeRepository.clock().instant()), () -> {}); + nodeRepository.nodes().write(node.withCurrentRebootGeneration(node.status().reboot().wanted(), + nodeRepository.clock().instant()), () -> {}); } } @@ -129,10 +129,10 @@ public class NodeRebooterTest { private void simulateOsUpgrade(NodeRepository nodeRepository) { var wantedOsVersion = nodeRepository.osVersions().targetFor(NodeType.host); if (wantedOsVersion.isEmpty()) return; - for (Node node : nodeRepository.getNodes(Node.State.ready, Node.State.active)) { + for (Node node : nodeRepository.nodes().getNodes(Node.State.ready, Node.State.active)) { if (wantedOsVersion.get().isAfter(node.status().osVersion().current().orElse(Version.emptyVersion))) - nodeRepository.write(node.withCurrentOsVersion(wantedOsVersion.get(), nodeRepository.clock().instant()), - () -> {}); + nodeRepository.nodes().write(node.withCurrentOsVersion(wantedOsVersion.get(), nodeRepository.clock().instant()), + () -> {}); } } diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/OperatorChangeApplicationMaintainerTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/OperatorChangeApplicationMaintainerTest.java index 9d58c30a2c6..f331f3bcb4a 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/OperatorChangeApplicationMaintainerTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/OperatorChangeApplicationMaintainerTest.java @@ -51,19 +51,19 @@ public class OperatorChangeApplicationMaintainerTest { maintainer.maintain(); assertEquals("No changes -> no redeployments", 3, fixture.deployer.redeployments); - nodeRepository.fail(nodeRepository.getNodes(fixture.app1).get(3).hostname(), Agent.system, "Failing to unit test"); + nodeRepository.nodes().fail(nodeRepository.nodes().getNodes(fixture.app1).get(3).hostname(), Agent.system, "Failing to unit test"); clock.advance(Duration.ofMinutes(2)); maintainer.maintain(); assertEquals("System change -> no redeployments", 3, fixture.deployer.redeployments); clock.advance(Duration.ofSeconds(1)); - nodeRepository.fail(nodeRepository.getNodes(fixture.app2).get(4).hostname(), Agent.operator, "Manual node failing"); + nodeRepository.nodes().fail(nodeRepository.nodes().getNodes(fixture.app2).get(4).hostname(), Agent.operator, "Manual node failing"); clock.advance(Duration.ofMinutes(2)); maintainer.maintain(); assertEquals("Operator change -> redeployment", 4, fixture.deployer.redeployments); clock.advance(Duration.ofSeconds(1)); - nodeRepository.fail(nodeRepository.getNodes(fixture.app3).get(1).hostname(), Agent.operator, "Manual node failing"); + nodeRepository.nodes().fail(nodeRepository.nodes().getNodes(fixture.app3).get(1).hostname(), Agent.operator, "Manual node failing"); clock.advance(Duration.ofMinutes(2)); maintainer.maintain(); assertEquals("Operator change -> redeployment", 5, fixture.deployer.redeployments); @@ -104,9 +104,9 @@ public class OperatorChangeApplicationMaintainerTest { deployer.deployFromLocalActive(app1, false).get().activate(); deployer.deployFromLocalActive(app2, false).get().activate(); deployer.deployFromLocalActive(app3, false).get().activate(); - assertEquals(wantedNodesApp1, nodeRepository.getNodes(app1, Node.State.active).size()); - assertEquals(wantedNodesApp2, nodeRepository.getNodes(app2, Node.State.active).size()); - assertEquals(wantedNodesApp3, nodeRepository.getNodes(app3, Node.State.active).size()); + assertEquals(wantedNodesApp1, nodeRepository.nodes().getNodes(app1, Node.State.active).size()); + assertEquals(wantedNodesApp2, nodeRepository.nodes().getNodes(app2, Node.State.active).size()); + assertEquals(wantedNodesApp3, nodeRepository.nodes().getNodes(app3, Node.State.active).size()); } } diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/OsUpgradeActivatorTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/OsUpgradeActivatorTest.java index f795dbaaa1c..36452e05bb6 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/OsUpgradeActivatorTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/OsUpgradeActivatorTest.java @@ -76,7 +76,7 @@ public class OsUpgradeActivatorTest { assertFalse("OS version " + osVersion0 + " is inactive", isOsVersionActive(NodeType.host)); // One tenant host fails and is no longer considered - tester.nodeRepository().fail(tenantHostNodes.get(0).hostname(), Agent.system, this.getClass().getSimpleName()); + tester.nodeRepository().nodes().fail(tenantHostNodes.get(0).hostname(), Agent.system, this.getClass().getSimpleName()); // Remaining hosts complete their Vespa upgrade var healthyTenantHostNodes = tenantHostNodes.subList(1, tenantHostNodes.size()); @@ -91,7 +91,7 @@ public class OsUpgradeActivatorTest { private boolean isOsVersionActive(NodeType... types) { var active = true; for (var type : types) { - active &= tester.nodeRepository().list().nodeType(type).changingOsVersion().size() > 0; + active &= tester.nodeRepository().nodes().list().nodeType(type).changingOsVersion().size() > 0; } return active; } @@ -103,7 +103,7 @@ public class OsUpgradeActivatorTest { private Stream<Node> streamUpdatedNodes(List<Node> nodes) { Stream<Node> stream = Stream.empty(); for (var node : nodes) { - stream = Stream.concat(stream, tester.nodeRepository().getNode(node.hostname()).stream()); + stream = Stream.concat(stream, tester.nodeRepository().nodes().getNode(node.hostname()).stream()); } return stream; } diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/PeriodicApplicationMaintainerTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/PeriodicApplicationMaintainerTest.java index ae1e36d73dd..1f1e6a79317 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/PeriodicApplicationMaintainerTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/PeriodicApplicationMaintainerTest.java @@ -64,32 +64,32 @@ public class PeriodicApplicationMaintainerTest { fixture.setBootstrapping(false); // Fail and park some nodes - nodeRepository.fail(nodeRepository.getNodes(fixture.app1).get(3).hostname(), Agent.system, "Failing to unit test"); - nodeRepository.fail(nodeRepository.getNodes(fixture.app2).get(0).hostname(), Agent.system, "Failing to unit test"); - nodeRepository.park(nodeRepository.getNodes(fixture.app2).get(4).hostname(), true, Agent.system, "Parking to unit test"); + nodeRepository.nodes().fail(nodeRepository.nodes().getNodes(fixture.app1).get(3).hostname(), Agent.system, "Failing to unit test"); + nodeRepository.nodes().fail(nodeRepository.nodes().getNodes(fixture.app2).get(0).hostname(), Agent.system, "Failing to unit test"); + nodeRepository.nodes().park(nodeRepository.nodes().getNodes(fixture.app2).get(4).hostname(), true, Agent.system, "Parking to unit test"); int failedInApp1 = 1; int failedOrParkedInApp2 = 2; - assertEquals(fixture.wantedNodesApp1 - failedInApp1, nodeRepository.getNodes(fixture.app1, Node.State.active).size()); - assertEquals(fixture.wantedNodesApp2 - failedOrParkedInApp2, nodeRepository.getNodes(fixture.app2, Node.State.active).size()); - assertEquals(failedInApp1 + failedOrParkedInApp2, nodeRepository.getNodes(NodeType.tenant, Node.State.failed, Node.State.parked).size()); - assertEquals(3, nodeRepository.getNodes(NodeType.tenant, Node.State.ready).size()); - assertEquals(2, nodeRepository.getNodes(NodeType.host, Node.State.ready).size()); + assertEquals(fixture.wantedNodesApp1 - failedInApp1, nodeRepository.nodes().getNodes(fixture.app1, Node.State.active).size()); + assertEquals(fixture.wantedNodesApp2 - failedOrParkedInApp2, nodeRepository.nodes().getNodes(fixture.app2, Node.State.active).size()); + assertEquals(failedInApp1 + failedOrParkedInApp2, nodeRepository.nodes().getNodes(NodeType.tenant, Node.State.failed, Node.State.parked).size()); + assertEquals(3, nodeRepository.nodes().getNodes(NodeType.tenant, Node.State.ready).size()); + assertEquals(2, nodeRepository.nodes().getNodes(NodeType.host, Node.State.ready).size()); // Cause maintenance deployment which will allocate replacement nodes fixture.runApplicationMaintainer(); - assertEquals(fixture.wantedNodesApp1, nodeRepository.getNodes(fixture.app1, Node.State.active).size()); - assertEquals(fixture.wantedNodesApp2, nodeRepository.getNodes(fixture.app2, Node.State.active).size()); - assertEquals(0, nodeRepository.getNodes(NodeType.tenant, Node.State.ready).size()); + assertEquals(fixture.wantedNodesApp1, nodeRepository.nodes().getNodes(fixture.app1, Node.State.active).size()); + assertEquals(fixture.wantedNodesApp2, nodeRepository.nodes().getNodes(fixture.app2, Node.State.active).size()); + assertEquals(0, nodeRepository.nodes().getNodes(NodeType.tenant, Node.State.ready).size()); // Reactivate the previously failed nodes - nodeRepository.reactivate(nodeRepository.getNodes(NodeType.tenant, Node.State.failed).get(0).hostname(), Agent.system, getClass().getSimpleName()); - nodeRepository.reactivate(nodeRepository.getNodes(NodeType.tenant, Node.State.failed).get(0).hostname(), Agent.system, getClass().getSimpleName()); - nodeRepository.reactivate(nodeRepository.getNodes(NodeType.tenant, Node.State.parked).get(0).hostname(), Agent.system, getClass().getSimpleName()); + nodeRepository.nodes().reactivate(nodeRepository.nodes().getNodes(NodeType.tenant, Node.State.failed).get(0).hostname(), Agent.system, getClass().getSimpleName()); + nodeRepository.nodes().reactivate(nodeRepository.nodes().getNodes(NodeType.tenant, Node.State.failed).get(0).hostname(), Agent.system, getClass().getSimpleName()); + nodeRepository.nodes().reactivate(nodeRepository.nodes().getNodes(NodeType.tenant, Node.State.parked).get(0).hostname(), Agent.system, getClass().getSimpleName()); int reactivatedInApp1 = 1; int reactivatedInApp2 = 2; - assertEquals(0, nodeRepository.getNodes(NodeType.tenant, Node.State.failed).size()); - assertEquals(fixture.wantedNodesApp1 + reactivatedInApp1, nodeRepository.getNodes(fixture.app1, Node.State.active).size()); - assertEquals(fixture.wantedNodesApp2 + reactivatedInApp2, nodeRepository.getNodes(fixture.app2, Node.State.active).size()); + assertEquals(0, nodeRepository.nodes().getNodes(NodeType.tenant, Node.State.failed).size()); + assertEquals(fixture.wantedNodesApp1 + reactivatedInApp1, nodeRepository.nodes().getNodes(fixture.app1, Node.State.active).size()); + assertEquals(fixture.wantedNodesApp2 + reactivatedInApp2, nodeRepository.nodes().getNodes(fixture.app2, Node.State.active).size()); assertEquals("The reactivated nodes are now active but not part of the application", 0, fixture.getNodes(Node.State.active).retired().size()); @@ -108,17 +108,17 @@ public class PeriodicApplicationMaintainerTest { fixture.activate(); // Freeze active nodes to simulate an application being deleted during a maintenance run - List<Node> frozenActiveNodes = nodeRepository.getNodes(Node.State.active); + List<Node> frozenActiveNodes = nodeRepository.nodes().getNodes(Node.State.active); // Remove one application without letting the application maintainer know about it fixture.remove(fixture.app2); - assertEquals(fixture.wantedNodesApp2, nodeRepository.getNodes(fixture.app2, Node.State.inactive).size()); + assertEquals(fixture.wantedNodesApp2, nodeRepository.nodes().getNodes(fixture.app2, Node.State.inactive).size()); // Nodes belonging to app2 are inactive after maintenance fixture.maintainer.setOverriddenNodesNeedingMaintenance(frozenActiveNodes); fixture.runApplicationMaintainer(); assertEquals("Inactive nodes were incorrectly activated after maintenance", fixture.wantedNodesApp2, - nodeRepository.getNodes(fixture.app2, Node.State.inactive).size()); + nodeRepository.nodes().getNodes(fixture.app2, Node.State.inactive).size()); } @Test(timeout = 60_000) @@ -232,8 +232,8 @@ public class PeriodicApplicationMaintainerTest { void activate() { deployer.deployFromLocalActive(app1, false).get().activate(); deployer.deployFromLocalActive(app2, false).get().activate(); - assertEquals(wantedNodesApp1, nodeRepository.getNodes(app1, Node.State.active).size()); - assertEquals(wantedNodesApp2, nodeRepository.getNodes(app2, Node.State.active).size()); + assertEquals(wantedNodesApp1, nodeRepository.nodes().getNodes(app1, Node.State.active).size()); + assertEquals(wantedNodesApp2, nodeRepository.nodes().getNodes(app2, Node.State.active).size()); } void remove(ApplicationId application) { @@ -250,7 +250,7 @@ public class PeriodicApplicationMaintainerTest { } NodeList getNodes(Node.State ... states) { - return NodeList.copyOf(nodeRepository.getNodes(NodeType.tenant, states)); + return NodeList.copyOf(nodeRepository.nodes().getNodes(NodeType.tenant, states)); } void setBootstrapping(boolean bootstrapping) { diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/RebalancerTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/RebalancerTest.java index 21003324696..bc2676c0acf 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/RebalancerTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/RebalancerTest.java @@ -68,7 +68,7 @@ public class RebalancerTest { // --- Deploying a mem heavy application - allocated to the best option and causing increased skew tester.deployApp(memoryApp); assertEquals("Assigned to a flat node as that causes least skew", "flat", - tester.nodeRepository().list().parentOf(tester.getNode(memoryApp)).get().flavor().name()); + tester.nodeRepository().nodes().list().parentOf(tester.getNode(memoryApp)).get().flavor().name()); tester.maintain(); assertEquals("Deploying the mem skewed app increased skew", 0.00734, tester.metric().values.get("hostedVespa.docker.skew").doubleValue(), 0.00001); @@ -83,8 +83,8 @@ public class RebalancerTest { // --- Making the system stable enables rebalancing NestedTransaction tx = new NestedTransaction(); - tester.nodeRepository().deactivate(List.of(cpuSkewedNode), - new ApplicationTransaction(new ProvisionLock(cpuApp, () -> {}), tx)); + tester.nodeRepository().nodes().deactivate(List.of(cpuSkewedNode), + new ApplicationTransaction(new ProvisionLock(cpuApp, () -> {}), tx)); tx.commit(); // ... if activation fails when trying, we clean up the state @@ -93,8 +93,8 @@ public class RebalancerTest { assertTrue("Want to retire is reset", tester.getNodes(Node.State.active).stream().noneMatch(node -> node.status().wantToRetire())); assertEquals("Reserved node was moved to dirty", 1, tester.getNodes(Node.State.dirty).size()); String reservedHostname = tester.getNodes(Node.State.dirty).get(0).hostname(); - tester.nodeRepository().setReady(reservedHostname, Agent.system, "Cleanup"); - tester.nodeRepository().removeRecursively(reservedHostname); + tester.nodeRepository().nodes().setReady(reservedHostname, Agent.system, "Cleanup"); + tester.nodeRepository().nodes().removeRecursively(reservedHostname); // ... otherwise we successfully rebalance, again reducing skew tester.deployer().setFailActivate(false); @@ -176,18 +176,18 @@ public class RebalancerTest { } List<Node> getNodes(ApplicationId applicationId, Node.State nodeState) { - return tester.nodeRepository().getNodes(applicationId, nodeState); + return tester.nodeRepository().nodes().getNodes(applicationId, nodeState); } boolean isNodeRetired(Node node) { return getNode(node.hostname()).get().allocation().get().membership().retired(); } - Optional<Node> getNode(String hostname) { return tester.nodeRepository().getNode(hostname); } + Optional<Node> getNode(String hostname) { return tester.nodeRepository().nodes().getNode(hostname); } - List<Node> getNodes(Node.State nodeState) { return tester.nodeRepository().getNodes(nodeState); } + List<Node> getNodes(Node.State nodeState) { return tester.nodeRepository().nodes().getNodes(nodeState); } - Node getNode(ApplicationId applicationId) { return tester.nodeRepository().getNodes(applicationId).get(0); } + Node getNode(ApplicationId applicationId) { return tester.nodeRepository().nodes().getNodes(applicationId).get(0); } ManualClock clock() { return tester.clock(); } diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/ReservationExpirerTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/ReservationExpirerTest.java index 4d29343214e..5b67c7bc358 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/ReservationExpirerTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/ReservationExpirerTest.java @@ -40,19 +40,19 @@ public class ReservationExpirerTest { tester.makeReadyHosts(1, hostResources); // Reserve 2 nodes - assertEquals(2, nodeRepository.getNodes(NodeType.tenant, Node.State.ready).size()); + assertEquals(2, nodeRepository.nodes().getNodes(NodeType.tenant, Node.State.ready).size()); ApplicationId applicationId = new ApplicationId.Builder().tenant("foo").applicationName("bar").instanceName("fuz").build(); ClusterSpec cluster = ClusterSpec.request(ClusterSpec.Type.content, ClusterSpec.Id.from("test")).vespaVersion("6.42").build(); tester.provisioner().prepare(applicationId, cluster, Capacity.from(new ClusterResources(2, 1, nodeResources)), null); - assertEquals(2, nodeRepository.getNodes(NodeType.tenant, Node.State.reserved).size()); + assertEquals(2, nodeRepository.nodes().getNodes(NodeType.tenant, Node.State.reserved).size()); // Reservation times out clock.advance(Duration.ofMinutes(14)); // Reserved but not used time out new ReservationExpirer(nodeRepository, Duration.ofMinutes(10), metric).run(); // Assert nothing is reserved - assertEquals(0, nodeRepository.getNodes(NodeType.tenant, Node.State.reserved).size()); - List<Node> dirty = nodeRepository.getNodes(NodeType.tenant, Node.State.dirty); + assertEquals(0, nodeRepository.nodes().getNodes(NodeType.tenant, Node.State.reserved).size()); + List<Node> dirty = nodeRepository.nodes().getNodes(NodeType.tenant, Node.State.dirty); assertEquals(2, dirty.size()); assertFalse(dirty.get(0).allocation().isPresent()); assertFalse(dirty.get(1).allocation().isPresent()); diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/RetiredExpirerTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/RetiredExpirerTest.java index 952f52c44e0..fa492c3a3e9 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/RetiredExpirerTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/RetiredExpirerTest.java @@ -71,8 +71,8 @@ public class RetiredExpirerTest { activate(applicationId, cluster, wantedNodes=7, 1); activate(applicationId, cluster, wantedNodes=2, 1); activate(applicationId, cluster, wantedNodes=3, 1); - assertEquals(7, nodeRepository.getNodes(applicationId, Node.State.active).size()); - assertEquals(0, nodeRepository.getNodes(applicationId, Node.State.inactive).size()); + assertEquals(7, nodeRepository.nodes().getNodes(applicationId, Node.State.active).size()); + assertEquals(0, nodeRepository.nodes().getNodes(applicationId, Node.State.inactive).size()); // Cause inactivation of retired nodes clock.advance(Duration.ofHours(30)); // Retire period spent @@ -83,12 +83,12 @@ public class RetiredExpirerTest { cluster, Capacity.from(new ClusterResources(wantedNodes, 1, nodeResources))))); createRetiredExpirer(deployer).run(); - assertEquals(3, nodeRepository.getNodes(applicationId, Node.State.active).size()); - assertEquals(4, nodeRepository.getNodes(applicationId, Node.State.inactive).size()); + assertEquals(3, nodeRepository.nodes().getNodes(applicationId, Node.State.active).size()); + assertEquals(4, nodeRepository.nodes().getNodes(applicationId, Node.State.inactive).size()); assertEquals(1, deployer.redeployments); // inactivated nodes are not retired - for (Node node : nodeRepository.getNodes(applicationId, Node.State.inactive)) + for (Node node : nodeRepository.nodes().getNodes(applicationId, Node.State.inactive)) assertFalse(node.allocation().get().membership().retired()); } @@ -106,8 +106,8 @@ public class RetiredExpirerTest { activate(applicationId, cluster, wantedNodes=7, 1); activate(applicationId, cluster, wantedNodes=2, 1); activate(applicationId, cluster, wantedNodes=3, 1); - assertEquals(7, nodeRepository.getNodes(applicationId, Node.State.active).size()); - assertEquals(0, nodeRepository.getNodes(applicationId, Node.State.inactive).size()); + assertEquals(7, nodeRepository.nodes().getNodes(applicationId, Node.State.active).size()); + assertEquals(0, nodeRepository.nodes().getNodes(applicationId, Node.State.inactive).size()); // Cause inactivation of retired nodes MockDeployer deployer = @@ -128,27 +128,27 @@ public class RetiredExpirerTest { RetiredExpirer retiredExpirer = createRetiredExpirer(deployer); retiredExpirer.run(); - assertEquals(5, nodeRepository.getNodes(applicationId, Node.State.active).size()); - assertEquals(2, nodeRepository.getNodes(applicationId, Node.State.inactive).size()); + assertEquals(5, nodeRepository.nodes().getNodes(applicationId, Node.State.active).size()); + assertEquals(2, nodeRepository.nodes().getNodes(applicationId, Node.State.inactive).size()); assertEquals(1, deployer.redeployments); verify(orchestrator, times(4)).acquirePermissionToRemove(any()); // Running it again has no effect retiredExpirer.run(); - assertEquals(5, nodeRepository.getNodes(applicationId, Node.State.active).size()); - assertEquals(2, nodeRepository.getNodes(applicationId, Node.State.inactive).size()); + assertEquals(5, nodeRepository.nodes().getNodes(applicationId, Node.State.active).size()); + assertEquals(2, nodeRepository.nodes().getNodes(applicationId, Node.State.inactive).size()); assertEquals(1, deployer.redeployments); verify(orchestrator, times(6)).acquirePermissionToRemove(any()); clock.advance(RETIRED_EXPIRATION.plusMinutes(1)); retiredExpirer.run(); - assertEquals(3, nodeRepository.getNodes(applicationId, Node.State.active).size()); - assertEquals(4, nodeRepository.getNodes(applicationId, Node.State.inactive).size()); + assertEquals(3, nodeRepository.nodes().getNodes(applicationId, Node.State.active).size()); + assertEquals(4, nodeRepository.nodes().getNodes(applicationId, Node.State.inactive).size()); assertEquals(2, deployer.redeployments); verify(orchestrator, times(6)).acquirePermissionToRemove(any()); // inactivated nodes are not retired - for (Node node : nodeRepository.getNodes(applicationId, Node.State.inactive)) + for (Node node : nodeRepository.nodes().getNodes(applicationId, Node.State.inactive)) assertFalse(node.allocation().get().membership().retired()); } diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/ScalingSuggestionsMaintainerTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/ScalingSuggestionsMaintainerTest.java index aac9122f8ab..4d334147212 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/ScalingSuggestionsMaintainerTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/ScalingSuggestionsMaintainerTest.java @@ -114,14 +114,14 @@ public class ScalingSuggestionsMaintainerTest { } private boolean shouldSuggest(ApplicationId app, ClusterSpec cluster, ProvisioningTester tester) { - var currentResources = tester.nodeRepository().list(app).cluster(cluster.id()).not().retired().toResources(); + var currentResources = tester.nodeRepository().nodes().list(app).cluster(cluster.id()).not().retired().toResources(); return tester.nodeRepository().applications().get(app).get().cluster(cluster.id()).get() .shouldSuggestResources(currentResources); } public void addMeasurements(float cpu, float memory, float disk, int generation, int count, ApplicationId applicationId, NodeRepository nodeRepository, MetricsDb db) { - List<Node> nodes = nodeRepository.getNodes(applicationId, Node.State.active); + List<Node> nodes = nodeRepository.nodes().getNodes(applicationId, Node.State.active); for (int i = 0; i < count; i++) { for (Node node : nodes) db.add(List.of(new Pair<>(node.hostname(), new MetricSnapshot(nodeRepository.clock().instant(), diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/SpareCapacityMaintainerTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/SpareCapacityMaintainerTest.java index e276ea22ea2..1c7b24ba783 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/SpareCapacityMaintainerTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/SpareCapacityMaintainerTest.java @@ -47,7 +47,7 @@ public class SpareCapacityMaintainerTest { var tester = new SpareCapacityMaintainerTester(); tester.maintainer.maintain(); assertEquals(0, tester.deployer.redeployments); - assertEquals(0, tester.nodeRepository.list().retired().size()); + assertEquals(0, tester.nodeRepository.nodes().list().retired().size()); } @Test @@ -57,7 +57,7 @@ public class SpareCapacityMaintainerTest { tester.addNodes(0, 1, new NodeResources(10, 100, 1000, 1), 0); tester.maintainer.maintain(); assertEquals(0, tester.deployer.redeployments); - assertEquals(0, tester.nodeRepository.list().retired().size()); + assertEquals(0, tester.nodeRepository.nodes().list().retired().size()); assertEquals(1, tester.metric.values.get("spareHostCapacity")); } @@ -68,7 +68,7 @@ public class SpareCapacityMaintainerTest { tester.addNodes(0, 1, new NodeResources(10, 100, 1000, 1), 0); tester.maintainer.maintain(); assertEquals(0, tester.deployer.redeployments); - assertEquals(0, tester.nodeRepository.list().retired().size()); + assertEquals(0, tester.nodeRepository.nodes().list().retired().size()); assertEquals(2, tester.metric.values.get("spareHostCapacity")); } @@ -79,7 +79,7 @@ public class SpareCapacityMaintainerTest { tester.addNodes(0, 2, new NodeResources(10, 100, 1000, 1), 0); tester.maintainer.maintain(); assertEquals(0, tester.deployer.redeployments); - assertEquals(0, tester.nodeRepository.list().retired().size()); + assertEquals(0, tester.nodeRepository.nodes().list().retired().size()); assertEquals(0, tester.metric.values.get("spareHostCapacity")); } @@ -91,7 +91,7 @@ public class SpareCapacityMaintainerTest { tester.addNodes(1, 2, new NodeResources(5, 50, 500, 0.5), 2); tester.maintainer.maintain(); assertEquals(0, tester.deployer.redeployments); - assertEquals(0, tester.nodeRepository.list().retired().size()); + assertEquals(0, tester.nodeRepository.nodes().list().retired().size()); assertEquals(2, tester.metric.values.get("spareHostCapacity")); } @@ -105,13 +105,13 @@ public class SpareCapacityMaintainerTest { tester.addNodes(2, 2, new NodeResources(5, 50, 500, 0.5), 4); tester.maintainer.maintain(); assertEquals(1, tester.deployer.redeployments); - assertEquals(1, tester.nodeRepository.list().retired().size()); + assertEquals(1, tester.nodeRepository.nodes().list().retired().size()); assertEquals(1, tester.metric.values.get("spareHostCapacity")); // Maintaining again is a no-op since the node to move is already retired tester.maintainer.maintain(); assertEquals(1, tester.deployer.redeployments); - assertEquals(1, tester.nodeRepository.list().retired().size()); + assertEquals(1, tester.nodeRepository.nodes().list().retired().size()); assertEquals(1, tester.metric.values.get("spareHostCapacity")); } @@ -128,7 +128,7 @@ public class SpareCapacityMaintainerTest { tester.addNodes(3, 2, new NodeResources(5, 50, 500, 0.5), 6); tester.maintainer.maintain(); assertEquals(1, tester.deployer.redeployments); - assertEquals(1, tester.nodeRepository.list().retired().size()); + assertEquals(1, tester.nodeRepository.nodes().list().retired().size()); assertEquals(1, tester.metric.values.get("spareHostCapacity")); } @@ -141,7 +141,7 @@ public class SpareCapacityMaintainerTest { tester.maintainer.maintain(); assertEquals(1, tester.deployer.redeployments); - assertEquals(1, tester.nodeRepository.list().retired().size()); + assertEquals(1, tester.nodeRepository.nodes().list().retired().size()); assertEquals(1, tester.metric.values.get("spareHostCapacity")); } @@ -152,7 +152,7 @@ public class SpareCapacityMaintainerTest { tester.maintainer.maintain(); assertEquals(0, tester.deployer.redeployments); - assertEquals(0, tester.nodeRepository.list().retired().size()); + assertEquals(0, tester.nodeRepository.nodes().list().retired().size()); assertEquals(0, tester.metric.values.get("spareHostCapacity")); } @@ -195,7 +195,7 @@ public class SpareCapacityMaintainerTest { tester.maintainer.maintain(); assertEquals(0, tester.deployer.redeployments); - assertEquals(0, tester.nodeRepository.list().retired().size()); + assertEquals(0, tester.nodeRepository.nodes().list().retired().size()); assertEquals(0, tester.metric.values.get("spareHostCapacity")); } @@ -212,7 +212,7 @@ public class SpareCapacityMaintainerTest { tester.maintainer.maintain(); assertEquals(2, tester.metric.values.get("overcommittedHosts")); assertEquals(1, tester.deployer.redeployments); - assertEquals(List.of(new NodeResources( 1.1, 10, 100, 0.1)), tester.nodeRepository.list().retired().mapToList(Node::resources)); + assertEquals(List.of(new NodeResources( 1.1, 10, 100, 0.1)), tester.nodeRepository.nodes().list().retired().mapToList(Node::resources)); } /** Microbenchmark */ @@ -235,7 +235,7 @@ public class SpareCapacityMaintainerTest { long totalTime = System.currentTimeMillis() - startTime; System.out.println("Complete in " + ( totalTime / 1000) + " seconds"); assertEquals(0, tester.deployer.redeployments); - assertEquals(0, tester.nodeRepository.list().retired().size()); + assertEquals(0, tester.nodeRepository.nodes().list().retired().size()); assertEquals(0, tester.metric.values.get("spareHostCapacity")); } @@ -304,16 +304,16 @@ public class SpareCapacityMaintainerTest { } private void allocate(ApplicationId application, ClusterSpec clusterSpec, List<Node> nodes) { - nodes = nodeRepository.addNodes(nodes, Agent.system); + nodes = nodeRepository.nodes().addNodes(nodes, Agent.system); for (int i = 0; i < nodes.size(); i++) { Node node = nodes.get(i); ClusterMembership membership = ClusterMembership.from(clusterSpec, i); node = node.allocate(application, membership, node.resources(), Instant.now()); nodes.set(i, node); } - nodes = nodeRepository.reserve(nodes); + nodes = nodeRepository.nodes().reserve(nodes); var transaction = new NestedTransaction(); - nodes = nodeRepository.activate(nodes, transaction); + nodes = nodeRepository.nodes().activate(nodes, transaction); transaction.commit(); } @@ -326,9 +326,9 @@ public class SpareCapacityMaintainerTest { } private void dumpState() { - for (Node host : nodeRepository.list().hosts().asList()) { + for (Node host : nodeRepository.nodes().list().hosts().asList()) { System.out.println("Host " + host.hostname() + " " + host.resources()); - for (Node node : nodeRepository.list().childrenOf(host).asList()) + for (Node node : nodeRepository.nodes().list().childrenOf(host).asList()) System.out.println(" Node " + node.hostname() + " " + node.resources() + " allocation " +node.allocation()); } } diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/SwitchRebalancerTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/SwitchRebalancerTest.java index a44f566d380..9109d992f4a 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/SwitchRebalancerTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/SwitchRebalancerTest.java @@ -80,7 +80,7 @@ public class SwitchRebalancerTest { for (var cluster : List.of(cluster1, cluster2)) { tester.clock().advance(SwitchRebalancer.waitTimeAfterPreviousDeployment); rebalancer.maintain(); - NodeList allNodes = tester.nodeRepository().list(); + NodeList allNodes = tester.nodeRepository().nodes().list(); NodeList clusterNodes = allNodes.owner(app).cluster(cluster).state(Node.State.active); NodeList retired = clusterNodes.retired(); assertEquals("Node is retired in " + cluster, 1, retired.size()); @@ -90,7 +90,7 @@ public class SwitchRebalancerTest { // Retired node becomes inactive and makes zone stable try (var lock = tester.provisioner().lock(app)) { NestedTransaction removeTransaction = new NestedTransaction(); - tester.nodeRepository().deactivate(retired.asList(), new ApplicationTransaction(lock, removeTransaction)); + tester.nodeRepository().nodes().deactivate(retired.asList(), new ApplicationTransaction(lock, removeTransaction)); removeTransaction.commit(); } } @@ -134,7 +134,7 @@ public class SwitchRebalancerTest { // Rebalance tester.clock().advance(SwitchRebalancer.waitTimeAfterPreviousDeployment); rebalancer.maintain(); - NodeList activeNodes = tester.nodeRepository().list().owner(app).cluster(spec.id()).state(Node.State.active); + NodeList activeNodes = tester.nodeRepository().nodes().list().owner(app).cluster(spec.id()).state(Node.State.active); NodeList retired = activeNodes.retired(); assertEquals("Node is retired", 1, retired.size()); assertFalse("Retired node was not on exclusive switch", nodesOnExclusiveSwitch.contains(retired.first().get())); @@ -142,7 +142,7 @@ public class SwitchRebalancerTest { // Retired node becomes inactive and makes zone stable try (var lock = tester.provisioner().lock(app)) { NestedTransaction removeTransaction = new NestedTransaction(); - tester.nodeRepository().deactivate(retired.asList(), new ApplicationTransaction(lock, removeTransaction)); + tester.nodeRepository().nodes().deactivate(retired.asList(), new ApplicationTransaction(lock, removeTransaction)); removeTransaction.commit(); } @@ -152,9 +152,9 @@ public class SwitchRebalancerTest { } private void assertNoMoves(SwitchRebalancer rebalancer, ProvisioningTester tester) { - NodeList nodes0 = tester.nodeRepository().list(Node.State.active).owner(app); + NodeList nodes0 = tester.nodeRepository().nodes().list(Node.State.active).owner(app); rebalancer.maintain(); - NodeList nodes1 = tester.nodeRepository().list(Node.State.active).owner(app); + NodeList nodes1 = tester.nodeRepository().nodes().list(Node.State.active).owner(app); assertEquals("Node allocation is unchanged", nodes0.asList(), nodes1.asList()); assertEquals("No nodes are retired", List.of(), nodes1.retired().asList()); } 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 c40f265db51..7005a64127a 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 @@ -40,7 +40,7 @@ public class OsVersionsTest { public void upgrade() { var versions = new OsVersions(tester.nodeRepository(), new DelegatingUpgrader(tester.nodeRepository(), Integer.MAX_VALUE)); provisionInfraApplication(10); - Supplier<List<Node>> hostNodes = () -> tester.nodeRepository().getNodes(NodeType.host); + Supplier<List<Node>> hostNodes = () -> tester.nodeRepository().nodes().getNodes(NodeType.host); // Upgrade OS assertTrue("No versions set", versions.readChange().targets().isEmpty()); @@ -94,7 +94,7 @@ public class OsVersionsTest { int maxActiveUpgrades = 5; var versions = new OsVersions(tester.nodeRepository(), new DelegatingUpgrader(tester.nodeRepository(), maxActiveUpgrades)); provisionInfraApplication(totalNodes); - Supplier<NodeList> hostNodes = () -> tester.nodeRepository().list().state(Node.State.active).hosts(); + Supplier<NodeList> hostNodes = () -> tester.nodeRepository().nodes().list().state(Node.State.active).hosts(); // 5 nodes have no version. The other 15 are spread across different versions var hostNodesList = hostNodes.get().asList(); @@ -104,10 +104,10 @@ public class OsVersionsTest { // Deprovisioned hosts are not considered for (var host : tester.makeReadyNodes(10, "default", NodeType.host)) { - tester.nodeRepository().fail(host.hostname(), Agent.system, OsVersions.class.getSimpleName()); - tester.nodeRepository().removeRecursively(host.hostname()); + tester.nodeRepository().nodes().fail(host.hostname(), Agent.system, OsVersions.class.getSimpleName()); + tester.nodeRepository().nodes().removeRecursively(host.hostname()); } - assertEquals(10, tester.nodeRepository().getNodes(Node.State.deprovisioned).size()); + assertEquals(10, tester.nodeRepository().nodes().getNodes(Node.State.deprovisioned).size()); // Set target var version1 = Version.fromString("7.1"); @@ -140,7 +140,7 @@ public class OsVersionsTest { public void newer_upgrade_aborts_upgrade_to_stale_version() { var versions = new OsVersions(tester.nodeRepository(), new DelegatingUpgrader(tester.nodeRepository(), Integer.MAX_VALUE)); provisionInfraApplication(10); - Supplier<NodeList> hostNodes = () -> tester.nodeRepository().list().hosts(); + Supplier<NodeList> hostNodes = () -> tester.nodeRepository().nodes().list().hosts(); // Some nodes are targeting an older version var version1 = Version.fromString("7.1"); @@ -166,7 +166,7 @@ public class OsVersionsTest { for (var host : hosts) { tester.makeReadyVirtualDockerNodes(2, resources, host.hostname()); } - Supplier<NodeList> hostNodes = () -> tester.nodeRepository().list() + Supplier<NodeList> hostNodes = () -> tester.nodeRepository().nodes().list() .hosts() .not().state(Node.State.deprovisioned); @@ -206,7 +206,7 @@ public class OsVersionsTest { // All hosts upgraded and none are deprovisioning assertEquals(hostCount, hostNodes.get().onOsVersion(version1).not().deprovisioning().size()); - assertEquals(hostCount, tester.nodeRepository().list().state(Node.State.deprovisioned).size()); + assertEquals(hostCount, tester.nodeRepository().nodes().list().state(Node.State.deprovisioned).size()); var lastRetiredAt = clock.instant().truncatedTo(ChronoUnit.MILLIS); // Resuming after everything has upgraded does nothing @@ -225,7 +225,7 @@ public class OsVersionsTest { var versions = new OsVersions(tester.nodeRepository(), new RetiringUpgrader(tester.nodeRepository())); int hostCount = 3; provisionInfraApplication(hostCount, NodeType.confighost); - Supplier<NodeList> hostNodes = () -> tester.nodeRepository().list() + Supplier<NodeList> hostNodes = () -> tester.nodeRepository().nodes().list() .nodeType(NodeType.confighost) .not().state(Node.State.deprovisioned); @@ -244,7 +244,7 @@ public class OsVersionsTest { } private NodeList retiringChildrenOf(Node parent) { - return tester.nodeRepository().list().childrenOf(parent).matching(child -> child.status().wantToRetire()); + return tester.nodeRepository().nodes().list().childrenOf(parent).matching(child -> child.status().wantToRetire()); } private List<Node> provisionInfraApplication(int nodeCount) { @@ -256,7 +256,7 @@ public class OsVersionsTest { tester.prepareAndActivateInfraApplication(infraApplication, nodeType); return nodes.stream() .map(Node::hostname) - .flatMap(hostname -> tester.nodeRepository().getNode(hostname).stream()) + .flatMap(hostname -> tester.nodeRepository().nodes().getNode(hostname).stream()) .collect(Collectors.toList()); } @@ -289,9 +289,9 @@ public class OsVersionsTest { Optional<Version> wantedOsVersion = node.status().osVersion().wanted(); if (node.status().wantToDeprovision()) { // Complete upgrade by deprovisioning stale hosts and provisioning new ones - tester.nodeRepository().park(node.hostname(), false, Agent.system, - OsVersionsTest.class.getSimpleName()); - tester.nodeRepository().removeRecursively(node.hostname()); + tester.nodeRepository().nodes().park(node.hostname(), false, Agent.system, + OsVersionsTest.class.getSimpleName()); + tester.nodeRepository().nodes().removeRecursively(node.hostname()); node = provisionInfraApplication(1, nodeType).get(0); } return node.with(node.status().withOsVersion(node.status().osVersion().withCurrent(wantedOsVersion))); 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 7ef13cc0be2..23a8af045af 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 @@ -51,8 +51,8 @@ public class AclProvisioningTest { // Get trusted nodes for the first active node Node node = activeNodes.get(0); - List<Node> host = node.parentHostname().flatMap(tester.nodeRepository()::getNode).map(List::of).orElseGet(List::of); - Supplier<NodeAcl> nodeAcls = () -> node.acl(tester.nodeRepository().list(), tester.nodeRepository().loadBalancers()); + List<Node> host = node.parentHostname().flatMap(tester.nodeRepository().nodes()::getNode).map(List::of).orElseGet(List::of); + Supplier<NodeAcl> nodeAcls = () -> node.acl(tester.nodeRepository().nodes().list(), tester.nodeRepository().loadBalancers()); // Trusted nodes are active nodes in same application, proxy nodes and config servers assertAcls(List.of(activeNodes, proxyNodes, configServers, host), @@ -72,9 +72,9 @@ public class AclProvisioningTest { deploy(2); // Get trusted nodes for a ready tenant node - Node node = tester.nodeRepository().getNodes(NodeType.tenant, Node.State.ready).get(0); - NodeAcl nodeAcl = node.acl(tester.nodeRepository().list(), tester.nodeRepository().loadBalancers()); - List<Node> tenantNodes = tester.nodeRepository().getNodes(NodeType.tenant); + Node node = tester.nodeRepository().nodes().getNodes(NodeType.tenant, Node.State.ready).get(0); + NodeAcl nodeAcl = node.acl(tester.nodeRepository().nodes().list(), tester.nodeRepository().loadBalancers()); + List<Node> tenantNodes = tester.nodeRepository().nodes().getNodes(NodeType.tenant); // Trusted nodes are all proxy-, config-, and, tenant-nodes assertAcls(List.of(proxyNodes, configServers, tenantNodes), List.of(nodeAcl)); @@ -90,12 +90,12 @@ public class AclProvisioningTest { // Allocate 2 nodes deploy(4); - List<Node> tenantNodes = tester.nodeRepository().getNodes(NodeType.tenant); + List<Node> tenantNodes = tester.nodeRepository().nodes().getNodes(NodeType.tenant); // Get trusted nodes for the first config server - Node node = tester.nodeRepository().getNode("cfg1") + Node node = tester.nodeRepository().nodes().getNode("cfg1") .orElseThrow(() -> new RuntimeException("Failed to find cfg1")); - NodeAcl nodeAcl = node.acl(tester.nodeRepository().list(), tester.nodeRepository().loadBalancers()); + NodeAcl nodeAcl = node.acl(tester.nodeRepository().nodes().list(), tester.nodeRepository().loadBalancers()); // Trusted nodes is all tenant nodes, all proxy nodes, all config servers and load balancer subnets assertAcls(List.of(tenantNodes, proxyNodes, configServers), Set.of("10.2.3.0/24", "10.4.5.0/24"), List.of(nodeAcl)); @@ -114,9 +114,9 @@ public class AclProvisioningTest { tester.deploy(zoneApplication, Capacity.fromRequiredNodeType(NodeType.proxy)); // Get trusted nodes for first proxy node - List<Node> proxyNodes = tester.nodeRepository().getNodes(zoneApplication); + List<Node> proxyNodes = tester.nodeRepository().nodes().getNodes(zoneApplication); Node node = proxyNodes.get(0); - NodeAcl nodeAcl = node.acl(tester.nodeRepository().list(), tester.nodeRepository().loadBalancers()); + NodeAcl nodeAcl = node.acl(tester.nodeRepository().nodes().list(), tester.nodeRepository().loadBalancers()); // Trusted nodes is all config servers and all proxy nodes assertAcls(List.of(proxyNodes, configServers), List.of(nodeAcl)); @@ -156,7 +156,7 @@ public class AclProvisioningTest { List<Node> controllers = tester.deploy(controllerApplication, Capacity.fromRequiredNodeType(NodeType.controller)); // Controllers and hosts all trust each other - NodeAcl controllerAcl = controllers.get(0).acl(tester.nodeRepository().list(), tester.nodeRepository().loadBalancers()); + NodeAcl controllerAcl = controllers.get(0).acl(tester.nodeRepository().nodes().list(), tester.nodeRepository().loadBalancers()); assertAcls(List.of(controllers), List.of(controllerAcl)); assertEquals(Set.of(22, 4443, 443), controllerAcl.trustedPorts()); } @@ -197,7 +197,7 @@ public class AclProvisioningTest { tester.makeConfigServers(3, "default", Version.fromString("6.123.456")); List<Node> readyNodes = tester.makeReadyNodes(1, "default", NodeType.proxy); - NodeAcl nodeAcl = readyNodes.get(0).acl(tester.nodeRepository().list(), tester.nodeRepository().loadBalancers()); + NodeAcl nodeAcl = readyNodes.get(0).acl(tester.nodeRepository().nodes().list(), tester.nodeRepository().loadBalancers()); assertEquals(3, nodeAcl.trustedNodes().size()); Iterator<Node> trustedNodes = nodeAcl.trustedNodes().iterator(); diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/DockerProvisioningTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/DockerProvisioningTest.java index ef0e6d4ddc4..02ee41a5226 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/DockerProvisioningTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/DockerProvisioningTest.java @@ -365,8 +365,8 @@ public class DockerProvisioningTest { tester.activate(app1, cluster1, Capacity.from(new ClusterResources(5, 1, r))); tester.activate(app1, cluster1, Capacity.from(new ClusterResources(2, 1, r))); - var tx = new ApplicationTransaction(new ProvisionLock(app1, tester.nodeRepository().lock(app1)), new NestedTransaction()); - tester.nodeRepository().deactivate(tester.nodeRepository().list(app1, Node.State.active).retired().asList(), tx); + var tx = new ApplicationTransaction(new ProvisionLock(app1, tester.nodeRepository().nodes().lock(app1)), new NestedTransaction()); + tester.nodeRepository().nodes().deactivate(tester.nodeRepository().nodes().list(app1, Node.State.active).retired().asList(), tx); tx.nested().commit(); assertEquals(2, tester.getNodes(app1, Node.State.active).size()); @@ -403,7 +403,7 @@ public class DockerProvisioningTest { tester.activate(app1, cluster1, Capacity.from(new ClusterResources(2, 1, r))); // Deactivate any retired nodes - usually done by the RetiredExpirer - tester.nodeRepository().setRemovable(app1, tester.getNodes(app1).retired().asList()); + tester.nodeRepository().nodes().setRemovable(app1, tester.getNodes(app1).retired().asList()); tester.activate(app1, cluster1, Capacity.from(new ClusterResources(2, 1, r))); if (expectedReuse) { @@ -413,8 +413,8 @@ public class DockerProvisioningTest { } else { assertEquals(0, tester.getNodes(app1, Node.State.inactive).size()); - assertEquals(2, tester.nodeRepository().getNodes(Node.State.dirty).size()); - tester.nodeRepository().setReady(tester.nodeRepository().getNodes(Node.State.dirty), Agent.system, "test"); + assertEquals(2, tester.nodeRepository().nodes().getNodes(Node.State.dirty).size()); + tester.nodeRepository().nodes().setReady(tester.nodeRepository().nodes().getNodes(Node.State.dirty), Agent.system, "test"); tester.activate(app1, cluster1, Capacity.from(new ClusterResources(4, 1, r))); } @@ -434,13 +434,13 @@ public class DockerProvisioningTest { private void assertNodeParentReservation(List<Node> nodes, Optional<TenantName> reservation, ProvisioningTester tester) { for (Node node : nodes) - assertEquals(reservation, tester.nodeRepository().getNode(node.parentHostname().get()).get().reservedTo()); + assertEquals(reservation, tester.nodeRepository().nodes().getNode(node.parentHostname().get()).get().reservedTo()); } private void assertHostSpecParentReservation(List<HostSpec> hostSpecs, Optional<TenantName> reservation, ProvisioningTester tester) { for (HostSpec hostSpec : hostSpecs) { - Node node = tester.nodeRepository().getNode(hostSpec.hostname()).get(); - assertEquals(reservation, tester.nodeRepository().getNode(node.parentHostname().get()).get().reservedTo()); + Node node = tester.nodeRepository().nodes().getNode(hostSpec.hostname()).get(); + assertEquals(reservation, tester.nodeRepository().nodes().getNode(node.parentHostname().get()).get().reservedTo()); } } diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/DynamicDockerAllocationTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/DynamicDockerAllocationTest.java index 3c6e39702e4..0c8e19e0793 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/DynamicDockerAllocationTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/DynamicDockerAllocationTest.java @@ -69,7 +69,7 @@ public class DynamicDockerAllocationTest { .build(); tester.makeReadyNodes(4, "host-small", NodeType.host, 32); tester.activateTenantHosts(); - List<Node> dockerHosts = tester.nodeRepository().getNodes(NodeType.host, State.active); + List<Node> dockerHosts = tester.nodeRepository().nodes().getNodes(NodeType.host, State.active); NodeResources flavor = new NodeResources(1, 4, 100, 1); // Application 1 @@ -90,7 +90,7 @@ public class DynamicDockerAllocationTest { // Assert that we have two spare nodes (two hosts that are don't have allocations) Set<String> hostsWithChildren = new HashSet<>(); - for (Node node : tester.nodeRepository().list(State.active).nodeType(NodeType.tenant).not().state(State.inactive).not().retired()) { + for (Node node : tester.nodeRepository().nodes().list(State.active).nodeType(NodeType.tenant).not().state(State.inactive).not().retired()) { hostsWithChildren.add(node.parentHostname().get()); } assertEquals(4 - spareCount, hostsWithChildren.size()); @@ -110,7 +110,7 @@ public class DynamicDockerAllocationTest { ProvisioningTester tester = new ProvisioningTester.Builder().zone(new Zone(Environment.prod, RegionName.from("us-east"))).flavorsConfig(flavorsConfig()).build(); tester.makeReadyNodes(5, "host-small", NodeType.host, 32); tester.activateTenantHosts(); - List<Node> dockerHosts = tester.nodeRepository().getNodes(NodeType.host, State.active); + List<Node> dockerHosts = tester.nodeRepository().nodes().getNodes(NodeType.host, State.active); NodeResources resources = new NodeResources(1, 4, 100, 0.3); // Application 1 @@ -130,7 +130,7 @@ public class DynamicDockerAllocationTest { // App 2 and 3 should have been allocated to the same nodes - fail one of the parent hosts from there String parent = "host-1.yahoo.com"; - tester.nodeRepository().failRecursively(parent, Agent.system, "Testing"); + tester.nodeRepository().nodes().failRecursively(parent, Agent.system, "Testing"); // Redeploy all applications deployApp(application1, clusterSpec1, resources, tester, 3); @@ -139,7 +139,7 @@ public class DynamicDockerAllocationTest { Map<Integer, Integer> numberOfChildrenStat = new HashMap<>(); for (Node host : dockerHosts) { - int nofChildren = tester.nodeRepository().list().childrenOf(host).size(); + int nofChildren = tester.nodeRepository().nodes().list().childrenOf(host).size(); if (!numberOfChildrenStat.containsKey(nofChildren)) { numberOfChildrenStat.put(nofChildren, 0); } @@ -202,7 +202,7 @@ public class DynamicDockerAllocationTest { ProvisioningTester tester = new ProvisioningTester.Builder().zone(new Zone(Environment.prod, RegionName.from("us-east"))).flavorsConfig(flavorsConfig()).build(); tester.makeReadyNodes(2, "host-small", NodeType.host, 32); tester.activateTenantHosts(); - List<Node> dockerHosts = tester.nodeRepository().getNodes(NodeType.host, State.active); + List<Node> dockerHosts = tester.nodeRepository().nodes().getNodes(NodeType.host, State.active); NodeResources flavor = new NodeResources(1, 4, 100, 1); // Application 1 @@ -216,7 +216,7 @@ public class DynamicDockerAllocationTest { // Assert that we have two spare nodes (two hosts that are don't have allocations) Set<String> hostsWithChildren = new HashSet<>(); - for (Node node : tester.nodeRepository().list(State.active).nodeType(NodeType.tenant).not().state(State.inactive).not().retired()) { + for (Node node : tester.nodeRepository().nodes().list(State.active).nodeType(NodeType.tenant).not().state(State.inactive).not().retired()) { hostsWithChildren.add(node.parentHostname().get()); } assertEquals(2, hostsWithChildren.size()); @@ -299,7 +299,7 @@ public class DynamicDockerAllocationTest { public void allocation_should_fail_when_host_is_not_in_allocatable_state() { ProvisioningTester tester = new ProvisioningTester.Builder().zone(new Zone(Environment.prod, RegionName.from("us-east"))).flavorsConfig(flavorsConfig()).build(); tester.makeProvisionedNodes(3, "host-small", NodeType.host, 32).forEach(node -> - tester.nodeRepository().fail(node.hostname(), Agent.system, getClass().getSimpleName())); + tester.nodeRepository().nodes().fail(node.hostname(), Agent.system, getClass().getSimpleName())); ApplicationId application = ProvisioningTester.applicationId(); tester.prepare(application, clusterSpec("myContent.t2.a2"), 2, 1, new NodeResources(1, 40, 100, 1)); @@ -315,7 +315,7 @@ public class DynamicDockerAllocationTest { List<HostSpec> hosts = tester.prepare(application, clusterSpec("myContent.t1.a1"), 2, 1, new NodeResources(1, 4, 100, 1)); tester.activate(application, hosts); - List<Node> activeNodes = tester.nodeRepository().getNodes(application); + List<Node> activeNodes = tester.nodeRepository().nodes().getNodes(application); assertEquals(ImmutableSet.of("127.0.127.13", "::13"), activeNodes.get(0).ipConfig().primary()); assertEquals(ImmutableSet.of("127.0.127.2", "::2"), activeNodes.get(1).ipConfig().primary()); } @@ -437,16 +437,16 @@ public class DynamicDockerAllocationTest { // Redeploy does not change allocation as a host with switch information is no better or worse than hosts // without switch information - List<Node> allocatedNodes = tester.nodeRepository().getNodes(app1); + List<Node> allocatedNodes = tester.nodeRepository().nodes().getNodes(app1); tester.activate(app1, tester.prepare(app1, cluster, Capacity.from(new ClusterResources(2, 1, resources)))); - assertEquals("Allocation unchanged", allocatedNodes, tester.nodeRepository().getNodes(app1)); + assertEquals("Allocation unchanged", allocatedNodes, tester.nodeRepository().nodes().getNodes(app1)); // Initial hosts are attached to the same switch tester.patchNodes(hosts0, (host) -> host.withSwitchHostname(switch0)); // Redeploy does not change allocation tester.activate(app1, tester.prepare(app1, cluster, Capacity.from(new ClusterResources(2, 1, resources)))); - assertEquals("Allocation unchanged", allocatedNodes, tester.nodeRepository().getNodes(app1)); + assertEquals("Allocation unchanged", allocatedNodes, tester.nodeRepository().nodes().getNodes(app1)); // One regular host and one slow-disk host are provisioned on the same switch String switch1 = "switch1"; @@ -465,13 +465,13 @@ public class DynamicDockerAllocationTest { tester.assertSwitches(Set.of(switch0), app1, cluster.id()); // A node is retired - tester.patchNode(tester.nodeRepository().list().owner(app1).asList().get(0), + tester.patchNode(tester.nodeRepository().nodes().list().owner(app1).asList().get(0), (node) -> node.withWantToRetire(true, Agent.system, tester.clock().instant())); // Redeploy allocates new node on a distinct switch, and the host with slowest disk (cheapest) on that switch tester.activate(app1, tester.prepare(app1, cluster, Capacity.from(new ClusterResources(2, 1, resources)))); tester.assertSwitches(Set.of(switch0, switch1), app1, cluster.id()); - assertTrue("Host with slow disk on " + switch1 + " is chosen", tester.nodeRepository().list().owner(app1).state(State.active).stream() + assertTrue("Host with slow disk on " + switch1 + " is chosen", tester.nodeRepository().nodes().list().owner(app1).state(State.active).stream() .anyMatch(node -> node.hasParent(hostWithSlowDisk.hostname()))); // Growing cluster picks new node on exclusive switch @@ -515,14 +515,14 @@ public class DynamicDockerAllocationTest { clusterSpec.with(Optional.of(ClusterSpec.Group.from(0))), index); // Need to add group here so that group is serialized in node allocation Node node1aAllocation = node1a.allocate(id, clusterMembership1, node1a.resources(), Instant.now()); - tester.nodeRepository().addNodes(Collections.singletonList(node1aAllocation), Agent.system); + tester.nodeRepository().nodes().addNodes(Collections.singletonList(node1aAllocation), Agent.system); NestedTransaction transaction = new NestedTransaction().add(new CuratorTransaction(tester.getCurator())); - tester.nodeRepository().activate(Collections.singletonList(node1aAllocation), transaction); + tester.nodeRepository().nodes().activate(Collections.singletonList(node1aAllocation), transaction); transaction.commit(); } private List<Node> findSpareCapacity(ProvisioningTester tester) { - List<Node> nodes = tester.nodeRepository().getNodes(State.values()); + List<Node> nodes = tester.nodeRepository().nodes().getNodes(State.values()); NodeList nl = NodeList.copyOf(nodes); return nodes.stream() .filter(n -> n.type() == NodeType.host) diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/DynamicDockerProvisionTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/DynamicDockerProvisionTest.java index 37aeff82ed6..1d9c04999a1 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/DynamicDockerProvisionTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/DynamicDockerProvisionTest.java @@ -66,7 +66,7 @@ public class DynamicDockerProvisionTest { @Test public void dynamically_provision_with_empty_node_repo() { - assertEquals(0, tester.nodeRepository().list().size()); + assertEquals(0, tester.nodeRepository().nodes().list().size()); ApplicationId application1 = ProvisioningTester.applicationId(); NodeResources resources = new NodeResources(1, 4, 10, 1); @@ -77,10 +77,10 @@ public class DynamicDockerProvisionTest { Version.emptyVersion, HostSharing.any); // Total of 8 nodes should now be in node-repo, 4 active hosts and 4 active nodes - assertEquals(8, tester.nodeRepository().list().size()); - assertEquals(4, tester.nodeRepository().getNodes(NodeType.host, Node.State.active).size()); + assertEquals(8, tester.nodeRepository().nodes().list().size()); + assertEquals(4, tester.nodeRepository().nodes().getNodes(NodeType.host, Node.State.active).size()); assertEquals(List.of("host-100-1", "host-101-1", "host-102-1", "host-103-1"), - tester.nodeRepository().getNodes(NodeType.tenant, Node.State.active).stream() + tester.nodeRepository().nodes().getNodes(NodeType.tenant, Node.State.active).stream() .map(Node::hostname).sorted().collect(Collectors.toList())); // Deploy new application @@ -88,11 +88,11 @@ public class DynamicDockerProvisionTest { prepareAndActivate(application2, clusterSpec("mycluster"), 4, 1, resources); // Total of 12 nodes should now be in node-repo, 4 active hosts and 8 active nodes - assertEquals(12, tester.nodeRepository().list().size()); - assertEquals(4, tester.nodeRepository().getNodes(NodeType.host, Node.State.active).size()); + assertEquals(12, tester.nodeRepository().nodes().list().size()); + assertEquals(4, tester.nodeRepository().nodes().getNodes(NodeType.host, Node.State.active).size()); assertEquals(List.of("host-100-1", "host-100-2", "host-101-1", "host-101-2", "host-102-1", "host-102-2", "host-103-1", "host-103-2"), - tester.nodeRepository().getNodes(NodeType.tenant, Node.State.active).stream() + tester.nodeRepository().nodes().getNodes(NodeType.tenant, Node.State.active).stream() .map(Node::hostname).sorted().collect(Collectors.toList())); // Deploy new exclusive application @@ -103,9 +103,9 @@ public class DynamicDockerProvisionTest { Version.emptyVersion, HostSharing.exclusive); // Total of 20 nodes should now be in node-repo, 8 active hosts and 12 active nodes - assertEquals(20, tester.nodeRepository().list().size()); - assertEquals(8, tester.nodeRepository().getNodes(NodeType.host, Node.State.active).size()); - assertEquals(12, tester.nodeRepository().getNodes(NodeType.tenant, Node.State.active).size()); + assertEquals(20, tester.nodeRepository().nodes().list().size()); + assertEquals(8, tester.nodeRepository().nodes().getNodes(NodeType.host, Node.State.active).size()); + assertEquals(12, tester.nodeRepository().nodes().getNodes(NodeType.tenant, Node.State.active).size()); verifyNoMoreInteractions(hostProvisioner); } @@ -124,14 +124,14 @@ public class DynamicDockerProvisionTest { prepareAndActivate(application2, clusterSpec("mycluster", true), 4, 1, initialResources); // Total of 16 nodes should now be in node-repo, 8 active hosts and 8 active nodes - assertEquals(16, tester.nodeRepository().list().size()); - assertEquals(8, tester.nodeRepository().getNodes(NodeType.tenant, Node.State.active).size()); + assertEquals(16, tester.nodeRepository().nodes().list().size()); + assertEquals(8, tester.nodeRepository().nodes().getNodes(NodeType.tenant, Node.State.active).size()); prepareAndActivate(application1, clusterSpec("mycluster"), 4, 1, smallResources); prepareAndActivate(application2, clusterSpec("mycluster", true), 4, 1, smallResources); // 24 nodes: 4 shared hosts with 4 app1 nodes + 8 exclusive hosts with 8 nodes of app2, 4 of which are retired - NodeList nodes = tester.nodeRepository().list(); + NodeList nodes = tester.nodeRepository().nodes().list(); assertEquals(24, nodes.size()); assertEquals(12, nodes.nodeType(NodeType.host).state(Node.State.active).size()); assertEquals(12, nodes.nodeType(NodeType.tenant).state(Node.State.active).size()); @@ -153,11 +153,11 @@ public class DynamicDockerProvisionTest { ApplicationId application3 = ProvisioningTester.applicationId(); prepareAndActivate(application3, clusterSpec("mycluster"), 3, 1, resources); - assertEquals(4, tester.nodeRepository().getNodes(NodeType.tenant).stream().map(Node::parentHostname).distinct().count()); + assertEquals(4, tester.nodeRepository().nodes().getNodes(NodeType.tenant).stream().map(Node::parentHostname).distinct().count()); ApplicationId application4 = ProvisioningTester.applicationId(); prepareAndActivate(application4, clusterSpec("mycluster"), 3, 1, resources); - assertEquals(5, tester.nodeRepository().getNodes(NodeType.tenant).stream().map(Node::parentHostname).distinct().count()); + assertEquals(5, tester.nodeRepository().nodes().getNodes(NodeType.tenant).stream().map(Node::parentHostname).distinct().count()); } @Test @@ -167,19 +167,19 @@ public class DynamicDockerProvisionTest { mockHostProvisioner(hostProvisioner, "large", 3, null); // Provision shared hosts prepareAndActivate(application1, clusterSpec("mycluster"), 4, 1, resources); - Set<Node> initialNodes = tester.nodeRepository().list(application1).stream().collect(Collectors.toSet()); + Set<Node> initialNodes = tester.nodeRepository().nodes().list(application1).stream().collect(Collectors.toSet()); assertEquals(4, initialNodes.size()); // Redeploy same application with exclusive=true mockHostProvisioner(hostProvisioner, "large", 3, application1); prepareAndActivate(application1, clusterSpec("mycluster", true), 4, 1, resources); - assertEquals(8, tester.nodeRepository().list(application1).size()); - assertEquals(initialNodes, tester.nodeRepository().list(application1).retired().stream().collect(Collectors.toSet())); + assertEquals(8, tester.nodeRepository().nodes().list(application1).size()); + assertEquals(initialNodes, tester.nodeRepository().nodes().list(application1).retired().stream().collect(Collectors.toSet())); // Redeploy without exclusive again is no-op prepareAndActivate(application1, clusterSpec("mycluster"), 4, 1, resources); - assertEquals(8, tester.nodeRepository().list(application1).size()); - assertEquals(initialNodes, tester.nodeRepository().list(application1).retired().stream().collect(Collectors.toSet())); + assertEquals(8, tester.nodeRepository().nodes().list(application1).size()); + assertEquals(initialNodes, tester.nodeRepository().nodes().list(application1).retired().stream().collect(Collectors.toSet())); } @Test @@ -188,7 +188,7 @@ public class DynamicDockerProvisionTest { ApplicationId app = ProvisioningTester.applicationId(); Function<Node, Node> retireNode = node -> tester.patchNode(node, (n) -> n.withWantToRetire(true, Agent.system, Instant.now())); - Function<Integer, Node> getNodeInGroup = group -> tester.nodeRepository().getNodes(app).stream() + Function<Integer, Node> getNodeInGroup = group -> tester.nodeRepository().nodes().getNodes(app).stream() .filter(node -> node.allocation().get().membership().cluster().group().get().index() == group) .findAny().orElseThrow(); @@ -209,7 +209,7 @@ public class DynamicDockerProvisionTest { tester.prepare(app, clusterSpec("content"), 8, 2, resources); // Verify that nodes have unique indices from 0..9 - var indices = tester.nodeRepository().getNodes(app).stream() + var indices = tester.nodeRepository().nodes().getNodes(app).stream() .map(node -> node.allocation().get().membership().index()) .collect(Collectors.toSet()); assertTrue(indices.containsAll(IntStream.range(0, 10).boxed().collect(Collectors.toList()))); @@ -398,9 +398,9 @@ public class DynamicDockerProvisionTest { private void prepareAndActivate(ApplicationId application, ClusterSpec clusterSpec, int nodes, int groups, NodeResources resources) { List<HostSpec> prepared = tester.prepare(application, clusterSpec, nodes, groups, resources); - List<Node> provisionedHosts = tester.nodeRepository().getNodes(NodeType.host, Node.State.provisioned); + List<Node> provisionedHosts = tester.nodeRepository().nodes().getNodes(NodeType.host, Node.State.provisioned); if (!provisionedHosts.isEmpty()) { - tester.nodeRepository().setReady(provisionedHosts, Agent.system, DynamicDockerProvisionTest.class.getSimpleName()); + tester.nodeRepository().nodes().setReady(provisionedHosts, Agent.system, DynamicDockerProvisionTest.class.getSimpleName()); tester.activateTenantHosts(); } tester.activate(application, prepared); diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/InPlaceResizeProvisionTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/InPlaceResizeProvisionTest.java index 62b153c7e12..4fd51f38fb6 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/InPlaceResizeProvisionTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/InPlaceResizeProvisionTest.java @@ -198,7 +198,7 @@ public class InPlaceResizeProvisionTest { // Failing one of the new nodes should cause another new node to be allocated rather than // unretiring one of the existing nodes, to avoid resizing during unretiring Node nodeToFail = listCluster(content1).not().retired().asList().get(0); - tester.nodeRepository().fail(nodeToFail.hostname(), Agent.system, "testing"); + tester.nodeRepository().nodes().fail(nodeToFail.hostname(), Agent.system, "testing"); new PrepareHelper(tester, app).prepare(content1, 8, 1, halvedResources).activate(); assertFalse(listCluster(content1).stream().anyMatch(n -> n.equals(nodeToFail))); assertSizeAndResources(listCluster(content1).retired(), 4, resources); @@ -206,8 +206,8 @@ public class InPlaceResizeProvisionTest { // ... same with setting a node to want to retire Node nodeToWantoToRetire = listCluster(content1).not().retired().asList().get(0); - try (NodeMutex lock = tester.nodeRepository().lockAndGetRequired(nodeToWantoToRetire)) { - tester.nodeRepository().write(lock.node().withWantToRetire(true, Agent.system, + try (NodeMutex lock = tester.nodeRepository().nodes().lockAndGetRequired(nodeToWantoToRetire)) { + tester.nodeRepository().nodes().write(lock.node().withWantToRetire(true, Agent.system, tester.clock().instant()), lock); } new PrepareHelper(tester, app).prepare(content1, 8, 1, halvedResources).activate(); diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/InfraDeployerImplTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/InfraDeployerImplTest.java index d21e4c22006..f4d8bbfcb21 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/InfraDeployerImplTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/InfraDeployerImplTest.java @@ -123,7 +123,7 @@ public class InfraDeployerImplTest { addNode(5, Node.State.dirty, Optional.empty()); addNode(6, Node.State.ready, Optional.empty()); Node node7 = addNode(7, Node.State.active, Optional.of(target)); - nodeRepository.setRemovable(application.getApplicationId(), List.of(node7)); + nodeRepository.nodes().setRemovable(application.getApplicationId(), List.of(node7)); infraDeployer.getDeployment(application.getApplicationId()).orElseThrow().activate(); 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 14f068d89a7..fece475852a 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 @@ -76,7 +76,7 @@ public class LoadBalancerProvisionerTest { // A container is failed Supplier<List<Node>> containers = () -> tester.getNodes(app1).container().asList(); Node toFail = containers.get().get(0); - tester.nodeRepository().fail(toFail.hostname(), Agent.system, this.getClass().getSimpleName()); + tester.nodeRepository().nodes().fail(toFail.hostname(), Agent.system, this.getClass().getSimpleName()); // Redeploying replaces failed node and removes it from load balancer tester.activate(app1, prepare(app1, @@ -136,7 +136,7 @@ public class LoadBalancerProvisionerTest { // Entire application is removed: Nodes and load balancer are deactivated tester.remove(app1); dirtyNodesOf(app1); - assertTrue("No nodes are allocated to " + app1, tester.nodeRepository().getNodes(app1, Node.State.reserved, Node.State.active).isEmpty()); + assertTrue("No nodes are allocated to " + app1, tester.nodeRepository().nodes().getNodes(app1, Node.State.reserved, Node.State.active).isEmpty()); assertEquals(2, lbApp1.get().size()); assertTrue("Deactivated load balancers", lbApp1.get().stream().allMatch(lb -> lb.state() == LoadBalancer.State.inactive)); assertTrue("Load balancers for " + app2 + " remain active", lbApp2.get().stream().allMatch(lb -> lb.state() == LoadBalancer.State.active)); @@ -167,20 +167,20 @@ public class LoadBalancerProvisionerTest { var nodes = tester.prepare(app1, clusterRequest(ClusterSpec.Type.container, ClusterSpec.Id.from("qrs")), 2 , 1, resources); Supplier<LoadBalancer> lb = () -> tester.nodeRepository().loadBalancers().list(app1).asList().get(0); assertTrue("Load balancer provisioned with empty reals", tester.loadBalancerService().instances().get(lb.get().id()).reals().isEmpty()); - assignIps(tester.nodeRepository().getNodes(app1)); + assignIps(tester.nodeRepository().nodes().getNodes(app1)); tester.activate(app1, nodes); assertFalse("Load balancer is reconfigured with reals", tester.loadBalancerService().instances().get(lb.get().id()).reals().isEmpty()); // Application is removed, nodes are deleted and load balancer is deactivated tester.remove(app1); - tester.nodeRepository().database().removeNodes(tester.nodeRepository().getNodes(NodeType.tenant)); - assertTrue("Nodes are deleted", tester.nodeRepository().getNodes(NodeType.tenant).isEmpty()); + tester.nodeRepository().database().removeNodes(tester.nodeRepository().nodes().getNodes(NodeType.tenant)); + assertTrue("Nodes are deleted", tester.nodeRepository().nodes().getNodes(NodeType.tenant).isEmpty()); assertSame("Load balancer is deactivated", LoadBalancer.State.inactive, lb.get().state()); // Application is redeployed nodes = tester.prepare(app1, clusterRequest(ClusterSpec.Type.container, ClusterSpec.Id.from("qrs")), 2 , 1, resources); assertTrue("Load balancer is reconfigured with empty reals", tester.loadBalancerService().instances().get(lb.get().id()).reals().isEmpty()); - assignIps(tester.nodeRepository().getNodes(app1)); + assignIps(tester.nodeRepository().nodes().getNodes(app1)); tester.activate(app1, nodes); assertFalse("Load balancer is reconfigured with reals", tester.loadBalancerService().instances().get(lb.get().id()).reals().isEmpty()); } @@ -269,7 +269,7 @@ public class LoadBalancerProvisionerTest { } private void dirtyNodesOf(ApplicationId application) { - tester.nodeRepository().deallocate(tester.nodeRepository().getNodes(application), Agent.system, this.getClass().getSimpleName()); + tester.nodeRepository().nodes().deallocate(tester.nodeRepository().nodes().getNodes(application), Agent.system, this.getClass().getSimpleName()); } private Set<HostSpec> prepare(ApplicationId application, ClusterSpec... specs) { @@ -286,9 +286,9 @@ public class LoadBalancerProvisionerTest { } private void assignIps(List<Node> nodes) { - try (var lock = tester.nodeRepository().lockUnallocated()) { + try (var lock = tester.nodeRepository().nodes().lockUnallocated()) { for (int i = 0; i < nodes.size(); i++) { - tester.nodeRepository().write(nodes.get(i).with(IP.Config.EMPTY.withPrimary(Set.of("127.0.0." + i))), lock); + tester.nodeRepository().nodes().write(nodes.get(i).with(IP.Config.EMPTY.withPrimary(Set.of("127.0.0." + i))), lock); } } } diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/NodeTypeProvisioningTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/NodeTypeProvisioningTest.java index bf2a6ba3627..9b564232111 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/NodeTypeProvisioningTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/NodeTypeProvisioningTest.java @@ -53,7 +53,7 @@ public class NodeTypeProvisioningTest { List<HostSpec> hosts = deployProxies(application, tester); assertEquals("Reserved all proxies", 11, hosts.size()); tester.activate(application, new HashSet<>(hosts)); - List<Node> nodes = tester.nodeRepository().getNodes(NodeType.proxy, Node.State.active); + List<Node> nodes = tester.nodeRepository().nodes().getNodes(NodeType.proxy, Node.State.active); assertEquals("Activated all proxies", 11, nodes.size()); } @@ -61,7 +61,7 @@ public class NodeTypeProvisioningTest { List<HostSpec> hosts = deployProxies(application, tester); assertEquals(11, hosts.size()); tester.activate(application, new HashSet<>(hosts)); - List<Node> nodes = tester.nodeRepository().getNodes(NodeType.proxy, Node.State.active); + List<Node> nodes = tester.nodeRepository().nodes().getNodes(NodeType.proxy, Node.State.active); assertEquals(11, nodes.size()); } @@ -70,20 +70,20 @@ public class NodeTypeProvisioningTest { List<HostSpec> hosts = deployProxies(application, tester); assertEquals(13, hosts.size()); tester.activate(application, new HashSet<>(hosts)); - List<Node> nodes = tester.nodeRepository().getNodes(NodeType.proxy, Node.State.active); + List<Node> nodes = tester.nodeRepository().nodes().getNodes(NodeType.proxy, Node.State.active); assertEquals(13, nodes.size()); } { // Remove 3 proxies then redeploy - List<Node> nodes = tester.nodeRepository().getNodes(NodeType.proxy, Node.State.active); - tester.nodeRepository().fail(nodes.get(0).hostname(), Agent.system, "Failing to unit test"); - tester.nodeRepository().fail(nodes.get(1).hostname(), Agent.system, "Failing to unit test"); - tester.nodeRepository().fail(nodes.get(5).hostname(), Agent.system, "Failing to unit test"); + List<Node> nodes = tester.nodeRepository().nodes().getNodes(NodeType.proxy, Node.State.active); + tester.nodeRepository().nodes().fail(nodes.get(0).hostname(), Agent.system, "Failing to unit test"); + tester.nodeRepository().nodes().fail(nodes.get(1).hostname(), Agent.system, "Failing to unit test"); + tester.nodeRepository().nodes().fail(nodes.get(5).hostname(), Agent.system, "Failing to unit test"); List<HostSpec> hosts = deployProxies(application, tester); assertEquals(10, hosts.size()); tester.activate(application, new HashSet<>(hosts)); - nodes = tester.nodeRepository().getNodes(NodeType.proxy, Node.State.active); + nodes = tester.nodeRepository().nodes().getNodes(NodeType.proxy, Node.State.active); assertEquals(10, nodes.size()); } } @@ -107,22 +107,22 @@ public class NodeTypeProvisioningTest { List<HostSpec> hosts = deployProxies(application, tester); assertEquals("Reserved all proxies", 11, hosts.size()); tester.activate(application, new HashSet<>(hosts)); - List<Node> nodes = tester.nodeRepository().getNodes(NodeType.proxy, Node.State.active); + List<Node> nodes = tester.nodeRepository().nodes().getNodes(NodeType.proxy, Node.State.active); assertEquals("Activated all proxies", 11, nodes.size()); } - Node nodeToRetire = tester.nodeRepository().getNodes(NodeType.proxy, Node.State.active).get(5); + Node nodeToRetire = tester.nodeRepository().nodes().getNodes(NodeType.proxy, Node.State.active).get(5); { // Pick out a node and retire it - tester.nodeRepository().write(nodeToRetire.withWantToRetire(true, Agent.system, tester.clock().instant()), () -> {}); + tester.nodeRepository().nodes().write(nodeToRetire.withWantToRetire(true, Agent.system, tester.clock().instant()), () -> {}); List<HostSpec> hosts = deployProxies(application, tester); assertEquals(11, hosts.size()); tester.activate(application, new HashSet<>(hosts)); - List<Node> nodes = tester.nodeRepository().getNodes(NodeType.proxy, Node.State.active); + List<Node> nodes = tester.nodeRepository().nodes().getNodes(NodeType.proxy, Node.State.active); assertEquals(11, nodes.size()); // Verify that wantToRetire has been propagated - assertTrue(tester.nodeRepository().getNode(nodeToRetire.hostname()) + assertTrue(tester.nodeRepository().nodes().getNode(nodeToRetire.hostname()) .flatMap(Node::allocation) .map(allocation -> allocation.membership().retired()) .orElseThrow(RuntimeException::new)); @@ -132,11 +132,11 @@ public class NodeTypeProvisioningTest { List<HostSpec> hosts = deployProxies(application, tester); assertEquals(11, hosts.size()); tester.activate(application, new HashSet<>(hosts)); - List<Node> nodes = tester.nodeRepository().getNodes(NodeType.proxy, Node.State.active); + List<Node> nodes = tester.nodeRepository().nodes().getNodes(NodeType.proxy, Node.State.active); assertEquals(11, nodes.size()); // Verify that the node is still marked as retired - assertTrue(tester.nodeRepository().getNode(nodeToRetire.hostname()) + assertTrue(tester.nodeRepository().nodes().getNode(nodeToRetire.hostname()) .flatMap(Node::allocation) .map(allocation -> allocation.membership().retired()) .orElseThrow(RuntimeException::new)); @@ -149,11 +149,11 @@ public class NodeTypeProvisioningTest { List<HostSpec> hosts = deployProxies(application, tester); assertEquals(10, hosts.size()); tester.activate(application, new HashSet<>(hosts)); - List<Node> nodes = tester.nodeRepository().getNodes(NodeType.proxy, Node.State.active); + List<Node> nodes = tester.nodeRepository().nodes().getNodes(NodeType.proxy, Node.State.active); assertEquals(10, nodes.size()); // Verify that the node is now inactive - assertEquals(Node.State.dirty, tester.nodeRepository().getNode(nodeToRetire.hostname()) + assertEquals(Node.State.dirty, tester.nodeRepository().nodes().getNode(nodeToRetire.hostname()) .orElseThrow(RuntimeException::new).state()); } } @@ -176,21 +176,21 @@ public class NodeTypeProvisioningTest { List<HostSpec> hosts = deployProxies(application, tester); assertEquals("Reserved all proxies", 11, hosts.size()); tester.activate(application, new HashSet<>(hosts)); - List<Node> nodes = tester.nodeRepository().getNodes(NodeType.proxy, Node.State.active); + List<Node> nodes = tester.nodeRepository().nodes().getNodes(NodeType.proxy, Node.State.active); assertEquals("Activated all proxies", 11, nodes.size()); } - List<Node> nodesToRetire = tester.nodeRepository().getNodes(NodeType.proxy, Node.State.active) + List<Node> nodesToRetire = tester.nodeRepository().nodes().getNodes(NodeType.proxy, Node.State.active) .subList(3, 3 + numNodesToRetire); String currentyRetiringHostname; { nodesToRetire.forEach(nodeToRetire -> - tester.nodeRepository().write(nodeToRetire.withWantToRetire(true, Agent.system, tester.clock().instant()), () -> {})); + tester.nodeRepository().nodes().write(nodeToRetire.withWantToRetire(true, Agent.system, tester.clock().instant()), () -> {})); List<HostSpec> hosts = deployProxies(application, tester); assertEquals(11, hosts.size()); tester.activate(application, new HashSet<>(hosts)); - List<Node> nodes = tester.nodeRepository().getNodes(NodeType.proxy, Node.State.active); + List<Node> nodes = tester.nodeRepository().nodes().getNodes(NodeType.proxy, Node.State.active); assertEquals(11, nodes.size()); // Verify that wantToRetire has been propagated @@ -208,7 +208,7 @@ public class NodeTypeProvisioningTest { List<HostSpec> hosts = deployProxies(application, tester); assertEquals(11, hosts.size()); tester.activate(application, new HashSet<>(hosts)); - List<Node> nodes = tester.nodeRepository().getNodes(NodeType.proxy, Node.State.active); + List<Node> nodes = tester.nodeRepository().nodes().getNodes(NodeType.proxy, Node.State.active); assertEquals(11, nodes.size()); // Verify that wantToRetire has been propagated @@ -228,11 +228,11 @@ public class NodeTypeProvisioningTest { List<HostSpec> hosts = deployProxies(application, tester); assertEquals(10, hosts.size()); tester.activate(application, new HashSet<>(hosts)); - List<Node> nodes = tester.nodeRepository().getNodes(NodeType.proxy, Node.State.active); + List<Node> nodes = tester.nodeRepository().nodes().getNodes(NodeType.proxy, Node.State.active); assertEquals(10, nodes.size()); // Verify the node we previously set to retire has finished retiring - assertEquals(Node.State.dirty, tester.nodeRepository().getNode(currentyRetiringHostname) + assertEquals(Node.State.dirty, tester.nodeRepository().nodes().getNode(currentyRetiringHostname) .orElseThrow(RuntimeException::new).state()); // Verify that a node is currently retiring @@ -257,7 +257,7 @@ public class NodeTypeProvisioningTest { } // After a long time, all currently active proxy nodes are not marked with wantToRetire or as retired - long numRetiredActiveProxyNodes = tester.nodeRepository().getNodes(NodeType.proxy, Node.State.active).stream() + long numRetiredActiveProxyNodes = tester.nodeRepository().nodes().getNodes(NodeType.proxy, Node.State.active).stream() .filter(node -> !node.status().wantToRetire()) .filter(node -> !node.allocation().get().membership().retired()) .count(); @@ -265,7 +265,7 @@ public class NodeTypeProvisioningTest { // All the nodes that were marked with wantToRetire earlier are now dirty assertEquals(nodesToRetire.stream().map(Node::hostname).collect(Collectors.toSet()), - tester.nodeRepository().getNodes(Node.State.dirty).stream().map(Node::hostname).collect(Collectors.toSet())); + tester.nodeRepository().nodes().getNodes(Node.State.dirty).stream().map(Node::hostname).collect(Collectors.toSet())); } private List<HostSpec> deployProxies(ApplicationId application, ProvisioningTester tester) { diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisioningTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisioningTest.java index 7778077110a..33f33836b8d 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisioningTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisioningTest.java @@ -95,7 +95,7 @@ public class ProvisioningTest { SystemState state5 = prepare(application1, 2, 2, 3, 3, defaultResources, tester); HostSpec removed = tester.removeOne(state5.allHosts); tester.activate(application1, state5.allHosts); - assertEquals(removed.hostname(), tester.nodeRepository().getNodes(application1, Node.State.inactive).get(0).hostname()); + assertEquals(removed.hostname(), tester.nodeRepository().nodes().getNodes(application1, Node.State.inactive).get(0).hostname()); // remove some of the clusters SystemState state6 = prepare(application1, 0, 2, 0, 3, defaultResources, tester); @@ -108,13 +108,13 @@ public class ProvisioningTest { NodeList previouslyInactive = tester.getNodes(application1, Node.State.inactive); tester.remove(application1); assertEquals(tester.toHostNames(previouslyActive.not().container().asList()), - tester.toHostNames(tester.nodeRepository().getNodes(application1, Node.State.inactive))); - assertTrue(tester.nodeRepository().getNodes(Node.State.dirty).containsAll(previouslyActive.container().asList())); + tester.toHostNames(tester.nodeRepository().nodes().getNodes(application1, Node.State.inactive))); + assertTrue(tester.nodeRepository().nodes().getNodes(Node.State.dirty).containsAll(previouslyActive.container().asList())); assertEquals(0, tester.getNodes(application1, Node.State.active).size()); assertTrue(tester.nodeRepository().applications().get(application1).isEmpty()); // other application is unaffected - assertEquals(state1App2.hostNames(), tester.toHostNames(tester.nodeRepository().getNodes(application2, Node.State.active))); + assertEquals(state1App2.hostNames(), tester.toHostNames(tester.nodeRepository().nodes().getNodes(application2, Node.State.active))); // fail a node from app2 and make sure it does not get inactive nodes from first HostSpec failed = tester.removeOne(state1App2.allHosts); @@ -127,7 +127,7 @@ public class ProvisioningTest { tester.activate(application2, state2App2.allHosts); // deploy first app again - tester.nodeRepository().setReady(tester.nodeRepository().getNodes(Node.State.dirty), Agent.system, "recycled"); + tester.nodeRepository().nodes().setReady(tester.nodeRepository().nodes().getNodes(Node.State.dirty), Agent.system, "recycled"); SystemState state7 = prepare(application1, 2, 2, 3, 3, defaultResources, tester); state7.assertEquals(state1); tester.activate(application1, state7.allHosts); @@ -160,8 +160,8 @@ public class ProvisioningTest { HostSpec host1 = state1.container0.iterator().next(); assertFalse(host1.version().isPresent()); - Node node1 = tester.nodeRepository().getNode(host1.hostname()).get(); - tester.nodeRepository().write(node1.with(node1.status().withVespaVersion(Version.fromString("1.2.3"))), () -> {}); + Node node1 = tester.nodeRepository().nodes().getNode(host1.hostname()).get(); + tester.nodeRepository().nodes().write(node1.with(node1.status().withVespaVersion(Version.fromString("1.2.3"))), () -> {}); // redeploy SystemState state2 = prepare(application1, 1, 1, 1, 1, defaultResources, tester); @@ -186,16 +186,16 @@ public class ProvisioningTest { tester.activate(application1, state1.allHosts); HostSpec host1 = state1.container0.iterator().next(); - Node node1 = tester.nodeRepository().getNode(host1.hostname()).get(); + Node node1 = tester.nodeRepository().nodes().getNode(host1.hostname()).get(); DockerImage dockerImage = DockerImage.fromString(dockerImageRepo).withTag(Version.fromString("1.2.3")); - tester.nodeRepository().write(node1.with(node1.status().withContainerImage(dockerImage)), () -> {}); + tester.nodeRepository().nodes().write(node1.with(node1.status().withContainerImage(dockerImage)), () -> {}); // redeploy SystemState state2 = prepare(application1, tester, 1, 1, 1 ,1 , false, defaultResources, "1.2.3", Optional.of(dockerImageRepo)); tester.activate(application1, state2.allHosts); host1 = state2.container0.iterator().next(); - node1 = tester.nodeRepository().getNode(host1.hostname()).get(); + node1 = tester.nodeRepository().nodes().getNode(host1.hostname()).get(); assertEquals(dockerImage, node1.status().containerImage().get()); } @@ -222,7 +222,7 @@ public class ProvisioningTest { SystemState state3 = prepare(application1, 2, 2, 3, 3, defaultResources, tester); tester.activate(application1, state3.allHosts); assertEquals("Superfluous container nodes are dirtyed", - 3-2 + 4-2, tester.nodeRepository().getNodes(Node.State.dirty).size()); + 3-2 + 4-2, tester.nodeRepository().nodes().getNodes(Node.State.dirty).size()); assertEquals("Superfluous content nodes are retired", 4-3 + 5-3, tester.getNodes(application1, Node.State.active).retired().size()); @@ -245,7 +245,7 @@ public class ProvisioningTest { SystemState state5 = prepare(application1, 2, 2, 3, 3, defaultResources, tester); tester.activate(application1, state5.allHosts); assertEquals("Superfluous container nodes are also dirtyed", - 4-2 + 5-2 + 1 + 4-2, tester.nodeRepository().getNodes(Node.State.dirty).size()); + 4-2 + 5-2 + 1 + 4-2, tester.nodeRepository().nodes().getNodes(Node.State.dirty).size()); assertEquals("Superfluous content nodes are retired", 5-3 + 6-3 - 1, tester.getNodes(application1, Node.State.active).retired().size()); @@ -289,7 +289,7 @@ public class ProvisioningTest { // redeploy with increased sizes and new flavor SystemState state3 = prepare(application1, 3, 4, 4, 5, large, tester); - assertEquals("New nodes are reserved", 16, tester.nodeRepository().getNodes(application1, Node.State.reserved).size()); + assertEquals("New nodes are reserved", 16, tester.nodeRepository().nodes().getNodes(application1, Node.State.reserved).size()); tester.activate(application1, state3.allHosts); assertEquals("small container nodes are retired because we are swapping the entire cluster", 2 + 2, tester.getNodes(application1, Node.State.active).retired().type(ClusterSpec.Type.container).resources(small).size()); @@ -316,8 +316,8 @@ public class ProvisioningTest { SystemState state1 = prepare(application1, 2, 2, 4, 4, small, tester); tester.activate(application1, state1.allHosts); - tester.nodeRepository().getNodes(application1) - .forEach(n -> assertEquals(large, tester.nodeRepository().getNode(n.parentHostname().get()).get().resources())); + tester.nodeRepository().nodes().getNodes(application1) + .forEach(n -> assertEquals(large, tester.nodeRepository().nodes().getNode(n.parentHostname().get()).get().resources())); } @Test @@ -374,7 +374,7 @@ public class ProvisioningTest { assertEquals(6, state.allHosts.size()); tester.activate(application, state.allHosts); assertTrue(state.allHosts.stream().allMatch(host -> host.requestedResources().get().diskSpeed() == NodeResources.DiskSpeed.any)); - assertTrue(tester.nodeRepository().getNodes(application).stream().allMatch(node -> node.allocation().get().requestedResources().diskSpeed() == NodeResources.DiskSpeed.any)); + assertTrue(tester.nodeRepository().nodes().getNodes(application).stream().allMatch(node -> node.allocation().get().requestedResources().diskSpeed() == NodeResources.DiskSpeed.any)); } { @@ -386,7 +386,7 @@ public class ProvisioningTest { assertEquals(8, state.allHosts.size()); tester.activate(application, state.allHosts); assertTrue(state.allHosts.stream().allMatch(host -> host.requestedResources().get().diskSpeed() == NodeResources.DiskSpeed.fast)); - assertTrue(tester.nodeRepository().getNodes(application).stream().allMatch(node -> node.allocation().get().requestedResources().diskSpeed() == NodeResources.DiskSpeed.fast)); + assertTrue(tester.nodeRepository().nodes().getNodes(application).stream().allMatch(node -> node.allocation().get().requestedResources().diskSpeed() == NodeResources.DiskSpeed.fast)); } { @@ -397,7 +397,7 @@ public class ProvisioningTest { assertEquals(8, state.allHosts.size()); tester.activate(application, state.allHosts); assertTrue(state.allHosts.stream().allMatch(host -> host.requestedResources().get().diskSpeed() == NodeResources.DiskSpeed.any)); - assertTrue(tester.nodeRepository().getNodes(application).stream().allMatch(node -> node.allocation().get().requestedResources().diskSpeed() == NodeResources.DiskSpeed.any)); + assertTrue(tester.nodeRepository().nodes().getNodes(application).stream().allMatch(node -> node.allocation().get().requestedResources().diskSpeed() == NodeResources.DiskSpeed.any)); } } @@ -692,25 +692,25 @@ public class ProvisioningTest { // Allocate 5 nodes ClusterSpec cluster = ClusterSpec.request(ClusterSpec.Type.content, ClusterSpec.Id.from("music")).vespaVersion("4.5.6").build(); tester.activate(application, tester.prepare(application, cluster, capacity)); - assertEquals(5, NodeList.copyOf(tester.nodeRepository().getNodes(application, Node.State.active)).not().retired().size()); - assertEquals(0, NodeList.copyOf(tester.nodeRepository().getNodes(application, Node.State.active)).retired().size()); + assertEquals(5, NodeList.copyOf(tester.nodeRepository().nodes().getNodes(application, Node.State.active)).not().retired().size()); + assertEquals(0, NodeList.copyOf(tester.nodeRepository().nodes().getNodes(application, Node.State.active)).retired().size()); // Mark the nodes as want to retire - tester.nodeRepository().getNodes(application, Node.State.active).forEach(node -> tester.patchNode(node, (n) -> n.withWantToRetire(true, Agent.system, tester.clock().instant()))); + tester.nodeRepository().nodes().getNodes(application, Node.State.active).forEach(node -> tester.patchNode(node, (n) -> n.withWantToRetire(true, Agent.system, tester.clock().instant()))); // redeploy without allow failing tester.activate(application, tester.prepare(application, cluster, capacityFORCED)); // Nodes are not retired since that is unsafe when we cannot fail - assertEquals(5, NodeList.copyOf(tester.nodeRepository().getNodes(application, Node.State.active)).not().retired().size()); - assertEquals(0, NodeList.copyOf(tester.nodeRepository().getNodes(application, Node.State.active)).retired().size()); + assertEquals(5, NodeList.copyOf(tester.nodeRepository().nodes().getNodes(application, Node.State.active)).not().retired().size()); + assertEquals(0, NodeList.copyOf(tester.nodeRepository().nodes().getNodes(application, Node.State.active)).retired().size()); // ... but we still want to - tester.nodeRepository().getNodes(application, Node.State.active).forEach(node -> assertTrue(node.status().wantToRetire())); + tester.nodeRepository().nodes().getNodes(application, Node.State.active).forEach(node -> assertTrue(node.status().wantToRetire())); // redeploy with allowing failing tester.activate(application, tester.prepare(application, cluster, capacity)); // ... old nodes are now retired - assertEquals(5, NodeList.copyOf(tester.nodeRepository().getNodes(application, Node.State.active)).not().retired().size()); - assertEquals(5, NodeList.copyOf(tester.nodeRepository().getNodes(application, Node.State.active)).retired().size()); + assertEquals(5, NodeList.copyOf(tester.nodeRepository().nodes().getNodes(application, Node.State.active)).not().retired().size()); + assertEquals(5, NodeList.copyOf(tester.nodeRepository().nodes().getNodes(application, Node.State.active)).retired().size()); } @Test @@ -723,17 +723,17 @@ public class ProvisioningTest { ClusterSpec cluster = ClusterSpec.request(ClusterSpec.Type.content, ClusterSpec.Id.from("music")).vespaVersion("4.5.6").build(); tester.activate(application, tester.prepare(application, cluster, capacityCanFail)); - assertEquals(0, NodeList.copyOf(tester.nodeRepository().getNodes(application, Node.State.active)).retired().size()); + assertEquals(0, NodeList.copyOf(tester.nodeRepository().nodes().getNodes(application, Node.State.active)).retired().size()); - tester.patchNode(tester.nodeRepository().getNodes(application).stream().findAny().orElseThrow(), n -> n.withWantToRetire(true, Agent.system, tester.clock().instant())); + tester.patchNode(tester.nodeRepository().nodes().getNodes(application).stream().findAny().orElseThrow(), n -> n.withWantToRetire(true, Agent.system, tester.clock().instant())); tester.activate(application, tester.prepare(application, cluster, capacityCanFail)); - assertEquals(1, NodeList.copyOf(tester.nodeRepository().getNodes(application, Node.State.active)).retired().size()); - assertEquals(6, tester.nodeRepository().getNodes(application, Node.State.active).size()); + assertEquals(1, NodeList.copyOf(tester.nodeRepository().nodes().getNodes(application, Node.State.active)).retired().size()); + assertEquals(6, tester.nodeRepository().nodes().getNodes(application, Node.State.active).size()); Capacity capacityCannotFail = Capacity.from(new ClusterResources(5, 1, defaultResources), false, false); tester.activate(application, tester.prepare(application, cluster, capacityCannotFail)); - assertEquals(1, NodeList.copyOf(tester.nodeRepository().getNodes(application, Node.State.active)).retired().size()); - assertEquals(6, tester.nodeRepository().getNodes(application, Node.State.active).size()); + assertEquals(1, NodeList.copyOf(tester.nodeRepository().nodes().getNodes(application, Node.State.active)).retired().size()); + assertEquals(6, tester.nodeRepository().nodes().getNodes(application, Node.State.active).size()); } @Test @@ -777,14 +777,14 @@ public class ProvisioningTest { tester.deploy(application, spec, Capacity.from(new ClusterResources(6, 1, defaultResources))); // Pick out a random application node and make it's parent larger, this will make it the spare host - NodeList nodes = tester.nodeRepository().list(); + NodeList nodes = tester.nodeRepository().nodes().list(); Node randomNode = nodes.owner(application).shuffle(new Random()).first().get(); - tester.nodeRepository().write(nodes.parentOf(randomNode).get().with(new Flavor(new NodeResources(2, 10, 20, 8))), () -> {}); + tester.nodeRepository().nodes().write(nodes.parentOf(randomNode).get().with(new Flavor(new NodeResources(2, 10, 20, 8))), () -> {}); // Re-deploy application with 1 node less, the retired node should be on the spare host tester.deploy(application, spec, Capacity.from(new ClusterResources(5, 1, defaultResources))); - assertTrue(tester.nodeRepository().getNode(randomNode.hostname()).get().allocation().get().membership().retired()); + assertTrue(tester.nodeRepository().nodes().getNode(randomNode.hostname()).get().allocation().get().membership().retired()); } @Test @@ -892,7 +892,7 @@ public class ProvisioningTest { Node.create("cfghost2", new IP.Config(Set.of("::2:0"), Set.of("::2:1")), "cfghost2", flavor, NodeType.confighost).ipConfig(IP.Config.of(Set.of("::2:0"), Set.of("::2:1"), List.of())).build(), Node.create("cfg1", new IP.Config(Set.of("::1:1"), Set.of()), "cfg1", flavor, NodeType.config).parentHostname("cfghost1").build(), Node.create("cfg2", new IP.Config(Set.of("::2:1"), Set.of()), "cfg2", flavor, NodeType.config).parentHostname("cfghost2").build()); - tester.nodeRepository().setReady(tester.nodeRepository().addNodes(nodes, Agent.system), Agent.system, ProvisioningTest.class.getSimpleName()); + tester.nodeRepository().nodes().setReady(tester.nodeRepository().nodes().addNodes(nodes, Agent.system), Agent.system, ProvisioningTest.class.getSimpleName()); InfraApplication cfgHostApp = new ConfigServerHostApplication(); InfraApplication cfgApp = new ConfigServerApplication(); @@ -901,13 +901,13 @@ public class ProvisioningTest { try { prepareAndActivate.apply(cfgApp); } catch (ParentHostUnavailableException ignored) { } - assertEquals(2, tester.nodeRepository().list(cfgApp.getApplicationId()).state(Node.State.reserved).size()); + assertEquals(2, tester.nodeRepository().nodes().list(cfgApp.getApplicationId()).state(Node.State.reserved).size()); prepareAndActivate.apply(cfgHostApp); // After activating cfg hosts, we can activate cfgs and all 4 should become active prepareAndActivate.apply(cfgApp); - assertEquals(4, tester.nodeRepository().list().state(Node.State.active).size()); + assertEquals(4, tester.nodeRepository().nodes().list().state(Node.State.active).size()); } @Test 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 7c43a8d5859..fde02c083dd 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 @@ -143,7 +143,7 @@ public class ProvisioningTester { public NodeRepositoryProvisioner provisioner() { return provisioner; } public LoadBalancerServiceMock loadBalancerService() { return loadBalancerService; } public CapacityPolicies capacityPolicies() { return capacityPolicies; } - public NodeList getNodes(ApplicationId id, Node.State ... inState) { return NodeList.copyOf(nodeRepository.getNodes(id, inState)); } + public NodeList getNodes(ApplicationId id, Node.State ... inState) { return NodeList.copyOf(nodeRepository.nodes().getNodes(id, inState)); } public Node patchNode(Node node, UnaryOperator<Node> patcher) { return patchNodes(List.of(node), patcher).get(0); @@ -152,9 +152,9 @@ public class ProvisioningTester { public List<Node> patchNodes(List<Node> nodes, UnaryOperator<Node> patcher) { List<Node> updated = new ArrayList<>(); for (var node : nodes) { - try (var lock = nodeRepository.lockAndGetRequired(node)) { + try (var lock = nodeRepository.nodes().lockAndGetRequired(node)) { node = patcher.apply(lock.node()); - nodeRepository.write(node, lock); + nodeRepository.nodes().write(node, lock); updated.add(node); } } @@ -170,12 +170,12 @@ public class ProvisioningTester { } public List<HostSpec> prepare(ApplicationId application, ClusterSpec cluster, Capacity capacity) { - Set<String> reservedBefore = toHostNames(nodeRepository.getNodes(application, Node.State.reserved)); - Set<String> inactiveBefore = toHostNames(nodeRepository.getNodes(application, Node.State.inactive)); + Set<String> reservedBefore = toHostNames(nodeRepository.nodes().getNodes(application, Node.State.reserved)); + Set<String> inactiveBefore = toHostNames(nodeRepository.nodes().getNodes(application, Node.State.inactive)); List<HostSpec> hosts1 = provisioner.prepare(application, cluster, capacity, provisionLogger); List<HostSpec> hosts2 = provisioner.prepare(application, cluster, capacity, provisionLogger); assertEquals("Prepare is idempotent", hosts1, hosts2); - Set<String> newlyActivated = toHostNames(nodeRepository.getNodes(application, Node.State.reserved)); + Set<String> newlyActivated = toHostNames(nodeRepository.nodes().getNodes(application, Node.State.reserved)); newlyActivated.removeAll(reservedBefore); newlyActivated.removeAll(inactiveBefore); return hosts1; @@ -186,19 +186,19 @@ public class ProvisioningTester { // Add ip addresses and activate parent host if necessary for (HostSpec prepared : preparedNodes) { - try (var lock = nodeRepository.lockAndGetRequired(prepared.hostname())) { + try (var lock = nodeRepository.nodes().lockAndGetRequired(prepared.hostname())) { Node node = lock.node(); if (node.ipConfig().primary().isEmpty()) { node = node.with(new IP.Config(Set.of("::" + 0 + ":0"), Set.of())); - nodeRepository.write(node, lock); + nodeRepository.nodes().write(node, lock); } if (node.parentHostname().isEmpty()) continue; - Node parent = nodeRepository.getNode(node.parentHostname().get()).get(); + Node parent = nodeRepository.nodes().getNode(node.parentHostname().get()).get(); if (parent.state() == Node.State.active) continue; NestedTransaction t = new NestedTransaction(); if (parent.ipConfig().primary().isEmpty()) parent = parent.with(new IP.Config(Set.of("::" + 0 + ":0"), Set.of("::" + 0 + ":2"))); - nodeRepository.activate(List.of(parent), t); + nodeRepository.nodes().activate(List.of(parent), t); t.commit(); } } @@ -213,7 +213,7 @@ public class ProvisioningTester { provisioner.activate(hosts, new ActivationContext(0), new ApplicationTransaction(lock, transaction)); transaction.commit(); } - assertEquals(toHostNames(hosts), toHostNames(nodeRepository.getNodes(application, Node.State.active))); + assertEquals(toHostNames(hosts), toHostNames(nodeRepository.nodes().getNodes(application, Node.State.active))); return hosts; } @@ -238,7 +238,7 @@ public class ProvisioningTester { } public void deactivate(ApplicationId applicationId) { - try (var lock = nodeRepository.lock(applicationId)) { + try (var lock = nodeRepository.nodes().lock(applicationId)) { NestedTransaction deactivateTransaction = new NestedTransaction(); nodeRepository.remove(new ApplicationTransaction(new ProvisionLock(applicationId, lock), deactivateTransaction)); @@ -259,7 +259,7 @@ public class ProvisioningTester { * number of matches to the given filters */ public void assertRestartCount(ApplicationId application, HostFilter... filters) { - for (Node node : nodeRepository.getNodes(application, Node.State.active)) { + for (Node node : nodeRepository.nodes().getNodes(application, Node.State.active)) { int expectedRestarts = 0; for (HostFilter filter : filters) if (NodeHostFilter.from(filter).matches(node)) @@ -291,7 +291,7 @@ public class ProvisioningTester { double vcpu, double memory, double disk, double bandwidth, DiskSpeed diskSpeed, StorageType storageType, ApplicationId app, ClusterSpec cluster) { - List<Node> nodeList = nodeRepository.list().owner(app).cluster(cluster.id()).state(Node.State.active).not().retired().asList(); + List<Node> nodeList = nodeRepository.nodes().list().owner(app).cluster(cluster.id()).state(Node.State.active).not().retired().asList(); assertEquals(explanation + ": Node count", nodes, nodeList.size()); @@ -316,9 +316,9 @@ public class ProvisioningTester { } public void fail(String hostname) { - int beforeFailCount = nodeRepository.getNode(hostname, Node.State.active).get().status().failCount(); - Node failedNode = nodeRepository.fail(hostname, Agent.system, "Failing to unit test"); - assertTrue(nodeRepository.getNodes(NodeType.tenant, Node.State.failed).contains(failedNode)); + int beforeFailCount = nodeRepository.nodes().getNode(hostname, Node.State.active).get().status().failCount(); + Node failedNode = nodeRepository.nodes().fail(hostname, Agent.system, "Failing to unit test"); + assertTrue(nodeRepository.nodes().getNodes(NodeType.tenant, Node.State.failed).contains(failedNode)); assertEquals(beforeFailCount + 1, failedNode.status().failCount()); } @@ -437,7 +437,7 @@ public class ProvisioningTester { reservedTo.ifPresent(builder::reservedTo); nodes.add(builder.build()); } - nodes = nodeRepository.addNodes(nodes, Agent.system); + nodes = nodeRepository.nodes().addNodes(nodes, Agent.system); return nodes; } @@ -455,16 +455,16 @@ public class ProvisioningTester { nodes.add(node); } - nodes = nodeRepository.addNodes(nodes, Agent.system); - nodes = nodeRepository.deallocate(nodes, Agent.system, getClass().getSimpleName()); - nodeRepository.setReady(nodes, Agent.system, getClass().getSimpleName()); + nodes = nodeRepository.nodes().addNodes(nodes, Agent.system); + nodes = nodeRepository.nodes().deallocate(nodes, Agent.system, getClass().getSimpleName()); + nodeRepository.nodes().setReady(nodes, Agent.system, getClass().getSimpleName()); ConfigServerApplication application = new ConfigServerApplication(); List<HostSpec> hosts = prepare(application.getApplicationId(), application.getClusterSpecWithVersion(configServersVersion), application.getCapacity()); activate(application.getApplicationId(), new HashSet<>(hosts)); - return nodeRepository.getNodes(application.getApplicationId(), Node.State.active); + return nodeRepository.nodes().getNodes(application.getApplicationId(), Node.State.active); } public List<Node> makeReadyNodes(int n, String flavor, NodeType type, int ipAddressPoolSize) { @@ -482,8 +482,8 @@ public class ProvisioningTester { } public List<Node> makeReadyNodes(int n, Flavor flavor, Optional<TenantName> reservedTo, NodeType type, int ipAddressPoolSize, boolean dualStack) { List<Node> nodes = makeProvisionedNodes(n, flavor, reservedTo, type, ipAddressPoolSize, dualStack); - nodes = nodeRepository.deallocate(nodes, Agent.system, getClass().getSimpleName()); - return nodeRepository.setReady(nodes, Agent.system, getClass().getSimpleName()); + nodes = nodeRepository.nodes().deallocate(nodes, Agent.system, getClass().getSimpleName()); + return nodeRepository.nodes().setReady(nodes, Agent.system, getClass().getSimpleName()); } private Flavor asFlavor(String flavorString, NodeType type) { @@ -522,9 +522,9 @@ public class ProvisioningTester { parentHostname.ifPresent(builder::parentHostname); nodes.add(builder.build()); } - nodes = nodeRepository.addNodes(nodes, Agent.system); - nodes = nodeRepository.deallocate(nodes, Agent.system, getClass().getSimpleName()); - nodeRepository.setReady(nodes, Agent.system, getClass().getSimpleName()); + nodes = nodeRepository.nodes().addNodes(nodes, Agent.system); + nodes = nodeRepository.nodes().deallocate(nodes, Agent.system, getClass().getSimpleName()); + nodeRepository.nodes().setReady(nodes, Agent.system, getClass().getSimpleName()); return nodes; } @@ -560,20 +560,20 @@ public class ProvisioningTester { } public void assertAllocatedOn(String explanation, String hostFlavor, ApplicationId app) { - for (Node node : nodeRepository.getNodes(app)) { - Node parent = nodeRepository.getNode(node.parentHostname().get()).get(); + for (Node node : nodeRepository.nodes().getNodes(app)) { + Node parent = nodeRepository.nodes().getNode(node.parentHostname().get()).get(); assertEquals(node + ": " + explanation, hostFlavor, parent.flavor().name()); } } public void assertSwitches(Set<String> expectedSwitches, ApplicationId application, ClusterSpec.Id cluster) { - NodeList allNodes = nodeRepository.list(); + NodeList allNodes = nodeRepository.nodes().list(); NodeList activeNodes = allNodes.owner(application).state(Node.State.active).cluster(cluster); assertEquals(expectedSwitches, switchesOf(activeNodes, allNodes)); } public List<Node> activeNodesOn(String switchHostname, ApplicationId application, ClusterSpec.Id cluster) { - NodeList allNodes = nodeRepository.list(); + NodeList allNodes = nodeRepository.nodes().list(); NodeList activeNodes = allNodes.state(Node.State.active).owner(application).cluster(cluster); return activeNodes.stream().filter(node -> { Optional<String> allocatedSwitchHostname = allNodes.parentOf(node).flatMap(Node::switchHostname); @@ -594,8 +594,8 @@ public class ProvisioningTester { } public int hostFlavorCount(String hostFlavor, ApplicationId app) { - return (int)nodeRepository().getNodes(app).stream() - .map(n -> nodeRepository().getNode(n.parentHostname().get()).get()) + return (int)nodeRepository().nodes().getNodes(app).stream() + .map(n -> nodeRepository().nodes().getNode(n.parentHostname().get()).get()) .filter(p -> p.flavor().name().equals(hostFlavor)) .count(); } |