diff options
author | Martin Polden <mpolden@mpolden.no> | 2021-03-03 17:07:42 +0100 |
---|---|---|
committer | Martin Polden <mpolden@mpolden.no> | 2021-03-03 17:07:42 +0100 |
commit | 0c99f6c53b023c158944234afc5cf046a80e2890 (patch) | |
tree | 95585165636cec4a4b39fd4a09c6de4bf2d61161 | |
parent | 8bba30dc48d18513532d0dbaf6fddebda2466644 (diff) |
Add dynamic-config-server-provisioning flag
3 files changed, 17 insertions, 3 deletions
diff --git a/flags/src/main/java/com/yahoo/vespa/flags/Flags.java b/flags/src/main/java/com/yahoo/vespa/flags/Flags.java index 0b9b9e418bc..f67bcb22e63 100644 --- a/flags/src/main/java/com/yahoo/vespa/flags/Flags.java +++ b/flags/src/main/java/com/yahoo/vespa/flags/Flags.java @@ -279,6 +279,12 @@ public class Flags { "Takes effect at redeployment", ZONE_ID, APPLICATION_ID); + public static final UnboundBooleanFlag DYNAMIC_CONFIG_SERVER_PROVISIONING = defineFeatureFlag( + "dynamic-config-server-provisioning", false, + List.of("mpolden", "hakon"), "2021-03-03", "2021-05-01", + "Enable dynamic provisioning of config servers", + "Takes effect immediately, for subsequent provisioning"); + /** WARNING: public for testing: All flags should be defined in {@link Flags}. */ public static UnboundBooleanFlag defineFeatureFlag(String flagId, boolean defaultValue, List<String> owners, String createdAt, String expiresAt, String description, diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/GroupPreparer.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/GroupPreparer.java index e6473e62922..780b080e3c9 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/GroupPreparer.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/GroupPreparer.java @@ -7,6 +7,7 @@ import com.yahoo.config.provision.ClusterSpec; import com.yahoo.config.provision.NodeType; import com.yahoo.config.provision.OutOfCapacityException; import com.yahoo.transaction.Mutex; +import com.yahoo.vespa.flags.BooleanFlag; import com.yahoo.vespa.flags.FetchVector; import com.yahoo.vespa.flags.FlagSource; import com.yahoo.vespa.flags.Flags; @@ -34,6 +35,7 @@ public class GroupPreparer { private final NodeRepository nodeRepository; private final Optional<HostProvisioner> hostProvisioner; private final StringFlag allocateOsRequirementFlag; + private final BooleanFlag provisionConfigServerDynamically; public GroupPreparer(NodeRepository nodeRepository, Optional<HostProvisioner> hostProvisioner, @@ -41,6 +43,7 @@ public class GroupPreparer { this.nodeRepository = nodeRepository; this.hostProvisioner = hostProvisioner; this.allocateOsRequirementFlag = Flags.ALLOCATE_OS_REQUIREMENT.bindTo(flagSource); + this.provisionConfigServerDynamically = Flags.DYNAMIC_CONFIG_SERVER_PROVISIONING.bindTo(flagSource); } /** @@ -87,9 +90,11 @@ public class GroupPreparer { NodeAllocation allocation = prepareAllocation(application, cluster, requestedNodes, surplusActiveNodes, indices::next, wantedGroups, allocationLock, allocateOsRequirement); - - if (nodeRepository.zone().getCloud().dynamicProvisioning()) { - NodeType hostType = allocation.nodeType().hostType(); + NodeType hostType = allocation.nodeType().hostType(); + boolean hostTypeSupportsDynamicProvisioning = hostType == NodeType.host || + (hostType == NodeType.confighost && + provisionConfigServerDynamically.value()); + if (nodeRepository.zone().getCloud().dynamicProvisioning() && hostTypeSupportsDynamicProvisioning) { final Version osVersion; if (allocateOsRequirement.equals("rhel8")) { osVersion = new Version(8, Integer.MAX_VALUE /* always use latest 8 version */, 0); diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/DynamicProvisioningMaintainerTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/DynamicProvisioningMaintainerTest.java index dea7e50d641..6e979de2879 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/DynamicProvisioningMaintainerTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/DynamicProvisioningMaintainerTest.java @@ -16,6 +16,7 @@ import com.yahoo.config.provision.ParentHostUnavailableException; import com.yahoo.config.provision.RegionName; import com.yahoo.config.provision.SystemName; import com.yahoo.config.provision.Zone; +import com.yahoo.vespa.flags.Flags; import com.yahoo.vespa.flags.InMemoryFlagSource; import com.yahoo.vespa.flags.PermanentFlags; import com.yahoo.vespa.flags.custom.ClusterCapacity; @@ -425,6 +426,7 @@ public class DynamicProvisioningMaintainerTest { DynamicProvisioningTester dynamicProvisioningTester = new DynamicProvisioningTester(cloud, new MockNameResolver().mockAnyLookup()); ProvisioningTester tester = dynamicProvisioningTester.provisioningTester; dynamicProvisioningTester.hostProvisioner.overrideHostFlavor("default"); + dynamicProvisioningTester.flagSource.withBooleanFlag(Flags.DYNAMIC_CONFIG_SERVER_PROVISIONING.id(), true); // Initial config server hosts are provisioned manually ApplicationId hostApp = ApplicationId.from("hosted-vespa", "configserver-host", "default"); @@ -555,6 +557,7 @@ public class DynamicProvisioningMaintainerTest { RegionName.defaultName())) .flavors(flavors.getFlavors()) .nameResolver(nameResolver) + .flagSource(flagSource) .hostProvisioner(hostProvisioner) .build(); this.nodeRepository = provisioningTester.nodeRepository(); |