aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2023-03-02 18:25:29 +0100
committerGitHub <noreply@github.com>2023-03-02 18:25:29 +0100
commitd003f5d8d79313f13d785ead045b9e44db32d06b (patch)
tree20c6ce92d76ab09697f7be81fa8bcde501712291
parente438d6ac2ab8696d429270eea0fd48e67f5e9fdb (diff)
parent570390c9b3353fb9b9957895cadd63211ca6bb63 (diff)
Merge pull request #26277 from vespa-engine/balder/compute-maxflushed
Compute index.maxflushed based on concurrency
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/content/ContentSearchCluster.java10
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/search/test/DocumentDatabaseTestCase.java24
2 files changed, 32 insertions, 2 deletions
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 71726b50391..a0240d28a3c 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
@@ -426,6 +426,16 @@ public class ContentSearchCluster extends TreeConfigProducer<AnyConfigProducer>
}
builder.indexing.optimize(feedSequencerType);
+ setMaxFlushed(builder);
+ }
+
+ private void setMaxFlushed(ProtonConfig.Builder builder) {
+ // maxflushed should be moved down to proton
+ double concurrency = builder.feeding.build().concurrency();
+ if (concurrency > defaultFeedConcurrency) {
+ int maxFlushes = (int)Math.ceil(4 * concurrency);
+ builder.index.maxflushed(maxFlushes);
+ }
}
private boolean isGloballyDistributed(NewDocumentType docType) {
diff --git a/config-model/src/test/java/com/yahoo/vespa/model/search/test/DocumentDatabaseTestCase.java b/config-model/src/test/java/com/yahoo/vespa/model/search/test/DocumentDatabaseTestCase.java
index ee885cdf43e..1df297c2bfc 100644
--- a/config-model/src/test/java/com/yahoo/vespa/model/search/test/DocumentDatabaseTestCase.java
+++ b/config-model/src/test/java/com/yahoo/vespa/model/search/test/DocumentDatabaseTestCase.java
@@ -87,7 +87,7 @@ public class DocumentDatabaseTestCase {
verifyConcurrency(nameAndModes, xmlTuning, expectedConcurrency, null);
}
- private void verifyConcurrency(List<DocType> nameAndModes, String xmlTuning, double expectedConcurrency, Double featureFlagConcurrency) {
+ private ProtonConfig getConfig(List<DocType> nameAndModes, String xmlTuning, Double featureFlagConcurrency) {
TestProperties properties = new TestProperties();
if (featureFlagConcurrency != null) {
properties.setFeedConcurrency(featureFlagConcurrency);
@@ -95,10 +95,30 @@ public class DocumentDatabaseTestCase {
var tester = new SchemaTester();
VespaModel model = tester.createModel(nameAndModes, xmlTuning, new DeployState.Builder().properties(properties));
ContentSearchCluster contentSearchCluster = model.getContentClusters().get("test").getSearch();
- ProtonConfig proton = tester.getProtonConfig(contentSearchCluster);
+ return tester.getProtonConfig(contentSearchCluster);
+ }
+
+ private void verifyConcurrency(List<DocType> nameAndModes, String xmlTuning, double expectedConcurrency, Double featureFlagConcurrency) {
+ ProtonConfig proton = getConfig(nameAndModes, xmlTuning, featureFlagConcurrency);
assertEquals(expectedConcurrency, proton.feeding().concurrency(), SMALL);
}
+ private void verifyMaxflushedFollowsConcurrency(double concurrency, int maxFlushed) {
+ String feedTuning = "<feeding> <concurrency>" + concurrency +"</concurrency>" + "</feeding>\n";
+ ProtonConfig proton = getConfig(List.of(DocType.create("a", "index")), feedTuning, null);
+ assertEquals(maxFlushed, proton.index().maxflushed());
+ }
+
+ @Test
+ public void verifyThatMaxFlushedFollowsConcurrency() {
+ verifyMaxflushedFollowsConcurrency(0.1, 2);
+ verifyMaxflushedFollowsConcurrency(0.50, 2);
+ verifyMaxflushedFollowsConcurrency(0.51, 3);
+ verifyMaxflushedFollowsConcurrency(0.75, 3);
+ verifyMaxflushedFollowsConcurrency(0.76, 4);
+ verifyMaxflushedFollowsConcurrency(1.0, 4);
+ }
+
private void verifyFeedNiceness(List<DocType> nameAndModes, Double expectedNiceness, Double featureFlagNiceness) {
TestProperties properties = new TestProperties();
if (featureFlagNiceness != null) {