aboutsummaryrefslogtreecommitdiffstats
path: root/searchcore/src/vespa/searchcore/proton/attribute
diff options
context:
space:
mode:
Diffstat (limited to 'searchcore/src/vespa/searchcore/proton/attribute')
-rw-r--r--searchcore/src/vespa/searchcore/proton/attribute/attribute_manager_initializer.cpp2
-rw-r--r--searchcore/src/vespa/searchcore/proton/attribute/attribute_manager_reconfig.cpp2
-rw-r--r--searchcore/src/vespa/searchcore/proton/attribute/attribute_manager_reconfig.h2
-rw-r--r--searchcore/src/vespa/searchcore/proton/attribute/attributemanager.cpp24
-rw-r--r--searchcore/src/vespa/searchcore/proton/attribute/attributemanager.h2
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);