diff options
10 files changed, 77 insertions, 66 deletions
diff --git a/config-model/src/main/java/com/yahoo/config/model/provision/InMemoryProvisioner.java b/config-model/src/main/java/com/yahoo/config/model/provision/InMemoryProvisioner.java index 8bf6dc7f1d9..a6bcf6b0fd2 100644 --- a/config-model/src/main/java/com/yahoo/config/model/provision/InMemoryProvisioner.java +++ b/config-model/src/main/java/com/yahoo/config/model/provision/InMemoryProvisioner.java @@ -36,7 +36,7 @@ import java.util.stream.IntStream; */ public class InMemoryProvisioner implements HostProvisioner { - public static final NodeResources defaultResources = new NodeResources(1, 3, 10, 1); + public static final NodeResources defaultResources = new NodeResources(1, 3, 50, 1); /** * If this is true an exception is thrown when all nodes are used. @@ -153,7 +153,7 @@ public class InMemoryProvisioner implements HostProvisioner { if (alwaysReturnOneNode) nodes = 1; - int groups = requested.groups() > nodes ? nodes : requested.groups(); + int groups = Math.min(requested.groups(), nodes); List<HostSpec> allocation = new ArrayList<>(); if (groups == 1) { diff --git a/config-model/src/test/java/com/yahoo/config/model/provision/ModelProvisioningTest.java b/config-model/src/test/java/com/yahoo/config/model/provision/ModelProvisioningTest.java index 582ab18f904..183ab56d45f 100644 --- a/config-model/src/test/java/com/yahoo/config/model/provision/ModelProvisioningTest.java +++ b/config-model/src/test/java/com/yahoo/config/model/provision/ModelProvisioningTest.java @@ -553,7 +553,7 @@ public class ModelProvisioningTest { assertEquals(3, subGroups.get(0).getNodes().size()); assertEquals(0, subGroups.get(0).getNodes().get(0).getDistributionKey()); assertEquals("bar/storage/0", subGroups.get(0).getNodes().get(0).getConfigId()); - assertEquals("node-1-3-10-57", subGroups.get(0).getNodes().get(0).getHostName()); + assertEquals("node-1-3-50-57", subGroups.get(0).getNodes().get(0).getHostName()); assertEquals(1, subGroups.get(0).getNodes().get(1).getDistributionKey()); assertEquals("bar/storage/1", subGroups.get(0).getNodes().get(1).getConfigId()); assertEquals(2, subGroups.get(0).getNodes().get(2).getDistributionKey()); @@ -562,13 +562,13 @@ public class ModelProvisioningTest { assertEquals(3, subGroups.get(1).getNodes().size()); assertEquals(3, subGroups.get(1).getNodes().get(0).getDistributionKey()); assertEquals("bar/storage/3", subGroups.get(1).getNodes().get(0).getConfigId()); - assertEquals("node-1-3-10-54", subGroups.get(1).getNodes().get(0).getHostName()); + assertEquals("node-1-3-50-54", subGroups.get(1).getNodes().get(0).getHostName()); assertEquals(4, subGroups.get(1).getNodes().get(1).getDistributionKey()); assertEquals("bar/storage/4", subGroups.get(1).getNodes().get(1).getConfigId()); assertEquals(5, subGroups.get(1).getNodes().get(2).getDistributionKey()); assertEquals("bar/storage/5", subGroups.get(1).getNodes().get(2).getConfigId()); // ... - assertEquals("node-1-3-10-51", subGroups.get(2).getNodes().get(0).getHostName()); + assertEquals("node-1-3-50-51", subGroups.get(2).getNodes().get(0).getHostName()); // ... assertEquals("8", subGroups.get(8).getIndex()); assertEquals(3, subGroups.get(8).getNodes().size()); @@ -587,14 +587,14 @@ public class ModelProvisioningTest { assertEquals(1, subGroups.get(0).getNodes().size()); assertEquals(0, subGroups.get(0).getNodes().get(0).getDistributionKey()); assertEquals("baz/storage/0", subGroups.get(0).getNodes().get(0).getConfigId()); - assertEquals("node-1-3-10-27", subGroups.get(0).getNodes().get(0).getHostName()); + assertEquals("node-1-3-50-27", subGroups.get(0).getNodes().get(0).getHostName()); assertEquals("1", subGroups.get(1).getIndex()); assertEquals(1, subGroups.get(1).getNodes().size()); assertEquals(1, subGroups.get(1).getNodes().get(0).getDistributionKey()); assertEquals("baz/storage/1", subGroups.get(1).getNodes().get(0).getConfigId()); - assertEquals("node-1-3-10-26", subGroups.get(1).getNodes().get(0).getHostName()); + assertEquals("node-1-3-50-26", subGroups.get(1).getNodes().get(0).getHostName()); // ... - assertEquals("node-1-3-10-25", subGroups.get(2).getNodes().get(0).getHostName()); + assertEquals("node-1-3-50-25", subGroups.get(2).getNodes().get(0).getHostName()); // ... assertEquals("26", subGroups.get(26).getIndex()); assertEquals(1, subGroups.get(26).getNodes().size()); @@ -694,7 +694,7 @@ public class ModelProvisioningTest { assertEquals(3, subGroups.get(0).getNodes().size()); assertEquals(0, subGroups.get(0).getNodes().get(0).getDistributionKey()); assertEquals("bar/storage/0", subGroups.get(0).getNodes().get(0).getConfigId()); - assertEquals("node-1-3-10-57", subGroups.get(0).getNodes().get(0).getHostName()); + assertEquals("node-1-3-50-57", subGroups.get(0).getNodes().get(0).getHostName()); assertEquals(1, subGroups.get(0).getNodes().get(1).getDistributionKey()); assertEquals("bar/storage/1", subGroups.get(0).getNodes().get(1).getConfigId()); assertEquals(2, subGroups.get(0).getNodes().get(2).getDistributionKey()); @@ -703,13 +703,13 @@ public class ModelProvisioningTest { assertEquals(3, subGroups.get(1).getNodes().size()); assertEquals(3, subGroups.get(1).getNodes().get(0).getDistributionKey()); assertEquals("bar/storage/3", subGroups.get(1).getNodes().get(0).getConfigId()); - assertEquals("node-1-3-10-54", subGroups.get(1).getNodes().get(0).getHostName()); + assertEquals("node-1-3-50-54", subGroups.get(1).getNodes().get(0).getHostName()); assertEquals(4, subGroups.get(1).getNodes().get(1).getDistributionKey()); assertEquals("bar/storage/4", subGroups.get(1).getNodes().get(1).getConfigId()); assertEquals(5, subGroups.get(1).getNodes().get(2).getDistributionKey()); assertEquals("bar/storage/5", subGroups.get(1).getNodes().get(2).getConfigId()); // ... - assertEquals("node-1-3-10-51", subGroups.get(2).getNodes().get(0).getHostName()); + assertEquals("node-1-3-50-51", subGroups.get(2).getNodes().get(0).getHostName()); // ... assertEquals("8", subGroups.get(8).getIndex()); assertEquals(3, subGroups.get(8).getNodes().size()); @@ -728,14 +728,14 @@ public class ModelProvisioningTest { assertEquals(1, subGroups.get(0).getNodes().size()); assertEquals(0, subGroups.get(0).getNodes().get(0).getDistributionKey()); assertEquals("baz/storage/0", subGroups.get(0).getNodes().get(0).getConfigId()); - assertEquals("node-1-3-10-27", subGroups.get(0).getNodes().get(0).getHostName()); + assertEquals("node-1-3-50-27", subGroups.get(0).getNodes().get(0).getHostName()); assertEquals("1", subGroups.get(1).getIndex()); assertEquals(1, subGroups.get(1).getNodes().size()); assertEquals(1, subGroups.get(1).getNodes().get(0).getDistributionKey()); assertEquals("baz/storage/1", subGroups.get(1).getNodes().get(0).getConfigId()); - assertEquals("node-1-3-10-26", subGroups.get(1).getNodes().get(0).getHostName()); + assertEquals("node-1-3-50-26", subGroups.get(1).getNodes().get(0).getHostName()); // ... - assertEquals("node-1-3-10-25", subGroups.get(2).getNodes().get(0).getHostName()); + assertEquals("node-1-3-50-25", subGroups.get(2).getNodes().get(0).getHostName()); // ... assertEquals("26", subGroups.get(26).getIndex()); assertEquals(1, subGroups.get(26).getNodes().size()); @@ -770,9 +770,9 @@ public class ModelProvisioningTest { ClusterControllerContainerCluster clusterControllers = model.getAdmin().getClusterControllers(); assertEquals(3, clusterControllers.getContainers().size()); assertEquals("cluster-controllers", clusterControllers.getName()); - assertEquals("node-1-3-10-03", clusterControllers.getContainers().get(0).getHostName()); - assertEquals("node-1-3-10-02", clusterControllers.getContainers().get(1).getHostName()); - assertEquals("node-1-3-10-01", clusterControllers.getContainers().get(2).getHostName()); + assertEquals("node-1-3-50-03", clusterControllers.getContainers().get(0).getHostName()); + assertEquals("node-1-3-50-02", clusterControllers.getContainers().get(1).getHostName()); + assertEquals("node-1-3-50-01", clusterControllers.getContainers().get(2).getHostName()); // Check content cluster ContentCluster cluster = model.getContentClusters().get("bar"); @@ -785,19 +785,19 @@ public class ModelProvisioningTest { assertEquals(1, subGroups.get(0).getNodes().size()); assertEquals(0, subGroups.get(0).getNodes().get(0).getDistributionKey()); assertEquals("bar/storage/0", subGroups.get(0).getNodes().get(0).getConfigId()); - assertEquals("node-1-3-10-11", subGroups.get(0).getNodes().get(0).getHostName()); + assertEquals("node-1-3-50-11", subGroups.get(0).getNodes().get(0).getHostName()); // second group assertEquals("1", subGroups.get(1).getIndex()); assertEquals(1, subGroups.get(1).getNodes().size()); assertEquals(1, subGroups.get(1).getNodes().get(0).getDistributionKey()); assertEquals("bar/storage/1", subGroups.get(1).getNodes().get(0).getConfigId()); - assertEquals("node-1-3-10-10", subGroups.get(1).getNodes().get(0).getHostName()); + assertEquals("node-1-3-50-10", subGroups.get(1).getNodes().get(0).getHostName()); // ... last group assertEquals("7", subGroups.get(7).getIndex()); assertEquals(1, subGroups.get(7).getNodes().size()); assertEquals(7, subGroups.get(7).getNodes().get(0).getDistributionKey()); assertEquals("bar/storage/7", subGroups.get(7).getNodes().get(0).getConfigId()); - assertEquals("node-1-3-10-04", subGroups.get(7).getNodes().get(0).getHostName()); + assertEquals("node-1-3-50-04", subGroups.get(7).getNodes().get(0).getHostName()); } @Test @@ -814,15 +814,15 @@ public class ModelProvisioningTest { int numberOfHosts = 11; VespaModelTester tester = new VespaModelTester(); tester.addHosts(numberOfHosts); - VespaModel model = tester.createModel(services, true, "node-1-3-10-09"); + VespaModel model = tester.createModel(services, true, "node-1-3-50-09"); assertEquals(numberOfHosts, model.getRoot().hostSystem().getHosts().size()); // Check slobroks clusters assertEquals("Includes retired node", 1+3, model.getAdmin().getSlobroks().size()); - assertEquals("node-1-3-10-11", model.getAdmin().getSlobroks().get(0).getHostName()); - assertEquals("node-1-3-10-10", model.getAdmin().getSlobroks().get(1).getHostName()); - assertEquals("node-1-3-10-08", model.getAdmin().getSlobroks().get(2).getHostName()); - assertEquals("Included in addition because it is retired", "node-1-3-10-09", model.getAdmin().getSlobroks().get(3).getHostName()); + assertEquals("node-1-3-50-11", model.getAdmin().getSlobroks().get(0).getHostName()); + assertEquals("node-1-3-50-10", model.getAdmin().getSlobroks().get(1).getHostName()); + assertEquals("node-1-3-50-08", model.getAdmin().getSlobroks().get(2).getHostName()); + assertEquals("Included in addition because it is retired", "node-1-3-50-09", model.getAdmin().getSlobroks().get(3).getHostName()); } @Test @@ -839,16 +839,16 @@ public class ModelProvisioningTest { int numberOfHosts = 12; VespaModelTester tester = new VespaModelTester(); tester.addHosts(numberOfHosts); - VespaModel model = tester.createModel(services, true, "node-1-3-10-03", "node-1-3-10-04"); + VespaModel model = tester.createModel(services, true, "node-1-3-50-03", "node-1-3-50-04"); assertEquals(10+2, model.getRoot().hostSystem().getHosts().size()); // Check slobroks clusters assertEquals("Includes retired node", 3+2, model.getAdmin().getSlobroks().size()); - assertEquals("node-1-3-10-12", model.getAdmin().getSlobroks().get(0).getHostName()); - assertEquals("node-1-3-10-11", model.getAdmin().getSlobroks().get(1).getHostName()); - assertEquals("node-1-3-10-10", model.getAdmin().getSlobroks().get(2).getHostName()); - assertEquals("Included in addition because it is retired", "node-1-3-10-04", model.getAdmin().getSlobroks().get(3).getHostName()); - assertEquals("Included in addition because it is retired", "node-1-3-10-03", model.getAdmin().getSlobroks().get(4).getHostName()); + assertEquals("node-1-3-50-12", model.getAdmin().getSlobroks().get(0).getHostName()); + assertEquals("node-1-3-50-11", model.getAdmin().getSlobroks().get(1).getHostName()); + assertEquals("node-1-3-50-10", model.getAdmin().getSlobroks().get(2).getHostName()); + assertEquals("Included in addition because it is retired", "node-1-3-50-04", model.getAdmin().getSlobroks().get(3).getHostName()); + assertEquals("Included in addition because it is retired", "node-1-3-50-03", model.getAdmin().getSlobroks().get(4).getHostName()); } @Test @@ -868,19 +868,19 @@ public class ModelProvisioningTest { int numberOfHosts = 16; VespaModelTester tester = new VespaModelTester(); tester.addHosts(numberOfHosts); - VespaModel model = tester.createModel(services, true, "node-1-3-10-15", "node-1-3-10-05", "node-1-3-10-04"); + VespaModel model = tester.createModel(services, true, "node-1-3-50-15", "node-1-3-50-05", "node-1-3-50-04"); assertEquals(numberOfHosts, model.getRoot().hostSystem().getHosts().size()); // Check slobroks clusters // ... from cluster default assertEquals("Includes retired node", 7, model.getAdmin().getSlobroks().size()); - assertEquals("node-1-3-10-16", model.getAdmin().getSlobroks().get(0).getHostName()); - assertEquals("node-1-3-10-14", model.getAdmin().getSlobroks().get(1).getHostName()); - assertEquals("Included in addition because it is retired", "node-1-3-10-15", model.getAdmin().getSlobroks().get(2).getHostName()); + assertEquals("node-1-3-50-16", model.getAdmin().getSlobroks().get(0).getHostName()); + assertEquals("node-1-3-50-14", model.getAdmin().getSlobroks().get(1).getHostName()); + assertEquals("Included in addition because it is retired", "node-1-3-50-15", model.getAdmin().getSlobroks().get(2).getHostName()); // ... from cluster bar - assertEquals("node-1-3-10-03", model.getAdmin().getSlobroks().get(3).getHostName()); - assertEquals("Included in addition because it is retired", "node-1-3-10-05", model.getAdmin().getSlobroks().get(5).getHostName()); - assertEquals("Included in addition because it is retired", "node-1-3-10-04", model.getAdmin().getSlobroks().get(6).getHostName()); + assertEquals("node-1-3-50-03", model.getAdmin().getSlobroks().get(3).getHostName()); + assertEquals("Included in addition because it is retired", "node-1-3-50-05", model.getAdmin().getSlobroks().get(5).getHostName()); + assertEquals("Included in addition because it is retired", "node-1-3-50-04", model.getAdmin().getSlobroks().get(6).getHostName()); } @Test @@ -1107,7 +1107,7 @@ public class ModelProvisioningTest { int numberOfHosts = 3; VespaModelTester tester = new VespaModelTester(); tester.addHosts(numberOfHosts); - VespaModel model = tester.createModel(services, false, "node-1-3-10-03"); + VespaModel model = tester.createModel(services, false, "node-1-3-50-03"); assertEquals(numberOfHosts, model.getRoot().hostSystem().getHosts().size()); ContentCluster cluster = model.getContentClusters().get("bar"); @@ -1136,7 +1136,7 @@ public class ModelProvisioningTest { int numberOfHosts = 5; VespaModelTester tester = new VespaModelTester(); tester.addHosts(numberOfHosts); - VespaModel model = tester.createModel(services, false, "node-1-3-10-05", "node-1-3-10-04", "node-1-3-10-03"); + VespaModel model = tester.createModel(services, false, "node-1-3-50-05", "node-1-3-50-04", "node-1-3-50-03"); assertEquals(numberOfHosts, model.getRoot().hostSystem().getHosts().size()); ContentCluster cluster = model.getContentClusters().get("bar"); @@ -1165,7 +1165,7 @@ public class ModelProvisioningTest { int numberOfHosts = 3; VespaModelTester tester = new VespaModelTester(); tester.addHosts(numberOfHosts); - VespaModel model = tester.createModel(services, false, false, true, "node-1-3-10-03"); + VespaModel model = tester.createModel(services, false, false, true, "node-1-3-50-03"); assertEquals(numberOfHosts, model.getRoot().hostSystem().getHosts().size()); ContentCluster cluster = model.getContentClusters().get("bar"); @@ -1502,9 +1502,8 @@ public class ModelProvisioningTest { tester.setHosted(true); tester.setAdminClusterArchitecture(Architecture.arm64); tester.useDedicatedNodeForLogserver(true); - tester.addHosts(new NodeResources(13.5, 100, 1000, 0.3), 6); - tester.addHosts(new NodeResources(85, 200, 1000_000_000, 0.3), 20); - tester.addHosts(new NodeResources(0.5, 2, 10, 0.3, DiskSpeed.any, StorageType.any, Architecture.arm64), 4); + tester.addHosts(new NodeResources(13.5, 100, 1000, 0.3), 4); + tester.addHosts(new NodeResources(0.5, 2, 50, 0.3, DiskSpeed.fast, StorageType.any, Architecture.arm64), 4); // 3 ccs, 1 logserver VespaModel model = tester.createModel(services, true, true); List<HostResource> hosts = model.getRoot().hostSystem().getHosts(); assertEquals(8, hosts.size()); @@ -2147,7 +2146,7 @@ public class ModelProvisioningTest { "</services>"; VespaModelTester tester = new VespaModelTester(); tester.addHosts(4); - VespaModel model = tester.createModel(servicesXml, true, "node-1-3-10-04"); + VespaModel model = tester.createModel(servicesXml, true, "node-1-3-50-04"); ApplicationContainerCluster cluster = model.getContainerClusters().get("zk"); assertEquals(1, cluster.getContainers().stream().filter(Container::isRetired).count()); assertEquals(3, cluster.getContainers().stream().filter(c -> !c.isRetired()).count()); @@ -2176,7 +2175,7 @@ public class ModelProvisioningTest { assertTrue("Initial servers are not joining", config.build().server().stream().noneMatch(ZookeeperServerConfig.Server::joining)); } { - VespaModel nextModel = tester.createModel(Zone.defaultZone(), servicesXml.apply(3), true, false, false, 0, Optional.of(model), new DeployState.Builder(), "node-1-3-10-04", "node-1-3-10-03"); + VespaModel nextModel = tester.createModel(Zone.defaultZone(), servicesXml.apply(3), true, false, false, 0, Optional.of(model), new DeployState.Builder(), "node-1-3-50-04", "node-1-3-50-03"); ApplicationContainerCluster cluster = nextModel.getContainerClusters().get("zk"); ZookeeperServerConfig.Builder config = new ZookeeperServerConfig.Builder(); cluster.getContainers().forEach(c -> c.getConfig(config)); diff --git a/config-model/src/test/java/com/yahoo/vespa/model/admin/metricsproxy/MetricsProxyContainerClusterTest.java b/config-model/src/test/java/com/yahoo/vespa/model/admin/metricsproxy/MetricsProxyContainerClusterTest.java index c00a5f65d08..7bf08461df7 100644 --- a/config-model/src/test/java/com/yahoo/vespa/model/admin/metricsproxy/MetricsProxyContainerClusterTest.java +++ b/config-model/src/test/java/com/yahoo/vespa/model/admin/metricsproxy/MetricsProxyContainerClusterTest.java @@ -104,7 +104,7 @@ public class MetricsProxyContainerClusterTest { private void assertNodeConfig(MetricsNodesConfig.Node node) { assertTrue(node.role().startsWith("container/foo/0/")); - assertTrue(node.hostname().startsWith("node-1-3-10-")); + assertTrue(node.hostname().startsWith("node-1-3-50-")); assertEquals(MetricsProxyContainer.BASEPORT, node.metricsPort()); assertEquals(MetricsV1Handler.VALUES_PATH, node.metricsPath()); } diff --git a/config-model/src/test/java/com/yahoo/vespa/model/admin/metricsproxy/MetricsProxyContainerTest.java b/config-model/src/test/java/com/yahoo/vespa/model/admin/metricsproxy/MetricsProxyContainerTest.java index ad3a163f052..9b1ff54482b 100644 --- a/config-model/src/test/java/com/yahoo/vespa/model/admin/metricsproxy/MetricsProxyContainerTest.java +++ b/config-model/src/test/java/com/yahoo/vespa/model/admin/metricsproxy/MetricsProxyContainerTest.java @@ -136,7 +136,7 @@ public class MetricsProxyContainerTest { NodeInfoConfig config = hostedModel.getConfig(NodeInfoConfig.class, metricsV2Handler.getConfigId()); assertTrue(config.role().startsWith("content/my-content/0/")); - assertTrue(config.hostname().startsWith("node-1-3-10-")); + assertTrue(config.hostname().startsWith("node-1-3-50-")); } @Test diff --git a/flags/src/main/java/com/yahoo/vespa/flags/PermanentFlags.java b/flags/src/main/java/com/yahoo/vespa/flags/PermanentFlags.java index e3960d995e9..bc199f7160e 100644 --- a/flags/src/main/java/com/yahoo/vespa/flags/PermanentFlags.java +++ b/flags/src/main/java/com/yahoo/vespa/flags/PermanentFlags.java @@ -260,7 +260,7 @@ public class PermanentFlags { "Architecture to use for node resources. Used when implicitly creating admin clusters " + "(logserver, clustercontroller). Valid values: x86_64, arm64", "Takes effect on next redeployment", - ZONE_ID, APPLICATION_ID, CLUSTER_ID, CLUSTER_TYPE); + ZONE_ID, APPLICATION_ID); private PermanentFlags() {} diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/AllocationOptimizer.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/AllocationOptimizer.java index 30432c1c078..43a78e3a315 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/AllocationOptimizer.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/AllocationOptimizer.java @@ -47,7 +47,7 @@ public class AllocationOptimizer { limits = Limits.of(new ClusterResources(minimumNodes, 1, NodeResources.unspecified()), new ClusterResources(maximumNodes, maximumNodes, NodeResources.unspecified())); else - limits = atLeast(minimumNodes, limits).fullySpecified(current.clusterSpec().type(), nodeRepository); + limits = atLeast(minimumNodes, limits).fullySpecified(current.clusterSpec().type(), nodeRepository, clusterModel.application().id()); Optional<AllocatableClusterResources> bestAllocation = Optional.empty(); NodeList hosts = nodeRepository.nodes().list().hosts(); for (int groups = limits.min().groups(); groups <= limits.max().groups(); groups++) { diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/Limits.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/Limits.java index 3c9cbfe2620..ef45592ad18 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/Limits.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/Limits.java @@ -1,6 +1,7 @@ // Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.hosted.provision.autoscale; +import com.yahoo.config.provision.ApplicationId; import com.yahoo.config.provision.Capacity; import com.yahoo.config.provision.ClusterResources; import com.yahoo.config.provision.ClusterSpec; @@ -59,10 +60,10 @@ public class Limits { return resources; } - public Limits fullySpecified(ClusterSpec.Type type, NodeRepository nodeRepository) { + public Limits fullySpecified(ClusterSpec.Type type, NodeRepository nodeRepository, ApplicationId applicationId) { if (this.isEmpty()) throw new IllegalStateException("Unspecified limits can not be made fully specified"); - var defaultResources = new CapacityPolicies(nodeRepository).defaultNodeResources(type); + var defaultResources = new CapacityPolicies(nodeRepository).defaultNodeResources(type, applicationId); var specifiedMin = min.nodeResources().isUnspecified() ? min.with(defaultResources) : min; var specifiedMax = max.nodeResources().isUnspecified() ? max.with(defaultResources) : max; return new Limits(specifiedMin, specifiedMax); 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 45e9efc1a1d..f7d5b966c12 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 @@ -8,12 +8,15 @@ import com.yahoo.config.provision.ClusterSpec; import com.yahoo.config.provision.Environment; import com.yahoo.config.provision.NodeResources; import com.yahoo.config.provision.Zone; +import com.yahoo.vespa.flags.FlagSource; import com.yahoo.vespa.flags.PermanentFlags; import com.yahoo.vespa.hosted.provision.NodeRepository; import java.util.function.Function; import static com.yahoo.config.provision.NodeResources.Architecture; +import static com.yahoo.vespa.flags.FetchVector.Dimension.APPLICATION_ID; +import static com.yahoo.vespa.flags.PermanentFlags.ADMIN_CLUSTER_NODE_ARCHITECTURE; /** * Defines the policies for assigning cluster capacity in various environments @@ -25,12 +28,12 @@ public class CapacityPolicies { private final Zone zone; private final Function<ClusterSpec.Type, Boolean> sharedHosts; - private final Architecture architectureForAdminCluster; + private final FlagSource flagSource; public CapacityPolicies(NodeRepository nodeRepository) { this.zone = nodeRepository.zone(); this.sharedHosts = type -> PermanentFlags.SHARED_HOST.bindTo(nodeRepository.flagSource()).value().isEnabled(type.name()); - this.architectureForAdminCluster = Architecture.valueOf(PermanentFlags.ADMIN_CLUSTER_NODE_ARCHITECTURE.bindTo(nodeRepository.flagSource()).value()); + this.flagSource = nodeRepository.flagSource(); } public Capacity applyOn(Capacity capacity, ApplicationId application) { @@ -73,11 +76,16 @@ public class CapacityPolicies { return target; } - public NodeResources defaultNodeResources(ClusterSpec.Type clusterType) { + public NodeResources defaultNodeResources(ClusterSpec.Type clusterType, ApplicationId applicationId) { if (clusterType == ClusterSpec.Type.admin) { + Architecture architecture = Architecture.valueOf( + ADMIN_CLUSTER_NODE_ARCHITECTURE.bindTo(flagSource) + .with(APPLICATION_ID, applicationId.serializedForm()) + .value()); + return zone.getCloud().dynamicProvisioning() && ! sharedHosts.apply(clusterType) ? - new NodeResources(0.5, 4, 50, 0.3).with(architectureForAdminCluster) : - new NodeResources(0.5, 2, 50, 0.3).with(architectureForAdminCluster); + new NodeResources(0.5, 4, 50, 0.3).with(architecture) : + new NodeResources(0.5, 2, 50, 0.3).with(architecture); } return zone.getCloud().dynamicProvisioning() ? diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeRepositoryProvisioner.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeRepositoryProvisioner.java index 97fe14caef6..9c4ebd73954 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeRepositoryProvisioner.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeRepositoryProvisioner.java @@ -106,14 +106,12 @@ public class NodeRepositoryProvisioner implements Provisioner { logIfDownscaled(requested.minResources().nodes(), actual.minResources().nodes(), cluster, logger); groups = target.groups(); - resources = target.nodeResources().isUnspecified() ? capacityPolicies.defaultNodeResources(cluster.type()) - : target.nodeResources(); + resources = getNodeResources(cluster, target.nodeResources(), application); nodeSpec = NodeSpec.from(target.nodes(), resources, exclusive, actual.canFail()); } else { groups = 1; // type request with multiple groups is not supported - resources = requested.minResources().nodeResources().isUnspecified() ? capacityPolicies.defaultNodeResources(cluster.type()) - : requested.minResources().nodeResources(); + resources = getNodeResources(cluster, requested.minResources().nodeResources(), application); nodeSpec = NodeSpec.from(requested.type()); } var reuseIndexes = Flags.REUSE_NODE_INDEXES.bindTo(nodeRepository.flagSource()) @@ -122,6 +120,12 @@ public class NodeRepositoryProvisioner implements Provisioner { return asSortedHosts(preparer.prepare(application, cluster, nodeSpec, groups, reuseIndexes), resources); } + private NodeResources getNodeResources(ClusterSpec cluster, NodeResources nodeResources, ApplicationId applicationId) { + return nodeResources.isUnspecified() + ? capacityPolicies.defaultNodeResources(cluster.type(), applicationId) + : nodeResources; + } + @Override public void activate(Collection<HostSpec> hosts, ActivationContext context, ApplicationTransaction transaction) { validate(hosts); @@ -170,16 +174,16 @@ public class NodeRepositoryProvisioner implements Provisioner { boolean firstDeployment = nodes.isEmpty(); AllocatableClusterResources currentResources = firstDeployment // start at min, preserve current resources otherwise - ? new AllocatableClusterResources(initialResourcesFrom(requested, clusterSpec), clusterSpec, nodeRepository) + ? new AllocatableClusterResources(initialResourcesFrom(requested, clusterSpec, application.id()), clusterSpec, nodeRepository) : new AllocatableClusterResources(nodes.asList(), nodeRepository); var clusterModel = new ClusterModel(application, cluster, clusterSpec, nodes, nodeRepository.metricsDb(), nodeRepository.clock()); return within(Limits.of(requested), currentResources, firstDeployment, clusterModel); } - private ClusterResources initialResourcesFrom(Capacity requested, ClusterSpec clusterSpec) { + private ClusterResources initialResourcesFrom(Capacity requested, ClusterSpec clusterSpec, ApplicationId applicationId) { var initial = requested.minResources(); if (initial.nodeResources().isUnspecified()) - initial = initial.with(capacityPolicies.defaultNodeResources(clusterSpec.type())); + initial = initial.with(capacityPolicies.defaultNodeResources(clusterSpec.type(), applicationId)); return initial; } diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/AutoscalingTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/AutoscalingTest.java index a04a3828f13..40e38d752ff 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/AutoscalingTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/AutoscalingTest.java @@ -15,7 +15,6 @@ import com.yahoo.config.provision.NodeType; import com.yahoo.config.provision.RegionName; import com.yahoo.config.provision.SystemName; import com.yahoo.config.provision.Zone; -import com.yahoo.vespa.hosted.provision.Node; import com.yahoo.vespa.hosted.provision.NodeRepository; import com.yahoo.vespa.hosted.provision.Nodelike; import com.yahoo.vespa.hosted.provision.provisioning.CapacityPolicies; @@ -240,7 +239,7 @@ public class AutoscalingTest { ClusterSpec cluster1 = tester.clusterSpec(ClusterSpec.Type.container, "cluster1"); NodeResources defaultResources = - new CapacityPolicies(tester.nodeRepository()).defaultNodeResources(cluster1.type()); + new CapacityPolicies(tester.nodeRepository()).defaultNodeResources(cluster1.type(), application1); // deploy tester.deploy(application1, cluster1, Capacity.from(min, max)); |