summaryrefslogtreecommitdiffstats
path: root/config-model/src
diff options
context:
space:
mode:
authorHarald Musum <musum@yahooinc.com>2022-03-15 10:53:00 +0100
committerHarald Musum <musum@yahooinc.com>2022-03-15 10:53:00 +0100
commit31ce004fc2092e5d3dac251f595a66bba0dd140e (patch)
tree9370193d25f6cff2ceda6e7a4e11200dc939b4e4 /config-model/src
parentd6f599c41830a79614197158b13cdfb86e3b9777 (diff)
Add feature flag for node architecture for admin clusters
Flag value will be used for implicitly created nodes in admin clusters (cluster controllers only for now)
Diffstat (limited to 'config-model/src')
-rw-r--r--config-model/src/main/java/com/yahoo/config/model/deploy/TestProperties.java7
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/content/cluster/ContentCluster.java5
-rw-r--r--config-model/src/test/java/com/yahoo/config/model/provision/ModelProvisioningTest.java43
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/test/VespaModelTester.java7
4 files changed, 60 insertions, 2 deletions
diff --git a/config-model/src/main/java/com/yahoo/config/model/deploy/TestProperties.java b/config-model/src/main/java/com/yahoo/config/model/deploy/TestProperties.java
index 2c028c52bf8..575080d3025 100644
--- a/config-model/src/main/java/com/yahoo/config/model/deploy/TestProperties.java
+++ b/config-model/src/main/java/com/yahoo/config/model/deploy/TestProperties.java
@@ -81,6 +81,7 @@ public class TestProperties implements ModelContext.Properties, ModelContext.Fea
private List<String> environmentVariables = List.of();
private boolean avoidRenamingSummaryFeatures = false;
private boolean experimentalSdParsing = false;
+ private String adminClusterNodeResourcesArchitecture = "x86_64";
@Override public ModelContext.FeatureFlags featureFlags() { return this; }
@Override public boolean multitenant() { return multitenant; }
@@ -142,6 +143,7 @@ public class TestProperties implements ModelContext.Properties, ModelContext.Fea
@Override public List<String> environmentVariables() { return environmentVariables; }
@Override public boolean avoidRenamingSummaryFeatures() { return this.avoidRenamingSummaryFeatures; }
@Override public boolean experimentalSdParsing() { return this.experimentalSdParsing; }
+ @Override public String adminClusterNodeArchitecture() { return adminClusterNodeResourcesArchitecture; }
public TestProperties maxUnCommittedMemory(int maxUnCommittedMemory) {
this.maxUnCommittedMemory = maxUnCommittedMemory;
@@ -389,6 +391,11 @@ public class TestProperties implements ModelContext.Properties, ModelContext.Fea
return this;
}
+ public TestProperties setAdminClusterNodeResourcesArchitecture(String architectureFunction) {
+ this.adminClusterNodeResourcesArchitecture = architectureFunction;
+ return this;
+ }
+
public static class Spec implements ConfigServerSpec {
private final String hostName;
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/content/cluster/ContentCluster.java b/config-model/src/main/java/com/yahoo/vespa/model/content/cluster/ContentCluster.java
index 80514d9698a..ce2bc351d2b 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/content/cluster/ContentCluster.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/content/cluster/ContentCluster.java
@@ -62,6 +62,7 @@ import java.util.Set;
import java.util.TreeMap;
import java.util.logging.Level;
+import static com.yahoo.config.provision.NodeResources.Architecture;
import static com.yahoo.config.provision.NodeResources.DiskSpeed;
import static com.yahoo.config.provision.NodeResources.StorageType;
import static java.util.stream.Collectors.toList;
@@ -336,8 +337,10 @@ public class ContentCluster extends AbstractConfigProducer<AbstractConfigProduce
DeployState deployState,
String clusterName) {
if (admin.getClusterControllers() == null) {
+ NodeResources nodeResources = clusterControllerResources
+ .with(Architecture.valueOf(deployState.featureFlags().adminClusterNodeArchitecture()));
NodesSpecification spec = NodesSpecification.requiredFromSharedParents(deployState.zone().environment().isProduction() ? 3 : 1,
- clusterControllerResources,
+ nodeResources,
contentElement,
context);
Collection<HostResource> hosts = spec.provision(admin.hostSystem(),
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 97a27c92617..91aff3935ab 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
@@ -1474,6 +1474,49 @@ public class ModelProvisioningTest {
}
@Test
+ public void testUseArm64NodesForClusterControllers() {
+ String services =
+ "<?xml version='1.0' encoding='utf-8' ?>" +
+ "<services>" +
+ " <container version='1.0' id='container'>" +
+ " <nodes count='2'>" +
+ " <resources vcpu='2' memory='8Gb' disk='30Gb'/>" +
+ " </nodes>" +
+ " </container>" +
+ " <content version='1.0' id='foo'>" +
+ " <documents>" +
+ " <document type='type1' mode='index'/>" +
+ " </documents>" +
+ " <nodes count='2'>" +
+ " <resources vcpu='2' memory='8Gb' disk='30Gb'/>" +
+ " </nodes>" +
+ " </content>" +
+ "</services>";
+
+ VespaModelTester tester = new VespaModelTester();
+ tester.setHosted(true);
+ tester.setAdminClusterArchitecture("arm64");
+ 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, NodeResources.DiskSpeed.any, NodeResources.StorageType.any, NodeResources.Architecture.arm64), 3);
+ VespaModel model = tester.createModel(services, true, true);
+ List<HostResource> hosts = model.getRoot().hostSystem().getHosts();
+ assertEquals(7, hosts.size());
+ Set<HostResource> clusterControllerResources =
+ hosts.stream()
+ .filter(host -> host.getHostInfo().getServices().stream()
+ .anyMatch(service -> service.getServiceType().equals("container-clustercontroller")))
+ .collect(Collectors.toSet());
+ assertEquals(3, clusterControllerResources.size());
+ assertTrue(clusterControllerResources.stream().allMatch(host -> host.realResources().architecture().name().equals("arm64")));
+
+ // Other hosts should be x86_64
+ assertTrue(hosts.stream()
+ .filter(host -> !clusterControllerResources.contains(host))
+ .allMatch(host -> host.realResources().architecture().name().equals("x86_64")));
+ }
+
+ @Test
public void testContainerOnly() {
String services =
"<?xml version='1.0' encoding='utf-8' ?>\n" +
diff --git a/config-model/src/test/java/com/yahoo/vespa/model/test/VespaModelTester.java b/config-model/src/test/java/com/yahoo/vespa/model/test/VespaModelTester.java
index 77c790e7082..b9a5fde9301 100644
--- a/config-model/src/test/java/com/yahoo/vespa/model/test/VespaModelTester.java
+++ b/config-model/src/test/java/com/yahoo/vespa/model/test/VespaModelTester.java
@@ -53,6 +53,7 @@ public class VespaModelTester {
private final Map<NodeResources, Collection<Host>> hostsByResources = new HashMap<>();
private ApplicationId applicationId = ApplicationId.defaultId();
private boolean useDedicatedNodeForLogserver = false;
+ private String adminClusterArchitecture = "x86_64";
private HostProvisioner provisioner;
public VespaModelTester() {
@@ -100,6 +101,9 @@ public class VespaModelTester {
/** Sets whether this sets up a model for a hosted system. Default: true */
public void setHosted(boolean hosted) { this.hosted = hosted; }
+ /** Sets architecture to use for admin clusters. Default: x86_64 */
+ public void setAdminClusterArchitecture(String architecture) { this.adminClusterArchitecture = architecture; }
+
/** Sets the tenant, application name, and instance name of the model being built. */
public void setApplicationId(String tenant, String applicationName, String instanceName) {
applicationId = ApplicationId.from(tenant, applicationName, instanceName);
@@ -198,7 +202,8 @@ public class VespaModelTester {
.setMultitenant(hosted) // Note: system tests are multitenant but not hosted
.setHostedVespa(hosted)
.setApplicationId(applicationId)
- .setUseDedicatedNodeForLogserver(useDedicatedNodeForLogserver);
+ .setUseDedicatedNodeForLogserver(useDedicatedNodeForLogserver)
+ .setAdminClusterNodeResourcesArchitecture(adminClusterArchitecture);
DeployState.Builder deployState = deployStatebuilder
.applicationPackage(appPkg)