diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2021-11-12 13:20:07 +0000 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2021-11-12 13:20:07 +0000 |
commit | f370d1e0a6a9fae3d0cb2b5240562f61703f25f7 (patch) | |
tree | 0c0367628b495fef9a3deb0d237cb947553baf96 | |
parent | 8a0fc71d26790955ef72c166fd46af00439c1272 (diff) |
Correct config for retired nodes both after reconfig and retired -> up for both attributes and document meta store.
3 files changed, 28 insertions, 16 deletions
diff --git a/searchcore/src/vespa/searchcore/proton/server/fast_access_doc_subdb.cpp b/searchcore/src/vespa/searchcore/proton/server/fast_access_doc_subdb.cpp index 5bd9ba64bae..8451f3268b8 100644 --- a/searchcore/src/vespa/searchcore/proton/server/fast_access_doc_subdb.cpp +++ b/searchcore/src/vespa/searchcore/proton/server/fast_access_doc_subdb.cpp @@ -10,13 +10,11 @@ #include <vespa/searchcore/proton/attribute/attribute_collection_spec_factory.h> #include <vespa/searchcore/proton/attribute/attribute_factory.h> #include <vespa/searchcore/proton/attribute/attribute_manager_initializer.h> -#include <vespa/searchcore/proton/attribute/attribute_populator.h> #include <vespa/searchcore/proton/attribute/filter_attribute_manager.h> #include <vespa/searchcore/proton/attribute/sequential_attributes_initializer.h> #include <vespa/searchcore/proton/common/alloc_config.h> #include <vespa/searchcore/proton/matching/sessionmanager.h> #include <vespa/searchcore/proton/reprocessing/attribute_reprocessing_initializer.h> -#include <vespa/searchcore/proton/reprocessing/document_reprocessing_handler.h> #include <vespa/searchcore/proton/reprocessing/reprocess_documents_task.h> #include <vespa/searchlib/docstore/document_store_visitor_progress.h> #include <vespa/log/log.h> @@ -275,6 +273,9 @@ FastAccessDocSubDB::applyConfig(const DocumentDBConfig &newConfigSnapshot, const reconfigureAttributeMetrics(*newMgr, *oldMgr); } _iFeedView.set(_fastAccessFeedView.get()); + if (isNodeRetired()) { + reconfigureAttributesConsideringNodeState(); + } } return tasks; } diff --git a/searchcore/src/vespa/searchcore/proton/server/storeonlydocsubdb.cpp b/searchcore/src/vespa/searchcore/proton/server/storeonlydocsubdb.cpp index 5b1b547fcfc..97e55c37aff 100644 --- a/searchcore/src/vespa/searchcore/proton/server/storeonlydocsubdb.cpp +++ b/searchcore/src/vespa/searchcore/proton/server/storeonlydocsubdb.cpp @@ -422,23 +422,27 @@ namespace { constexpr double RETIRED_DEAD_RATIO = 0.5; struct UpdateConfig : public search::attribute::IAttributeFunctor { + UpdateConfig(search::CompactionStrategy compactionStrategy) noexcept + : _compactionStrategy(compactionStrategy) + {} void operator()(search::attribute::IAttributeVector &iAttributeVector) override { auto attributeVector = dynamic_cast<search::AttributeVector *>(&iAttributeVector); if (attributeVector != nullptr) { auto cfg = attributeVector->getConfig(); - cfg.setCompactionStrategy(search::CompactionStrategy(RETIRED_DEAD_RATIO, RETIRED_DEAD_RATIO)); + cfg.setCompactionStrategy(_compactionStrategy); attributeVector->update_config(cfg); } } + search::CompactionStrategy _compactionStrategy; }; -search::CompactionStrategy -computeCompactionStrategy(search::CompactionStrategy strategy, bool isNodeRetired) { - return isNodeRetired - ? search::CompactionStrategy(RETIRED_DEAD_RATIO, RETIRED_DEAD_RATIO) - : strategy; } +search::CompactionStrategy +StoreOnlyDocSubDB::computeCompactionStrategy(search::CompactionStrategy strategy) const { + return isNodeRetired() + ? search::CompactionStrategy(RETIRED_DEAD_RATIO, RETIRED_DEAD_RATIO) + : strategy; } void @@ -450,25 +454,30 @@ StoreOnlyDocSubDB::reconfigure(const search::LogDocumentStore::Config & config, // Amortize memory spike cost over N docs grow.setDocsGrowDelta(grow.getDocsGrowDelta() + alloc_strategy.get_amortize_count()); cfg.setGrowStrategy(grow); - cfg.setCompactionStrategy(computeCompactionStrategy(alloc_strategy.get_compaction_strategy(), isNodeRetired())); + cfg.setCompactionStrategy(computeCompactionStrategy(alloc_strategy.get_compaction_strategy())); _dms->update_config(cfg); // Update grow and compaction config _rSummaryMgr->reconfigure(config); } void -StoreOnlyDocSubDB::setBucketStateCalculator(const std::shared_ptr<IBucketStateCalculator> & calc) -{ +StoreOnlyDocSubDB::setBucketStateCalculator(const std::shared_ptr<IBucketStateCalculator> & calc) { bool wasNodeRetired = isNodeRetired(); _nodeRetired = calc->nodeRetired(); if (wasNodeRetired != isNodeRetired()) { + search::CompactionStrategy compactionStrategy = computeCompactionStrategy(_lastConfiguredCompactionStrategy); auto cfg = _dms->getConfig(); - cfg.setCompactionStrategy(computeCompactionStrategy(_lastConfiguredCompactionStrategy, isNodeRetired())); + cfg.setCompactionStrategy(compactionStrategy); _dms->update_config(cfg); + reconfigureAttributesConsideringNodeState(); + } +} - auto attrMan = getAttributeManager(); - if (attrMan) { - attrMan->asyncForEachAttribute(std::make_shared<UpdateConfig>()); - } +void +StoreOnlyDocSubDB::reconfigureAttributesConsideringNodeState() { + search::CompactionStrategy compactionStrategy = computeCompactionStrategy(_lastConfiguredCompactionStrategy); + auto attrMan = getAttributeManager(); + if (attrMan) { + attrMan->asyncForEachAttribute(std::make_shared<UpdateConfig>(compactionStrategy)); } } diff --git a/searchcore/src/vespa/searchcore/proton/server/storeonlydocsubdb.h b/searchcore/src/vespa/searchcore/proton/server/storeonlydocsubdb.h index ddb6522493f..10ef88d0eaa 100644 --- a/searchcore/src/vespa/searchcore/proton/server/storeonlydocsubdb.h +++ b/searchcore/src/vespa/searchcore/proton/server/storeonlydocsubdb.h @@ -184,6 +184,7 @@ protected: vespalib::string getSubDbName() const; bool isNodeRetired() const { return _nodeRetired; } void reconfigure(const search::LogDocumentStore::Config & protonConfig, const AllocStrategy& alloc_strategy); + void reconfigureAttributesConsideringNodeState(); public: StoreOnlyDocSubDB(const Config &cfg, const Context &ctx); ~StoreOnlyDocSubDB() override; @@ -234,6 +235,7 @@ public: std::shared_ptr<IDocumentDBReference> getDocumentDBReference() override; void tearDownReferences(IDocumentDBReferenceResolver &resolver) override; PendingLidTrackerBase & getUncommittedLidsTracker() override { return *_pendingLidsForCommit; } + search::CompactionStrategy computeCompactionStrategy(search::CompactionStrategy strategy) const; }; } |