aboutsummaryrefslogtreecommitdiffstats
path: root/node-repository
diff options
context:
space:
mode:
authorMartin Polden <mpolden@mpolden.no>2023-06-30 10:29:59 +0200
committerGitHub <noreply@github.com>2023-06-30 10:29:59 +0200
commitb6dab7712c045d0c6c5772ee0fe5d75f6f231f19 (patch)
tree08d57b6957fc107d4d4701f5cab8b92f20e2ce10 /node-repository
parent902931e48415b354c9790b41c28d40dfa6f076d5 (diff)
parentd4ab68364ee14e9360fc7b17ba1100ccb934b4a1 (diff)
Merge pull request #27594 from vespa-engine/revert-27589-freva/exclusivity
Revert "Use real InfraApplication in node-repository tests" MERGEOK
Diffstat (limited to 'node-repository')
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockDeployer.java13
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockNodeRepository.java17
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/RealDataScenarioTest.java3
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/AutoscalingMaintainerTester.java7
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/ExpeditedChangeApplicationMaintainerTest.java16
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/FailedExpirerTest.java21
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/HostCapacityMaintainerTest.java40
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/HostFlavorUpgraderTest.java4
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/InactiveAndFailedExpirerTest.java24
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/NodeFailTester.java74
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/OsUpgradeActivatorTest.java9
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/PeriodicApplicationMaintainerTest.java7
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/RebalancerTest.java9
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/RetiredExpirerTest.java15
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/SwitchRebalancerTest.java4
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/os/OsVersionsTest.java34
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/AclProvisioningTest.java12
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/InPlaceResizeProvisionTest.java5
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/LoadBalancerProvisionerTest.java27
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/MultigroupProvisioningTest.java4
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/NodeTypeProvisioningTest.java72
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisioningTest.java23
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisioningTester.java65
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/VirtualNodeProvisioningTest.java6
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/ArchiveApiTest.java2
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/cfg1.json10
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/cfg2.json10
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/docker-node1-os-upgrade-complete.json8
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/docker-node1-reports-2.json8
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/docker-node1-reports-3.json8
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/docker-node1-reports-4.json8
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/docker-node1-reports.json8
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/docker-node1.json8
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/docker-node2.json8
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/docker-node3.json8
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/docker-node4.json8
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/docker-node5.json8
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/dockerhost1-with-firmware-data.json8
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/load-balancers.json27
39 files changed, 333 insertions, 315 deletions
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockDeployer.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockDeployer.java
index a1712fe4a0b..63386449f0c 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockDeployer.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockDeployer.java
@@ -1,7 +1,6 @@
// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.vespa.hosted.provision.testutils;
-import com.yahoo.component.Version;
import com.yahoo.component.annotation.Inject;
import com.yahoo.config.provision.ActivationContext;
import com.yahoo.config.provision.ApplicationId;
@@ -17,7 +16,6 @@ import com.yahoo.vespa.hosted.provision.Node;
import com.yahoo.vespa.hosted.provision.NodeMutex;
import com.yahoo.vespa.hosted.provision.NodeRepository;
import com.yahoo.vespa.hosted.provision.provisioning.NodeRepositoryProvisioner;
-import com.yahoo.vespa.service.duper.InfraApplication;
import java.time.Clock;
import java.time.Duration;
@@ -54,7 +52,7 @@ public class MockDeployer implements Deployer {
@Inject
@SuppressWarnings("unused")
public MockDeployer() {
- this(null, Clock.systemUTC(), List.of());
+ this(null, Clock.systemUTC(), Map.of());
}
/**
@@ -76,9 +74,9 @@ public class MockDeployer implements Deployer {
*/
public MockDeployer(NodeRepositoryProvisioner provisioner,
Clock clock,
- List<ApplicationContext> applications) {
+ Map<ApplicationId, ApplicationContext> applications) {
this.provisioner = provisioner;
- this.applications = applications.stream().collect(Collectors.toMap(ApplicationContext::id, c -> c));
+ this.applications = new HashMap<>(applications);
this.nodeRepository = null;
this.clock = clock;
@@ -225,11 +223,6 @@ public class MockDeployer implements Deployer {
this(id, List.of(new ClusterContext(id, cluster, capacity)));
}
- public ApplicationContext(InfraApplication application, Version version) {
- this(application.getApplicationId(), List.of(new ClusterContext(
- application.getApplicationId(), application.getClusterSpecWithVersion(version), application.getCapacity())));
- }
-
public ApplicationId id() { return id; }
/** Returns list of cluster specs of this application. */
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockNodeRepository.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockNodeRepository.java
index 40460e70861..714374ccb8a 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockNodeRepository.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockNodeRepository.java
@@ -1,6 +1,8 @@
// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.vespa.hosted.provision.testutils;
+import com.yahoo.config.provision.ClusterInfo;
+import com.yahoo.config.provision.IntRange;
import com.yahoo.component.Version;
import com.yahoo.config.provision.ActivationContext;
import com.yahoo.config.provision.ApplicationId;
@@ -8,14 +10,12 @@ import com.yahoo.config.provision.ApplicationName;
import com.yahoo.config.provision.ApplicationTransaction;
import com.yahoo.config.provision.Capacity;
import com.yahoo.config.provision.CloudAccount;
-import com.yahoo.config.provision.ClusterInfo;
import com.yahoo.config.provision.ClusterResources;
import com.yahoo.config.provision.ClusterSpec;
import com.yahoo.config.provision.DockerImage;
import com.yahoo.config.provision.Flavor;
import com.yahoo.config.provision.HostSpec;
import com.yahoo.config.provision.InstanceName;
-import com.yahoo.config.provision.IntRange;
import com.yahoo.config.provision.NodeFlavors;
import com.yahoo.config.provision.NodeResources;
import com.yahoo.config.provision.NodeType;
@@ -42,9 +42,6 @@ import com.yahoo.vespa.hosted.provision.node.IP;
import com.yahoo.vespa.hosted.provision.node.Status;
import com.yahoo.vespa.hosted.provision.provisioning.EmptyProvisionServiceProvider;
import com.yahoo.vespa.hosted.provision.provisioning.NodeRepositoryProvisioner;
-import com.yahoo.vespa.service.duper.ConfigServerApplication;
-import com.yahoo.vespa.service.duper.InfraApplication;
-import com.yahoo.vespa.service.duper.TenantHostApplication;
import javax.inject.Inject;
import java.time.Clock;
@@ -192,11 +189,13 @@ public class MockNodeRepository extends NodeRepository {
nodes().removeRecursively("dockerhost6.yahoo.com");
// Activate config servers
- InfraApplication cfgApp = new ConfigServerApplication();
- activate(provisioner.prepare(cfgApp.getApplicationId(), cfgApp.getClusterSpecWithVersion(Version.fromString("6.42")), cfgApp.getCapacity(), null), cfgApp.getApplicationId(), provisioner);
+ ApplicationId cfgApp = ApplicationId.from("cfg", "cfg", "cfg");
+ ClusterSpec cfgCluster = ClusterSpec.request(ClusterSpec.Type.container, ClusterSpec.Id.from("configservers")).vespaVersion("6.42").build();
+ activate(provisioner.prepare(cfgApp, cfgCluster, Capacity.fromRequiredNodeType(NodeType.config), null), cfgApp, provisioner);
- InfraApplication tenantHostApp = new TenantHostApplication();
- activate(provisioner.prepare(tenantHostApp.getApplicationId(), tenantHostApp.getClusterSpecWithVersion(Version.fromString("6.42")), tenantHostApp.getCapacity(), null), tenantHostApp.getApplicationId(), provisioner);
+ ApplicationId zoneApp = ApplicationId.from(TenantName.from("zoneapp"), ApplicationName.from("zoneapp"), InstanceName.from("zoneapp"));
+ ClusterSpec zoneCluster = ClusterSpec.request(ClusterSpec.Type.container, ClusterSpec.Id.from("node-admin")).vespaVersion("6.42").build();
+ activate(provisioner.prepare(zoneApp, zoneCluster, Capacity.fromRequiredNodeType(NodeType.host), null), zoneApp, provisioner);
ApplicationId app1Id = ApplicationId.from(TenantName.from("tenant1"), ApplicationName.from("application1"), InstanceName.from("instance1"));
ClusterSpec cluster1Id = ClusterSpec.request(ClusterSpec.Type.container, ClusterSpec.Id.from("id1"))
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 1ed3c13cfff..9c843b3eb01 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
@@ -46,6 +46,7 @@ import java.time.Duration;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
+import java.util.Map;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.function.Consumer;
import java.util.logging.Logger;
@@ -104,7 +105,7 @@ public class RealDataScenarioTest {
for (int i = 0; i < specs.length; i++) {
contexts.add(new MockDeployer.ClusterContext(app, specs[i], capacities[i]));
}
- MockDeployer deployer = new MockDeployer(tester.provisioner(), tester.clock(), List.of(new MockDeployer.ApplicationContext(app, contexts)));
+ MockDeployer deployer = new MockDeployer(tester.provisioner(), tester.clock(), Map.of(app, new MockDeployer.ApplicationContext(app, contexts)));
SwitchRebalancer rebalancer = new SwitchRebalancer(tester.nodeRepository(), Duration.ofDays(1), new MockMetric(), deployer);
rebalancer.run();
}
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 ab8175cf989..95e36787219 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
@@ -19,15 +19,18 @@ import com.yahoo.vespa.hosted.provision.applications.Cluster;
import com.yahoo.vespa.hosted.provision.autoscale.ClusterMetricSnapshot;
import com.yahoo.vespa.hosted.provision.autoscale.Load;
import com.yahoo.vespa.hosted.provision.autoscale.NodeMetricSnapshot;
+import com.yahoo.vespa.hosted.provision.autoscale.MetricsDb;
import com.yahoo.vespa.hosted.provision.provisioning.FlavorConfigBuilder;
import com.yahoo.vespa.hosted.provision.provisioning.ProvisioningTester;
import com.yahoo.vespa.hosted.provision.testutils.MockDeployer;
import java.time.Duration;
import java.time.Instant;
+import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.function.IntFunction;
+import java.util.stream.Collectors;
/**
* @author bratseth
@@ -45,7 +48,9 @@ public class AutoscalingMaintainerTester {
public AutoscalingMaintainerTester(Zone zone, MockDeployer.ApplicationContext ... appContexts) {
provisioningTester = new ProvisioningTester.Builder().zone(zone).flavorsConfig(flavorsConfig()).build();
provisioningTester.clock().setInstant(Instant.ofEpochMilli(0));
- deployer = new MockDeployer(provisioningTester.provisioner(), provisioningTester.clock(), List.of(appContexts));
+ Map<ApplicationId, MockDeployer.ApplicationContext> apps = Arrays.stream(appContexts)
+ .collect(Collectors.toMap(c -> c.id(), c -> c));
+ deployer = new MockDeployer(provisioningTester.provisioner(), provisioningTester.clock(), apps);
maintainer = new AutoscalingMaintainer(provisioningTester.nodeRepository(),
deployer,
new TestMetric(),
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/ExpeditedChangeApplicationMaintainerTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/ExpeditedChangeApplicationMaintainerTest.java
index e1e2ff3db15..908598b25fb 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/ExpeditedChangeApplicationMaintainerTest.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/ExpeditedChangeApplicationMaintainerTest.java
@@ -1,7 +1,6 @@
// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.vespa.hosted.provision.maintenance;
-import com.yahoo.component.Version;
import com.yahoo.config.provision.ApplicationId;
import com.yahoo.config.provision.ApplicationName;
import com.yahoo.config.provision.Capacity;
@@ -17,11 +16,10 @@ import com.yahoo.vespa.hosted.provision.NodeRepository;
import com.yahoo.vespa.hosted.provision.node.Agent;
import com.yahoo.vespa.hosted.provision.provisioning.ProvisioningTester;
import com.yahoo.vespa.hosted.provision.testutils.MockDeployer;
-import com.yahoo.vespa.service.duper.InfraApplication;
import org.junit.Test;
import java.time.Duration;
-import java.util.List;
+import java.util.Map;
import static org.junit.Assert.assertEquals;
@@ -88,12 +86,12 @@ public class ExpeditedChangeApplicationMaintainerTest {
final MockDeployer deployer;
final NodeResources nodeResources = new NodeResources(2, 8, 50, 1);
- final InfraApplication proxyApp = ProvisioningTester.infraApplication(NodeType.proxy);
final ApplicationId app1 = ApplicationId.from(TenantName.from("foo1"), ApplicationName.from("bar"), InstanceName.from("fuz"));
final ApplicationId app2 = ApplicationId.from(TenantName.from("foo2"), ApplicationName.from("bar"), InstanceName.from("fuz"));
- final ApplicationId app3 = proxyApp.getApplicationId();
+ final ApplicationId app3 = ApplicationId.from(TenantName.from("hosted-vespa"), ApplicationName.from("routing"), InstanceName.from("default"));
final ClusterSpec clusterApp1 = ClusterSpec.request(ClusterSpec.Type.container, ClusterSpec.Id.from("test")).vespaVersion("6.42").build();
final ClusterSpec clusterApp2 = ClusterSpec.request(ClusterSpec.Type.content, ClusterSpec.Id.from("test")).vespaVersion("6.42").build();
+ final ClusterSpec clusterApp3 = ClusterSpec.request(ClusterSpec.Type.content, ClusterSpec.Id.from("routing")).vespaVersion("6.42").build();
final int wantedNodesApp1 = 5;
final int wantedNodesApp2 = 7;
final int wantedNodesApp3 = 2;
@@ -101,10 +99,10 @@ public class ExpeditedChangeApplicationMaintainerTest {
Fixture() {
this.tester = new ProvisioningTester.Builder().build();
this.nodeRepository = tester.nodeRepository();
- List<MockDeployer.ApplicationContext> apps = List.of(
- new MockDeployer.ApplicationContext(app1, clusterApp1, Capacity.from(new ClusterResources(wantedNodesApp1, 1, nodeResources))),
- new MockDeployer.ApplicationContext(app2, clusterApp2, Capacity.from(new ClusterResources(wantedNodesApp2, 1, nodeResources))),
- new MockDeployer.ApplicationContext(proxyApp, Version.fromString("6.42")));
+ Map<ApplicationId, MockDeployer.ApplicationContext> apps = Map.of(
+ app1, new MockDeployer.ApplicationContext(app1, clusterApp1, Capacity.from(new ClusterResources(wantedNodesApp1, 1, nodeResources))),
+ app2, new MockDeployer.ApplicationContext(app2, clusterApp2, Capacity.from(new ClusterResources(wantedNodesApp2, 1, nodeResources))),
+ app3, new MockDeployer.ApplicationContext(app3, clusterApp3, Capacity.fromRequiredNodeType(NodeType.proxy))) ;
this.deployer = new MockDeployer(tester.provisioner(), nodeRepository.clock(), apps);
}
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 d36ee0f0494..4978fe431dc 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
@@ -38,6 +38,7 @@ import java.time.Instant;
import java.util.List;
import java.util.Optional;
import java.util.Set;
+import java.util.stream.Collectors;
import java.util.stream.Stream;
import static org.junit.Assert.assertEquals;
@@ -48,6 +49,13 @@ import static org.junit.Assert.assertEquals;
*/
public class FailedExpirerTest {
+ private static final ApplicationId tenantHostApplicationId = ApplicationId.from("vespa", "zone-app", "default");
+
+ private static final ClusterSpec tenantHostApplicationClusterSpec =
+ ClusterSpec.request(ClusterSpec.Type.container, ClusterSpec.Id.from("node-admin")).vespaVersion("6.42").build();
+
+ private static final Capacity tenantHostApplicationCapacity = Capacity.fromRequiredNodeType(NodeType.host);
+
@Test
public void ensure_failed_nodes_are_deallocated_in_test_quickly() {
FailureScenario scenario = new FailureScenario(SystemName.main, Environment.test)
@@ -130,7 +138,9 @@ public class FailedExpirerTest {
.withNode(NodeType.proxy, FailureScenario.defaultFlavor, "proxy2")
.withNode(NodeType.proxy, FailureScenario.defaultFlavor, "proxy3")
.setReady("proxy1", "proxy2", "proxy3")
- .allocate(NodeType.proxy)
+ .allocate(ApplicationId.from("vespa", "zone-app", "default"),
+ ClusterSpec.request(ClusterSpec.Type.container, ClusterSpec.Id.from("routing")).vespaVersion("6.42").build(),
+ Capacity.fromRequiredNodeType(NodeType.proxy))
.failNode(1, "proxy1");
for (int i = 0; i < 10; i++) {
@@ -149,7 +159,7 @@ public class FailedExpirerTest {
.withNode(NodeType.host, FailureScenario.defaultFlavor, "parent2")
.withNode(NodeType.host, FailureScenario.defaultFlavor, "parent3")
.setReady("parent1", "parent2", "parent3")
- .allocate(NodeType.host)
+ .allocate(tenantHostApplicationId, tenantHostApplicationClusterSpec, tenantHostApplicationCapacity)
.withNode(NodeType.tenant, FailureScenario.dockerFlavor, "node1", "parent1")
.withNode(NodeType.tenant, FailureScenario.dockerFlavor, "node2", "parent2")
.withNode(NodeType.tenant, FailureScenario.dockerFlavor, "node3", "parent3")
@@ -171,7 +181,7 @@ public class FailedExpirerTest {
.withNode(NodeType.host, FailureScenario.defaultFlavor, "parent2")
.withNode(NodeType.host, FailureScenario.defaultFlavor, "parent3")
.setReady("parent1", "parent2", "parent3")
- .allocate(NodeType.host)
+ .allocate(tenantHostApplicationId, tenantHostApplicationClusterSpec, tenantHostApplicationCapacity)
.withNode(NodeType.tenant, FailureScenario.dockerFlavor, "node1", "parent1")
.withNode(NodeType.tenant, FailureScenario.dockerFlavor, "node2", "parent2")
.withNode(NodeType.tenant, FailureScenario.dockerFlavor, "node3", "parent3")
@@ -328,11 +338,6 @@ public class FailedExpirerTest {
return this;
}
- public FailureScenario allocate(NodeType nodeType) {
- tester.prepareAndActivateInfraApplication(nodeType);
- return this;
- }
-
public void assertNodesIn(Node.State state, String... hostnames) {
assertEquals(Set.of(hostnames), nodeRepository.nodes().list(state).hostnames());
}
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/HostCapacityMaintainerTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/HostCapacityMaintainerTest.java
index 0478e5d1486..c16ed47a216 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/HostCapacityMaintainerTest.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/HostCapacityMaintainerTest.java
@@ -367,16 +367,16 @@ public class HostCapacityMaintainerTest {
}
private void replace_config_server_like(NodeType hostType) {
- final InfraApplication hostApp;
- final InfraApplication configSrvApp;
+ final ApplicationId hostApp;
+ final ApplicationId configSrvApp;
switch (hostType) {
case confighost -> {
- hostApp = new ConfigServerHostApplication();
- configSrvApp = new ConfigServerApplication();
+ hostApp = new ConfigServerHostApplication().getApplicationId();
+ configSrvApp = new ConfigServerApplication().getApplicationId();
}
case controllerhost -> {
- hostApp = new ControllerHostApplication();
- configSrvApp = new ControllerApplication();
+ hostApp = new ControllerHostApplication().getApplicationId();
+ configSrvApp = new ControllerApplication().getApplicationId();
}
default -> throw new IllegalArgumentException("Unexpected config server host like node type: " + hostType);
}
@@ -390,14 +390,14 @@ public class HostCapacityMaintainerTest {
List<Node> provisionedHosts = tester.makeReadyNodes(3, "default", hostType, 1).stream()
.sorted(Comparator.comparing(Node::hostname))
.toList();
- tester.prepareAndActivateInfraApplication(hostApp);
+ tester.prepareAndActivateInfraApplication(hostApp, hostType);
// Provision config servers
for (int i = 0; i < provisionedHosts.size(); i++) {
tester.makeReadyChildren(1, i + 1, new NodeResources(1.5, 8, 50, 0.3), hostType.childNodeType(),
provisionedHosts.get(i).hostname(), (nodeIndex) -> "cfg" + nodeIndex);
}
- tester.prepareAndActivateInfraApplication(configSrvApp);
+ tester.prepareAndActivateInfraApplication(configSrvApp, hostType.childNodeType());
// Expected number of hosts and children are provisioned
NodeList allNodes = tester.nodeRepository().nodes().list().not().state(State.deprovisioned);
@@ -413,7 +413,7 @@ public class HostCapacityMaintainerTest {
tester.nodeRepository().nodes().deprovision(hostToRemove.get().hostname(), Agent.system, tester.clock().instant());
// Redeployment of config server application retires node
- tester.prepareAndActivateInfraApplication(configSrvApp);
+ tester.prepareAndActivateInfraApplication(configSrvApp, hostType.childNodeType());
assertTrue("Redeployment retires node", nodeToRemove.get().allocation().get().membership().retired());
// Config server becomes removable (done by RetiredExpirer in a real system) and redeployment moves it
@@ -421,8 +421,8 @@ public class HostCapacityMaintainerTest {
int removedIndex = nodeToRemove.get().allocation().get().membership().index();
tester.nodeRepository().nodes().setRemovable(NodeList.of(nodeToRemove.get()), true);
tester.nodeRepository().nodes().setRemovable(NodeList.of(hostToRemove.get()), true);
- tester.prepareAndActivateInfraApplication(configSrvApp);
- tester.prepareAndActivateInfraApplication(hostApp);
+ tester.prepareAndActivateInfraApplication(configSrvApp, hostType.childNodeType());
+ tester.prepareAndActivateInfraApplication(hostApp, hostType);
tester.nodeRepository().nodes().markNodeAvailableForNewAllocation(nodeToRemove.get().hostname(), Agent.nodeAdmin, "Readied by host-admin");
tester.nodeRepository().nodes().markNodeAvailableForNewAllocation(hostToRemove.get().hostname(), Agent.nodeAdmin, "Readied by host-admin");
assertEquals(2, tester.nodeRepository().nodes().list().nodeType(hostType.childNodeType()).state(Node.State.active).size());
@@ -443,13 +443,13 @@ public class HostCapacityMaintainerTest {
// Deployment by the removed host has no effect
HostName.setHostNameForTestingOnly("cfg2.example.com");
- tester.prepareAndActivateInfraApplication(configSrvApp);
+ tester.prepareAndActivateInfraApplication(configSrvApp, hostType.childNodeType());
assertEquals(List.of(), dynamicProvisioningTester.hostProvisioner.provisionedHosts());
// Deployment on another config server starts provisioning a new host and child
HostName.setHostNameForTestingOnly("cfg3.example.com");
assertEquals(0, tester.nodeRepository().nodes().list(Node.State.reserved).nodeType(hostType.childNodeType()).size());
- assertEquals(2, tester.prepareAndActivateInfraApplication(configSrvApp).size());
+ assertEquals(2, tester.prepareAndActivateInfraApplication(configSrvApp, hostType.childNodeType()).size());
assertEquals(1, tester.nodeRepository().nodes().list(Node.State.reserved).nodeType(hostType.childNodeType()).size());
Node newNode = tester.nodeRepository().nodes().list(Node.State.reserved).nodeType(hostType.childNodeType()).first().get();
@@ -458,18 +458,18 @@ public class HostCapacityMaintainerTest {
List<ProvisionedHost> newHosts = dynamicProvisioningTester.hostProvisioner.provisionedHosts();
assertEquals(1, newHosts.size());
tester.move(Node.State.ready, newHosts.get(0).hostHostname());
- tester.prepareAndActivateInfraApplication(hostApp);
+ tester.prepareAndActivateInfraApplication(hostApp, hostType);
assertEquals(3, tester.nodeRepository().nodes().list(Node.State.active).nodeType(hostType).size());
// Redeployment of config server app actives new node
- tester.prepareAndActivateInfraApplication(configSrvApp);
+ tester.prepareAndActivateInfraApplication(configSrvApp, hostType.childNodeType());
newNode = tester.nodeRepository().nodes().node(newNode.hostname()).get();
assertSame(Node.State.active, newNode.state());
assertEquals("Removed index is reused", removedIndex, newNode.allocation().get().membership().index());
// Next redeployment does nothing
NodeList nodesBefore = tester.nodeRepository().nodes().list().nodeType(hostType.childNodeType());
- tester.prepareAndActivateInfraApplication(configSrvApp);
+ tester.prepareAndActivateInfraApplication(configSrvApp, hostType.childNodeType());
NodeList nodesAfter = tester.nodeRepository().nodes().list().nodeType(hostType.childNodeType());
assertEquals(nodesBefore, nodesAfter);
}
@@ -592,11 +592,9 @@ public class HostCapacityMaintainerTest {
Duration.ofHours(1),
Duration.ofHours(1)).maintain();
+ // Host and children can now be removed.
tester.provisioningTester.activateTenantHosts();
- // Hosts move themselves to parked (via ready) once they've synced up their logs to archive and are then deprovisioned
- tester.nodeRepository.nodes().list(State.dirty).forEach(node ->
- tester.nodeRepository.nodes().markNodeAvailableForNewAllocation(node.hostname(), Agent.nodeAdmin, "Readied by host-admin"));
- tester.deprovisioner.maintain();
+ tester.maintain();
assertEquals(List.of(), tester.nodeRepository.nodes().list().not().state(State.deprovisioned).asList());
}
@@ -647,7 +645,7 @@ public class HostCapacityMaintainerTest {
for (var hostname : provisionedHostnames) {
tester.provisioningTester.move(Node.State.ready, hostname);
}
- tester.provisioningTester.activateTenantHosts();
+ tester.provisioningTester.prepareAndActivateInfraApplication(DynamicProvisioningTester.tenantHostApp.getApplicationId(), NodeType.host);
NodeList activeHosts = tester.provisioningTester.nodeRepository().nodes()
.list(Node.State.active)
.nodeType(NodeType.host)
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/HostFlavorUpgraderTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/HostFlavorUpgraderTest.java
index 9fe323201f0..6224143aabf 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/HostFlavorUpgraderTest.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/HostFlavorUpgraderTest.java
@@ -17,7 +17,7 @@ import com.yahoo.vespa.hosted.provision.testutils.MockHostProvisioner.Behaviour;
import org.junit.jupiter.api.Test;
import java.time.Duration;
-import java.util.List;
+import java.util.Map;
import static org.junit.jupiter.api.Assertions.assertEquals;
@@ -41,7 +41,7 @@ class HostFlavorUpgraderTest {
NodeResources.DiskSpeed.fast, NodeResources.StorageType.remote);
ClusterSpec spec = ClusterSpec.request(ClusterSpec.Type.content, ClusterSpec.Id.from("c1")).vespaVersion("1").build();
Capacity capacity = Capacity.from(new ClusterResources(2, 1, resources));
- List<MockDeployer.ApplicationContext> applications = List.of(new MockDeployer.ApplicationContext(app, spec, capacity));
+ Map<ApplicationId, MockDeployer.ApplicationContext> applications = Map.of(app, new MockDeployer.ApplicationContext(app, spec, capacity));
MockDeployer deployer = new MockDeployer(tester.provisioner(), tester.clock(), applications);
HostFlavorUpgrader upgrader = new HostFlavorUpgrader(tester.nodeRepository(), Duration.ofDays(1),
new TestMetric(), deployer, hostProvisioner);
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 2f239f92c3f..563b76327e6 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
@@ -22,10 +22,10 @@ import com.yahoo.vespa.hosted.provision.provisioning.ProvisioningTester;
import com.yahoo.vespa.hosted.provision.testutils.MockDeployer;
import com.yahoo.vespa.orchestrator.OrchestrationException;
import com.yahoo.vespa.orchestrator.Orchestrator;
-import com.yahoo.vespa.service.duper.TenantHostApplication;
import org.junit.Test;
import java.time.Duration;
+import java.util.Collections;
import java.util.HashSet;
import java.util.List;
@@ -111,7 +111,9 @@ public class InactiveAndFailedExpirerTest {
MockDeployer deployer = new MockDeployer(
tester.provisioner(),
tester.clock(),
- List.of(new MockDeployer.ApplicationContext(applicationId, cluster,
+ Collections.singletonMap(
+ applicationId,
+ new MockDeployer.ApplicationContext(applicationId, cluster,
Capacity.from(new ClusterResources(2, 1, nodeResources),
false, true))
)
@@ -159,15 +161,19 @@ public class InactiveAndFailedExpirerTest {
tester.makeReadyHosts(2, nodeResources);
// Activate and deallocate
- TenantHostApplication tenantHostApp = new TenantHostApplication();
- tester.prepareAndActivateInfraApplication(tenantHostApp);
- assertEquals(2, tester.getNodes(tenantHostApp.getApplicationId(), Node.State.active).size());
- tester.activate(tenantHostApp.getApplicationId(), List.of());
- List<Node> dirtyNodes = tester.getNodes(tenantHostApp.getApplicationId(), Node.State.dirty).asList();
- assertEquals(2, dirtyNodes.size());
+ ClusterSpec cluster = ClusterSpec.request(ClusterSpec.Type.content, ClusterSpec.Id.from("test")).vespaVersion("6.42").build();
+ List<HostSpec> preparedNodes = tester.prepare(applicationId, cluster, Capacity.fromRequiredNodeType(NodeType.host));
+ tester.activate(applicationId, new HashSet<>(preparedNodes));
+ assertEquals(2, tester.getNodes(applicationId, Node.State.active).size());
+ tester.activate(applicationId, List.of());
+ List<Node> inactiveNodes = tester.getNodes(applicationId, Node.State.inactive).asList();
+ assertEquals(2, inactiveNodes.size());
// Nodes marked for deprovisioning are moved to dirty and then parked when readied by host-admin
- tester.patchNodes(dirtyNodes, (node) -> node.withWantToRetire(true, true, Agent.system, tester.clock().instant()));
+ 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();
+
NodeList expired = tester.nodeRepository().nodes().list(Node.State.dirty);
assertEquals(2, expired.size());
expired.forEach(node -> tester.nodeRepository().nodes().markNodeAvailableForNewAllocation(node.hostname(), Agent.operator, "Readied by host-admin"));
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 4d2816cb14f..a07a4f2c72a 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
@@ -1,7 +1,6 @@
// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.vespa.hosted.provision.maintenance;
-import com.yahoo.component.Version;
import com.yahoo.config.provision.ActivationContext;
import com.yahoo.config.provision.ApplicationId;
import com.yahoo.config.provision.ApplicationTransaction;
@@ -28,8 +27,6 @@ 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.service.duper.InfraApplication;
-import com.yahoo.vespa.service.duper.TenantHostApplication;
import java.time.Clock;
import java.time.Duration;
@@ -38,7 +35,6 @@ import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
-import java.util.stream.Collectors;
import static org.junit.Assert.assertEquals;
@@ -50,6 +46,7 @@ public class NodeFailTester {
public static final NodeResources nodeResources = new NodeResources(2, 8, 500, 1);
// Immutable components
+ public static final ApplicationId tenantHostApp = ApplicationId.from("hosted-vespa", "tenant-host", "default");
public static final ApplicationId app1 = ApplicationId.from("foo1", "bar", "fuz");
public static final ApplicationId app2 = ApplicationId.from("foo2", "bar", "fuz");
public static final ClusterSpec.Id testCluster = ClusterSpec.Id.from("test");
@@ -77,11 +74,9 @@ public class NodeFailTester {
provisioner = tester.provisioner();
}
- private void initializeMaintainers(List<MockDeployer.ApplicationContext> apps) {
- Map<ApplicationId, MockDeployer.ApplicationContext> appsMap = apps.stream()
- .collect(Collectors.toMap(MockDeployer.ApplicationContext::id, context -> context));
+ private void initializeMaintainers(Map<ApplicationId, MockDeployer.ApplicationContext> apps) {
deployer = new MockDeployer(provisioner, tester.clock(), apps);
- serviceMonitor = new ServiceMonitorStub(appsMap, nodeRepository);
+ serviceMonitor = new ServiceMonitorStub(apps, nodeRepository);
metric = new TestMetric();
failer = createFailer();
updater = createUpdater();
@@ -104,9 +99,9 @@ public class NodeFailTester {
assertEquals(capacity1.minResources().nodes(), tester.nodeRepository.nodes().list(Node.State.active).owner(app1).size());
assertEquals(capacity2.minResources().nodes(), tester.nodeRepository.nodes().list(Node.State.active).owner(app2).size());
- List<MockDeployer.ApplicationContext> apps = List.of(
- new MockDeployer.ApplicationContext(app1, clusterApp1, capacity1),
- new MockDeployer.ApplicationContext(app2, clusterApp2, capacity2));
+ Map<ApplicationId, MockDeployer.ApplicationContext> apps = Map.of(
+ app1, new MockDeployer.ApplicationContext(app1, clusterApp1, capacity1),
+ app2, new MockDeployer.ApplicationContext(app2, clusterApp2, capacity2));
tester.initializeMaintainers(apps);
return tester;
}
@@ -117,24 +112,24 @@ public class NodeFailTester {
tester.tester.makeReadyHosts(hostCount, new NodeResources(2, 8, 20, 10));
// Create tenant host application
- Version version = Version.fromString("6.75.0");
- TenantHostApplication tenantHostApp = new TenantHostApplication();
- ClusterSpec clusterApp1 = ClusterSpec.request(ClusterSpec.Type.container, testCluster).vespaVersion(version).build();
- ClusterSpec clusterApp2 = ClusterSpec.request(ClusterSpec.Type.content, testCluster).vespaVersion(version).build();
+ ClusterSpec clusterNodeAdminApp = ClusterSpec.request(ClusterSpec.Type.container, ClusterSpec.Id.from("node-admin")).vespaVersion("6.42").build();
+ ClusterSpec clusterApp1 = ClusterSpec.request(ClusterSpec.Type.container, testCluster).vespaVersion("6.75.0").build();
+ ClusterSpec clusterApp2 = ClusterSpec.request(ClusterSpec.Type.content, testCluster).vespaVersion("6.75.0").build();
+ Capacity allHosts = Capacity.fromRequiredNodeType(NodeType.host);
Capacity capacity1 = Capacity.from(new ClusterResources(containerCount, 1, new NodeResources(1, 4, 10, 0.3)), false, true);
Capacity capacity2 = Capacity.from(new ClusterResources(contentCount, 1, new NodeResources(1, 4, 10, 0.3)), false, true);
- tester.tester.prepareAndActivateInfraApplication(tenantHostApp, version);
+ tester.activate(tenantHostApp, clusterNodeAdminApp, allHosts);
tester.activate(app1, clusterApp1, capacity1);
tester.activate(app2, clusterApp2, capacity2);
assertEquals(Set.of(tester.nodeRepository.nodes().list().nodeType(NodeType.host).asList()),
- Set.of(tester.nodeRepository.nodes().list(Node.State.active).owner(tenantHostApp.getApplicationId()).asList()));
+ Set.of(tester.nodeRepository.nodes().list(Node.State.active).owner(tenantHostApp).asList()));
assertEquals(capacity1.minResources().nodes(), tester.nodeRepository.nodes().list(Node.State.active).owner(app1).size());
assertEquals(capacity2.minResources().nodes(), tester.nodeRepository.nodes().list(Node.State.active).owner(app2).size());
- List<MockDeployer.ApplicationContext> apps = List.of(
- new MockDeployer.ApplicationContext(tenantHostApp, version),
- new MockDeployer.ApplicationContext(app1, clusterApp1, capacity1),
- new MockDeployer.ApplicationContext(app2, clusterApp2, capacity2));
+ Map<ApplicationId, MockDeployer.ApplicationContext> apps = Map.of(
+ tenantHostApp, new MockDeployer.ApplicationContext(tenantHostApp, clusterNodeAdminApp, allHosts),
+ app1, new MockDeployer.ApplicationContext(app1, clusterApp1, capacity1),
+ app2, new MockDeployer.ApplicationContext(app2, clusterApp2, capacity2));
tester.initializeMaintainers(apps);
return tester;
}
@@ -144,24 +139,24 @@ public class NodeFailTester {
tester.tester.makeReadyNodes(numberOfHosts, new NodeResources(4, 16, 400, 10), NodeType.host, 8);
// Create applications
- Version version = Version.fromString("6.75.0");
- TenantHostApplication tenantHostApp = new TenantHostApplication();
- ClusterSpec clusterApp1 = ClusterSpec.request(ClusterSpec.Type.container, testCluster).vespaVersion(version).build();
- ClusterSpec clusterApp2 = ClusterSpec.request(ClusterSpec.Type.content, testCluster).vespaVersion(version).build();
+ ClusterSpec clusterNodeAdminApp = ClusterSpec.request(ClusterSpec.Type.container, ClusterSpec.Id.from("node-admin")).vespaVersion("6.42").build();
+ ClusterSpec clusterApp1 = ClusterSpec.request(ClusterSpec.Type.container, testCluster).vespaVersion("6.75.0").build();
+ ClusterSpec clusterApp2 = ClusterSpec.request(ClusterSpec.Type.content, testCluster).vespaVersion("6.75.0").build();
+ Capacity allHosts = Capacity.fromRequiredNodeType(NodeType.host);
Capacity capacity1 = Capacity.from(new ClusterResources(3, 1, new NodeResources(1, 4, 100, 0.3)), false, true);
Capacity capacity2 = Capacity.from(new ClusterResources(5, 1, new NodeResources(1, 4, 100, 0.3)), false, true);
- tester.tester.prepareAndActivateInfraApplication(tenantHostApp, version);
+ tester.activate(tenantHostApp, clusterNodeAdminApp, allHosts);
tester.activate(app1, clusterApp1, capacity1);
tester.activate(app2, clusterApp2, capacity2);
assertEquals(Set.of(tester.nodeRepository.nodes().list().nodeType(NodeType.host).asList()),
- Set.of(tester.nodeRepository.nodes().list(Node.State.active).owner(tenantHostApp.getApplicationId()).asList()));
+ Set.of(tester.nodeRepository.nodes().list(Node.State.active).owner(tenantHostApp).asList()));
assertEquals(capacity1.minResources().nodes(), tester.nodeRepository.nodes().list(Node.State.active).owner(app1).size());
assertEquals(capacity2.minResources().nodes(), tester.nodeRepository.nodes().list(Node.State.active).owner(app2).size());
- List<MockDeployer.ApplicationContext> apps = List.of(
- new MockDeployer.ApplicationContext(tenantHostApp, version),
- new MockDeployer.ApplicationContext(app1, clusterApp1, capacity1),
- new MockDeployer.ApplicationContext(app2, clusterApp2, capacity2));
+ Map<ApplicationId, MockDeployer.ApplicationContext> apps = Map.of(
+ tenantHostApp, new MockDeployer.ApplicationContext(tenantHostApp, clusterNodeAdminApp, allHosts),
+ app1, new MockDeployer.ApplicationContext(app1, clusterApp1, capacity1),
+ app2, new MockDeployer.ApplicationContext(app2, clusterApp2, capacity2));
tester.initializeMaintainers(apps);
return tester;
}
@@ -172,7 +167,7 @@ public class NodeFailTester {
public static NodeFailTester withOneUndeployedApplication(Capacity capacity, ClusterSpec spec) {
NodeFailTester tester = new NodeFailTester();
- List<MockDeployer.ApplicationContext> apps = List.of(new MockDeployer.ApplicationContext(app1, spec, capacity));
+ Map<ApplicationId, MockDeployer.ApplicationContext> apps = Map.of(app1, new MockDeployer.ApplicationContext(app1, spec, capacity));
tester.initializeMaintainers(apps);
return tester;
}
@@ -182,16 +177,23 @@ public class NodeFailTester {
tester.createReadyNodes(count, nodeType);
// Create application
- InfraApplication application = ProvisioningTester.infraApplication(nodeType);
- Version version = Version.fromString("6.42");
- tester.tester.prepareAndActivateInfraApplication(application, version);
+ 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.nodes().list(Node.State.active).nodeType(nodeType).size());
- List<MockDeployer.ApplicationContext> apps = List.of(new MockDeployer.ApplicationContext(application, version));
+ Map<ApplicationId, MockDeployer.ApplicationContext> apps = Map.of(
+ app1, new MockDeployer.ApplicationContext(app1, clusterApp1, allNodes));
tester.initializeMaintainers(apps);
return tester;
}
+ public static NodeFailTester withNoApplications() {
+ NodeFailTester tester = new NodeFailTester();
+ tester.initializeMaintainers(Map.of());
+ return tester;
+ }
+
public void runMaintainers() {
updater.maintain();
failer.maintain();
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 55cb2a7baae..be43d39cdeb 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
@@ -2,6 +2,7 @@
package com.yahoo.vespa.hosted.provision.maintenance;
import com.yahoo.component.Version;
+import com.yahoo.config.provision.ApplicationId;
import com.yahoo.config.provision.ClusterMembership;
import com.yahoo.config.provision.ClusterSpec;
import com.yahoo.config.provision.NodeType;
@@ -37,11 +38,13 @@ public class OsUpgradeActivatorTest {
var version0 = Version.fromString("7.0");
// Create infrastructure nodes
+ var configHostApplication = ApplicationId.from("hosted-vespa", "configserver-host", "default");
var configHostNodes = tester.makeReadyNodes(3, "default", NodeType.confighost, 1);
- tester.prepareAndActivateInfraApplication(NodeType.confighost, version0);
+ tester.prepareAndActivateInfraApplication(configHostApplication, NodeType.confighost, version0);
+ var tenantHostApplication = ApplicationId.from("hosted-vespa", "tenant-host", "default");
var tenantHostNodes = tester.makeReadyNodes(3, "default", NodeType.host, 1);
- tester.prepareAndActivateInfraApplication(NodeType.host, version0);
+ tester.prepareAndActivateInfraApplication(tenantHostApplication, NodeType.host, version0);
tester.clock().advance(Duration.ofDays(1).plusSeconds(1)); // Let grace period pass
var allNodes = new ArrayList<>(configHostNodes);
@@ -64,7 +67,7 @@ public class OsUpgradeActivatorTest {
// Tenant hosts start upgrading to next Vespa version
var version1 = Version.fromString("7.1");
- tester.prepareAndActivateInfraApplication(NodeType.host, version1);
+ tester.prepareAndActivateInfraApplication(tenantHostApplication, NodeType.host, version1);
assertEquals("Wanted version of " + NodeType.host + " is raised", version1,
minWantedVersion(tenantHostNodes));
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 cad5a87acfd..2df38a38d49 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
@@ -26,6 +26,7 @@ import org.junit.Test;
import java.time.Duration;
import java.time.Instant;
import java.util.List;
+import java.util.Map;
import static org.junit.Assert.assertEquals;
@@ -220,9 +221,9 @@ public class PeriodicApplicationMaintainerTest {
Fixture() {
this.tester = new ProvisioningTester.Builder().build();
this.nodeRepository = tester.nodeRepository();
- List<MockDeployer.ApplicationContext> apps = List.of(
- new MockDeployer.ApplicationContext(app1, clusterApp1, Capacity.from(new ClusterResources(wantedNodesApp1, 1, nodeResources))),
- new MockDeployer.ApplicationContext(app2, clusterApp2, Capacity.from(new ClusterResources(wantedNodesApp2, 1, nodeResources))));
+ Map<ApplicationId, MockDeployer.ApplicationContext> apps = Map.of(
+ app1, new MockDeployer.ApplicationContext(app1, clusterApp1, Capacity.from(new ClusterResources(wantedNodesApp1, 1, nodeResources))),
+ app2, new MockDeployer.ApplicationContext(app2, clusterApp2, Capacity.from(new ClusterResources(wantedNodesApp2, 1, nodeResources))));
this.deployer = new MockDeployer(tester.provisioner(), nodeRepository.clock(), apps);
this.maintainer = new TestablePeriodicApplicationMaintainer(deployer, nodeRepository, Duration.ofDays(1), // Long duration to prevent scheduled runs during test
Duration.ofMinutes(30));
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 bd2cc98cea7..5bdff2d3a3a 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
@@ -28,6 +28,7 @@ import org.junit.Test;
import java.time.Duration;
import java.util.Comparator;
import java.util.List;
+import java.util.Map;
import java.util.Optional;
import static com.yahoo.vespa.hosted.provision.maintenance.Rebalancer.waitTimeAfterPreviousDeployment;
@@ -138,7 +139,7 @@ public class RebalancerTest {
@Test
public void testRebalancingDoesNotReduceSwitchExclusivity() {
Capacity capacity = Capacity.from(new ClusterResources(4, 1, RebalancerTester.cpuResources), true, false);
- List<ApplicationContext> apps = List.of(new ApplicationContext(cpuApp, RebalancerTester.clusterSpec("c"), capacity));
+ Map<ApplicationId, ApplicationContext> apps = Map.of(cpuApp, new ApplicationContext(cpuApp, RebalancerTester.clusterSpec("c"), capacity));
RebalancerTester tester = new RebalancerTester(4, apps);
// Application is deployed and balanced across exclusive switches
@@ -176,11 +177,11 @@ public class RebalancerTest {
RebalancerTester() {
this(3,
- List.of(new ApplicationContext(cpuApp, clusterSpec("c"), Capacity.from(new ClusterResources(1, 1, cpuResources))),
- new ApplicationContext(memoryApp, clusterSpec("c"), Capacity.from(new ClusterResources(1, 1, memResources)))));
+ Map.of(cpuApp, new ApplicationContext(cpuApp, clusterSpec("c"), Capacity.from(new ClusterResources(1, 1, cpuResources))),
+ memoryApp, new ApplicationContext(memoryApp, clusterSpec("c"), Capacity.from(new ClusterResources(1, 1, memResources)))));
}
- RebalancerTester(int hostCount, List<ApplicationContext> apps) {
+ RebalancerTester(int hostCount, Map<ApplicationId, ApplicationContext> apps) {
deployer = new MockDeployer(tester.provisioner(), tester.clock(), apps);
rebalancer = new Rebalancer(deployer, tester.nodeRepository(), metric, Duration.ofMinutes(1));
List<Node> hosts = tester.makeReadyNodes(hostCount, "flat", NodeType.host, 8);
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 f42044c2944..aaa4bffc000 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
@@ -36,6 +36,7 @@ import org.junit.Test;
import java.time.Duration;
import java.time.Instant;
+import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
@@ -98,9 +99,9 @@ public class RetiredExpirerTest {
MockDeployer deployer =
new MockDeployer(provisioner,
clock,
- List.of(new MockDeployer.ApplicationContext(applicationId,
- cluster,
- Capacity.from(new ClusterResources(wantedNodes, 1, nodeResources)))));
+ Collections.singletonMap(applicationId, new MockDeployer.ApplicationContext(applicationId,
+ cluster,
+ Capacity.from(new ClusterResources(wantedNodes, 1, nodeResources)))));
createRetiredExpirer(deployer).run();
assertEquals(3, nodeRepository.nodes().list(Node.State.active).owner(applicationId).size());
assertEquals(4, nodeRepository.nodes().list(Node.State.inactive).owner(applicationId).size());
@@ -132,9 +133,11 @@ public class RetiredExpirerTest {
MockDeployer deployer =
new MockDeployer(provisioner,
clock,
- List.of(new MockDeployer.ApplicationContext(applicationId,
- cluster,
- Capacity.from(new ClusterResources(wantedNodes, 1, nodeResources)))));
+ Collections.singletonMap(
+ applicationId,
+ new MockDeployer.ApplicationContext(applicationId,
+ cluster,
+ Capacity.from(new ClusterResources(wantedNodes, 1, nodeResources)))));
// Allow the 1st and 3rd retired nodes permission to inactivate
doNothing()
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 ec49828241b..6895f5eeae7 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
@@ -23,7 +23,9 @@ import org.junit.Test;
import java.time.Duration;
import java.util.HashSet;
import java.util.List;
+import java.util.Map;
import java.util.Set;
+import java.util.stream.Collectors;
import java.util.stream.Stream;
import static org.junit.Assert.assertEquals;
@@ -233,7 +235,7 @@ public class SwitchRebalancerTest {
.map(spec -> new ClusterContext(app, spec, capacity))
.toList();
ApplicationContext context = new ApplicationContext(app, clusterContexts);
- return new MockDeployer(tester.provisioner(), tester.clock(), List.of(context));
+ return new MockDeployer(tester.provisioner(), tester.clock(), Map.of(app, context));
}
}
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 0fa9aa610a4..ada96b3f793 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
@@ -219,7 +219,7 @@ public class OsVersionsTest {
var versions = new OsVersions(tester.nodeRepository(), Cloud.builder().dynamicProvisioning(true).build());
setMaxActiveUpgrades(Integer.MAX_VALUE);
int hostCount = 3;
- provisionInfraApplication(hostCount, NodeType.host);
+ provisionInfraApplication(hostCount, infraApplication, NodeType.host);
Supplier<NodeList> hostNodes = () -> tester.nodeRepository().nodes().list()
.nodeType(NodeType.host)
.not().state(Node.State.deprovisioned);
@@ -326,7 +326,7 @@ public class OsVersionsTest {
.account(CloudAccount.from("000000000000"))
.build());
- provisionInfraApplication(hostCount, NodeType.host, NodeResources.StorageType.remote, NodeResources.Architecture.x86_64);
+ provisionInfraApplication(hostCount, infraApplication, NodeType.host, NodeResources.StorageType.remote, NodeResources.Architecture.x86_64);
Supplier<NodeList> hostNodes = () -> tester.nodeRepository().nodes().list().nodeType(NodeType.host);
// New target is set
@@ -371,8 +371,8 @@ public class OsVersionsTest {
setMaxActiveUpgrades(1);
var versions = new OsVersions(tester.nodeRepository(), Cloud.defaultCloud());
int hostCount = 3;
- provisionInfraApplication(hostCount, NodeType.host);
- provisionInfraApplication(hostCount, NodeType.confighost);
+ provisionInfraApplication(hostCount, infraApplication, NodeType.host);
+ provisionInfraApplication(hostCount, ApplicationId.from("hosted-vespa", "confighost", "default"), NodeType.confighost);
Supplier<NodeList> hosts = () -> tester.nodeRepository().nodes().list().nodeType(NodeType.host,
NodeType.confighost);
@@ -406,7 +406,7 @@ public class OsVersionsTest {
int hostCount = 5;
ApplicationId app1 = ApplicationId.from("t1", "a1", "i1");
ApplicationId app2 = ApplicationId.from("t2", "a2", "i2");
- provisionInfraApplication(hostCount, NodeType.host);
+ provisionInfraApplication(hostCount, infraApplication, NodeType.host);
deployApplication(app1);
deployApplication(app2);
Supplier<NodeList> hosts = () -> tester.nodeRepository().nodes().list().nodeType(NodeType.host);
@@ -481,7 +481,7 @@ public class OsVersionsTest {
int hostCount = 3;
setMaxActiveUpgrades(hostCount);
var versions = new OsVersions(tester.nodeRepository(), Cloud.defaultCloud());
- provisionInfraApplication(hostCount, NodeType.proxyhost);
+ provisionInfraApplication(hostCount, infraApplication, NodeType.proxyhost);
Supplier<NodeList> hosts = () -> tester.nodeRepository().nodes().list().nodeType(NodeType.proxyhost);
// All hosts are on initial version
@@ -532,23 +532,25 @@ public class OsVersionsTest {
}
private List<Node> provisionInfraApplication(int nodeCount) {
- return provisionInfraApplication(nodeCount, NodeType.host);
+ return provisionInfraApplication(nodeCount, infraApplication, NodeType.host);
}
- private List<Node> provisionInfraApplication(int nodeCount, NodeType nodeType) {
- return provisionInfraApplication(nodeCount, nodeType, NodeResources.StorageType.local);
+ private List<Node> provisionInfraApplication(int nodeCount, ApplicationId application,
+ NodeType nodeType) {
+ return provisionInfraApplication(nodeCount, application, nodeType, NodeResources.StorageType.local);
}
- private List<Node> provisionInfraApplication(int nodeCount, NodeType nodeType, NodeResources.StorageType storageType) {
- return provisionInfraApplication(nodeCount, nodeType, storageType, NodeResources.Architecture.x86_64);
+ private List<Node> provisionInfraApplication(int nodeCount, ApplicationId application,
+ NodeType nodeType, NodeResources.StorageType storageType) {
+ return provisionInfraApplication(nodeCount, application, nodeType, storageType, NodeResources.Architecture.x86_64);
}
- private List<Node> provisionInfraApplication(int nodeCount, NodeType nodeType,
+ private List<Node> provisionInfraApplication(int nodeCount, ApplicationId application, NodeType nodeType,
NodeResources.StorageType storageType, NodeResources.Architecture architecture) {
var nodes = tester.makeReadyNodes(nodeCount, new NodeResources(48, 128, 2000, 10,
NodeResources.DiskSpeed.fast, storageType, architecture),
nodeType, 10);
- tester.prepareAndActivateInfraApplication(nodeType);
+ tester.prepareAndActivateInfraApplication(application, nodeType);
tester.clock().advance(Duration.ofDays(1).plusSeconds(1)); // Let grace period pass
return nodes.stream()
.map(Node::hostname)
@@ -585,10 +587,11 @@ public class OsVersionsTest {
tester.patchNodes(nodes, (node) -> {
Optional<Version> wantedOsVersion = node.status().osVersion().wanted();
if (node.status().wantToDeprovision()) {
+ ApplicationId application = node.allocation().get().owner();
tester.nodeRepository().nodes().park(node.hostname(), true, Agent.system,
getClass().getSimpleName());
tester.nodeRepository().nodes().removeRecursively(node.hostname());
- node = provisionInfraApplication(1, nodeType).get(0);
+ node = provisionInfraApplication(1, application, nodeType).get(0);
}
return node.with(node.status().withOsVersion(node.status().osVersion().withCurrent(wantedOsVersion)));
});
@@ -599,6 +602,7 @@ public class OsVersionsTest {
tester.patchNodes(nodes, (node) -> {
Optional<Version> wantedOsVersion = node.status().osVersion().wanted();
if (node.status().wantToRebuild()) {
+ ApplicationId application = node.allocation().get().owner();
tester.nodeRepository().nodes().park(node.hostname(), true, Agent.system,
getClass().getSimpleName());
tester.nodeRepository().nodes().removeRecursively(node.hostname());
@@ -606,7 +610,7 @@ public class OsVersionsTest {
.build();
node = tester.nodeRepository().nodes().addNodes(List.of(newNode), Agent.system).get(0);
node = tester.move(Node.State.ready, node);
- tester.prepareAndActivateInfraApplication(nodeType);
+ tester.prepareAndActivateInfraApplication(application, nodeType);
node = tester.nodeRepository().nodes().node(node.hostname()).get();
}
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 50eeef69448..ab99a44cbab 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
@@ -44,7 +44,8 @@ public class AclProvisioningTest {
// Populate repo
tester.makeReadyNodes(10, new NodeResources(1, 4, 10, 1));
List<Node> host = tester.makeReadyNodes(1, new NodeResources(1, 4, 10, 1), NodeType.host);
- tester.activateTenantHosts();
+ ApplicationId zoneApplication = ProvisioningTester.applicationId();
+ tester.deploy(zoneApplication, Capacity.fromRequiredNodeType(NodeType.host));
tester.makeReadyChildren(1, new NodeResources(1, 4, 10, 1),
host.get(0).hostname());
List<Node> proxyNodes = tester.makeReadyNodes(3, new NodeResources(1, 4, 10, 1), NodeType.proxy);
@@ -135,10 +136,11 @@ public class AclProvisioningTest {
tester.makeReadyNodes(3, "default", NodeType.proxy);
// Deploy zone application
- tester.prepareAndActivateInfraApplication(NodeType.proxy);
+ ApplicationId zoneApplication = ProvisioningTester.applicationId();
+ tester.deploy(zoneApplication, Capacity.fromRequiredNodeType(NodeType.proxy));
// Get trusted nodes for first proxy node
- NodeList proxyNodes = tester.nodeRepository().nodes().list().nodeType(NodeType.proxy);
+ NodeList proxyNodes = tester.nodeRepository().nodes().list().owner(zoneApplication);
Node node = proxyNodes.first().get();
NodeAcl nodeAcl = node.acl(tester.nodeRepository().nodes().list(), tester.nodeRepository().loadBalancers(), tester.nodeRepository().zone());
@@ -178,8 +180,8 @@ public class AclProvisioningTest {
tester.makeReadyNodes(3, "default", NodeType.controller);
// Allocate
- tester.prepareAndActivateInfraApplication(NodeType.controller);
- List<Node> controllers = tester.nodeRepository().nodes().list().nodeType(NodeType.controller).asList();
+ ApplicationId controllerApplication = ProvisioningTester.applicationId();
+ 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().nodes().list(), tester.nodeRepository().loadBalancers(), tester.nodeRepository().zone());
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 0bb6dc61d1b..a03811778d2 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
@@ -5,9 +5,9 @@ import com.yahoo.config.provision.ApplicationId;
import com.yahoo.config.provision.ClusterSpec;
import com.yahoo.config.provision.Environment;
import com.yahoo.config.provision.HostSpec;
-import com.yahoo.config.provision.NodeAllocationException;
import com.yahoo.config.provision.NodeResources;
import com.yahoo.config.provision.NodeType;
+import com.yahoo.config.provision.NodeAllocationException;
import com.yahoo.config.provision.RegionName;
import com.yahoo.config.provision.Zone;
import com.yahoo.vespa.flags.InMemoryFlagSource;
@@ -57,6 +57,7 @@ public class InPlaceResizeProvisionTest {
private final ProvisioningTester tester = new ProvisioningTester.Builder()
.flagSource(flagSource)
.zone(new Zone(Environment.prod, RegionName.from("us-east"))).build();
+ private final ApplicationId infraApp = ProvisioningTester.applicationId();
private final ApplicationId app = ProvisioningTester.applicationId();
@Test
@@ -242,7 +243,7 @@ public class InPlaceResizeProvisionTest {
private void addParentHosts(int count, NodeResources resources) {
tester.makeReadyNodes(count, resources, NodeType.host, 4);
- tester.activateTenantHosts();
+ tester.prepareAndActivateInfraApplication(infraApp, NodeType.host);
}
private void assertSizeAndResources(ClusterSpec cluster, int clusterSize, NodeResources resources) {
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 53054ba3f24..673e7610514 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
@@ -3,7 +3,6 @@ package com.yahoo.vespa.hosted.provision.provisioning;
import ai.vespa.http.DomainName;
import com.google.common.collect.Iterators;
-import com.yahoo.component.Version;
import com.yahoo.config.provision.ApplicationId;
import com.yahoo.config.provision.Capacity;
import com.yahoo.config.provision.Cloud;
@@ -62,6 +61,7 @@ public class LoadBalancerProvisionerTest {
private final ApplicationId app1 = ApplicationId.from("tenant1", "application1", "default");
private final ApplicationId app2 = ApplicationId.from("tenant2", "application2", "default");
+ private final ApplicationId infraApp1 = ApplicationId.from("vespa", "tenant-host", "default");
private final NodeResources nodeResources = new NodeResources(2, 4, 10, 0.3);
private final InMemoryFlagSource flagSource = new InMemoryFlagSource();
@@ -212,10 +212,11 @@ public class LoadBalancerProvisionerTest {
@Test
public void does_not_provision_load_balancers_for_non_tenant_node_type() {
- var tenantHostApp = ProvisioningTester.infraApplication(NodeType.host);
- tester.prepareAndActivateInfraApplication(tenantHostApp);
+ tester.activate(infraApp1, prepare(infraApp1, Capacity.fromRequiredNodeType(NodeType.host),
+ clusterRequest(ClusterSpec.Type.container,
+ ClusterSpec.Id.from("tenant-host"))));
assertTrue("No load balancer provisioned", tester.loadBalancerService().instances().isEmpty());
- assertEquals(List.of(), tester.nodeRepository().loadBalancers().list(tenantHostApp.getApplicationId()).asList());
+ assertEquals(List.of(), tester.nodeRepository().loadBalancers().list(infraApp1).asList());
}
@Test
@@ -241,12 +242,12 @@ public class LoadBalancerProvisionerTest {
@Test
public void provision_load_balancer_config_server_cluster() {
- provisionInfrastructureLoadBalancer(NodeType.config);
+ provisionInfrastructureLoadBalancer(infraApp1, NodeType.config);
}
@Test
public void provision_load_balancer_controller_cluster() {
- provisionInfrastructureLoadBalancer(NodeType.controller);
+ provisionInfrastructureLoadBalancer(infraApp1, NodeType.controller);
}
@Test
@@ -437,16 +438,16 @@ public class LoadBalancerProvisionerTest {
activeNodes, reals);
}
- private void provisionInfrastructureLoadBalancer(NodeType nodeType) {
- var infraApp = ProvisioningTester.infraApplication(nodeType);
- Supplier<List<LoadBalancer>> lbs = () -> tester.nodeRepository().loadBalancers().list(infraApp.getApplicationId()).asList();
- tester.prepareAndActivateInfraApplication(infraApp);
- var nodes = prepare(infraApp.getApplicationId(), infraApp.getCapacity(), infraApp.getClusterSpecWithVersion(Version.fromString("7.1")));
+ private void provisionInfrastructureLoadBalancer(ApplicationId application, NodeType nodeType) {
+ Supplier<List<LoadBalancer>> lbs = () -> tester.nodeRepository().loadBalancers().list(application).asList();
+ var cluster = ClusterSpec.Id.from("infra-cluster");
+ ClusterSpec.Type clusterType = nodeType == NodeType.config ? ClusterSpec.Type.admin : ClusterSpec.Type.container;
+ var nodes = prepare(application, Capacity.fromRequiredNodeType(nodeType), clusterRequest(clusterType, cluster));
assertEquals(1, lbs.get().size());
- tester.activate(infraApp.getApplicationId(), nodes);
+ tester.activate(application, nodes);
assertEquals("Prepare provisions load balancer with reserved nodes", 3, lbs.get().get(0).instance().get().reals().size());
assertSame(LoadBalancer.State.active, lbs.get().get(0).state());
- assertEquals(infraApp.getClusterSpecId(), lbs.get().get(0).id().cluster());
+ assertEquals(cluster, lbs.get().get(0).id().cluster());
}
private void dirtyNodesOf(ApplicationId application) {
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/MultigroupProvisioningTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/MultigroupProvisioningTest.java
index cfd7a3511de..3db8a71e4a7 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/MultigroupProvisioningTest.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/MultigroupProvisioningTest.java
@@ -19,6 +19,7 @@ import org.junit.Ignore;
import org.junit.Test;
import java.time.Duration;
+import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
@@ -232,7 +233,8 @@ public class MultigroupProvisioningTest {
MockDeployer deployer =
new MockDeployer(tester.provisioner(),
tester.clock(),
- List.of(new MockDeployer.ApplicationContext(application1, cluster(),
+ Collections.singletonMap(application1,
+ new MockDeployer.ApplicationContext(application1, cluster(),
Capacity.from(new ClusterResources(8, 1, large), false, true))));
new RetiredExpirer(tester.nodeRepository(),
deployer,
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 38e38dc319b..4af5728f167 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
@@ -1,7 +1,10 @@
// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.vespa.hosted.provision.provisioning;
-import com.yahoo.component.Version;
+import com.yahoo.config.provision.ApplicationId;
+import com.yahoo.config.provision.Capacity;
+import com.yahoo.config.provision.ClusterSpec;
+import com.yahoo.config.provision.HostSpec;
import com.yahoo.config.provision.NodeType;
import com.yahoo.vespa.hosted.provision.Node;
import com.yahoo.vespa.hosted.provision.NodeList;
@@ -9,11 +12,12 @@ import com.yahoo.vespa.hosted.provision.maintenance.RetiredExpirer;
import com.yahoo.vespa.hosted.provision.maintenance.TestMetric;
import com.yahoo.vespa.hosted.provision.node.Agent;
import com.yahoo.vespa.hosted.provision.testutils.MockDeployer;
-import com.yahoo.vespa.service.duper.InfraApplication;
import org.junit.Before;
import org.junit.Test;
import java.time.Duration;
+import java.util.Collections;
+import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
@@ -30,7 +34,9 @@ public class NodeTypeProvisioningTest {
private final ProvisioningTester tester = new ProvisioningTester.Builder().build();
- private final InfraApplication proxyApp = ProvisioningTester.infraApplication(NodeType.proxy);
+ private final ApplicationId application = ProvisioningTester.applicationId(); // application using proxy nodes
+ private final Capacity capacity = Capacity.fromRequiredNodeType(NodeType.proxy);
+ private final ClusterSpec clusterSpec = ClusterSpec.request(ClusterSpec.Type.container, ClusterSpec.Id.from("test")).vespaVersion("6.42").build();
@Before
public void setup() {
@@ -45,20 +51,26 @@ public class NodeTypeProvisioningTest {
@Test
public void proxy_deployment() {
{ // Deploy
- tester.prepareAndActivateInfraApplication(proxyApp);
+ List<HostSpec> hosts = deployProxies(application, tester);
+ assertEquals("Reserved all proxies", 11, hosts.size());
+ tester.activate(application, new HashSet<>(hosts));
NodeList nodes = tester.nodeRepository().nodes().list(Node.State.active).nodeType(NodeType.proxy);
assertEquals("Activated all proxies", 11, nodes.size());
}
{ // Redeploy with no changes
- tester.prepareAndActivateInfraApplication(proxyApp);
+ List<HostSpec> hosts = deployProxies(application, tester);
+ assertEquals(11, hosts.size());
+ tester.activate(application, new HashSet<>(hosts));
NodeList nodes = tester.nodeRepository().nodes().list(Node.State.active).nodeType(NodeType.proxy);
assertEquals(11, nodes.size());
}
{ // Add 2 ready proxies then redeploy
tester.makeReadyNodes(2, "small", NodeType.proxy);
- tester.prepareAndActivateInfraApplication(proxyApp);
+ List<HostSpec> hosts = deployProxies(application, tester);
+ assertEquals(13, hosts.size());
+ tester.activate(application, new HashSet<>(hosts));
NodeList nodes = tester.nodeRepository().nodes().list(Node.State.active).nodeType(NodeType.proxy);
assertEquals(13, nodes.size());
}
@@ -69,7 +81,9 @@ public class NodeTypeProvisioningTest {
tester.nodeRepository().nodes().fail(nodes.asList().get(1).hostname(), Agent.system, "Failing to unit test");
tester.nodeRepository().nodes().fail(nodes.asList().get(5).hostname(), Agent.system, "Failing to unit test");
- tester.prepareAndActivateInfraApplication(proxyApp);
+ List<HostSpec> hosts = deployProxies(application, tester);
+ assertEquals(10, hosts.size());
+ tester.activate(application, new HashSet<>(hosts));
nodes = tester.nodeRepository().nodes().list(Node.State.active).nodeType(NodeType.proxy);
assertEquals(10, nodes.size());
}
@@ -79,7 +93,10 @@ public class NodeTypeProvisioningTest {
public void retire_proxy() {
MockDeployer deployer = new MockDeployer(tester.provisioner(),
tester.clock(),
- List.of(new MockDeployer.ApplicationContext(proxyApp, Version.fromString("6.42"))));
+ Collections.singletonMap(application,
+ new MockDeployer.ApplicationContext(application,
+ clusterSpec,
+ capacity)));
RetiredExpirer retiredExpirer = new RetiredExpirer(tester.nodeRepository(),
deployer,
new TestMetric(),
@@ -87,7 +104,9 @@ public class NodeTypeProvisioningTest {
Duration.ofMinutes(10));
{ // Deploy
- tester.prepareAndActivateInfraApplication(proxyApp);
+ List<HostSpec> hosts = deployProxies(application, tester);
+ assertEquals("Reserved all proxies", 11, hosts.size());
+ tester.activate(application, new HashSet<>(hosts));
NodeList nodes = tester.nodeRepository().nodes().list(Node.State.active).nodeType(NodeType.proxy);
assertEquals("Activated all proxies", 11, nodes.size());
}
@@ -96,7 +115,9 @@ public class NodeTypeProvisioningTest {
{ // Pick out a node and retire it
tester.nodeRepository().nodes().write(nodeToRetire.withWantToRetire(true, Agent.system, tester.clock().instant()), () -> {});
- tester.prepareAndActivateInfraApplication(proxyApp);
+ List<HostSpec> hosts = deployProxies(application, tester);
+ assertEquals(11, hosts.size());
+ tester.activate(application, new HashSet<>(hosts));
NodeList nodes = tester.nodeRepository().nodes().list(Node.State.active).nodeType(NodeType.proxy);
assertEquals(11, nodes.size());
@@ -108,7 +129,9 @@ public class NodeTypeProvisioningTest {
}
{ // Redeploying while the node is still retiring has no effect
- tester.prepareAndActivateInfraApplication(proxyApp);
+ List<HostSpec> hosts = deployProxies(application, tester);
+ assertEquals(11, hosts.size());
+ tester.activate(application, new HashSet<>(hosts));
NodeList nodes = tester.nodeRepository().nodes().list(Node.State.active).nodeType(NodeType.proxy);
assertEquals(11, nodes.size());
@@ -123,7 +146,9 @@ public class NodeTypeProvisioningTest {
tester.advanceTime(Duration.ofMinutes(11));
retiredExpirer.run();
- tester.prepareAndActivateInfraApplication(proxyApp);
+ List<HostSpec> hosts = deployProxies(application, tester);
+ assertEquals(10, hosts.size());
+ tester.activate(application, new HashSet<>(hosts));
NodeList nodes = tester.nodeRepository().nodes().list(Node.State.active).nodeType(NodeType.proxy);
assertEquals(10, nodes.size());
@@ -137,7 +162,8 @@ public class NodeTypeProvisioningTest {
public void retire_multiple_proxy_simultaneously() {
MockDeployer deployer = new MockDeployer(tester.provisioner(),
tester.clock(),
- List.of(new MockDeployer.ApplicationContext(proxyApp, Version.fromString("6.42"))));
+ Collections.singletonMap(application,
+ new MockDeployer.ApplicationContext(application, clusterSpec, capacity)));
RetiredExpirer retiredExpirer = new RetiredExpirer(tester.nodeRepository(),
deployer,
new TestMetric(),
@@ -146,7 +172,9 @@ public class NodeTypeProvisioningTest {
final int numNodesToRetire = 5;
{ // Deploy
- tester.prepareAndActivateInfraApplication(proxyApp);
+ List<HostSpec> hosts = deployProxies(application, tester);
+ assertEquals("Reserved all proxies", 11, hosts.size());
+ tester.activate(application, new HashSet<>(hosts));
NodeList nodes = tester.nodeRepository().nodes().list(Node.State.active).nodeType(NodeType.proxy);
assertEquals("Activated all proxies", 11, nodes.size());
}
@@ -157,7 +185,9 @@ public class NodeTypeProvisioningTest {
nodesToRetire.forEach(nodeToRetire ->
tester.nodeRepository().nodes().write(nodeToRetire.withWantToRetire(true, Agent.system, tester.clock().instant()), () -> {}));
- tester.prepareAndActivateInfraApplication(proxyApp);
+ List<HostSpec> hosts = deployProxies(application, tester);
+ assertEquals(11, hosts.size());
+ tester.activate(application, new HashSet<>(hosts));
NodeList nodes = tester.nodeRepository().nodes().list(Node.State.active).nodeType(NodeType.proxy);
assertEquals(11, nodes.size());
@@ -172,7 +202,9 @@ public class NodeTypeProvisioningTest {
}
{ // Redeploying while the nodes are still retiring has no effect
- tester.prepareAndActivateInfraApplication(proxyApp);
+ List<HostSpec> hosts = deployProxies(application, tester);
+ assertEquals(11, hosts.size());
+ tester.activate(application, new HashSet<>(hosts));
NodeList nodes = tester.nodeRepository().nodes().list(Node.State.active).nodeType(NodeType.proxy);
assertEquals(11, nodes.size());
@@ -188,7 +220,9 @@ public class NodeTypeProvisioningTest {
tester.advanceTime(Duration.ofMinutes(11));
retiredExpirer.run();
- tester.prepareAndActivateInfraApplication(proxyApp);
+ List<HostSpec> hosts = deployProxies(application, tester);
+ assertEquals(6, hosts.size());
+ tester.activate(application, new HashSet<>(hosts));
// All currently active proxy nodes are not marked with wantToRetire or as retired
long numRetiredActiveProxyNodes = tester.nodeRepository().nodes().list(Node.State.active).nodeType(NodeType.proxy).stream()
@@ -203,4 +237,8 @@ public class NodeTypeProvisioningTest {
}
}
+ private List<HostSpec> deployProxies(ApplicationId application, ProvisioningTester tester) {
+ return tester.prepare(application, clusterSpec, capacity);
+ }
+
}
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 477101e10e2..67760d8cdf3 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
@@ -189,7 +189,7 @@ public class ProvisioningTest {
ProvisioningTester tester = new ProvisioningTester.Builder().zone(new Zone(Environment.dev, RegionName.from("us-east"))).build();
tester.makeReadyHosts(4, defaultResources);
- tester.activateTenantHosts();
+ tester.prepareAndActivateInfraApplication(ProvisioningTester.applicationId(), NodeType.host);
// deploy
ApplicationId application1 = ProvisioningTester.applicationId();
@@ -214,7 +214,7 @@ public class ProvisioningTest {
ProvisioningTester tester = new ProvisioningTester.Builder().zone(new Zone(Environment.dev, RegionName.from("us-east"))).build();
tester.makeReadyHosts(4, defaultResources);
- tester.activateTenantHosts();
+ tester.prepareAndActivateInfraApplication(ProvisioningTester.applicationId(), NodeType.host);
// deploy
ApplicationId application1 = ProvisioningTester.applicationId();
@@ -388,7 +388,7 @@ public class ProvisioningTest {
ProvisioningTester tester = new ProvisioningTester.Builder().zone(new Zone(Environment.dev, RegionName.from("us-east"))).build();
tester.makeReadyHosts(4, defaultResources);
- tester.activateTenantHosts();
+ tester.prepareAndActivateInfraApplication(ProvisioningTester.applicationId(), NodeType.host);
ApplicationId application = ProvisioningTester.applicationId();
SystemState state = prepare(application, 2, 2, 3, 3, defaultResources, tester);
@@ -401,7 +401,7 @@ public class ProvisioningTest {
ProvisioningTester tester = new ProvisioningTester.Builder().zone(new Zone(Environment.prod, RegionName.from("us-east"))).build();
tester.makeReadyHosts(13, defaultResources).activateTenantHosts();
- tester.activateTenantHosts();
+ tester.prepareAndActivateInfraApplication(ProvisioningTester.applicationId(), NodeType.host);
ApplicationId application = ProvisioningTester.applicationId();
{
@@ -444,7 +444,7 @@ public class ProvisioningTest {
ProvisioningTester tester = new ProvisioningTester.Builder().zone(new Zone(Environment.dev, RegionName.from("us-east"))).build();
tester.makeReadyHosts(4, defaultResources).activateTenantHosts();
- tester.activateTenantHosts();
+ tester.prepareAndActivateInfraApplication(ProvisioningTester.applicationId(), NodeType.host);
ApplicationId application = ProvisioningTester.applicationId();
SystemState state = prepare(application, tester, 2, 2, 3, 3, defaultResources, "6.91");
@@ -457,7 +457,7 @@ public class ProvisioningTest {
ProvisioningTester tester = new ProvisioningTester.Builder().zone(new Zone(Environment.dev, RegionName.from("us-east"))).build();
tester.makeReadyHosts(4, defaultResources).activateTenantHosts();
- tester.activateTenantHosts();
+ tester.prepareAndActivateInfraApplication(ProvisioningTester.applicationId(), NodeType.host);
ApplicationId application = ProvisioningTester.applicationId();
String dockerImageRepo = "docker.domain.tld/my/image";
@@ -602,7 +602,7 @@ public class ProvisioningTest {
ProvisioningTester tester = new ProvisioningTester.Builder().zone(new Zone(Environment.dev, RegionName.from("us-east"))).build();
tester.makeReadyHosts(4, new NodeResources(2, 4, 10, 2));
- tester.activateTenantHosts();
+ tester.prepareAndActivateInfraApplication(ProvisioningTester.applicationId(), NodeType.host);
ApplicationId application = ProvisioningTester.applicationId();
SystemState state = prepare(application, 2, 2, 3, 3,
@@ -900,7 +900,8 @@ public class ProvisioningTest {
@Test
public void allow_unretire_nodes_allocated_through_type_spec() {
ProvisioningTester tester = new ProvisioningTester.Builder().zone(new Zone(Environment.prod, RegionName.from("us-east"))).build();
- tester.makeReadyHosts(10, defaultResources).activateTenantHosts();
+ ApplicationId tenantHostAppId = ProvisioningTester.applicationId();
+ tester.makeReadyHosts(10, defaultResources).prepareAndActivateInfraApplication(tenantHostAppId, NodeType.host);
NodeList list = tester.nodeRepository().nodes().list();
assertEquals(10, list.state(Node.State.active).nodeType(NodeType.host).size());
@@ -908,13 +909,13 @@ public class ProvisioningTest {
// Pick out 5 random nodes and retire those
Set<String> retiredHostnames = list.shuffle(new Random()).first(5).hostnames();
tester.patchNodes(node -> retiredHostnames.contains(node.hostname()), node -> node.withWantToRetire(true, Agent.system, tester.clock().instant()));
- tester.activateTenantHosts();
+ tester.prepareAndActivateInfraApplication(tenantHostAppId, NodeType.host);
assertEquals(retiredHostnames, tester.nodeRepository().nodes().list().retired().hostnames());
Set<String> unretiredHostnames = retiredHostnames.stream().limit(2).collect(Collectors.toSet());
tester.patchNodes(node -> unretiredHostnames.contains(node.hostname()), node -> node.withWantToRetire(false, Agent.system, tester.clock().instant()));
- tester.activateTenantHosts();
+ tester.prepareAndActivateInfraApplication(tenantHostAppId, NodeType.host);
assertEquals(3, tester.nodeRepository().nodes().list().retired().size());
}
@@ -1077,7 +1078,7 @@ public class ProvisioningTest {
NodeResources nodeResources = new NodeResources(1, 4, 10, 4, NodeResources.DiskSpeed.any, NodeResources.StorageType.any, NodeResources.Architecture.arm64);
tester.makeReadyHosts(4, nodeResources);
- tester.activateTenantHosts();
+ tester.prepareAndActivateInfraApplication(ProvisioningTester.applicationId(), NodeType.host);
ApplicationId application = ProvisioningTester.applicationId();
SystemState state = prepare(application, 1, 1, 1, 1, nodeResources, tester);
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 7e85131eaf4..dd8f97d82de 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
@@ -30,8 +30,6 @@ import com.yahoo.config.provision.Zone;
import com.yahoo.config.provisioning.FlavorsConfig;
import com.yahoo.test.ManualClock;
import com.yahoo.transaction.NestedTransaction;
-import com.yahoo.vespa.applicationmodel.InfrastructureApplication;
-import com.yahoo.vespa.applicationmodel.ServiceType;
import com.yahoo.vespa.curator.Curator;
import com.yahoo.vespa.curator.mock.MockCurator;
import com.yahoo.vespa.curator.transaction.CuratorTransaction;
@@ -52,12 +50,6 @@ import com.yahoo.vespa.hosted.provision.testutils.MockProvisionServiceProvider;
import com.yahoo.vespa.hosted.provision.testutils.OrchestratorMock;
import com.yahoo.vespa.orchestrator.Orchestrator;
import com.yahoo.vespa.service.duper.ConfigServerApplication;
-import com.yahoo.vespa.service.duper.ConfigServerHostApplication;
-import com.yahoo.vespa.service.duper.ControllerApplication;
-import com.yahoo.vespa.service.duper.ControllerHostApplication;
-import com.yahoo.vespa.service.duper.InfraApplication;
-import com.yahoo.vespa.service.duper.ProxyHostApplication;
-import com.yahoo.vespa.service.duper.TenantHostApplication;
import java.time.temporal.TemporalAmount;
import java.util.ArrayList;
@@ -86,6 +78,8 @@ import static org.junit.Assert.assertTrue;
*/
public class ProvisioningTester {
+ public static final ApplicationId tenantHostApp = ApplicationId.from("hosted-vespa", "tenant-host", "default");
+
private final Curator curator;
private final NodeFlavors nodeFlavors;
private final ManualClock clock;
@@ -248,24 +242,20 @@ public class ProvisioningTester {
}
}
- public List<HostSpec> prepareAndActivateInfraApplication(InfraApplication application, Version version) {
- ClusterSpec cluster = application.getClusterSpecWithVersion(version);
- Capacity capacity = application.getCapacity();
- List<HostSpec> hostSpecs = prepare(application.getApplicationId(), cluster, capacity);
- activate(application.getApplicationId(), hostSpecs);
+ public List<HostSpec> prepareAndActivateInfraApplication(ApplicationId application, NodeType nodeType, Version version) {
+ ClusterSpec cluster = ClusterSpec.request(nodeType.isConfigServerLike() ? ClusterSpec.Type.admin : ClusterSpec.Type.container,
+ ClusterSpec.Id.from(nodeType == NodeType.config ? "zone-config-servers" : nodeType.toString()))
+ .vespaVersion(version)
+ .stateful(nodeType == NodeType.config || nodeType == NodeType.controller)
+ .build();
+ Capacity capacity = Capacity.fromRequiredNodeType(nodeType);
+ List<HostSpec> hostSpecs = prepare(application, cluster, capacity);
+ activate(application, hostSpecs);
return hostSpecs;
}
- public List<HostSpec> prepareAndActivateInfraApplication(InfraApplication application) {
- return prepareAndActivateInfraApplication(application, Version.fromString("6.42"));
- }
-
- public List<HostSpec> prepareAndActivateInfraApplication(NodeType nodeType) {
- return prepareAndActivateInfraApplication(infraApplication(nodeType));
- }
-
- public List<HostSpec> prepareAndActivateInfraApplication(NodeType nodeType, Version version) {
- return prepareAndActivateInfraApplication(infraApplication(nodeType), version);
+ public List<HostSpec> prepareAndActivateInfraApplication(ApplicationId application, NodeType nodeType) {
+ return prepareAndActivateInfraApplication(application, nodeType, Version.fromString("6.42"));
}
public void deactivate(ApplicationId applicationId) {
@@ -566,7 +556,7 @@ public class ProvisioningTester {
}
public void activateTenantHosts() {
- prepareAndActivateInfraApplication(NodeType.host);
+ prepareAndActivateInfraApplication(tenantHostApp, NodeType.host);
}
public static ClusterSpec containerClusterSpec() {
@@ -819,31 +809,4 @@ public class ProvisioningTester {
}
- public static InfraApplication infraApplication(NodeType nodeType) {
- return switch (nodeType) {
- case controllerhost -> new ControllerHostApplication();
- case controller -> new ControllerApplication();
- case confighost -> new ConfigServerHostApplication();
- case config -> new ConfigServerApplication();
- case proxyhost -> new ProxyHostApplication();
- case proxy -> new ProxyApplication();
- case host -> new TenantHostApplication();
- default -> throw new IllegalArgumentException("Infrastructure application not defined for node type " + nodeType);
- };
- }
-
- // This is not in service-monitor because it's not really an infrastructure application like the others
- // (proxy is deployed with a real application package)
- private static class ProxyApplication extends InfraApplication {
- private ProxyApplication() {
- super(InfrastructureApplication.PROXY, ClusterSpec.Type.container, ClusterSpec.Id.from("routing"), ServiceType.CONTAINER, 4443);
- }
-
- @Override
- public ClusterSpec getClusterSpecWithVersion(Version version) {
- // Not exclusive
- return ClusterSpec.request(getClusterSpecType(), getClusterSpecId()).exclusive(false).vespaVersion(version).build();
- }
- }
-
}
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/VirtualNodeProvisioningTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/VirtualNodeProvisioningTest.java
index 62f42b0d035..0b4d345b8a5 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/VirtualNodeProvisioningTest.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/VirtualNodeProvisioningTest.java
@@ -91,7 +91,7 @@ public class VirtualNodeProvisioningTest {
@Test
public void allow_same_parent_host_for_nodes_in_a_cluster_in_cd_and_non_prod() {
- ProvisioningTester tester;
+ ProvisioningTester tester = new ProvisioningTester.Builder().build();
final int containerNodeCount = 2;
final int contentNodeCount = 2;
@@ -102,7 +102,7 @@ public class VirtualNodeProvisioningTest {
NodeResources flavor = new NodeResources(1, 4, 10, 1);
tester = new ProvisioningTester.Builder().zone(new Zone(Environment.dev, RegionName.from("us-east"))).build();
tester.makeReadyNodes(4, flavor, NodeType.host, 1);
- tester.activateTenantHosts();
+ tester.prepareAndActivateInfraApplication(ProvisioningTester.applicationId(), NodeType.host);
List<HostSpec> containerHosts = tester.prepare(applicationId, containerClusterSpec, containerNodeCount, groups, flavor);
List<HostSpec> contentHosts = tester.prepare(applicationId, contentClusterSpec, contentNodeCount, groups, flavor);
@@ -116,7 +116,7 @@ public class VirtualNodeProvisioningTest {
{
tester = new ProvisioningTester.Builder().zone(new Zone(SystemName.cd, Environment.prod, RegionName.from("us-east"))).build();
tester.makeReadyNodes(4, resources1, NodeType.host, 1);
- tester.activateTenantHosts();
+ tester.prepareAndActivateInfraApplication(ProvisioningTester.applicationId(), NodeType.host);
List<HostSpec> containerHosts = tester.prepare(applicationId, containerClusterSpec, containerNodeCount, groups, resources1);
List<HostSpec> contentHosts = tester.prepare(applicationId, contentClusterSpec, contentNodeCount, groups, resources1);
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/ArchiveApiTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/ArchiveApiTest.java
index 4dbf9ff85c0..7fe2d77b647 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/ArchiveApiTest.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/ArchiveApiTest.java
@@ -46,7 +46,7 @@ public class ArchiveApiTest {
tester.assertPartialResponse(new Request("http://localhost:8080/nodes/v2/node/host4.yahoo.com"), "\"archiveUri\":\"ftp://host/dir/tenant3/application3/instance3/id3/host4/\"", true);
- tester.assertPartialResponse(new Request("http://localhost:8080/nodes/v2/node/dockerhost2.yahoo.com"), "\"archiveUri\":\"s3://acc-bucket/hosted-vespa/tenant-host/default/tenant-host/dockerhost2/\"", true);
+ tester.assertPartialResponse(new Request("http://localhost:8080/nodes/v2/node/dockerhost2.yahoo.com"), "\"archiveUri\":\"s3://acc-bucket/zoneapp/zoneapp/zoneapp/node-admin/dockerhost2/\"", true);
assertFile(new Request("http://localhost:8080/nodes/v2/archive"), "archives.json");
tester.assertResponse(new Request("http://localhost:8080/nodes/v2/archive/tenant/tenant3", new byte[0], Request.Method.DELETE), "{\"message\":\"Removed archive URI for tenant3\"}");
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/cfg1.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/cfg1.json
index bd251567f16..30b0347f2ba 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/cfg1.json
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/cfg1.json
@@ -26,13 +26,13 @@
},
"environment": "BARE_METAL",
"owner": {
- "tenant": "hosted-vespa",
- "application": "zone-config-servers",
- "instance": "default"
+ "tenant": "cfg",
+ "application": "cfg",
+ "instance": "cfg"
},
"membership": {
- "clustertype": "admin",
- "clusterid": "zone-config-servers",
+ "clustertype": "container",
+ "clusterid": "configservers",
"group": "0",
"index": 0,
"retired": false
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/cfg2.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/cfg2.json
index 022512359cd..f47e5d4919b 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/cfg2.json
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/cfg2.json
@@ -26,13 +26,13 @@
},
"environment": "BARE_METAL",
"owner": {
- "tenant": "hosted-vespa",
- "application": "zone-config-servers",
- "instance": "default"
+ "tenant": "cfg",
+ "application": "cfg",
+ "instance": "cfg"
},
"membership": {
- "clustertype": "admin",
- "clusterid": "zone-config-servers",
+ "clustertype": "container",
+ "clusterid": "configservers",
"group": "0",
"index": 1,
"retired": false
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/docker-node1-os-upgrade-complete.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/docker-node1-os-upgrade-complete.json
index 84b34a72e78..6e166e6c5d1 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/docker-node1-os-upgrade-complete.json
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/docker-node1-os-upgrade-complete.json
@@ -26,13 +26,13 @@
},
"environment": "BARE_METAL",
"owner": {
- "tenant": "hosted-vespa",
- "application": "tenant-host",
- "instance": "default"
+ "tenant": "zoneapp",
+ "application": "zoneapp",
+ "instance": "zoneapp"
},
"membership": {
"clustertype": "container",
- "clusterid": "tenant-host",
+ "clusterid": "node-admin",
"group": "0",
"index": 0,
"retired": false
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/docker-node1-reports-2.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/docker-node1-reports-2.json
index bc1c11c8d06..9dad2b3df19 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/docker-node1-reports-2.json
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/docker-node1-reports-2.json
@@ -26,13 +26,13 @@
},
"environment": "BARE_METAL",
"owner": {
- "tenant": "hosted-vespa",
- "application": "tenant-host",
- "instance": "default"
+ "tenant": "zoneapp",
+ "application": "zoneapp",
+ "instance": "zoneapp"
},
"membership": {
"clustertype": "container",
- "clusterid": "tenant-host",
+ "clusterid": "node-admin",
"group": "0",
"index": 0,
"retired": false
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/docker-node1-reports-3.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/docker-node1-reports-3.json
index 3b7970a9ec0..024569f344c 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/docker-node1-reports-3.json
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/docker-node1-reports-3.json
@@ -26,13 +26,13 @@
},
"environment": "BARE_METAL",
"owner": {
- "tenant": "hosted-vespa",
- "application": "tenant-host",
- "instance": "default"
+ "tenant": "zoneapp",
+ "application": "zoneapp",
+ "instance": "zoneapp"
},
"membership": {
"clustertype": "container",
- "clusterid": "tenant-host",
+ "clusterid": "node-admin",
"group": "0",
"index": 0,
"retired": false
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/docker-node1-reports-4.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/docker-node1-reports-4.json
index d99e71bab49..314a976724b 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/docker-node1-reports-4.json
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/docker-node1-reports-4.json
@@ -26,13 +26,13 @@
},
"environment": "BARE_METAL",
"owner": {
- "tenant": "hosted-vespa",
- "application": "tenant-host",
- "instance": "default"
+ "tenant": "zoneapp",
+ "application": "zoneapp",
+ "instance": "zoneapp"
},
"membership": {
"clustertype": "container",
- "clusterid": "tenant-host",
+ "clusterid": "node-admin",
"group": "0",
"index": 0,
"retired": false
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/docker-node1-reports.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/docker-node1-reports.json
index 88bfd9d9418..e2050e9fc70 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/docker-node1-reports.json
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/docker-node1-reports.json
@@ -26,13 +26,13 @@
},
"environment": "BARE_METAL",
"owner": {
- "tenant": "hosted-vespa",
- "application": "tenant-host",
- "instance": "default"
+ "tenant": "zoneapp",
+ "application": "zoneapp",
+ "instance": "zoneapp"
},
"membership": {
"clustertype": "container",
- "clusterid": "tenant-host",
+ "clusterid": "node-admin",
"group": "0",
"index": 0,
"retired": false
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/docker-node1.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/docker-node1.json
index f70b2dc1b72..7458c189e27 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/docker-node1.json
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/docker-node1.json
@@ -26,13 +26,13 @@
},
"environment": "BARE_METAL",
"owner": {
- "tenant": "hosted-vespa",
- "application": "tenant-host",
- "instance": "default"
+ "tenant": "zoneapp",
+ "application": "zoneapp",
+ "instance": "zoneapp"
},
"membership": {
"clustertype": "container",
- "clusterid": "tenant-host",
+ "clusterid": "node-admin",
"group": "0",
"index": 0,
"retired": false
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/docker-node2.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/docker-node2.json
index c1c1ba0cae8..a86805d1a71 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/docker-node2.json
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/docker-node2.json
@@ -26,13 +26,13 @@
},
"environment": "BARE_METAL",
"owner": {
- "tenant": "hosted-vespa",
- "application": "tenant-host",
- "instance": "default"
+ "tenant": "zoneapp",
+ "application": "zoneapp",
+ "instance": "zoneapp"
},
"membership": {
"clustertype": "container",
- "clusterid": "tenant-host",
+ "clusterid": "node-admin",
"group": "0",
"index": 1,
"retired": false
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/docker-node3.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/docker-node3.json
index c597b7afa14..8d0d1649ed0 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/docker-node3.json
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/docker-node3.json
@@ -26,13 +26,13 @@
},
"environment": "BARE_METAL",
"owner": {
- "tenant": "hosted-vespa",
- "application": "tenant-host",
- "instance": "default"
+ "tenant": "zoneapp",
+ "application": "zoneapp",
+ "instance": "zoneapp"
},
"membership": {
"clustertype": "container",
- "clusterid": "tenant-host",
+ "clusterid": "node-admin",
"group": "0",
"index": 2,
"retired": false
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/docker-node4.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/docker-node4.json
index 8a85d55e0df..1dd7d583bb0 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/docker-node4.json
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/docker-node4.json
@@ -26,13 +26,13 @@
},
"environment": "BARE_METAL",
"owner": {
- "tenant": "hosted-vespa",
- "application": "tenant-host",
- "instance": "default"
+ "tenant": "zoneapp",
+ "application": "zoneapp",
+ "instance": "zoneapp"
},
"membership": {
"clustertype": "container",
- "clusterid": "tenant-host",
+ "clusterid": "node-admin",
"group": "0",
"index": 3,
"retired": false
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/docker-node5.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/docker-node5.json
index 70b5e465de8..080c162f7e7 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/docker-node5.json
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/docker-node5.json
@@ -26,13 +26,13 @@
},
"environment": "BARE_METAL",
"owner": {
- "tenant": "hosted-vespa",
- "application": "tenant-host",
- "instance": "default"
+ "tenant": "zoneapp",
+ "application": "zoneapp",
+ "instance": "zoneapp"
},
"membership": {
"clustertype": "container",
- "clusterid": "tenant-host",
+ "clusterid": "node-admin",
"group": "0",
"index": 4,
"retired": false
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/dockerhost1-with-firmware-data.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/dockerhost1-with-firmware-data.json
index 85b49dd5113..362a9bfbf1c 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/dockerhost1-with-firmware-data.json
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/dockerhost1-with-firmware-data.json
@@ -26,13 +26,13 @@
},
"environment": "BARE_METAL",
"owner": {
- "tenant": "hosted-vespa",
- "application": "tenant-host",
- "instance": "default"
+ "tenant": "zoneapp",
+ "application": "zoneapp",
+ "instance": "zoneapp"
},
"membership": {
"clustertype": "container",
- "clusterid": "tenant-host",
+ "clusterid": "node-admin",
"group": "0",
"index": 0,
"retired": false
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/load-balancers.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/load-balancers.json
index 96213dea0a7..eef381e8df7 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/load-balancers.json
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/load-balancers.json
@@ -41,14 +41,14 @@
"public": false
},
{
- "id": "hosted-vespa:zone-config-servers:default:zone-config-servers",
- "state": "active",
+ "id": "cfg:cfg:cfg:configservers",
+ "state": "reserved",
"changedAt": 123,
- "application": "zone-config-servers",
- "tenant": "hosted-vespa",
- "instance": "default",
- "cluster": "zone-config-servers",
- "hostname": "lb-hosted-vespa.zone-config-servers-zone-config-servers",
+ "application": "cfg",
+ "tenant": "cfg",
+ "instance": "cfg",
+ "cluster": "configservers",
+ "hostname": "lb-cfg.cfg.cfg-configservers",
"dnsZone": "zone-id-1",
"networks": [
"10.2.3.0/24",
@@ -57,18 +57,7 @@
"ports": [
4443
],
- "reals": [
- {
- "hostname": "cfg1.yahoo.com",
- "ipAddress": "127.0.201.1",
- "port": 4443
- },
- {
- "hostname": "cfg2.yahoo.com",
- "ipAddress": "127.0.202.1",
- "port": 4443
- }
- ],
+ "reals": [],
"public": true
},
{