aboutsummaryrefslogtreecommitdiffstats
path: root/node-repository
diff options
context:
space:
mode:
authorValerij Fredriksen <valerijf@verizonmedia.com>2020-01-17 10:28:03 +0100
committerValerij Fredriksen <valerijf@verizonmedia.com>2020-01-17 10:28:03 +0100
commitdbb7ea856e9cea9dce34ad5113a3261205252952 (patch)
treeee1bc32eb016cc4e2c5256eadf529d8dcded8b19 /node-repository
parent0d7939b7036d2b0f8960f43edcafe6eff5051f7a (diff)
Add in-place resize feature flag
Diffstat (limited to 'node-repository')
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/GroupPreparer.java7
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodePrioritizer.java7
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/InPlaceResizeProvisionTest.java20
3 files changed, 30 insertions, 4 deletions
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 001beabdb07..eab8bb68863 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
@@ -31,6 +31,7 @@ public class GroupPreparer {
private final Optional<HostProvisioner> hostProvisioner;
private final HostResourcesCalculator hostResourcesCalculator;
private final BooleanFlag dynamicProvisioningEnabledFlag;
+ private final BooleanFlag enableInPlaceResize;
private final ListFlag<PreprovisionCapacity> preprovisionCapacityFlag;
public GroupPreparer(NodeRepository nodeRepository, Optional<HostProvisioner> hostProvisioner,
@@ -39,6 +40,7 @@ public class GroupPreparer {
this.hostProvisioner = hostProvisioner;
this.hostResourcesCalculator = hostResourcesCalculator;
this.dynamicProvisioningEnabledFlag = Flags.ENABLE_DYNAMIC_PROVISIONING.bindTo(flagSource);
+ this.enableInPlaceResize = Flags.ENABLE_IN_PLACE_RESIZE.bindTo(flagSource);
this.preprovisionCapacityFlag = Flags.PREPROVISION_CAPACITY.bindTo(flagSource);
}
@@ -63,6 +65,9 @@ public class GroupPreparer {
boolean dynamicProvisioningEnabled = hostProvisioner.isPresent() && dynamicProvisioningEnabledFlag
.with(FetchVector.Dimension.APPLICATION_ID, application.serializedForm())
.value();
+ boolean inPlaceResizeEnabled = enableInPlaceResize
+ .with(FetchVector.Dimension.APPLICATION_ID, application.serializedForm())
+ .value();
try (Mutex lock = nodeRepository.lock(application)) {
@@ -73,7 +78,7 @@ public class GroupPreparer {
LockedNodeList nodeList = nodeRepository.list(allocationLock);
NodePrioritizer prioritizer = new NodePrioritizer(nodeList, application, cluster, requestedNodes,
spareCount, wantedGroups, nodeRepository.nameResolver(),
- hostResourcesCalculator);
+ hostResourcesCalculator, inPlaceResizeEnabled);
prioritizer.addApplicationNodes();
prioritizer.addSurplusNodes(surplusActiveNodes);
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodePrioritizer.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodePrioritizer.java
index c7182571f31..b8d7ff04efa 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodePrioritizer.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodePrioritizer.java
@@ -46,11 +46,13 @@ public class NodePrioritizer {
private final boolean isDocker;
private final boolean isAllocatingForReplacement;
private final boolean isTopologyChange;
+ private final boolean inPlaceResizeEnabled;
private final int currentClusterSize;
private final Set<Node> spareHosts;
NodePrioritizer(LockedNodeList allNodes, ApplicationId appId, ClusterSpec clusterSpec, NodeSpec nodeSpec,
- int spares, int wantedGroups, NameResolver nameResolver, HostResourcesCalculator hostResourcesCalculator) {
+ int spares, int wantedGroups, NameResolver nameResolver, HostResourcesCalculator hostResourcesCalculator,
+ boolean inPlaceResizeEnabled) {
this.allNodes = allNodes;
this.capacity = new DockerHostCapacity(allNodes, hostResourcesCalculator);
this.requestedNodes = nodeSpec;
@@ -58,6 +60,7 @@ public class NodePrioritizer {
this.appId = appId;
this.nameResolver = nameResolver;
this.spareHosts = findSpareHosts(allNodes, capacity, spares);
+ this.inPlaceResizeEnabled = inPlaceResizeEnabled;
NodeList nodesInCluster = allNodes.owner(appId).type(clusterSpec.type()).cluster(clusterSpec.id());
long currentGroups = nodesInCluster.state(Node.State.active).stream()
@@ -213,7 +216,7 @@ public class NodePrioritizer {
builder.parent(parent).freeParentCapacity(parentCapacity);
if (!isNewNode)
- builder.resizable(requestedNodes.canResize(
+ builder.resizable(inPlaceResizeEnabled && requestedNodes.canResize(
node.flavor().resources(), parentCapacity, isTopologyChange, currentClusterSize));
if (spareHosts.contains(parent))
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/InPlaceResizeProvisionTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/InPlaceResizeProvisionTest.java
index b0aa0ed514e..c0e06ef3dff 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/InPlaceResizeProvisionTest.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/InPlaceResizeProvisionTest.java
@@ -11,6 +11,8 @@ import com.yahoo.config.provision.NodeType;
import com.yahoo.config.provision.OutOfCapacityException;
import com.yahoo.config.provision.RegionName;
import com.yahoo.config.provision.Zone;
+import com.yahoo.vespa.flags.Flags;
+import com.yahoo.vespa.flags.InMemoryFlagSource;
import com.yahoo.vespa.hosted.provision.Node;
import com.yahoo.vespa.hosted.provision.NodeList;
import org.junit.Test;
@@ -53,7 +55,11 @@ public class InPlaceResizeProvisionTest {
private static final ClusterSpec container2 = ClusterSpec.request(ClusterSpec.Type.container, ClusterSpec.Id.from("container2"), Version.fromString("7.157.9"), false);
private static final ClusterSpec content1 = ClusterSpec.request(ClusterSpec.Type.container, ClusterSpec.Id.from("content1"), Version.fromString("7.157.9"), false);
- private final ProvisioningTester tester = new ProvisioningTester.Builder().zone(new Zone(Environment.prod, RegionName.from("us-east"))).build();
+ private final InMemoryFlagSource flagSource = new InMemoryFlagSource()
+ .withBooleanFlag(Flags.ENABLE_IN_PLACE_RESIZE.id(), true);
+ private final ProvisioningTester tester = new ProvisioningTester.Builder()
+ .flagSource(flagSource)
+ .zone(new Zone(Environment.prod, RegionName.from("us-east"))).build();
private final ApplicationId infraApp = tester.makeApplicationId();
private final ApplicationId app = tester.makeApplicationId();
@@ -153,6 +159,18 @@ public class InPlaceResizeProvisionTest {
}
@Test(expected = OutOfCapacityException.class)
+ public void no_in_place_resize_if_flag_not_set() {
+ flagSource.withBooleanFlag(Flags.ENABLE_IN_PLACE_RESIZE.id(), false);
+ addParentHosts(4, mediumResources.with(fast).with(local));
+
+ new PrepareHelper(tester, app).prepare(container1, 4, 1, mediumResources).activate();
+ assertClusterSizeAndResources(container1, 4, new NodeResources(4, 8, 16, 1, fast, local));
+
+ new PrepareHelper(tester, app).prepare(container1, 4, 1, smallResources);
+ }
+
+
+ @Test(expected = OutOfCapacityException.class)
public void cannot_inplace_decrease_resources_while_increasing_cluster_size() {
addParentHosts(6, mediumResources.with(fast).with(local));