diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2023-03-02 18:25:29 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-03-02 18:25:29 +0100 |
commit | d003f5d8d79313f13d785ead045b9e44db32d06b (patch) | |
tree | 20c6ce92d76ab09697f7be81fa8bcde501712291 | |
parent | e438d6ac2ab8696d429270eea0fd48e67f5e9fdb (diff) | |
parent | 570390c9b3353fb9b9957895cadd63211ca6bb63 (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.java | 10 | ||||
-rw-r--r-- | config-model/src/test/java/com/yahoo/vespa/model/search/test/DocumentDatabaseTestCase.java | 24 |
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) { |