From cbdc13c1bdec42220ef4eec88d9967e75c75033a Mon Sep 17 00:00:00 2001 From: Valerij Fredriksen Date: Sat, 14 Sep 2019 13:07:25 +0200 Subject: Require at least 4 Gb memory --- .../noderepository/RealNodeRepositoryTest.java | 2 +- .../provision/provisioning/CapacityPolicies.java | 12 ++++++ .../provision/testutils/MockNodeRepository.java | 6 +-- .../provision/maintenance/FailedExpirerTest.java | 4 +- .../maintenance/LoadBalancerExpirerTest.java | 4 +- .../provision/maintenance/NodeFailTester.java | 6 +-- .../provisioning/AclProvisioningTest.java | 14 +++--- .../provisioning/AllocationSimulator.java | 3 -- .../provisioning/DockerProvisioningTest.java | 6 +-- .../provisioning/DynamicDockerAllocationTest.java | 50 +++++++++------------- .../provisioning/DynamicDockerProvisionTest.java | 6 +-- .../provisioning/LoadBalancerProvisionerTest.java | 10 ++--- .../provisioning/MultigroupProvisioningTest.java | 4 +- .../provision/provisioning/ProvisioningTest.java | 12 +++--- .../provisioning/VirtualNodeProvisioningTest.java | 2 +- .../restapi/v2/responses/capacity-zone.json | 2 +- .../restapi/v2/responses/docker-container1.json | 6 +-- .../provision/restapi/v2/responses/node4.json | 6 +-- .../restapi/v2/responses/node5-after-changes.json | 6 +-- .../provision/restapi/v2/responses/node5.json | 6 +-- 20 files changed, 84 insertions(+), 83 deletions(-) diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/RealNodeRepositoryTest.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/RealNodeRepositoryTest.java index e30572fc63e..108f29b11cd 100644 --- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/RealNodeRepositoryTest.java +++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/RealNodeRepositoryTest.java @@ -111,7 +111,7 @@ public class RealNodeRepositoryTest { assertThat(node.wantedRestartGeneration().get(), is(0L)); assertThat(node.currentRestartGeneration().get(), is(0L)); assertEquals(1, node.vcpus(), delta); - assertEquals(1, node.memoryGb(), delta); + assertEquals(4, node.memoryGb(), delta); assertEquals(100, node.diskGb(), delta); } diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/CapacityPolicies.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/CapacityPolicies.java index 662af1e0db5..ffbf311fc0f 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/CapacityPolicies.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/CapacityPolicies.java @@ -13,6 +13,7 @@ import com.yahoo.vespa.flags.Flags; import com.yahoo.vespa.flags.JacksonFlag; import java.util.Arrays; +import java.util.Locale; import java.util.Optional; /** @@ -46,6 +47,8 @@ public class CapacityPolicies { } public NodeResources decideNodeResources(Optional requestedResources, ClusterSpec cluster) { + if (requestedResources.isPresent()) assertMinimumResources(requestedResources.get(), cluster); + NodeResources resources = requestedResources .or(() -> flagNodeResources(cluster.type())) .orElse(defaultNodeResources(cluster.type())); @@ -61,6 +64,15 @@ public class CapacityPolicies { return resources; } + private void assertMinimumResources(NodeResources resources, ClusterSpec cluster) { + double minMemoryGb = cluster.type() == ClusterSpec.Type.admin ? 2 : 4; + if (resources.memoryGb() >= minMemoryGb) return; + + throw new IllegalArgumentException(String.format(Locale.ENGLISH, + "Must specify at least %.2f Gb of memory for %s cluster '%s', was: %.2f Gb", + minMemoryGb, cluster.type().name(), cluster.id().value(), resources.memoryGb())); + } + private Optional flagNodeResources(ClusterSpec.Type clusterType) { return Optional.ofNullable(defaultResourcesFlag.with(FetchVector.Dimension.CLUSTER_TYPE, clusterType.name()).value()) .map(r -> new NodeResources(r.vcpu(), r.memoryGb(), r.diskGb(), r.bandwidthGbps(), NodeResources.DiskSpeed.valueOf(r.diskSpeed()))); 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 99709880cbe..a96113a6fc6 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 @@ -71,14 +71,14 @@ public class MockNodeRepository extends NodeRepository { nodes.add(createNode("node3", "host3.yahoo.com", ipConfig(3), Optional.empty(), new Flavor(new NodeResources(0.5, 48, 500, 1)), NodeType.tenant)); Node node4 = createNode("node4", "host4.yahoo.com", ipConfig(4), Optional.of("dockerhost1.yahoo.com"), - new Flavor(new NodeResources(1, 1, 100, 1)), NodeType.tenant); + new Flavor(new NodeResources(1, 4, 100, 1)), NodeType.tenant); node4 = node4.with(node4.status() .withVespaVersion(new Version("6.41.0")) .withDockerImage(DockerImage.fromString("docker-registry.domain.tld:8080/dist/vespa:6.41.0"))); nodes.add(node4); Node node5 = createNode("node5", "host5.yahoo.com", ipConfig(5), Optional.of("dockerhost2.yahoo.com"), - new Flavor(new NodeResources(1, 1, 100, 1)), NodeType.tenant); + new Flavor(new NodeResources(1, 8, 100, 1)), NodeType.tenant); nodes.add(node5.with(node5.status() .withVespaVersion(new Version("1.2.3")) .withDockerImage(DockerImage.fromString("docker-registry.domain.tld:8080/dist/vespa:1.2.3")))); @@ -158,7 +158,7 @@ public class MockNodeRepository extends NodeRepository { ClusterSpec.Id.from("id3"), Version.fromString("6.42"), false); - activate(provisioner.prepare(app3, cluster3, Capacity.fromCount(2, new NodeResources(1, 1, 100, 1), false, true), 1, null), app3, provisioner); + activate(provisioner.prepare(app3, cluster3, Capacity.fromCount(2, new NodeResources(1, 4, 100, 1), false, true), 1, null), app3, provisioner); List largeNodes = new ArrayList<>(); largeNodes.add(createNode("node13", "host13.yahoo.com", ipConfig(13), Optional.empty(), 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 737e47925f2..2b6bbdc6963 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 @@ -261,8 +261,8 @@ public class FailedExpirerTest { private static class FailureScenario { private static final NodeFlavors nodeFlavors = FlavorConfigBuilder.createDummies("default", "docker"); - public static final NodeResources defaultFlavor = new NodeResources(2, 2, 2, 2); - public static final NodeResources dockerFlavor = new NodeResources(1, 1, 1, 1); + public static final NodeResources defaultFlavor = new NodeResources(2, 8, 100, 2); + public static final NodeResources dockerFlavor = new NodeResources(1, 4, 50, 1); private final MockCurator curator = new MockCurator(); private final ManualClock clock = new ManualClock(); diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/LoadBalancerExpirerTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/LoadBalancerExpirerTest.java index f8f60635ea9..75224021464 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/LoadBalancerExpirerTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/LoadBalancerExpirerTest.java @@ -147,13 +147,13 @@ public class LoadBalancerExpirerTest { } private void deployApplication(ApplicationId application, boolean activate, ClusterSpec.Id... clusters) { - tester.makeReadyNodes(10, "d-1-1-1"); + tester.makeReadyNodes(10, "d-1-4-10"); List hosts = new ArrayList<>(); for (var cluster : clusters) { hosts.addAll(tester.prepare(application, ClusterSpec.request(ClusterSpec.Type.container, cluster, Vtag.currentVersion, false), 2, 1, - new NodeResources(1, 1, 1, 0.3))); + new NodeResources(1, 4, 10, 0.3))); } if (activate) { tester.activate(application, hosts); 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 11d3fc23e0f..5872a78e1e2 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 @@ -115,7 +115,7 @@ public class NodeFailTester { List hosts = tester.createHostNodes(numberOfHosts); for (int i = 0; i < hosts.size(); i++) { tester.createReadyNodes(nodesPerHost, i * nodesPerHost, Optional.of("parent" + i), - new NodeResources(1, 1, 1, 0.3), NodeType.tenant); + new NodeResources(1, 4, 10, 0.3), NodeType.tenant); } // Create applications @@ -123,8 +123,8 @@ public class NodeFailTester { ClusterSpec clusterApp1 = ClusterSpec.request(ClusterSpec.Type.container, ClusterSpec.Id.from("test"), Version.fromString("6.75.0"), false); ClusterSpec clusterApp2 = ClusterSpec.request(ClusterSpec.Type.content, ClusterSpec.Id.from("test"), Version.fromString("6.75.0"), false); Capacity allHosts = Capacity.fromRequiredNodeType(NodeType.host); - Capacity capacity1 = Capacity.fromCount(3, new NodeResources(1, 1, 1, 0.3), false, true); - Capacity capacity2 = Capacity.fromCount(5, new NodeResources(1, 1, 1, 0.3), false, true); + Capacity capacity1 = Capacity.fromCount(3, new NodeResources(1, 4, 10, 0.3), false, true); + Capacity capacity2 = Capacity.fromCount(5, new NodeResources(1, 4, 10, 0.3), false, true); tester.activate(tenantHostApp, clusterNodeAdminApp, allHosts); tester.activate(app1, clusterApp1, capacity1); tester.activate(app2, clusterApp2, capacity2); 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 50fb8290bd5..92d066e5f16 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 @@ -34,20 +34,20 @@ public class AclProvisioningTest { @Test public void trusted_nodes_for_allocated_node() { - List configServers = tester.makeConfigServers(3, "d-1-1-1", Version.fromString("6.123.456")); + List configServers = tester.makeConfigServers(3, "d-1-4-10", Version.fromString("6.123.456")); // Populate repo - tester.makeReadyNodes(10, new NodeResources(1, 1, 1, 1)); - List dockerHost = tester.makeReadyNodes(1, new NodeResources(1, 1, 1, 1), NodeType.host); + tester.makeReadyNodes(10, new NodeResources(1, 4, 10, 1)); + List dockerHost = tester.makeReadyNodes(1, new NodeResources(1, 4, 10, 1), NodeType.host); ApplicationId zoneApplication = tester.makeApplicationId(); deploy(zoneApplication, Capacity.fromRequiredNodeType(NodeType.host)); - tester.makeReadyVirtualDockerNodes(1,new NodeResources(1, 1, 1, 1), + tester.makeReadyVirtualDockerNodes(1,new NodeResources(1, 4, 10, 1), dockerHost.get(0).hostname()); - List proxyNodes = tester.makeReadyNodes(3, new NodeResources(1, 1, 1, 1), NodeType.proxy); + List proxyNodes = tester.makeReadyNodes(3, new NodeResources(1, 4, 10, 1), NodeType.proxy); // Allocate 2 nodes ApplicationId application = tester.makeApplicationId(); - List activeNodes = deploy(application, Capacity.fromCount(2, new NodeResources(1, 1, 1, 1), false, true)); + List activeNodes = deploy(application, Capacity.fromCount(2, new NodeResources(1, 4, 10, 1), false, true)); assertEquals(2, activeNodes.size()); // Get trusted nodes for the first active node @@ -130,7 +130,7 @@ public class AclProvisioningTest { // Populate repo List dockerHostNodes = tester.makeReadyNodes(2, "default", NodeType.host); Node dockerHostNodeUnderTest = dockerHostNodes.get(0); - List dockerNodes = tester.makeReadyVirtualDockerNodes(5, new NodeResources(1, 1, 1, 1), + List dockerNodes = tester.makeReadyVirtualDockerNodes(5, new NodeResources(1, 4, 10, 1), dockerHostNodeUnderTest.hostname()); List acls = tester.nodeRepository().getNodeAcls(dockerHostNodeUnderTest, true); diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/AllocationSimulator.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/AllocationSimulator.java index 1343335d131..e3aefdd4512 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/AllocationSimulator.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/AllocationSimulator.java @@ -49,9 +49,6 @@ public class AllocationSimulator { b.addFlavor("d-1", 1, 1., 1, 1, Flavor.Type.DOCKER_CONTAINER); b.addFlavor("d-2", 2, 2., 2, 2, Flavor.Type.DOCKER_CONTAINER); b.addFlavor("d-3", 3, 3., 3, 3, Flavor.Type.DOCKER_CONTAINER); - b.addFlavor("d-3-disk", 3, 3., 5, 3, Flavor.Type.DOCKER_CONTAINER); - b.addFlavor("d-3-mem", 3, 5., 3, 3, Flavor.Type.DOCKER_CONTAINER); - b.addFlavor("d-3-cpu", 5, 3., 3, 3, Flavor.Type.DOCKER_CONTAINER); flavors = new NodeFlavors(b.build()); // diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/DockerProvisioningTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/DockerProvisioningTest.java index 38651a77949..3ca159e10eb 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/DockerProvisioningTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/DockerProvisioningTest.java @@ -36,7 +36,7 @@ import static org.junit.Assert.fail; */ public class DockerProvisioningTest { - private static final NodeResources dockerFlavor = new NodeResources(1, 1, 1, 1); + private static final NodeResources dockerFlavor = new NodeResources(1, 4, 10, 1); @Test public void docker_application_deployment() { @@ -204,7 +204,7 @@ public class DockerProvisioningTest { } 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: 1.0, memory: 1.0 Gb, disk 1.0 Gb, bandwidth: 1.0 Gbps] for container cluster 'myContainer' group 0 6.39 in tenant1.app1: Not enough nodes available due to host exclusivity constraints.", + "Could not satisfy request for 3 nodes with [vcpu: 1.0, memory: 4.0 Gb, disk 10.0 Gb, bandwidth: 1.0 Gbps] for container cluster 'myContainer' group 0 6.39 in tenant1.app1: Not enough nodes available due to host exclusivity constraints.", e.getMessage()); } @@ -225,7 +225,7 @@ public class DockerProvisioningTest { NodeList nodes = tester.getNodes(application1, Node.State.active); assertEquals(1, nodes.size()); - assertEquals("[vcpu: 1.0, memory: 1.0 Gb, disk 1.0 Gb, bandwidth: 1.0 Gbps]", nodes.asList().get(0).flavor().name()); + assertEquals("[vcpu: 1.0, memory: 4.0 Gb, disk 10.0 Gb, bandwidth: 1.0 Gbps]", nodes.asList().get(0).flavor().name()); } private Set hostsOf(NodeList nodes) { diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/DynamicDockerAllocationTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/DynamicDockerAllocationTest.java index 1e25e861cbe..cfcdc882a3c 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/DynamicDockerAllocationTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/DynamicDockerAllocationTest.java @@ -66,7 +66,7 @@ public class DynamicDockerAllocationTest { tester.makeReadyNodes(4, "host-small", NodeType.host, 32); deployZoneApp(tester); List dockerHosts = tester.nodeRepository().getNodes(NodeType.host, Node.State.active); - NodeResources flavor = new NodeResources(1, 1, 1, 1); + NodeResources flavor = new NodeResources(1, 4, 10, 1); // Application 1 ApplicationId application1 = makeApplicationId("t1", "a1"); @@ -109,7 +109,7 @@ public class DynamicDockerAllocationTest { tester.makeReadyNodes(5, "host-small", NodeType.host, 32); deployZoneApp(tester); List dockerHosts = tester.nodeRepository().getNodes(NodeType.host, Node.State.active); - NodeResources flavor = new NodeResources(1, 1, 1, 0.3); + NodeResources flavor = new NodeResources(1, 4, 10, 0.3); // Application 1 ApplicationId application1 = makeApplicationId("t1", "a1"); @@ -166,7 +166,7 @@ public class DynamicDockerAllocationTest { tester.makeReadyNodes(2, "host-small", NodeType.host, 32); deployZoneApp(tester); List dockerHosts = tester.nodeRepository().getNodes(NodeType.host, Node.State.active); - NodeResources flavor = new NodeResources(1, 1, 1, 1); + NodeResources flavor = new NodeResources(1, 4, 10, 1); // Application 1 ApplicationId application1 = makeApplicationId("t1", "a1"); @@ -195,7 +195,7 @@ public class DynamicDockerAllocationTest { //Deploy an application having 6 nodes (3 nodes in 2 groups). We only have 5 docker hosts available ApplicationId application1 = tester.makeApplicationId(); - tester.prepare(application1, clusterSpec("myContent.t1.a1"), 6, 2, new NodeResources(1, 1, 1, 1)); + tester.prepare(application1, clusterSpec("myContent.t1.a1"), 6, 2, new NodeResources(1, 4, 10, 1)); fail("Two groups have been allocated to the same parent host"); } @@ -213,7 +213,7 @@ public class DynamicDockerAllocationTest { ApplicationId application1 = tester.makeApplicationId(); tester.makeReadyNodes(5, "host-small", NodeType.host, 32); deployZoneApp(tester); - NodeResources flavor = new NodeResources(1, 1, 1, 1); + NodeResources flavor = new NodeResources(1, 4, 10, 1); // Deploy initial state (can max deploy 3 nodes due to redundancy requirements) ClusterSpec clusterSpec = clusterSpec("myContent.t1.a1"); @@ -243,7 +243,7 @@ public class DynamicDockerAllocationTest { tester.makeReadyNodes(3, "host-small", NodeType.host, 32); deployZoneApp(tester); ApplicationId application1 = tester.makeApplicationId(); - List hosts = tester.prepare(application1, clusterSpec("myContent.t1.a1"), 3, 1, new NodeResources(1, 1, 1, 1)); + List hosts = tester.prepare(application1, clusterSpec("myContent.t1.a1"), 3, 1, new NodeResources(1, 4, 10, 1)); tester.activate(application1, ImmutableSet.copyOf(hosts)); List initialSpareCapacity = findSpareCapacity(tester); @@ -253,10 +253,10 @@ public class DynamicDockerAllocationTest { @Test public void cd_uses_slow_disk_nodes_for_docker_hosts() { ProvisioningTester tester = new ProvisioningTester.Builder().zone(new Zone(SystemName.cd, Environment.test, RegionName.from("us-east"))).flavorsConfig(flavorsConfig()).build(); - tester.makeReadyNodes(4, new Flavor(new NodeResources(1, 2, 3, 1, NodeResources.DiskSpeed.slow)), NodeType.host, 10, true); + tester.makeReadyNodes(4, new Flavor(new NodeResources(1, 8, 12, 1, NodeResources.DiskSpeed.slow)), NodeType.host, 10, true); deployZoneApp(tester); ApplicationId application1 = tester.makeApplicationId(); - List hosts = tester.prepare(application1, clusterSpec("myContent.t1.a1"), 3, 1, new NodeResources(1, 1, 1, 1)); + List hosts = tester.prepare(application1, clusterSpec("myContent.t1.a1"), 3, 1, new NodeResources(1, 4, 10, 1)); tester.activate(application1, ImmutableSet.copyOf(hosts)); } @@ -267,7 +267,7 @@ public class DynamicDockerAllocationTest { tester.nodeRepository().fail(node.hostname(), Agent.system, getClass().getSimpleName())); ApplicationId application = tester.makeApplicationId(); - tester.prepare(application, clusterSpec("myContent.t2.a2"), 2, 1, new NodeResources(1, 1, 1, 1)); + tester.prepare(application, clusterSpec("myContent.t2.a2"), 2, 1, new NodeResources(1, 4, 10, 1)); } @Test @@ -277,7 +277,7 @@ public class DynamicDockerAllocationTest { deployZoneApp(tester); ApplicationId application = tester.makeApplicationId(); - List hosts = tester.prepare(application, clusterSpec("myContent.t1.a1"), 2, 1, new NodeResources(1, 1, 1, 1)); + List hosts = tester.prepare(application, clusterSpec("myContent.t1.a1"), 2, 1, new NodeResources(1, 4, 10, 1)); tester.activate(application, hosts); List activeNodes = tester.nodeRepository().getNodes(application); @@ -303,13 +303,13 @@ public class DynamicDockerAllocationTest { @Test public void slow_disk_nodes_are_preferentially_allocated() { ProvisioningTester tester = new ProvisioningTester.Builder().zone(new Zone(Environment.prod, RegionName.from("us-east"))).flavorsConfig(flavorsConfig()).build(); - tester.makeReadyNodes(2, new Flavor(new NodeResources(1, 2, 3, 1, NodeResources.DiskSpeed.fast)), NodeType.host, 10, true); - tester.makeReadyNodes(2, new Flavor(new NodeResources(1, 2, 3, 1, NodeResources.DiskSpeed.slow)), NodeType.host, 10, true); + tester.makeReadyNodes(2, new Flavor(new NodeResources(1, 8, 12, 1, NodeResources.DiskSpeed.fast)), NodeType.host, 10, true); + tester.makeReadyNodes(2, new Flavor(new NodeResources(1, 8, 12, 1, NodeResources.DiskSpeed.slow)), NodeType.host, 10, true); deployZoneApp(tester); ApplicationId application = tester.makeApplicationId(); ClusterSpec cluster = ClusterSpec.request(ClusterSpec.Type.container, ClusterSpec.Id.from("test"), Version.fromString("1"), false); - NodeResources resources = new NodeResources(1, 1, 1, 1, NodeResources.DiskSpeed.any); + NodeResources resources = new NodeResources(1, 4, 10, 1, NodeResources.DiskSpeed.any); List hosts = tester.prepare(application, cluster, 2, 1, resources); assertEquals(2, hosts.size()); @@ -320,13 +320,13 @@ public class DynamicDockerAllocationTest { private void provisionFastAndSlowThenDeploy(NodeResources.DiskSpeed requestDiskSpeed, boolean expectOutOfCapacity) { ProvisioningTester tester = new ProvisioningTester.Builder().zone(new Zone(Environment.prod, RegionName.from("us-east"))).flavorsConfig(flavorsConfig()).build(); - tester.makeReadyNodes(2, new Flavor(new NodeResources(1, 2, 3, 1, NodeResources.DiskSpeed.fast)), NodeType.host, 10, true); - tester.makeReadyNodes(2, new Flavor(new NodeResources(1, 2, 3, 1, NodeResources.DiskSpeed.slow)), NodeType.host, 10, true); + tester.makeReadyNodes(2, new Flavor(new NodeResources(1, 8, 12, 1, NodeResources.DiskSpeed.fast)), NodeType.host, 10, true); + tester.makeReadyNodes(2, new Flavor(new NodeResources(1, 8, 12, 1, NodeResources.DiskSpeed.slow)), NodeType.host, 10, true); deployZoneApp(tester); ApplicationId application = tester.makeApplicationId(); ClusterSpec cluster = ClusterSpec.request(ClusterSpec.Type.container, ClusterSpec.Id.from("test"), Version.fromString("1"), false); - NodeResources resources = new NodeResources(1, 1, 1, 1, requestDiskSpeed); + NodeResources resources = new NodeResources(1, 4, 10, 1, requestDiskSpeed); try { List hosts = tester.prepare(application, cluster, 4, 1, resources); @@ -342,13 +342,13 @@ public class DynamicDockerAllocationTest { @Test public void nodeResourcesAreRelaxedInDev() { ProvisioningTester tester = new ProvisioningTester.Builder().zone(new Zone(Environment.dev, RegionName.from("us-east"))).flavorsConfig(flavorsConfig()).build(); - tester.makeReadyNodes(2, new Flavor(new NodeResources(1, 2, 3, 1, NodeResources.DiskSpeed.fast)), NodeType.host, 10, true); - tester.makeReadyNodes(2, new Flavor(new NodeResources(1, 2, 3, 1, NodeResources.DiskSpeed.slow)), NodeType.host, 10, true); + tester.makeReadyNodes(2, new Flavor(new NodeResources(1, 8, 12, 1, NodeResources.DiskSpeed.fast)), NodeType.host, 10, true); + tester.makeReadyNodes(2, new Flavor(new NodeResources(1, 8, 12, 1, NodeResources.DiskSpeed.slow)), NodeType.host, 10, true); deployZoneApp(tester); ApplicationId application = tester.makeApplicationId(); ClusterSpec cluster = ClusterSpec.request(ClusterSpec.Type.container, ClusterSpec.Id.from("test"), Version.fromString("1"), false); - NodeResources resources = new NodeResources(1, 1, 1, 1, NodeResources.DiskSpeed.fast); + NodeResources resources = new NodeResources(1, 4, 10, 1, NodeResources.DiskSpeed.fast); List hosts = tester.prepare(application, cluster, 4, 1, resources); assertEquals(1, hosts.size()); @@ -410,16 +410,8 @@ public class DynamicDockerAllocationTest { private FlavorsConfig flavorsConfig() { FlavorConfigBuilder b = new FlavorConfigBuilder(); - b.addFlavor("host-large", 6., 6., 6, 6, Flavor.Type.BARE_METAL); - b.addFlavor("host-small", 3., 3., 3, 3, Flavor.Type.BARE_METAL); - b.addFlavor("host-medium", 4., 4., 4, 4, Flavor.Type.BARE_METAL); - b.addFlavor("d-1", 1, 1., 1, 1, Flavor.Type.DOCKER_CONTAINER); - b.addFlavor("d-2", 2, 2., 2, 2, Flavor.Type.DOCKER_CONTAINER); - b.addFlavor("d-3", 3, 3., 3, 3, Flavor.Type.DOCKER_CONTAINER); - b.addFlavor("d-3-disk", 3, 3., 5, 3, Flavor.Type.DOCKER_CONTAINER); - b.addFlavor("d-3-mem", 3, 5., 3, 3, Flavor.Type.DOCKER_CONTAINER); - b.addFlavor("d-3-cpu", 5, 3., 3, 3, Flavor.Type.DOCKER_CONTAINER); - b.addFlavor("d-2-8-50", 2, 8, 50, 1, Flavor.Type.DOCKER_CONTAINER); + b.addFlavor("host-large", 6., 24., 80, 6, Flavor.Type.BARE_METAL); + b.addFlavor("host-small", 3., 12., 40, 3, Flavor.Type.BARE_METAL); return b.build(); } diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/DynamicDockerProvisionTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/DynamicDockerProvisionTest.java index ee5568b9b76..9d467b7d911 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/DynamicDockerProvisionTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/DynamicDockerProvisionTest.java @@ -45,7 +45,7 @@ public class DynamicDockerProvisionTest { assertEquals(0, tester.nodeRepository().list().size()); ApplicationId application1 = tester.makeApplicationId(); - NodeResources flavor = new NodeResources(1, 1, 1, 1); + NodeResources flavor = new NodeResources(1, 4, 10, 1); mockHostProvisioner(hostProvisioner, tester.nodeRepository().getAvailableFlavors().getFlavorOrThrow("small")); List hostSpec = tester.prepare(application1, clusterSpec("myContent.t1.a1"), 4, 1, flavor); @@ -65,7 +65,7 @@ public class DynamicDockerProvisionTest { deployZoneApp(tester); ApplicationId application = tester.makeApplicationId(); - NodeResources flavor = new NodeResources(1, 1, 1, 1); + NodeResources flavor = new NodeResources(1, 4, 10, 1); mockHostProvisioner(hostProvisioner, tester.nodeRepository().getAvailableFlavors().getFlavorOrThrow("small")); tester.prepare(application, clusterSpec("myContent.t2.a2"), 2, 1, flavor); @@ -75,7 +75,7 @@ public class DynamicDockerProvisionTest { @Test public void allocates_to_hosts_already_hosting_nodes_by_this_tenant() { ApplicationId application = tester.makeApplicationId(); - NodeResources flavor = new NodeResources(1, 1, 1, 1); + NodeResources flavor = new NodeResources(1, 4, 10, 1); List expectedProvisionIndexes = List.of(100, 101); mockHostProvisioner(hostProvisioner, tester.nodeRepository().getAvailableFlavors().getFlavorOrThrow("large")); 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 9aa1cc4bd47..91846d14aa1 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 @@ -155,7 +155,7 @@ public class LoadBalancerProvisionerTest { @Test public void provision_load_balancers_with_dynamic_node_provisioning() { - var nodes = prepare(app1, Capacity.fromCount(2, new NodeResources(1, 1, 1, 0.3), false, true), + var nodes = prepare(app1, Capacity.fromCount(2, new NodeResources(1, 4, 10, 0.3), false, true), true, clusterRequest(ClusterSpec.Type.container, ClusterSpec.Id.from("qrs"))); Supplier lb = () -> tester.nodeRepository().loadBalancers().owner(app1).asList().get(0); @@ -173,7 +173,7 @@ public class LoadBalancerProvisionerTest { assertSame("Load balancer is deactivated", LoadBalancer.State.inactive, lb.get().state()); // Application is redeployed - nodes = prepare(app1, Capacity.fromCount(2, new NodeResources(1, 1, 1, 0.3), false, true), + nodes = prepare(app1, Capacity.fromCount(2, new NodeResources(1, 4, 10, 0.3), false, true), true, clusterRequest(ClusterSpec.Type.container, ClusterSpec.Id.from("qrs"))); assertTrue("Load balancer is reconfigured with empty reals", tester.loadBalancerService().instances().get(lb.get().id()).reals().isEmpty()); @@ -205,14 +205,14 @@ public class LoadBalancerProvisionerTest { } private Set prepare(ApplicationId application, ClusterSpec... specs) { - return prepare(application, Capacity.fromCount(2, new NodeResources(1, 1, 1, 0.3), false, true), false, specs); + return prepare(application, Capacity.fromCount(2, new NodeResources(1, 4, 10, 0.3), false, true), false, specs); } private Set prepare(ApplicationId application, Capacity capacity, boolean dynamicDockerNodes, ClusterSpec... specs) { if (dynamicDockerNodes) { makeDynamicDockerNodes(specs.length * 2, capacity.type()); } else { - tester.makeReadyNodes(specs.length * 2, new NodeResources(1, 1, 1, 0.3), capacity.type()); + tester.makeReadyNodes(specs.length * 2, new NodeResources(1, 4, 10, 0.3), capacity.type()); } Set allNodes = new LinkedHashSet<>(); for (ClusterSpec spec : specs) { @@ -225,7 +225,7 @@ public class LoadBalancerProvisionerTest { List nodes = new ArrayList<>(n); for (int i = 1; i <= n; i++) { var node = Node.createDockerNode(Set.of(), "node" + i, "parent" + i, - new NodeResources(1, 1, 1, 0.3), + new NodeResources(1, 4, 10, 0.3), nodeType); nodes.add(node); } 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 1836589c0ab..10a50998509 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 @@ -33,8 +33,8 @@ import static org.junit.Assert.assertTrue; */ public class MultigroupProvisioningTest { - private static final NodeResources small = new NodeResources(1, 1, 1, 1); - private static final NodeResources large = new NodeResources(3, 3, 3, 3); + private static final NodeResources small = new NodeResources(1, 4, 10, 1); + private static final NodeResources large = new NodeResources(12, 12, 12, 12); @Test public void test_provisioning_of_multiple_groups() { 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 58440372821..877038b8722 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 @@ -48,7 +48,7 @@ import static org.junit.Assert.fail; */ public class ProvisioningTest { - private static final NodeResources defaultResources = new NodeResources(1, 2, 3, 4); + private static final NodeResources defaultResources = new NodeResources(1, 4, 10, 4); @Test public void application_deployment_constant_application_size() { @@ -225,8 +225,8 @@ public class ProvisioningTest { @Test public void application_deployment_multiple_flavors() { - NodeResources small = new NodeResources(1, 1, 1, 0.3); - NodeResources large = new NodeResources(2, 2, 2, 0.3); + NodeResources small = new NodeResources(1, 4, 10, 0.3); + NodeResources large = new NodeResources(8, 8, 40, 0.3); ProvisioningTester tester = new ProvisioningTester.Builder().zone(new Zone(Environment.prod, RegionName.from("us-east"))).build(); @@ -357,12 +357,12 @@ public class ProvisioningTest { public void dev_deployment_flavor() { ProvisioningTester tester = new ProvisioningTester.Builder().zone(new Zone(Environment.dev, RegionName.from("us-east"))).build(); - tester.makeReadyNodes(4, new NodeResources(2, 2, 2, 2), NodeType.host, 1); + tester.makeReadyNodes(4, new NodeResources(2, 4, 10, 2), NodeType.host, 1); tester.prepareAndActivateInfraApplication(tester.makeApplicationId(), NodeType.host); ApplicationId application = tester.makeApplicationId(); SystemState state = prepare(application, 2, 2, 3, 3, - new NodeResources(2, 2, 2, 2), tester); + new NodeResources(2, 4, 10, 2), tester); assertEquals(4, state.allHosts.size()); tester.activate(application, state.allHosts); } @@ -370,7 +370,7 @@ public class ProvisioningTest { /** Test always uses the zone default resources */ @Test public void test_deployment_resources() { - NodeResources large = new NodeResources(2, 2, 2, 0.3); + NodeResources large = new NodeResources(2, 4, 10, 0.3); ProvisioningTester tester = new ProvisioningTester.Builder().zone(new Zone(Environment.test, RegionName.from("us-east"))).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 1712b9448b1..f8c6e31cfd7 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 @@ -82,7 +82,7 @@ public class VirtualNodeProvisioningTest { // Allowed to use same parent host for several nodes in same cluster in dev { - NodeResources flavor = new NodeResources(1, 1, 1, 1); + 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.prepareAndActivateInfraApplication(tester.makeApplicationId(), NodeType.host); diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/capacity-zone.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/capacity-zone.json index 42948678c55..68f89b1e20a 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/capacity-zone.json +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/capacity-zone.json @@ -3,7 +3,7 @@ "couldLoseHosts": 4, "failedTenantParent": "dockerhost1.yahoo.com", "failedTenant": "host4.yahoo.com", - "failedTenantResources": "[vcpu: 1.0, memory: 1.0 Gb, disk 100.0 Gb, bandwidth: 1.0 Gbps]", + "failedTenantResources": "[vcpu: 1.0, memory: 4.0 Gb, disk 100.0 Gb, bandwidth: 1.0 Gbps]", "failedTenantAllocation": "allocated to tenant3.application3.instance3 as 'content/id3/0/0'", "hostCandidateRejectionReasons": { "singularReasonFailures": { diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/docker-container1.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/docker-container1.json index 0ffd22d909f..79ea6dffeb4 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/docker-container1.json +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/docker-container1.json @@ -6,10 +6,10 @@ "hostname": "test-node-pool-101-2", "parentHostname": "dockerhost2.yahoo.com", "openStackId": "fake-test-node-pool-101-2", - "flavor": "[vcpu: 1.0, memory: 1.0 Gb, disk 100.0 Gb, bandwidth: 1.0 Gbps]", - "canonicalFlavor": "[vcpu: 1.0, memory: 1.0 Gb, disk 100.0 Gb, bandwidth: 1.0 Gbps]", + "flavor": "[vcpu: 1.0, memory: 4.0 Gb, disk 100.0 Gb, bandwidth: 1.0 Gbps]", + "canonicalFlavor": "[vcpu: 1.0, memory: 4.0 Gb, disk 100.0 Gb, bandwidth: 1.0 Gbps]", "minDiskAvailableGb": 100.0, - "minMainMemoryAvailableGb": 1.0, + "minMainMemoryAvailableGb": 4.0, "minCpuCores": 1.0, "fastDisk": true, "bandwidthGbps": 1.0, diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node4.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node4.json index 5522ef44dec..d32149cdac1 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node4.json +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node4.json @@ -6,10 +6,10 @@ "hostname": "host4.yahoo.com", "parentHostname": "dockerhost1.yahoo.com", "openStackId": "node4", - "flavor": "[vcpu: 1.0, memory: 1.0 Gb, disk 100.0 Gb, bandwidth: 1.0 Gbps]", - "canonicalFlavor": "[vcpu: 1.0, memory: 1.0 Gb, disk 100.0 Gb, bandwidth: 1.0 Gbps]", + "flavor": "[vcpu: 1.0, memory: 4.0 Gb, disk 100.0 Gb, bandwidth: 1.0 Gbps]", + "canonicalFlavor": "[vcpu: 1.0, memory: 4.0 Gb, disk 100.0 Gb, bandwidth: 1.0 Gbps]", "minDiskAvailableGb": 100.0, - "minMainMemoryAvailableGb": 1.0, + "minMainMemoryAvailableGb": 4.0, "minCpuCores": 1.0, "fastDisk": true, "bandwidthGbps": 1.0, diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node5-after-changes.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node5-after-changes.json index fa29b2cb6ac..3f1781f7c36 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node5-after-changes.json +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node5-after-changes.json @@ -6,10 +6,10 @@ "hostname": "host5.yahoo.com", "parentHostname": "dockerhost2.yahoo.com", "openStackId": "node5", - "flavor": "[vcpu: 1.0, memory: 1.0 Gb, disk 100.0 Gb, bandwidth: 1.0 Gbps]", - "canonicalFlavor": "[vcpu: 1.0, memory: 1.0 Gb, disk 100.0 Gb, bandwidth: 1.0 Gbps]", + "flavor": "[vcpu: 1.0, memory: 8.0 Gb, disk 100.0 Gb, bandwidth: 1.0 Gbps]", + "canonicalFlavor": "[vcpu: 1.0, memory: 8.0 Gb, disk 100.0 Gb, bandwidth: 1.0 Gbps]", "minDiskAvailableGb": 100.0, - "minMainMemoryAvailableGb": 1.0, + "minMainMemoryAvailableGb": 8.0, "minCpuCores": 1.0, "fastDisk": true, "bandwidthGbps": 1.0, diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node5.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node5.json index e7e2c7607e4..62ca45dc540 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node5.json +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node5.json @@ -6,10 +6,10 @@ "hostname": "host5.yahoo.com", "parentHostname": "dockerhost2.yahoo.com", "openStackId": "node5", - "flavor": "[vcpu: 1.0, memory: 1.0 Gb, disk 100.0 Gb, bandwidth: 1.0 Gbps]", - "canonicalFlavor": "[vcpu: 1.0, memory: 1.0 Gb, disk 100.0 Gb, bandwidth: 1.0 Gbps]", + "flavor": "[vcpu: 1.0, memory: 8.0 Gb, disk 100.0 Gb, bandwidth: 1.0 Gbps]", + "canonicalFlavor": "[vcpu: 1.0, memory: 8.0 Gb, disk 100.0 Gb, bandwidth: 1.0 Gbps]", "minDiskAvailableGb": 100.0, - "minMainMemoryAvailableGb": 1.0, + "minMainMemoryAvailableGb": 8.0, "minCpuCores": 1.0, "fastDisk": true, "bandwidthGbps": 1.0, -- cgit v1.2.3