diff options
author | Jon Bratseth <bratseth@vespa.ai> | 2023-04-19 15:20:46 +0200 |
---|---|---|
committer | Jon Bratseth <bratseth@vespa.ai> | 2023-04-19 15:20:46 +0200 |
commit | 68396142a215bd0431fea3b9ef909c0d811a82fc (patch) | |
tree | eefb2d9cebb538bb6ea532cc3b34ba7e844108b6 /node-repository/src/test/java/com/yahoo/vespa | |
parent | 6c98021a888d31632eeb2140c771b4a07a60ed73 (diff) |
Revert "Merge pull request #26542 from vespa-engine/revert-26509-bratseth/more-exclusive"bratseth/more-exclusive-take-2
This reverts commit e260f413fe355b0ddb39a86a77f49accc5e738b6, reversing
changes made to c0e8ae27d4fe623de21586ff711c7bcddeef3026.
Diffstat (limited to 'node-repository/src/test/java/com/yahoo/vespa')
6 files changed, 50 insertions, 59 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 0a1bdb7b400..95291e821bc 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.5, 8, 50, 0.3), hostType.childNodeType(), - provisionedHosts.get(i).hostname(), (nodeIndex) -> "cfg" + nodeIndex); + tester.makeReadyChildren(1, i + 1, new NodeResources(1.0, 30, 20, 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 382d2840377..95b7303bf8a 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,6 +9,7 @@ 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; @@ -28,9 +29,11 @@ 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; @@ -52,6 +55,25 @@ 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()); @@ -117,7 +139,7 @@ public class DynamicProvisioningTest { @Test public void avoids_allocating_to_empty_hosts() { - var tester = tester(false); + var tester = tester(true); 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 d0ff11fde0c..bfe176bc429 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 0744d82c85b..91f20ff8ee5 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 @@ -364,12 +364,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, 2, true, nodeResources, tester); + prepareAndActivate(application1, ClusterSpec.Type.content, 2, true, hostResources, 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, 2, false, nodeResources, tester); + prepareAndActivate(application2, ClusterSpec.Type.content, 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))); @@ -379,16 +379,15 @@ 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, nodeResources, tester); + prepareAndActivate(application1, 2, false, hostResources, 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, 2, true, nodeResources, tester); + prepareAndActivate(application2, ClusterSpec.Type.content, 2, true, hostResources, 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))); @@ -398,59 +397,25 @@ 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, 2, false, nodeResources, tester); + prepareAndActivate(application1, ClusterSpec.Type.content, 2, false, hostResources, tester); for (Node node : tester.getNodes(application1, Node.State.active)) assertFalse(node.allocation().get().membership().cluster().isExclusive()); - prepareAndActivate(application1, 2, true, nodeResources, tester); + prepareAndActivate(application1, ClusterSpec.Type.content, 2, true, hostResources, 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, 2, false, nodeResources, tester); + prepareAndActivate(application1, ClusterSpec.Type.content, 2, false, hostResources, 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 { @@ -667,8 +632,12 @@ 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(ClusterSpec.Type.container, ClusterSpec.Id.from("my-container")).vespaVersion("6.39").exclusive(exclusive).build(), + ClusterSpec.request(clusterType, 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 7fe2d77b647..b03cd26243e 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 bratseth + * @author freva */ public class ArchiveApiTest { @@ -55,7 +55,6 @@ 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 729b6b813cd..3b971575777 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,7 +22,8 @@ public class LoadBalancersV1ApiTest { @After public void closeTester() { - tester.close(); + if (tester != null) + tester.close(); } @Test |