diff options
Diffstat (limited to 'node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/NodeFailTester.java')
-rw-r--r-- | node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/NodeFailTester.java | 42 |
1 files changed, 39 insertions, 3 deletions
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 977d72c11ea..f67e9cd8345 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 @@ -27,6 +27,7 @@ import com.yahoo.vespa.hosted.provision.provisioning.NodeRepositoryProvisioner; import com.yahoo.vespa.hosted.provision.provisioning.ProvisioningTester; import com.yahoo.vespa.hosted.provision.testutils.MockDeployer; import com.yahoo.vespa.hosted.provision.testutils.ServiceMonitorStub; +import com.yahoo.vespa.hosted.provision.testutils.TestHostLivenessTracker; import java.time.Clock; import java.time.Duration; @@ -62,6 +63,7 @@ public class NodeFailTester { public ServiceMonitorStub serviceMonitor; public MockDeployer deployer; public TestMetric metric; + private final TestHostLivenessTracker hostLivenessTracker; private final NodeRepositoryProvisioner provisioner; private final Curator curator; @@ -72,6 +74,7 @@ public class NodeFailTester { curator = tester.getCurator(); nodeRepository = tester.nodeRepository(); provisioner = tester.provisioner(); + hostLivenessTracker = new TestHostLivenessTracker(clock); } private void initializeMaintainers(Map<ApplicationId, MockDeployer.ApplicationContext> apps) { @@ -109,7 +112,7 @@ public class NodeFailTester { /** Create hostCount hosts, one app with containerCount containers, and one app with contentCount content nodes. */ public static NodeFailTester withTwoApplications(int hostCount, int containerCount, int contentCount) { NodeFailTester tester = new NodeFailTester(); - tester.tester.makeReadyHosts(hostCount, new NodeResources(2, 8, 20, 10)); + tester.createHostNodes(hostCount); // Create tenant host application ClusterSpec clusterNodeAdminApp = ClusterSpec.request(ClusterSpec.Type.container, ClusterSpec.Id.from("node-admin")).vespaVersion("6.42").build(); @@ -136,7 +139,13 @@ public class NodeFailTester { public static NodeFailTester withTwoApplications(int numberOfHosts) { NodeFailTester tester = new NodeFailTester(); - tester.tester.makeReadyNodes(numberOfHosts, new NodeResources(4, 16, 400, 10), NodeType.host, 8); + + int nodesPerHost = 3; + List<Node> hosts = tester.createHostNodes(numberOfHosts); + for (int i = 0; i < hosts.size(); i++) { + tester.createReadyNodes(nodesPerHost, i * nodesPerHost, Optional.of("parent" + (i + 1)), + new NodeResources(1, 4, 100, 0.3), NodeType.tenant); + } // Create applications ClusterSpec clusterNodeAdminApp = ClusterSpec.request(ClusterSpec.Type.container, ClusterSpec.Id.from("node-admin")).vespaVersion("6.42").build(); @@ -221,11 +230,26 @@ public class NodeFailTester { } public NodeHealthTracker createUpdater() { - return new NodeHealthTracker(serviceMonitor, nodeRepository, Duration.ofMinutes(5), metric); + return new NodeHealthTracker(hostLivenessTracker, serviceMonitor, nodeRepository, Duration.ofMinutes(5), metric); + } + + public void allNodesMakeAConfigRequestExcept(Node ... deadNodeArray) { + allNodesMakeAConfigRequestExcept(List.of(deadNodeArray)); + } + + public void allNodesMakeAConfigRequestExcept(List<Node> deadNodes) { + for (Node node : nodeRepository.nodes().list()) { + if ( ! deadNodes.contains(node)) + hostLivenessTracker.receivedRequestFrom(node.hostname()); + } } public Clock clock() { return clock; } + public List<Node> createReadyNodes(int count) { + return createReadyNodes(count, 0); + } + public List<Node> createReadyNodes(int count, NodeResources resources) { return createReadyNodes(count, 0, resources); } @@ -234,10 +258,22 @@ public class NodeFailTester { return createReadyNodes(count, 0, Optional.empty(), hostFlavors.getFlavorOrThrow("default"), nodeType); } + public List<Node> createReadyNodes(int count, int startIndex) { + return createReadyNodes(count, startIndex, "default"); + } + + public List<Node> createReadyNodes(int count, int startIndex, String flavor) { + return createReadyNodes(count, startIndex, Optional.empty(), hostFlavors.getFlavorOrThrow(flavor), NodeType.tenant); + } + public List<Node> createReadyNodes(int count, int startIndex, NodeResources resources) { return createReadyNodes(count, startIndex, Optional.empty(), new Flavor(resources), NodeType.tenant); } + private List<Node> createReadyNodes(int count, int startIndex, Optional<String> parentHostname, NodeResources resources, NodeType nodeType) { + return createReadyNodes(count, startIndex, parentHostname, new Flavor(resources), nodeType); + } + private List<Node> createReadyNodes(int count, int startIndex, Optional<String> parentHostname, Flavor flavor, NodeType nodeType) { List<Node> nodes = new ArrayList<>(count); int lastOctetOfPoolAddress = 0; |