aboutsummaryrefslogtreecommitdiffstats
path: root/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/NodeFailTester.java
diff options
context:
space:
mode:
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.java42
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;