summaryrefslogtreecommitdiffstats
path: root/config-model
diff options
context:
space:
mode:
authorGeir Storli <geirst@verizonmedia.com>2021-10-14 15:51:33 +0000
committerGeir Storli <geirst@verizonmedia.com>2021-10-14 15:51:33 +0000
commit3a6b4cae8ea09a6de602c67b045bf3ab6cb755b0 (patch)
treefc75507c93710ee952badbf2825ca68779af44f8 /config-model
parent73384b28424890ac344ea04c3efdf936b279fbc4 (diff)
Add feature flag for the task limit used by the executors handling feed in proton.
Diffstat (limited to 'config-model')
-rw-r--r--config-model/src/main/java/com/yahoo/config/model/deploy/TestProperties.java6
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/content/ContentSearchCluster.java3
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/builder/xml/dom/ContentBuilderTest.java44
3 files changed, 37 insertions, 16 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 ce4e5f0c01f..a63344678da 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
@@ -41,6 +41,7 @@ public class TestProperties implements ModelContext.Properties, ModelContext.Fea
private double defaultTermwiseLimit = 1.0;
private String jvmGCOptions = null;
private String sequencerType = "LATENCY";
+ private int feedTaskLimit = 1000;
private boolean firstTimeDeployment = false;
private String responseSequencerType = "ADAPTIVE";
private int responseNumThreads = 2;
@@ -80,6 +81,7 @@ public class TestProperties implements ModelContext.Properties, ModelContext.Fea
@Override public Set<ContainerEndpoint> endpoints() { return endpoints; }
@Override public String jvmGCOptions(Optional<ClusterSpec.Type> clusterType) { return jvmGCOptions; }
@Override public String feedSequencerType() { return sequencerType; }
+ @Override public int feedTaskLimit() { return feedTaskLimit; }
@Override public boolean isBootstrap() { return false; }
@Override public boolean isFirstTimeDeployment() { return firstTimeDeployment; }
@Override public boolean useDedicatedNodeForLogserver() { return useDedicatedNodeForLogserver; }
@@ -155,6 +157,10 @@ public class TestProperties implements ModelContext.Properties, ModelContext.Fea
sequencerType = type;
return this;
}
+ public TestProperties setFeedTaskLimit(int value) {
+ feedTaskLimit = value;
+ return this;
+ }
public TestProperties setResponseSequencerType(String type) {
responseSequencerType = type;
return this;
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/content/ContentSearchCluster.java b/config-model/src/main/java/com/yahoo/vespa/model/content/ContentSearchCluster.java
index 3ab7e947a2f..1200b7467b4 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/content/ContentSearchCluster.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/content/ContentSearchCluster.java
@@ -64,6 +64,7 @@ public class ContentSearchCluster extends AbstractConfigProducer<SearchCluster>
private final Map<StorageGroup, NodeSpec> groupToSpecMap = new LinkedHashMap<>();
private Optional<ResourceLimits> resourceLimits = Optional.empty();
private final ProtonConfig.Indexing.Optimize.Enum feedSequencerType;
+ private final int feedTaskLimit;
private final double defaultFeedConcurrency;
private final double defaultDiskBloatFactor;
private final int defaultDocStoreCompressionLevel;
@@ -210,6 +211,7 @@ public class ContentSearchCluster extends AbstractConfigProducer<SearchCluster>
this.combined = combined;
feedSequencerType = convertFeedSequencerType(featureFlags.feedSequencerType());
+ feedTaskLimit = featureFlags.feedTaskLimit();
defaultFeedConcurrency = featureFlags.feedConcurrency();
defaultDocStoreCompressionLevel = featureFlags.docstoreCompressionLevel();
defaultDiskBloatFactor = featureFlags.diskBloatFactor();
@@ -429,6 +431,7 @@ public class ContentSearchCluster extends AbstractConfigProducer<SearchCluster>
} else {
builder.indexing.optimize(feedSequencerType);
}
+ builder.indexing.tasklimit(feedTaskLimit);
}
private boolean isGloballyDistributed(NewDocumentType docType) {
diff --git a/config-model/src/test/java/com/yahoo/vespa/model/builder/xml/dom/ContentBuilderTest.java b/config-model/src/test/java/com/yahoo/vespa/model/builder/xml/dom/ContentBuilderTest.java
index 891a870dc01..5395b0868cb 100644
--- a/config-model/src/test/java/com/yahoo/vespa/model/builder/xml/dom/ContentBuilderTest.java
+++ b/config-model/src/test/java/com/yahoo/vespa/model/builder/xml/dom/ContentBuilderTest.java
@@ -777,21 +777,24 @@ public class ContentBuilderTest extends DomBuilderTest {
"</services>";
}
+ private ProtonConfig resolveProtonConfig(TestProperties props, String hostedXml) {
+ var deployStateBuilder = new DeployState.Builder().properties(props);
+ var model = new VespaModelCreatorWithMockPkg(new MockApplicationPackage.Builder()
+ .withServices(hostedXml)
+ .withSearchDefinition(MockApplicationPackage.MUSIC_SEARCHDEFINITION)
+ .build())
+ .create(deployStateBuilder);
+ return getProtonConfig(model.getContentClusters().values().iterator().next());
+ }
+
private void verifyFeedSequencer(String input, String expected) {
verifyFeedSequencer(input, expected, 0);
}
+
private void verifyFeedSequencer(String input, String expected, double visibilityDelay) {
String hostedXml = xmlWithVisibilityDelay(visibilityDelay);
-
- DeployState.Builder deployStateBuilder = new DeployState.Builder().properties(new TestProperties().setFeedSequencerType(input));
- VespaModel model = new VespaModelCreatorWithMockPkg(new MockApplicationPackage.Builder()
- .withServices(hostedXml)
- .withSearchDefinition(MockApplicationPackage.MUSIC_SEARCHDEFINITION)
- .build())
- .create(deployStateBuilder);
- ProtonConfig config = getProtonConfig(model.getContentClusters().values().iterator().next());
+ var config = resolveProtonConfig(new TestProperties().setFeedSequencerType(input), hostedXml);
assertEquals(expected, config.indexing().optimize().toString());
-
}
@Test
@@ -806,17 +809,26 @@ public class ContentBuilderTest extends DomBuilderTest {
}
+ @Test
+ public void feed_task_limit_is_controlled_by_feature_flag() {
+ assertEquals(1000, resolveFeedTaskLimitConfigWithFeatureFlag(null));
+ assertEquals(2000, resolveFeedTaskLimitConfigWithFeatureFlag(2000));
+ }
+
+ private int resolveFeedTaskLimitConfigWithFeatureFlag(Integer value) {
+ var props = new TestProperties();
+ if (value != null) {
+ props.setFeedTaskLimit(value);
+ }
+ return resolveProtonConfig(props, singleNodeContentXml()).indexing().tasklimit();
+ }
+
private void verifyThatFeatureFlagControlsVisibilityDelayDefault(Double xmlOverride, double expected) {
String hostedXml = xmlWithVisibilityDelay(xmlOverride);
- DeployState.Builder deployStateBuilder = new DeployState.Builder().properties(new TestProperties());
- VespaModel model = new VespaModelCreatorWithMockPkg(new MockApplicationPackage.Builder()
- .withServices(hostedXml)
- .withSearchDefinition(MockApplicationPackage.MUSIC_SEARCHDEFINITION)
- .build())
- .create(deployStateBuilder);
- ProtonConfig config = getProtonConfig(model.getContentClusters().values().iterator().next());
+ var config = resolveProtonConfig(new TestProperties(), hostedXml);
assertEquals(expected, config.documentdb(0).visibilitydelay(), 0.0);
}
+
@Test
public void verifyThatFeatureFlagControlsVisibilityDelayDefault() {
verifyThatFeatureFlagControlsVisibilityDelayDefault(null, 0.0);