summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHarald Musum <musum@verizonmedia.com>2022-03-22 11:17:54 +0100
committerGitHub <noreply@github.com>2022-03-22 11:17:54 +0100
commit37925e563d403bdc2535a971757a6592bcb708d2 (patch)
treee6191fefa63fe1d0686c08edfbaae9a90dcfce66
parent15abf2adc11621eeebe067b46b8a28948a7bb1f6 (diff)
parentafb9128e043c326ee7e3c4bd680a1c39cb5ed9d9 (diff)
Merge pull request #21746 from vespa-engine/hmusum/cleanup-and-more-testing-of-admin-cluster-architecture
Cleanup and more testing of specifying node architecture for admin cl…
-rw-r--r--config-model-api/src/main/java/com/yahoo/config/model/api/ModelContext.java5
-rw-r--r--config-model/src/main/java/com/yahoo/config/model/deploy/TestProperties.java10
-rw-r--r--config-model/src/test/java/com/yahoo/config/model/provision/ModelProvisioningTest.java39
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/test/VespaModelTester.java7
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/deploy/ModelContextImpl.java8
5 files changed, 47 insertions, 22 deletions
diff --git a/config-model-api/src/main/java/com/yahoo/config/model/api/ModelContext.java b/config-model-api/src/main/java/com/yahoo/config/model/api/ModelContext.java
index e3446002888..91514b89b3e 100644
--- a/config-model-api/src/main/java/com/yahoo/config/model/api/ModelContext.java
+++ b/config-model-api/src/main/java/com/yahoo/config/model/api/ModelContext.java
@@ -24,6 +24,8 @@ import java.util.Optional;
import java.util.Set;
import java.util.concurrent.ExecutorService;
+import static com.yahoo.config.provision.NodeResources.Architecture;
+
/**
* Model context containing state provided to model factories.
*
@@ -118,7 +120,8 @@ public interface ModelContext {
@ModelFeatureFlag(owners = {"arnej"}) default boolean avoidRenamingSummaryFeatures() { return false; }
@ModelFeatureFlag(owners = {"bjorncs", "baldersheim"}) default boolean mergeGroupingResultInSearchInvoker() { return false; }
@ModelFeatureFlag(owners = {"arnej"}) default boolean experimentalSdParsing() { return false; }
- @ModelFeatureFlag(owners = {"hmusum"}) default String adminClusterNodeArchitecture() { return "x86_64"; } // TODO: Cluster controllers only for now
+ @ModelFeatureFlag(owners = {"hmusum"}) default String adminClusterNodeArchitecture() { return adminClusterArchitecture().name(); } // TODO: Remove when 7.564 is oldest version in use
+ @ModelFeatureFlag(owners = {"hmusum"}) default Architecture adminClusterArchitecture() { return Architecture.getDefault(); }
}
/** Warning: As elsewhere in this package, do not make backwards incompatible changes that will break old config models! */
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 575080d3025..3e251a621ab 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
@@ -20,6 +20,8 @@ import java.util.List;
import java.util.Optional;
import java.util.Set;
+import static com.yahoo.config.provision.NodeResources.Architecture;
+
/**
* A test-only Properties class
*
@@ -81,7 +83,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";
+ private Architecture adminClusterNodeResourcesArchitecture = Architecture.getDefault();
@Override public ModelContext.FeatureFlags featureFlags() { return this; }
@Override public boolean multitenant() { return multitenant; }
@@ -143,7 +145,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; }
+ @Override public Architecture adminClusterArchitecture() { return adminClusterNodeResourcesArchitecture; }
public TestProperties maxUnCommittedMemory(int maxUnCommittedMemory) {
this.maxUnCommittedMemory = maxUnCommittedMemory;
@@ -391,8 +393,8 @@ public class TestProperties implements ModelContext.Properties, ModelContext.Fea
return this;
}
- public TestProperties setAdminClusterNodeResourcesArchitecture(String architectureFunction) {
- this.adminClusterNodeResourcesArchitecture = architectureFunction;
+ public TestProperties setAdminClusterNodeResourcesArchitecture(Architecture architecture) {
+ this.adminClusterNodeResourcesArchitecture = architecture;
return this;
}
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 91aff3935ab..582ab18f904 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
@@ -48,6 +48,9 @@ import java.util.function.Function;
import java.util.stream.Collectors;
import static com.yahoo.config.model.test.TestUtil.joinLines;
+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 com.yahoo.vespa.defaults.Defaults.getDefaults;
import static com.yahoo.vespa.model.search.NodeResourcesTuning.GB;
import static com.yahoo.vespa.model.search.NodeResourcesTuning.reservedMemoryGb;
@@ -1474,10 +1477,12 @@ public class ModelProvisioningTest {
}
@Test
- public void testUseArm64NodesForClusterControllers() {
+ public void testUseArm64NodesForAdminCluster() {
String services =
"<?xml version='1.0' encoding='utf-8' ?>" +
"<services>" +
+ " <admin version='4.0'>" +
+ " </admin>" +
" <container version='1.0' id='container'>" +
" <nodes count='2'>" +
" <resources vcpu='2' memory='8Gb' disk='30Gb'/>" +
@@ -1495,25 +1500,35 @@ public class ModelProvisioningTest {
VespaModelTester tester = new VespaModelTester();
tester.setHosted(true);
- tester.setAdminClusterArchitecture("arm64");
+ 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, NodeResources.DiskSpeed.any, NodeResources.StorageType.any, NodeResources.Architecture.arm64), 3);
+ tester.addHosts(new NodeResources(0.5, 2, 10, 0.3, DiskSpeed.any, StorageType.any, Architecture.arm64), 4);
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(8, hosts.size());
+
+ Set<HostResource> clusterControllerResources = getHostResourcesForService(hosts, "container-clustercontroller");
assertEquals(3, clusterControllerResources.size());
- assertTrue(clusterControllerResources.stream().allMatch(host -> host.realResources().architecture().name().equals("arm64")));
+ assertTrue(clusterControllerResources.stream().allMatch(host -> host.realResources().architecture() == Architecture.arm64));
+
+ Set<HostResource> logserverResources = getHostResourcesForService(hosts, "logserver-container");
+ assertEquals(1, logserverResources.size());
+ assertTrue(logserverResources.stream().allMatch(host -> host.realResources().architecture() == Architecture.arm64));
- // Other hosts should be x86_64
+ // Other hosts should be default
assertTrue(hosts.stream()
.filter(host -> !clusterControllerResources.contains(host))
- .allMatch(host -> host.realResources().architecture().name().equals("x86_64")));
+ .filter(host -> !logserverResources.contains(host))
+ .allMatch(host -> host.realResources().architecture() == Architecture.getDefault()));
+ }
+
+ private Set<HostResource> getHostResourcesForService(List<HostResource> hosts, String service) {
+ return hosts.stream()
+ .filter(host -> host.getHostInfo().getServices().stream()
+ .anyMatch(s -> s.getServiceType().equals(service)))
+ .collect(Collectors.toSet());
}
@Test
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 b9a5fde9301..41f9b4c7b55 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
@@ -30,6 +30,7 @@ import java.util.List;
import java.util.Map;
import java.util.Optional;
+import static com.yahoo.config.provision.NodeResources.Architecture;
import static com.yahoo.vespa.model.test.utils.ApplicationPackageUtils.generateSchemas;
/**
@@ -53,7 +54,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 Architecture adminClusterArchitecture = Architecture.getDefault();;
private HostProvisioner provisioner;
public VespaModelTester() {
@@ -102,7 +103,9 @@ public class VespaModelTester {
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; }
+ public void setAdminClusterArchitecture(Architecture 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) {
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/deploy/ModelContextImpl.java b/configserver/src/main/java/com/yahoo/vespa/config/server/deploy/ModelContextImpl.java
index 1cfc7758def..718a25cc225 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/deploy/ModelContextImpl.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/deploy/ModelContextImpl.java
@@ -42,6 +42,7 @@ import java.util.Set;
import java.util.concurrent.ExecutorService;
import java.util.function.ToIntFunction;
+import static com.yahoo.config.provision.NodeResources.Architecture;
import static com.yahoo.vespa.config.server.ConfigServerSpec.fromConfig;
import static com.yahoo.vespa.flags.FetchVector.Dimension.CLUSTER_TYPE;
@@ -211,7 +212,7 @@ public class ModelContextImpl implements ModelContext {
private final boolean avoidRenamingSummaryFeatures;
private final boolean mergeGroupingResultInSearchInvoker;
private final boolean experimentalSdParsing;
- private final String adminClusterNodeResourcesArchitecture;
+ private final Architecture adminClusterNodeResourcesArchitecture;
public FeatureFlags(FlagSource source, ApplicationId appId, Version version) {
this.defaultTermwiseLimit = flagValue(source, appId, version, Flags.DEFAULT_TERM_WISE_LIMIT);
@@ -261,7 +262,7 @@ public class ModelContextImpl implements ModelContext {
this.avoidRenamingSummaryFeatures = flagValue(source, appId, version, Flags.AVOID_RENAMING_SUMMARY_FEATURES);
this.mergeGroupingResultInSearchInvoker = flagValue(source, appId, version, Flags.MERGE_GROUPING_RESULT_IN_SEARCH_INVOKER);
this.experimentalSdParsing = flagValue(source, appId, version, Flags.EXPERIMENTAL_SD_PARSING);
- this.adminClusterNodeResourcesArchitecture = flagValue(source, appId, version, PermanentFlags.ADMIN_CLUSTER_NODE_ARCHITECTURE);
+ this.adminClusterNodeResourcesArchitecture = Architecture.valueOf(flagValue(source, appId, version, PermanentFlags.ADMIN_CLUSTER_NODE_ARCHITECTURE));
}
@Override public double defaultTermwiseLimit() { return defaultTermwiseLimit; }
@@ -313,7 +314,8 @@ public class ModelContextImpl implements ModelContext {
@Override public boolean avoidRenamingSummaryFeatures() { return avoidRenamingSummaryFeatures; }
@Override public boolean mergeGroupingResultInSearchInvoker() { return mergeGroupingResultInSearchInvoker; }
@Override public boolean experimentalSdParsing() { return experimentalSdParsing; }
- @Override public String adminClusterNodeArchitecture() { return adminClusterNodeResourcesArchitecture; }
+ @Override public String adminClusterNodeArchitecture() { return adminClusterArchitecture().name(); } // TODO: Remove when 7.564 is oldest version in use
+ @Override public Architecture adminClusterArchitecture() { return adminClusterNodeResourcesArchitecture; }
private static <V> V flagValue(FlagSource source, ApplicationId appId, Version vespaVersion, UnboundFlag<? extends V, ?, ?> flag) {
return flag.bindTo(source)