summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Polden <mpolden@mpolden.no>2021-03-03 17:07:42 +0100
committerMartin Polden <mpolden@mpolden.no>2021-03-03 17:07:42 +0100
commit0c99f6c53b023c158944234afc5cf046a80e2890 (patch)
tree95585165636cec4a4b39fd4a09c6de4bf2d61161
parent8bba30dc48d18513532d0dbaf6fddebda2466644 (diff)
Add dynamic-config-server-provisioning flag
-rw-r--r--flags/src/main/java/com/yahoo/vespa/flags/Flags.java6
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/GroupPreparer.java11
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/DynamicProvisioningMaintainerTest.java3
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();