summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--config-model-api/src/main/java/com/yahoo/config/model/api/ModelContext.java1
-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.java14
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/deploy/ModelContextImpl.java3
-rw-r--r--flags/src/main/java/com/yahoo/vespa/flags/Flags.java7
6 files changed, 34 insertions, 0 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 2b2344c5fdb..42041f3a0b0 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
@@ -73,6 +73,7 @@ public interface ModelContext {
@ModelFeatureFlag(owners = {"vekterli"}) default boolean useThreePhaseUpdates() { throw new UnsupportedOperationException("TODO specify default value"); }
@ModelFeatureFlag(owners = {"baldersheim"}, comment = "Select sequencer type use while feeding") default String feedSequencerType() { throw new UnsupportedOperationException("TODO specify default value"); }
@ModelFeatureFlag(owners = {"geirst, baldersheim"}) default int feedTaskLimit() { return 1000; }
+ @ModelFeatureFlag(owners = {"geirst, baldersheim"}) default int feedMasterTaskLimit() { return 0; }
@ModelFeatureFlag(owners = {"geirst, baldersheim"}) default String sharedFieldWriterExecutor() { return "NONE"; }
@ModelFeatureFlag(owners = {"baldersheim"}) default String responseSequencerType() { throw new UnsupportedOperationException("TODO specify default value"); }
@ModelFeatureFlag(owners = {"baldersheim"}) default int defaultNumResponseThreads() { return 2; }
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 9f2f3620c73..ee9af73c554 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
@@ -42,6 +42,7 @@ public class TestProperties implements ModelContext.Properties, ModelContext.Fea
private String jvmGCOptions = null;
private String sequencerType = "LATENCY";
private int feedTaskLimit = 1000;
+ private int feedMasterTaskLimit = 0;
private String sharedFieldWriterExecutor = "NONE";
private boolean firstTimeDeployment = false;
private String responseSequencerType = "ADAPTIVE";
@@ -88,6 +89,7 @@ public class TestProperties implements ModelContext.Properties, ModelContext.Fea
@Override public String jvmGCOptions(Optional<ClusterSpec.Type> clusterType) { return jvmGCOptions; }
@Override public String feedSequencerType() { return sequencerType; }
@Override public int feedTaskLimit() { return feedTaskLimit; }
+ @Override public int feedMasterTaskLimit() { return feedMasterTaskLimit; }
@Override public String sharedFieldWriterExecutor() { return sharedFieldWriterExecutor; }
@Override public boolean isBootstrap() { return false; }
@Override public boolean isFirstTimeDeployment() { return firstTimeDeployment; }
@@ -178,6 +180,10 @@ public class TestProperties implements ModelContext.Properties, ModelContext.Fea
feedTaskLimit = value;
return this;
}
+ public TestProperties setFeedMasterTaskLimit(int value) {
+ feedMasterTaskLimit = value;
+ return this;
+ }
public TestProperties setSharedFieldWriterExecutor(String value) {
sharedFieldWriterExecutor = value;
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 b8de1845834..d5500e7d040 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
@@ -65,6 +65,7 @@ public class ContentSearchCluster extends AbstractConfigProducer<SearchCluster>
private Optional<ResourceLimits> resourceLimits = Optional.empty();
private final ProtonConfig.Indexing.Optimize.Enum feedSequencerType;
private final int feedTaskLimit;
+ private final int feedMasterTaskLimit;
private final ProtonConfig.Feeding.Shared_field_writer_executor.Enum sharedFieldWriterExecutor;
private final double defaultFeedConcurrency;
private final double defaultDiskBloatFactor;
@@ -218,6 +219,7 @@ public class ContentSearchCluster extends AbstractConfigProducer<SearchCluster>
this.combined = combined;
this.feedSequencerType = convertFeedSequencerType(featureFlags.feedSequencerType());
this.feedTaskLimit = featureFlags.feedTaskLimit();
+ this.feedMasterTaskLimit = featureFlags.feedMasterTaskLimit();
this.sharedFieldWriterExecutor = convertSharedFieldWriterExecutor(featureFlags.sharedFieldWriterExecutor());
this.defaultFeedConcurrency = featureFlags.feedConcurrency();
this.defaultDiskBloatFactor = featureFlags.diskBloatFactor();
@@ -441,6 +443,7 @@ public class ContentSearchCluster extends AbstractConfigProducer<SearchCluster>
builder.indexing.optimize(feedSequencerType);
}
builder.indexing.tasklimit(feedTaskLimit);
+ builder.feeding.master_task_limit(feedMasterTaskLimit);
builder.feeding.shared_field_writer_executor(sharedFieldWriterExecutor);
}
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 1de37dbeccf..6d3e83af927 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
@@ -825,6 +825,20 @@ public class ContentBuilderTest extends DomBuilderTest {
}
@Test
+ public void feed_master_task_limit_is_controlled_by_feature_flag() {
+ assertEquals(0, resolveFeedMasterTaskLimitConfigWithFeatureFlag(null));
+ assertEquals(2000, resolveFeedMasterTaskLimitConfigWithFeatureFlag(2000));
+ }
+
+ private int resolveFeedMasterTaskLimitConfigWithFeatureFlag(Integer value) {
+ var props = new TestProperties();
+ if (value != null) {
+ props.setFeedMasterTaskLimit(value);
+ }
+ return resolveProtonConfig(props, singleNodeContentXml()).feeding().master_task_limit();
+ }
+
+ @Test
public void shared_field_writer_executor_is_controlled_by_feature_flag() {
assertEquals(Shared_field_writer_executor.Enum.NONE,
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 3630215913e..ea823e5befb 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
@@ -168,6 +168,7 @@ public class ModelContextImpl implements ModelContext {
private final boolean useThreePhaseUpdates;
private final String feedSequencer;
private final int feedTaskLimit;
+ private final int feedMasterTaskLimit;
private final String sharedFieldWriterExecutor;
private final String responseSequencer;
private final int numResponseThreads;
@@ -205,6 +206,7 @@ public class ModelContextImpl implements ModelContext {
this.useThreePhaseUpdates = flagValue(source, appId, Flags.USE_THREE_PHASE_UPDATES);
this.feedSequencer = flagValue(source, appId, Flags.FEED_SEQUENCER_TYPE);
this.feedTaskLimit = flagValue(source, appId, Flags.FEED_TASK_LIMIT);
+ this.feedMasterTaskLimit = flagValue(source, appId, Flags.FEED_MASTER_TASK_LIMIT);
this.sharedFieldWriterExecutor = flagValue(source, appId, Flags.SHARED_FIELD_WRITER_EXECUTOR);
this.responseSequencer = flagValue(source, appId, Flags.RESPONSE_SEQUENCER_TYPE);
this.numResponseThreads = flagValue(source, appId, Flags.RESPONSE_NUM_THREADS);
@@ -242,6 +244,7 @@ public class ModelContextImpl implements ModelContext {
@Override public boolean useThreePhaseUpdates() { return useThreePhaseUpdates; }
@Override public String feedSequencerType() { return feedSequencer; }
@Override public int feedTaskLimit() { return feedTaskLimit; }
+ @Override public int feedMasterTaskLimit() { return feedMasterTaskLimit; }
@Override public String sharedFieldWriterExecutor() { return sharedFieldWriterExecutor; }
@Override public String responseSequencerType() { return responseSequencer; }
@Override public int defaultNumResponseThreads() { return numResponseThreads; }
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 b7b0c9aea30..6260ce07c3f 100644
--- a/flags/src/main/java/com/yahoo/vespa/flags/Flags.java
+++ b/flags/src/main/java/com/yahoo/vespa/flags/Flags.java
@@ -86,6 +86,13 @@ public class Flags {
"Takes effect at redeployment",
ZONE_ID, APPLICATION_ID);
+ public static final UnboundIntFlag FEED_MASTER_TASK_LIMIT = defineIntFlag(
+ "feed-master-task-limit", 0,
+ List.of("geirst, baldersheim"), "2021-11-18", "2022-02-01",
+ "The task limit used by the master thread in each document db in proton. Ignored when set to 0.",
+ "Takes effect at redeployment",
+ ZONE_ID, APPLICATION_ID);
+
public static final UnboundStringFlag SHARED_FIELD_WRITER_EXECUTOR = defineStringFlag(
"shared-field-writer-executor", "NONE",
List.of("geirst, baldersheim"), "2021-11-05", "2022-02-01",