From 7aef2017e0af21f9b0f1290f2299bcb39319a384 Mon Sep 17 00:00:00 2001 From: Henning Baldersheim Date: Tue, 24 May 2022 09:07:00 +0000 Subject: - Introduce the concept of minimal capacity for rcu vectors. - This is to prevent shrinking down past what has been configured in proton.documentdb[].allocation.initialnumdocs - shrinking down past the configured value is not supported as that would counter the preallocation done to prevent resizing. --- .../src/tests/proton/common/alloc_config/alloc_config_test.cpp | 2 +- .../proton_config_fetcher/proton_config_fetcher_test.cpp | 10 +++++++--- searchcore/src/vespa/searchcore/proton/common/alloc_config.cpp | 6 +++--- .../vespa/searchcore/proton/server/documentdbconfigmanager.cpp | 2 +- 4 files changed, 12 insertions(+), 8 deletions(-) (limited to 'searchcore') diff --git a/searchcore/src/tests/proton/common/alloc_config/alloc_config_test.cpp b/searchcore/src/tests/proton/common/alloc_config/alloc_config_test.cpp index 59503464222..a27c66cfaa2 100644 --- a/searchcore/src/tests/proton/common/alloc_config/alloc_config_test.cpp +++ b/searchcore/src/tests/proton/common/alloc_config/alloc_config_test.cpp @@ -15,7 +15,7 @@ namespace { CompactionStrategy baseline_compaction_strategy(0.2, 0.25); GrowStrategy make_grow_strategy(uint32_t initial_docs) { - return GrowStrategy(initial_docs, 0.1, 1, 0.15); + return GrowStrategy(initial_docs, 0.1, 1, initial_docs, 0.15); } AllocStrategy make_alloc_strategy(uint32_t initial_docs) { diff --git a/searchcore/src/tests/proton/proton_config_fetcher/proton_config_fetcher_test.cpp b/searchcore/src/tests/proton/proton_config_fetcher/proton_config_fetcher_test.cpp index 4022bd68c92..f6c1518ba90 100644 --- a/searchcore/src/tests/proton/proton_config_fetcher/proton_config_fetcher_test.cpp +++ b/searchcore/src/tests/proton/proton_config_fetcher/proton_config_fetcher_test.cpp @@ -404,6 +404,10 @@ TEST_FF("require that docstore config computes cachesize automatically if unset" EXPECT_EQUAL(500000ul, config->getStoreConfig().getMaxCacheBytes()); } +GrowStrategy +growStrategy(uint32_t initial) { + return GrowStrategy(initial, 0.1, 1, initial, 0.15); +} TEST_FF("require that allocation config is propagated", ConfigTestFixture("test"), DocumentDBConfigManager(f1.configId + "/test", "test")) @@ -424,9 +428,9 @@ TEST_FF("require that allocation config is propagated", auto config = getDocumentDBConfig(f1, f2); { auto& alloc_config = config->get_alloc_config(); - EXPECT_EQUAL(AllocStrategy(GrowStrategy(20000000, 0.1, 1, 0.15), CompactionStrategy(0.25, 0.3), 10000), alloc_config.make_alloc_strategy(SubDbType::READY)); - EXPECT_EQUAL(AllocStrategy(GrowStrategy(100000, 0.1, 1, 0.15), CompactionStrategy(0.25, 0.3), 10000), alloc_config.make_alloc_strategy(SubDbType::REMOVED)); - EXPECT_EQUAL(AllocStrategy(GrowStrategy(30000000, 0.1, 1, 0.15), CompactionStrategy(0.25, 0.3), 10000), alloc_config.make_alloc_strategy(SubDbType::NOTREADY)); + EXPECT_EQUAL(AllocStrategy(growStrategy(20000000), CompactionStrategy(0.25, 0.3), 10000), alloc_config.make_alloc_strategy(SubDbType::READY)); + EXPECT_EQUAL(AllocStrategy(growStrategy(100000), CompactionStrategy(0.25, 0.3), 10000), alloc_config.make_alloc_strategy(SubDbType::REMOVED)); + EXPECT_EQUAL(AllocStrategy(growStrategy(30000000), CompactionStrategy(0.25, 0.3), 10000), alloc_config.make_alloc_strategy(SubDbType::NOTREADY)); } } diff --git a/searchcore/src/vespa/searchcore/proton/common/alloc_config.cpp b/searchcore/src/vespa/searchcore/proton/common/alloc_config.cpp index 2eb365e245c..8525b0ea779 100644 --- a/searchcore/src/vespa/searchcore/proton/common/alloc_config.cpp +++ b/searchcore/src/vespa/searchcore/proton/common/alloc_config.cpp @@ -30,8 +30,8 @@ AllocConfig::operator==(const AllocConfig &rhs) const noexcept AllocStrategy AllocConfig::make_alloc_strategy(SubDbType sub_db_type) const { - auto &baseline_grow_strategy = _alloc_strategy.get_grow_strategy(); - size_t initial_capacity = baseline_grow_strategy.getDocsInitialCapacity(); + auto &baseline = _alloc_strategy.get_grow_strategy(); + size_t initial_capacity = baseline.getDocsInitialCapacity(); switch (sub_db_type) { case SubDbType::READY: initial_capacity *= _searchable_copies; @@ -44,7 +44,7 @@ AllocConfig::make_alloc_strategy(SubDbType sub_db_type) const initial_capacity = std::max(1024ul, initial_capacity / 100); break; } - GrowStrategy grow_strategy(initial_capacity, baseline_grow_strategy.getDocsGrowFactor(), baseline_grow_strategy.getDocsGrowDelta(), baseline_grow_strategy.getMultiValueAllocGrowFactor()); + GrowStrategy grow_strategy(initial_capacity, baseline.getDocsGrowFactor(), baseline.getDocsGrowDelta(), initial_capacity, baseline.getMultiValueAllocGrowFactor()); return AllocStrategy(grow_strategy, _alloc_strategy.get_compaction_strategy(), _alloc_strategy.get_amortize_count()); } diff --git a/searchcore/src/vespa/searchcore/proton/server/documentdbconfigmanager.cpp b/searchcore/src/vespa/searchcore/proton/server/documentdbconfigmanager.cpp index 64c1a9c58a7..1aadc845744 100644 --- a/searchcore/src/vespa/searchcore/proton/server/documentdbconfigmanager.cpp +++ b/searchcore/src/vespa/searchcore/proton/server/documentdbconfigmanager.cpp @@ -254,7 +254,7 @@ build_alloc_config(const ProtonConfig& proton_config, const vespalib::string& do auto& document_db_config_entry = find_document_db_config_entry(proton_config.documentdb, doc_type_name); auto& alloc_config = document_db_config_entry.allocation; auto& distribution_config = proton_config.distribution; - search::GrowStrategy grow_strategy(alloc_config.initialnumdocs, alloc_config.growfactor, alloc_config.growbias, alloc_config.multivaluegrowfactor); + search::GrowStrategy grow_strategy(alloc_config.initialnumdocs, alloc_config.growfactor, alloc_config.growbias, alloc_config.initialnumdocs, alloc_config.multivaluegrowfactor); CompactionStrategy compaction_strategy(alloc_config.maxDeadBytesRatio, alloc_config.maxDeadAddressSpaceRatio, alloc_config.maxCompactBuffers, alloc_config.activeBuffersRatio); return AllocConfig(AllocStrategy(grow_strategy, compaction_strategy, alloc_config.amortizecount), distribution_config.redundancy, distribution_config.searchablecopies); -- cgit v1.2.3