summaryrefslogtreecommitdiffstats
path: root/node-repository/src/test
diff options
context:
space:
mode:
Diffstat (limited to 'node-repository/src/test')
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/HostCapacityMaintainerTest.java4
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/DynamicProvisioningTest.java24
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisioningTester.java20
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/VirtualNodeProvisioningTest.java55
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/ArchiveApiTest.java3
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/LoadBalancersV1ApiTest.java3
6 files changed, 59 insertions, 50 deletions
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 95291e821bc..0a1bdb7b400 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
@@ -376,8 +376,8 @@ public class HostCapacityMaintainerTest {
// Provision config servers
for (int i = 0; i < provisionedHosts.size(); i++) {
- tester.makeReadyChildren(1, i + 1, new NodeResources(1.0, 30, 20, 0.3), hostType.childNodeType(),
- provisionedHosts.get(i).hostname(), (nodeIndex) -> "cfg" + nodeIndex);
+ 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, hostType.childNodeType());
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/DynamicProvisioningTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/DynamicProvisioningTest.java
index 95b7303bf8a..382d2840377 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/DynamicProvisioningTest.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/DynamicProvisioningTest.java
@@ -9,7 +9,6 @@ import com.yahoo.config.provision.ClusterSpec;
import com.yahoo.config.provision.Environment;
import com.yahoo.config.provision.Flavor;
import com.yahoo.config.provision.HostSpec;
-import com.yahoo.config.provision.NodeAllocationException;
import com.yahoo.config.provision.NodeFlavors;
import com.yahoo.config.provision.NodeResources;
import com.yahoo.config.provision.NodeResources.Architecture;
@@ -29,11 +28,9 @@ import com.yahoo.vespa.hosted.provision.testutils.MockHostProvisioner;
import com.yahoo.vespa.hosted.provision.testutils.MockNameResolver;
import org.junit.Test;
-import java.time.Duration;
import java.time.Instant;
import java.util.Collection;
import java.util.List;
-import java.util.Optional;
import java.util.Set;
import java.util.function.Function;
import java.util.stream.Collectors;
@@ -55,25 +52,6 @@ public class DynamicProvisioningTest {
private final MockNameResolver nameResolver = new MockNameResolver().mockAnyLookup();
@Test
- public void test_provisioning_containers_wont_use_shared_hosts_on_public() {
- var resources = new NodeResources(2.7, 9, 17, 0.1);
- var now = new ClusterResources(2, 1, resources);
- try {
- var fixture = DynamicProvisioningTester.fixture()
- .awsProdSetup(true)
- .clusterType(ClusterSpec.Type.container)
- .initialResources(Optional.of(now))
- .capacity(Capacity.from(now))
- .hostCount(2)
- .build();
- }
- catch (NodeAllocationException e) {
- assertTrue("Contains 'No host flavor matches': " + e.getMessage(),
- e.getMessage().contains("No host flavor matches"));
- }
- }
-
- @Test
public void dynamically_provision_with_empty_node_repo() {
var tester = tester(true);
assertEquals(0, tester.nodeRepository().nodes().list().size());
@@ -139,7 +117,7 @@ public class DynamicProvisioningTest {
@Test
public void avoids_allocating_to_empty_hosts() {
- var tester = tester(true);
+ var tester = tester(false);
tester.makeReadyHosts(6, new NodeResources(12, 12, 200, 12));
tester.activateTenantHosts();
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 bfe176bc429..d0ff11fde0c 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
@@ -90,16 +90,16 @@ public class ProvisioningTester {
private int nextIP = 0;
private ProvisioningTester(Curator curator,
- NodeFlavors nodeFlavors,
- HostResourcesCalculator resourcesCalculator,
- Zone zone,
- NameResolver nameResolver,
- DockerImage containerImage,
- Orchestrator orchestrator,
- HostProvisioner hostProvisioner,
- LoadBalancerServiceMock loadBalancerService,
- FlagSource flagSource,
- int spareCount) {
+ NodeFlavors nodeFlavors,
+ HostResourcesCalculator resourcesCalculator,
+ Zone zone,
+ NameResolver nameResolver,
+ DockerImage containerImage,
+ Orchestrator orchestrator,
+ HostProvisioner hostProvisioner,
+ LoadBalancerServiceMock loadBalancerService,
+ FlagSource flagSource,
+ int spareCount) {
this.curator = curator;
this.nodeFlavors = nodeFlavors;
this.clock = new ManualClock();
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 a36c62f473d..fb773f19b8a 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
@@ -368,12 +368,12 @@ public class VirtualNodeProvisioningTest {
ProvisioningTester tester = new ProvisioningTester.Builder().zone(new Zone(Environment.prod, RegionName.from("us-east"))).build();
tester.makeReadyHosts(4, hostResources).activateTenantHosts();
ApplicationId application1 = ProvisioningTester.applicationId("app1");
- prepareAndActivate(application1, ClusterSpec.Type.content, 2, true, hostResources, tester);
+ prepareAndActivate(application1, 2, true, nodeResources, tester);
assertEquals(Set.of("host-1.yahoo.com", "host-2.yahoo.com"),
hostsOf(tester.getNodes(application1, Node.State.active)));
ApplicationId application2 = ProvisioningTester.applicationId("app2");
- prepareAndActivate(application2, ClusterSpec.Type.content, 2, false, nodeResources, tester);
+ prepareAndActivate(application2, 2, false, nodeResources, tester);
assertEquals("Application is assigned to separate hosts",
Set.of("host-3.yahoo.com", "host-4.yahoo.com"),
hostsOf(tester.getNodes(application2, Node.State.active)));
@@ -383,15 +383,16 @@ public class VirtualNodeProvisioningTest {
@Test
public void application_deployment_with_exclusive_app_last() {
NodeResources hostResources = new NodeResources(10, 40, 1000, 10);
+ NodeResources nodeResources = new NodeResources(2, 4, 100, 1);
ProvisioningTester tester = new ProvisioningTester.Builder().zone(new Zone(Environment.prod, RegionName.from("us-east"))).build();
tester.makeReadyHosts(4, hostResources).activateTenantHosts();
ApplicationId application1 = ProvisioningTester.applicationId("app1");
- prepareAndActivate(application1, 2, false, hostResources, tester);
+ prepareAndActivate(application1, 2, false, nodeResources, tester);
assertEquals(Set.of("host-1.yahoo.com", "host-2.yahoo.com"),
hostsOf(tester.getNodes(application1, Node.State.active)));
ApplicationId application2 = ProvisioningTester.applicationId("app2");
- prepareAndActivate(application2, ClusterSpec.Type.content, 2, true, hostResources, tester);
+ prepareAndActivate(application2, 2, true, nodeResources, tester);
assertEquals("Application is assigned to separate hosts",
Set.of("host-3.yahoo.com", "host-4.yahoo.com"),
hostsOf(tester.getNodes(application2, Node.State.active)));
@@ -401,25 +402,59 @@ public class VirtualNodeProvisioningTest {
@Test
public void application_deployment_change_to_exclusive_and_back() {
NodeResources hostResources = new NodeResources(10, 40, 1000, 10);
+ NodeResources nodeResources = new NodeResources(2, 4, 100, 1);
ProvisioningTester tester = new ProvisioningTester.Builder().zone(new Zone(Environment.prod, RegionName.from("us-east"))).build();
tester.makeReadyHosts(4, hostResources).activateTenantHosts();
ApplicationId application1 = ProvisioningTester.applicationId();
- prepareAndActivate(application1, ClusterSpec.Type.content, 2, false, hostResources, tester);
+ prepareAndActivate(application1, 2, false, nodeResources, tester);
for (Node node : tester.getNodes(application1, Node.State.active))
assertFalse(node.allocation().get().membership().cluster().isExclusive());
- prepareAndActivate(application1, ClusterSpec.Type.content, 2, true, hostResources, tester);
+ prepareAndActivate(application1, 2, true, nodeResources, tester);
assertEquals(Set.of("host-1.yahoo.com", "host-2.yahoo.com"), hostsOf(tester.getNodes(application1, Node.State.active)));
for (Node node : tester.getNodes(application1, Node.State.active))
assertTrue(node.allocation().get().membership().cluster().isExclusive());
- prepareAndActivate(application1, ClusterSpec.Type.content, 2, false, hostResources, tester);
+ prepareAndActivate(application1, 2, false, nodeResources, tester);
assertEquals(Set.of("host-1.yahoo.com", "host-2.yahoo.com"), hostsOf(tester.getNodes(application1, Node.State.active)));
for (Node node : tester.getNodes(application1, Node.State.active))
assertFalse(node.allocation().get().membership().cluster().isExclusive());
}
+ /** Non-exclusive app first, then an exclusive: Should give the same result as above */
+ @Test
+ public void application_deployment_with_exclusive_app_causing_allocation_failure() {
+ ApplicationId application1 = ApplicationId.from("tenant1", "app1", "default");
+ ApplicationId application2 = ApplicationId.from("tenant2", "app2", "default");
+ ApplicationId application3 = ApplicationId.from("tenant1", "app3", "default");
+ NodeResources hostResources = new NodeResources(10, 40, 1000, 10);
+ NodeResources nodeResources = new NodeResources(2, 4, 100, 1);
+ ProvisioningTester tester = new ProvisioningTester.Builder().zone(new Zone(Environment.prod, RegionName.from("us-east"))).build();
+ tester.makeReadyHosts(4, hostResources).activateTenantHosts();
+
+ prepareAndActivate(application1, 2, true, nodeResources, tester);
+ assertEquals(Set.of("host-1.yahoo.com", "host-2.yahoo.com"),
+ hostsOf(tester.getNodes(application1, Node.State.active)));
+
+ try {
+ prepareAndActivate(application2, 3, false, nodeResources, tester);
+ fail("Expected allocation failure");
+ }
+ catch (Exception e) {
+ assertEquals("No room for 3 nodes as 2 of 4 hosts are exclusive",
+ "Could not satisfy request for 3 nodes with " +
+ "[vcpu: 2.0, memory: 4.0 Gb, disk 100.0 Gb, bandwidth: 1.0 Gbps, architecture: x86_64] " +
+ "in tenant2.app2 container cluster 'my-container' 6.39: " +
+ "Node allocation failure on group 0: " +
+ "Not enough suitable nodes available due to host exclusivity constraints",
+ e.getMessage());
+ }
+
+ // Adding 3 nodes of another application for the same tenant works
+ prepareAndActivate(application3, 2, true, nodeResources, tester);
+ }
+
@Test
public void storage_type_must_match() {
try {
@@ -636,12 +671,8 @@ public class VirtualNodeProvisioningTest {
}
private void prepareAndActivate(ApplicationId application, int nodeCount, boolean exclusive, NodeResources resources, ProvisioningTester tester) {
- prepareAndActivate(application, ClusterSpec.Type.container, nodeCount, exclusive, resources, tester);
- }
-
- private void prepareAndActivate(ApplicationId application, ClusterSpec.Type clusterType, int nodeCount, boolean exclusive, NodeResources resources, ProvisioningTester tester) {
Set<HostSpec> hosts = new HashSet<>(tester.prepare(application,
- ClusterSpec.request(clusterType, ClusterSpec.Id.from("my-container")).vespaVersion("6.39").exclusive(exclusive).build(),
+ ClusterSpec.request(ClusterSpec.Type.container, ClusterSpec.Id.from("my-container")).vespaVersion("6.39").exclusive(exclusive).build(),
Capacity.from(new ClusterResources(nodeCount, 1, resources), false, true)));
tester.activate(application, hosts);
}
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 b03cd26243e..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
@@ -16,7 +16,7 @@ import java.io.IOException;
*
* Note: This class is referenced from our operations documentation and must not be renamed/moved without updating that.
*
- * @author freva
+ * @author bratseth
*/
public class ArchiveApiTest {
@@ -55,6 +55,7 @@ public class ArchiveApiTest {
tester.assertPartialResponse(new Request("http://localhost:8080/nodes/v2/node/dockerhost2.yahoo.com"), "archiveUri", false);
}
+
private void assertFile(Request request, String file) throws IOException {
tester.assertFile(request, file);
}
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/LoadBalancersV1ApiTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/LoadBalancersV1ApiTest.java
index 3b971575777..729b6b813cd 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/LoadBalancersV1ApiTest.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/LoadBalancersV1ApiTest.java
@@ -22,8 +22,7 @@ public class LoadBalancersV1ApiTest {
@After
public void closeTester() {
- if (tester != null)
- tester.close();
+ tester.close();
}
@Test