diff options
Diffstat (limited to 'searchcore/src/vespa/searchcore/proton/attribute')
5 files changed, 21 insertions, 11 deletions
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..dd6cc1bdb85 100644 --- a/searchcore/src/vespa/searchcore/proton/attribute/attributemanager.cpp +++ b/searchcore/src/vespa/searchcore/proton/attribute/attributemanager.cpp @@ -325,16 +325,24 @@ 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) { + /* + * Called (indirectly) by + * DocumentSubDBCollection::complete_prepare_reconfig to complete + * setup of new attribute manager. + */ 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) { + /* + * The attribute vector is empty (not loaded from disk) + * and has been added as part of live reconfig. Make it + * ready for use by setting size and create serial num. + */ + AttributeManager::padAttribute(*attr, docid_limit); + attr->setCreateSerialNum(serial_num); } attr->setInterlock(_interlock); auto shrinker = allocShrinker(attr, _attributeFieldWriter, *_diskLayout); @@ -503,8 +511,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); |