diff options
author | Tor Egge <Tor.Egge@online.no> | 2023-02-07 13:21:51 +0100 |
---|---|---|
committer | Tor Egge <Tor.Egge@online.no> | 2023-02-07 13:21:51 +0100 |
commit | 22998a859cdee573fc14fd9cb18572f9c7cd2498 (patch) | |
tree | dde4670a50fd4cf253a263ee8fc47b4e33b79f1d /searchcore | |
parent | 1acb5e0824379ac8869fd31d231306a826e2675c (diff) |
Call complete_prepare_reconfig() to adjust prepared reconfig when
docid limit and serial number is known.
Diffstat (limited to 'searchcore')
26 files changed, 75 insertions, 39 deletions
diff --git a/searchcore/src/tests/proton/attribute/attribute_manager/attribute_manager_test.cpp b/searchcore/src/tests/proton/attribute/attribute_manager/attribute_manager_test.cpp index 29639448023..88d0752461b 100644 --- a/searchcore/src/tests/proton/attribute/attribute_manager/attribute_manager_test.cpp +++ b/searchcore/src/tests/proton/attribute/attribute_manager/attribute_manager_test.cpp @@ -214,6 +214,8 @@ struct Fixture : public BaseFixture, public AttributeManagerFixture struct SequentialAttributeManager { SequentialAttributesInitializer initializer; + uint32_t docid_limit; + SerialNum serial_num; proton::AttributeManager mgr; SequentialAttributeManager(const AttributeManager &currMgr, AttrMgrSpec && newSpec); ~SequentialAttributeManager(); @@ -221,9 +223,11 @@ struct SequentialAttributeManager SequentialAttributeManager::SequentialAttributeManager(const AttributeManager &currMgr, AttrMgrSpec && newSpec) : initializer(newSpec.getDocIdLimit()), + docid_limit(newSpec.getDocIdLimit()), + serial_num(newSpec.getCurrentSerialNum().value_or(0)), mgr(currMgr, std::move(newSpec), initializer) { - mgr.addInitializedAttributes(initializer.getInitializedAttributes(), std::nullopt, std::nullopt); + mgr.addInitializedAttributes(initializer.getInitializedAttributes(), docid_limit, serial_num); } SequentialAttributeManager::~SequentialAttributeManager() = default; diff --git a/searchcore/src/vespa/searchcore/proton/attribute/attribute_manager_initializer.cpp b/searchcore/src/vespa/searchcore/proton/attribute/attribute_manager_initializer.cpp index c15a15e44e5..77cc1142f75 100644 --- a/searchcore/src/vespa/searchcore/proton/attribute/attribute_manager_initializer.cpp +++ b/searchcore/src/vespa/searchcore/proton/attribute/attribute_manager_initializer.cpp @@ -86,7 +86,7 @@ void AttributeManagerInitializerTask::run() { _attrMgr->addExtraAttribute(_documentMetaStore); - _attrMgr->addInitializedAttributes(_attributesResult.get(), std::nullopt, std::nullopt); + _attrMgr->addInitializedAttributes(_attributesResult.get(), 1, _configSerialNum); _attrMgr->pruneRemovedFields(_configSerialNum); _promise.set_value(); } diff --git a/searchcore/src/vespa/searchcore/proton/attribute/attribute_manager_reconfig.cpp b/searchcore/src/vespa/searchcore/proton/attribute/attribute_manager_reconfig.cpp index 2942256f534..06c03c80785 100644 --- a/searchcore/src/vespa/searchcore/proton/attribute/attribute_manager_reconfig.cpp +++ b/searchcore/src/vespa/searchcore/proton/attribute/attribute_manager_reconfig.cpp @@ -17,7 +17,7 @@ AttributeManagerReconfig::AttributeManagerReconfig(std::shared_ptr<AttributeMana AttributeManagerReconfig::~AttributeManagerReconfig() = default; std::shared_ptr<AttributeManager> -AttributeManagerReconfig::create(std::optional<uint32_t> docid_limit, std::optional<search::SerialNum> serial_num) +AttributeManagerReconfig::create(uint32_t docid_limit, search::SerialNum serial_num) { assert(_mgr); _mgr->addInitializedAttributes(_initializer->getInitializedAttributes(), docid_limit, serial_num); diff --git a/searchcore/src/vespa/searchcore/proton/attribute/attribute_manager_reconfig.h b/searchcore/src/vespa/searchcore/proton/attribute/attribute_manager_reconfig.h index da8ae163fb5..9e4f8b71a7a 100644 --- a/searchcore/src/vespa/searchcore/proton/attribute/attribute_manager_reconfig.h +++ b/searchcore/src/vespa/searchcore/proton/attribute/attribute_manager_reconfig.h @@ -22,7 +22,7 @@ public: AttributeManagerReconfig(std::shared_ptr<AttributeManager> mgr, std::unique_ptr<SequentialAttributesInitializer> initializer); ~AttributeManagerReconfig(); - std::shared_ptr<AttributeManager> create(std::optional<uint32_t> docid_limit, std::optional<search::SerialNum> serial_num); + std::shared_ptr<AttributeManager> create(uint32_t docid_limit, search::SerialNum serial_num); }; } diff --git a/searchcore/src/vespa/searchcore/proton/attribute/attributemanager.cpp b/searchcore/src/vespa/searchcore/proton/attribute/attributemanager.cpp index e27fae65de3..636cb992b25 100644 --- a/searchcore/src/vespa/searchcore/proton/attribute/attributemanager.cpp +++ b/searchcore/src/vespa/searchcore/proton/attribute/attributemanager.cpp @@ -325,16 +325,14 @@ AttributeManager::addAttribute(AttributeSpec && spec, uint64_t serialNum) } void -AttributeManager::addInitializedAttributes(const std::vector<AttributeInitializerResult> &attributes, std::optional<uint32_t> docid_limit, std::optional<SerialNum> serial_num) +AttributeManager::addInitializedAttributes(const std::vector<AttributeInitializerResult> &attributes, uint32_t docid_limit, SerialNum serial_num) { for (const auto &result : attributes) { assert(result); auto attr = result.getAttribute(); - if (docid_limit.has_value()) { - AttributeManager::padAttribute(*attr, docid_limit.value()); - } - if (serial_num.has_value()) { - attr->setCreateSerialNum(serial_num.value()); + if (attr->getCreateSerialNum() == 0) { + AttributeManager::padAttribute(*attr, docid_limit); + attr->setCreateSerialNum(serial_num); } attr->setInterlock(_interlock); auto shrinker = allocShrinker(attr, _attributeFieldWriter, *_diskLayout); @@ -503,8 +501,10 @@ proton::IAttributeManager::SP AttributeManager::create(Spec&& spec) const { assert(spec.getCurrentSerialNum().has_value()); + auto docid_limit = spec.getDocIdLimit(); + auto serial_num = spec.getCurrentSerialNum().value(); auto prepared_result = prepare_create(std::move(spec)); - return prepared_result->create(std::nullopt, std::nullopt); + return prepared_result->create(docid_limit, serial_num); } std::vector<IFlushTarget::SP> diff --git a/searchcore/src/vespa/searchcore/proton/attribute/attributemanager.h b/searchcore/src/vespa/searchcore/proton/attribute/attributemanager.h index 35895e5422c..c8c5da7f4e4 100644 --- a/searchcore/src/vespa/searchcore/proton/attribute/attributemanager.h +++ b/searchcore/src/vespa/searchcore/proton/attribute/attributemanager.h @@ -123,7 +123,7 @@ public: AttributeVectorSP addAttribute(AttributeSpec && spec, uint64_t serialNum); - void addInitializedAttributes(const std::vector<AttributeInitializerResult> &attributes, std::optional<uint32_t> docid_limit, std::optional<SerialNum> serial_num); + void addInitializedAttributes(const std::vector<AttributeInitializerResult> &attributes, uint32_t docid_limit, SerialNum serial_num); void addExtraAttribute(const AttributeVectorSP &attribute); diff --git a/searchcore/src/vespa/searchcore/proton/server/document_db_reconfig.cpp b/searchcore/src/vespa/searchcore/proton/server/document_db_reconfig.cpp index 903c9d0a899..f0d028f924f 100644 --- a/searchcore/src/vespa/searchcore/proton/server/document_db_reconfig.cpp +++ b/searchcore/src/vespa/searchcore/proton/server/document_db_reconfig.cpp @@ -5,8 +5,8 @@ namespace proton { -DocumentDBReconfig::DocumentDBReconfig(std::unique_ptr<const DocumentSubDBReconfig> ready_reconfig_in, - std::unique_ptr<const DocumentSubDBReconfig> not_ready_reconfig_in) +DocumentDBReconfig::DocumentDBReconfig(std::unique_ptr<DocumentSubDBReconfig> ready_reconfig_in, + std::unique_ptr<DocumentSubDBReconfig> not_ready_reconfig_in) : _ready_reconfig(std::move(ready_reconfig_in)), _not_ready_reconfig(std::move(not_ready_reconfig_in)) { diff --git a/searchcore/src/vespa/searchcore/proton/server/document_db_reconfig.h b/searchcore/src/vespa/searchcore/proton/server/document_db_reconfig.h index 21ea117f7e9..d35a2211397 100644 --- a/searchcore/src/vespa/searchcore/proton/server/document_db_reconfig.h +++ b/searchcore/src/vespa/searchcore/proton/server/document_db_reconfig.h @@ -10,26 +10,31 @@ class DocumentSubDBReconfig; /** * Class representing the result of the prepare step of a DocumentDB reconfig. * - * The reconfig is performed in two steps: + * The reconfig is performed in three steps: * Prepare: * Based on the config that is changed, new components are instantiated in each subdb. * This can be costly and is handled by helper threads from the shared executor pool. * + * Complete prepare: + * Docid limit and serial number are used to complete prepared reconfig. + * * Apply: * The new components are swapped with the old ones in the DocumentDB master write thread. */ class DocumentDBReconfig { private: - std::unique_ptr<const DocumentSubDBReconfig> _ready_reconfig; - std::unique_ptr<const DocumentSubDBReconfig> _not_ready_reconfig; + std::unique_ptr<DocumentSubDBReconfig> _ready_reconfig; + std::unique_ptr<DocumentSubDBReconfig> _not_ready_reconfig; public: - DocumentDBReconfig(std::unique_ptr<const DocumentSubDBReconfig> ready_reconfig_in, - std::unique_ptr<const DocumentSubDBReconfig> not_ready_reconfig_in); + DocumentDBReconfig(std::unique_ptr<DocumentSubDBReconfig> ready_reconfig_in, + std::unique_ptr<DocumentSubDBReconfig> not_ready_reconfig_in); ~DocumentDBReconfig(); - const DocumentSubDBReconfig& ready_reconfig() const { return *_ready_reconfig; } - const DocumentSubDBReconfig& not_ready_reconfig() const { return *_not_ready_reconfig; } + const DocumentSubDBReconfig& ready_reconfig() const noexcept { return *_ready_reconfig; } + DocumentSubDBReconfig& ready_reconfig() noexcept { return *_ready_reconfig; } + const DocumentSubDBReconfig& not_ready_reconfig() const noexcept { return *_not_ready_reconfig; } + DocumentSubDBReconfig& not_ready_reconfig() noexcept { return *_not_ready_reconfig; } }; } diff --git a/searchcore/src/vespa/searchcore/proton/server/document_subdb_reconfig.cpp b/searchcore/src/vespa/searchcore/proton/server/document_subdb_reconfig.cpp index 2fd222338e7..60514b91aab 100644 --- a/searchcore/src/vespa/searchcore/proton/server/document_subdb_reconfig.cpp +++ b/searchcore/src/vespa/searchcore/proton/server/document_subdb_reconfig.cpp @@ -12,5 +12,12 @@ DocumentSubDBReconfig::DocumentSubDBReconfig(std::shared_ptr<Matchers> matchers_ DocumentSubDBReconfig::~DocumentSubDBReconfig() = default; +void +DocumentSubDBReconfig::complete(uint32_t docid_limit, search::SerialNum serial_num) +{ + (void) docid_limit; + (void) serial_num; +} + } diff --git a/searchcore/src/vespa/searchcore/proton/server/document_subdb_reconfig.h b/searchcore/src/vespa/searchcore/proton/server/document_subdb_reconfig.h index 89129a6b0d0..0554056100e 100644 --- a/searchcore/src/vespa/searchcore/proton/server/document_subdb_reconfig.h +++ b/searchcore/src/vespa/searchcore/proton/server/document_subdb_reconfig.h @@ -1,6 +1,7 @@ // Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. #pragma once +#include <vespa/searchlib/common/serialnum.h> #include <memory> namespace proton { @@ -26,7 +27,8 @@ public: return _old_matchers != _new_matchers; } std::shared_ptr<Matchers> matchers() const { return _new_matchers; } + + void complete(uint32_t docid_limit, search::SerialNum serial_num); }; } - diff --git a/searchcore/src/vespa/searchcore/proton/server/documentdb.cpp b/searchcore/src/vespa/searchcore/proton/server/documentdb.cpp index 356ddb6ddf3..a217e3b719e 100644 --- a/searchcore/src/vespa/searchcore/proton/server/documentdb.cpp +++ b/searchcore/src/vespa/searchcore/proton/server/documentdb.cpp @@ -423,7 +423,7 @@ DocumentDB::applySubDBConfig(const DocumentDBConfig &newConfigSnapshot, } void -DocumentDB::applyConfig(DocumentDBConfig::SP configSnapshot, SerialNum serialNum, std::unique_ptr<const DocumentDBReconfig> prepared_reconfig) +DocumentDB::applyConfig(DocumentDBConfig::SP configSnapshot, SerialNum serialNum, std::unique_ptr<DocumentDBReconfig> prepared_reconfig) { // Always called by executor thread: // Called by performReconfig() by executor thread during normal @@ -472,6 +472,7 @@ DocumentDB::applyConfig(DocumentDBConfig::SP configSnapshot, SerialNum serialNum bool elidedConfigSave = equalReplayConfig && tlsReplayDone; forceCommitAndWait(*_feedView.get(), elidedConfigSave ? serialNum : serialNum - 1, std::move(commit_result)); } + _subDBs.complete_prepare_reconfig(*prepared_reconfig, serialNum); if (params.shouldMaintenanceControllerChange()) { _maintenanceController.killJobs(); } diff --git a/searchcore/src/vespa/searchcore/proton/server/documentdb.h b/searchcore/src/vespa/searchcore/proton/server/documentdb.h index 3e81a0505a0..6e611917a79 100644 --- a/searchcore/src/vespa/searchcore/proton/server/documentdb.h +++ b/searchcore/src/vespa/searchcore/proton/server/documentdb.h @@ -156,7 +156,7 @@ private: void applySubDBConfig(const DocumentDBConfig &newConfigSnapshot, SerialNum serialNum, const ReconfigParams ¶ms, const DocumentDBReconfig& prepared_reconfig); - void applyConfig(DocumentDBConfigSP configSnapshot, SerialNum serialNum, std::unique_ptr<const DocumentDBReconfig> prepared_reconfig); + void applyConfig(DocumentDBConfigSP configSnapshot, SerialNum serialNum, std::unique_ptr<DocumentDBReconfig> prepared_reconfig); /** * Save initial config if we don't have any saved config snapshots. diff --git a/searchcore/src/vespa/searchcore/proton/server/documentsubdbcollection.cpp b/searchcore/src/vespa/searchcore/proton/server/documentsubdbcollection.cpp index 2f0aecf9675..73f90df11ab 100644 --- a/searchcore/src/vespa/searchcore/proton/server/documentsubdbcollection.cpp +++ b/searchcore/src/vespa/searchcore/proton/server/documentsubdbcollection.cpp @@ -259,6 +259,13 @@ DocumentSubDBCollection::prepare_reconfig(const DocumentDBConfig& new_config_sna } void +DocumentSubDBCollection::complete_prepare_reconfig(DocumentDBReconfig& prepared_reconfig, SerialNum serial_num) +{ + getReadySubDB()->complete_prepare_reconfig(prepared_reconfig.ready_reconfig(), serial_num); + getNotReadySubDB()->complete_prepare_reconfig(prepared_reconfig.not_ready_reconfig(), serial_num); +} + +void DocumentSubDBCollection::applyConfig(const DocumentDBConfig &newConfigSnapshot, const DocumentDBConfig &oldConfigSnapshot, SerialNum serialNum, diff --git a/searchcore/src/vespa/searchcore/proton/server/documentsubdbcollection.h b/searchcore/src/vespa/searchcore/proton/server/documentsubdbcollection.h index 38b18f5406f..a359ee8f0f3 100644 --- a/searchcore/src/vespa/searchcore/proton/server/documentsubdbcollection.h +++ b/searchcore/src/vespa/searchcore/proton/server/documentsubdbcollection.h @@ -139,6 +139,7 @@ public: void pruneRemovedFields(SerialNum serialNum); std::unique_ptr<DocumentDBReconfig> prepare_reconfig(const DocumentDBConfig& new_config_snapshot, const DocumentDBConfig& old_config_snapshot, const ReconfigParams& reconfig_params, std::optional<SerialNum> serial_num); + void complete_prepare_reconfig(DocumentDBReconfig& prepared_reconfig, SerialNum serial_num); void applyConfig(const DocumentDBConfig &newConfigSnapshot, const DocumentDBConfig &oldConfigSnapshot, SerialNum serialNum, const ReconfigParams ¶ms, IDocumentDBReferenceResolver &resolver, const DocumentDBReconfig& prepared_reconfig); 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 dfc463dc313..eef605cea3c 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 @@ -243,7 +243,7 @@ FastAccessDocSubDB::initViews(const DocumentDBConfig &configSnapshot) } } -std::unique_ptr<const DocumentSubDBReconfig> +std::unique_ptr<DocumentSubDBReconfig> FastAccessDocSubDB::prepare_reconfig(const DocumentDBConfig& new_config_snapshot, const DocumentDBConfig& old_config_snapshot, const ReconfigParams& reconfig_params, std::optional<SerialNum> serial_num) { return _configurer.prepare_reconfig(new_config_snapshot, old_config_snapshot, reconfig_params, serial_num); diff --git a/searchcore/src/vespa/searchcore/proton/server/fast_access_doc_subdb.h b/searchcore/src/vespa/searchcore/proton/server/fast_access_doc_subdb.h index c211a49f999..e4c140e43e6 100644 --- a/searchcore/src/vespa/searchcore/proton/server/fast_access_doc_subdb.h +++ b/searchcore/src/vespa/searchcore/proton/server/fast_access_doc_subdb.h @@ -110,7 +110,7 @@ public: void setup(const DocumentSubDbInitializerResult &initResult) override; void initViews(const DocumentDBConfig &configSnapshot) override; - std::unique_ptr<const DocumentSubDBReconfig> + std::unique_ptr<DocumentSubDBReconfig> prepare_reconfig(const DocumentDBConfig& new_config_snapshot, const DocumentDBConfig& old_config_snapshot, const ReconfigParams& reconfig_params, std::optional<SerialNum> serial_num) override; IReprocessingTask::List applyConfig(const DocumentDBConfig &newConfigSnapshot, const DocumentDBConfig &oldConfigSnapshot, diff --git a/searchcore/src/vespa/searchcore/proton/server/fast_access_doc_subdb_configurer.cpp b/searchcore/src/vespa/searchcore/proton/server/fast_access_doc_subdb_configurer.cpp index a4108767d22..0a88b591f9f 100644 --- a/searchcore/src/vespa/searchcore/proton/server/fast_access_doc_subdb_configurer.cpp +++ b/searchcore/src/vespa/searchcore/proton/server/fast_access_doc_subdb_configurer.cpp @@ -45,14 +45,14 @@ FastAccessDocSubDBConfigurer::FastAccessDocSubDBConfigurer(FeedViewVarHolder &fe FastAccessDocSubDBConfigurer::~FastAccessDocSubDBConfigurer() = default; -std::unique_ptr<const DocumentSubDBReconfig> +std::unique_ptr<DocumentSubDBReconfig> FastAccessDocSubDBConfigurer::prepare_reconfig(const DocumentDBConfig& new_config_snapshot, const DocumentDBConfig& old_config_snapshot, const ReconfigParams& reconfig_params, std::optional<search::SerialNum> serial_num) { (void) new_config_snapshot; (void) old_config_snapshot; (void) reconfig_params; (void) serial_num; - return std::make_unique<const DocumentSubDBReconfig>(std::shared_ptr<Matchers>()); + return std::make_unique<DocumentSubDBReconfig>(std::shared_ptr<Matchers>()); } IReprocessingInitializer::UP diff --git a/searchcore/src/vespa/searchcore/proton/server/fast_access_doc_subdb_configurer.h b/searchcore/src/vespa/searchcore/proton/server/fast_access_doc_subdb_configurer.h index 0bd71638128..7a50aa35c81 100644 --- a/searchcore/src/vespa/searchcore/proton/server/fast_access_doc_subdb_configurer.h +++ b/searchcore/src/vespa/searchcore/proton/server/fast_access_doc_subdb_configurer.h @@ -33,7 +33,7 @@ public: const vespalib::string &subDbName); ~FastAccessDocSubDBConfigurer(); - std::unique_ptr<const DocumentSubDBReconfig> prepare_reconfig(const DocumentDBConfig& new_config_snapshot, const DocumentDBConfig& old_config_snapshot, const ReconfigParams& reconfig_params, std::optional<search::SerialNum> serial_num); + std::unique_ptr<DocumentSubDBReconfig> prepare_reconfig(const DocumentDBConfig& new_config_snapshot, const DocumentDBConfig& old_config_snapshot, const ReconfigParams& reconfig_params, std::optional<search::SerialNum> serial_num); IReprocessingInitializer::UP reconfigure(const DocumentDBConfig &newConfig, const DocumentDBConfig &oldConfig, diff --git a/searchcore/src/vespa/searchcore/proton/server/idocumentsubdb.h b/searchcore/src/vespa/searchcore/proton/server/idocumentsubdb.h index 71f5b86cf87..bdf3d7c7102 100644 --- a/searchcore/src/vespa/searchcore/proton/server/idocumentsubdb.h +++ b/searchcore/src/vespa/searchcore/proton/server/idocumentsubdb.h @@ -80,8 +80,9 @@ public: virtual void setup(const DocumentSubDbInitializerResult &initResult) = 0; virtual void initViews(const DocumentDBConfig &configSnapshot) = 0; - virtual std::unique_ptr<const DocumentSubDBReconfig> + virtual std::unique_ptr<DocumentSubDBReconfig> prepare_reconfig(const DocumentDBConfig& new_config_snapshot, const DocumentDBConfig& old_config_snapshot, const ReconfigParams& reconfig_params, std::optional<SerialNum> serial_num) = 0; + virtual void complete_prepare_reconfig(DocumentSubDBReconfig& prepared_reconfig, SerialNum serial_num) = 0; virtual IReprocessingTask::List applyConfig(const DocumentDBConfig &newConfigSnapshot, const DocumentDBConfig &oldConfigSnapshot, SerialNum serialNum, const ReconfigParams ¶ms, IDocumentDBReferenceResolver &resolver, const DocumentSubDBReconfig& prepared_reconfig) = 0; diff --git a/searchcore/src/vespa/searchcore/proton/server/searchable_doc_subdb_configurer.cpp b/searchcore/src/vespa/searchcore/proton/server/searchable_doc_subdb_configurer.cpp index f9801e10981..fa4340f7659 100644 --- a/searchcore/src/vespa/searchcore/proton/server/searchable_doc_subdb_configurer.cpp +++ b/searchcore/src/vespa/searchcore/proton/server/searchable_doc_subdb_configurer.cpp @@ -140,7 +140,7 @@ SearchableDocSubDBConfigurer::reconfigureIndexSearchable() reconfigureMatchView(indexManager->getSearchable()); } -std::unique_ptr<const DocumentSubDBReconfig> +std::unique_ptr<DocumentSubDBReconfig> SearchableDocSubDBConfigurer::prepare_reconfig(const DocumentDBConfig& new_config_snapshot, const DocumentDBConfig& old_config_snapshot, const ReconfigParams& reconfig_params, std::optional<search::SerialNum> serial_num) { (void) old_config_snapshot; diff --git a/searchcore/src/vespa/searchcore/proton/server/searchable_doc_subdb_configurer.h b/searchcore/src/vespa/searchcore/proton/server/searchable_doc_subdb_configurer.h index c397a41004f..e6b0ebda7c1 100644 --- a/searchcore/src/vespa/searchcore/proton/server/searchable_doc_subdb_configurer.h +++ b/searchcore/src/vespa/searchcore/proton/server/searchable_doc_subdb_configurer.h @@ -78,7 +78,7 @@ public: void reconfigureIndexSearchable(); - std::unique_ptr<const DocumentSubDBReconfig> prepare_reconfig(const DocumentDBConfig& new_config_snapshot, const DocumentDBConfig& old_config_snapshot, const ReconfigParams& reconfig_params, std::optional<search::SerialNum> serial_num); + std::unique_ptr<DocumentSubDBReconfig> prepare_reconfig(const DocumentDBConfig& new_config_snapshot, const DocumentDBConfig& old_config_snapshot, const ReconfigParams& reconfig_params, std::optional<search::SerialNum> serial_num); void reconfigure(const DocumentDBConfig &newConfig, const DocumentDBConfig &oldConfig, diff --git a/searchcore/src/vespa/searchcore/proton/server/searchabledocsubdb.cpp b/searchcore/src/vespa/searchcore/proton/server/searchabledocsubdb.cpp index 7ee46d3f7a2..187be079d03 100644 --- a/searchcore/src/vespa/searchcore/proton/server/searchabledocsubdb.cpp +++ b/searchcore/src/vespa/searchcore/proton/server/searchabledocsubdb.cpp @@ -132,7 +132,7 @@ reconfigureMatchingMetrics(const RankProfilesConfig &cfg) } } -std::unique_ptr<const DocumentSubDBReconfig> +std::unique_ptr<DocumentSubDBReconfig> SearchableDocSubDB::prepare_reconfig(const DocumentDBConfig& new_config_snapshot, const DocumentDBConfig& old_config_snapshot, const ReconfigParams& reconfig_params, std::optional<SerialNum> serial_num) { return _configurer.prepare_reconfig(new_config_snapshot, old_config_snapshot, reconfig_params, serial_num); diff --git a/searchcore/src/vespa/searchcore/proton/server/searchabledocsubdb.h b/searchcore/src/vespa/searchcore/proton/server/searchabledocsubdb.h index 075199ab891..522ccd69b2a 100644 --- a/searchcore/src/vespa/searchcore/proton/server/searchabledocsubdb.h +++ b/searchcore/src/vespa/searchcore/proton/server/searchabledocsubdb.h @@ -100,7 +100,7 @@ public: void setup(const DocumentSubDbInitializerResult &initResult) override; void initViews(const DocumentDBConfig &configSnapshot) override; - std::unique_ptr<const DocumentSubDBReconfig> + std::unique_ptr<DocumentSubDBReconfig> prepare_reconfig(const DocumentDBConfig& new_config_snapshot, const DocumentDBConfig& old_config_snapshot, const ReconfigParams& reconfig_params, std::optional<SerialNum> serial_num) override; IReprocessingTask::List applyConfig(const DocumentDBConfig &newConfigSnapshot, const DocumentDBConfig &oldConfigSnapshot, diff --git a/searchcore/src/vespa/searchcore/proton/server/storeonlydocsubdb.cpp b/searchcore/src/vespa/searchcore/proton/server/storeonlydocsubdb.cpp index a099ac4f492..e3cf394c143 100644 --- a/searchcore/src/vespa/searchcore/proton/server/storeonlydocsubdb.cpp +++ b/searchcore/src/vespa/searchcore/proton/server/storeonlydocsubdb.cpp @@ -405,14 +405,20 @@ StoreOnlyDocSubDB::getSubDbName() const { return vespalib::make_string("%s.%s", _owner.getName().c_str(), _subName.c_str()); } -std::unique_ptr<const DocumentSubDBReconfig> +std::unique_ptr<DocumentSubDBReconfig> StoreOnlyDocSubDB::prepare_reconfig(const DocumentDBConfig& new_config_snapshot, const DocumentDBConfig& old_config_snapshot, const ReconfigParams& reconfig_params, std::optional<SerialNum> serial_num) { (void) new_config_snapshot; (void) old_config_snapshot; (void) reconfig_params; (void) serial_num; - return std::make_unique<const DocumentSubDBReconfig>(std::shared_ptr<Matchers>()); + return std::make_unique<DocumentSubDBReconfig>(std::shared_ptr<Matchers>()); +} + +void +StoreOnlyDocSubDB::complete_prepare_reconfig(DocumentSubDBReconfig& prepared_reconfig, SerialNum serial_num) +{ + prepared_reconfig.complete(_dms->getCommittedDocIdLimit(), serial_num); } IReprocessingTask::List diff --git a/searchcore/src/vespa/searchcore/proton/server/storeonlydocsubdb.h b/searchcore/src/vespa/searchcore/proton/server/storeonlydocsubdb.h index 574ba106339..0abb06a76aa 100644 --- a/searchcore/src/vespa/searchcore/proton/server/storeonlydocsubdb.h +++ b/searchcore/src/vespa/searchcore/proton/server/storeonlydocsubdb.h @@ -200,8 +200,9 @@ public: void validateDocStore(FeedHandler & feedHandler, SerialNum serialNum) const override; - std::unique_ptr<const DocumentSubDBReconfig> + std::unique_ptr<DocumentSubDBReconfig> prepare_reconfig(const DocumentDBConfig& new_config_snapshot, const DocumentDBConfig& old_config_snapshot, const ReconfigParams& reconfig_params, std::optional<SerialNum> serial_num) override; + void complete_prepare_reconfig(DocumentSubDBReconfig& prepared_reconfig, SerialNum serial_num) override; IReprocessingTask::List applyConfig(const DocumentDBConfig &newConfigSnapshot, const DocumentDBConfig &oldConfigSnapshot, SerialNum serialNum, const ReconfigParams ¶ms, IDocumentDBReferenceResolver &resolver, const DocumentSubDBReconfig &prepared_reconfig) override; diff --git a/searchcore/src/vespa/searchcore/proton/test/dummy_document_sub_db.h b/searchcore/src/vespa/searchcore/proton/test/dummy_document_sub_db.h index 10e53625ace..5ab0109578c 100644 --- a/searchcore/src/vespa/searchcore/proton/test/dummy_document_sub_db.h +++ b/searchcore/src/vespa/searchcore/proton/test/dummy_document_sub_db.h @@ -52,9 +52,10 @@ struct DummyDocumentSubDb : public IDocumentSubDB } void setup(const DocumentSubDbInitializerResult &) override {} void initViews(const DocumentDBConfig &) override {} - std::unique_ptr<const DocumentSubDBReconfig> prepare_reconfig(const DocumentDBConfig&, const DocumentDBConfig&, const ReconfigParams&, std::optional<SerialNum>) override { - return std::make_unique<const DocumentSubDBReconfig>(std::shared_ptr<Matchers>()); + std::unique_ptr<DocumentSubDBReconfig> prepare_reconfig(const DocumentDBConfig&, const DocumentDBConfig&, const ReconfigParams&, std::optional<SerialNum>) override { + return std::make_unique<DocumentSubDBReconfig>(std::shared_ptr<Matchers>()); } + void complete_prepare_reconfig(DocumentSubDBReconfig&, SerialNum) override { } IReprocessingTask::List applyConfig(const DocumentDBConfig &, const DocumentDBConfig &, SerialNum, const ReconfigParams &, IDocumentDBReferenceResolver &, const DocumentSubDBReconfig&) override { |