diff options
author | Tor Egge <Tor.Egge@oath.com> | 2018-04-20 12:40:58 +0000 |
---|---|---|
committer | Tor Egge <Tor.Egge@oath.com> | 2018-04-20 12:40:58 +0000 |
commit | 8771271e8a8cfd3387fb388505f6006ad99dc18b (patch) | |
tree | 1232a76882cb51c417be33e1ca5cd5b0faf5903e /searchcore | |
parent | 0b71f5899ec4c0f2e74551daff901db36e7f4182 (diff) |
Enable import of imported attribute vector in backend.
Diffstat (limited to 'searchcore')
8 files changed, 30 insertions, 27 deletions
diff --git a/searchcore/src/tests/proton/documentdb/documentdb_test.cpp b/searchcore/src/tests/proton/documentdb/documentdb_test.cpp index 51ecc6ab0a1..8affe6e9cbf 100644 --- a/searchcore/src/tests/proton/documentdb/documentdb_test.cpp +++ b/searchcore/src/tests/proton/documentdb/documentdb_test.cpp @@ -21,6 +21,7 @@ #include <vespa/searchcore/proton/server/documentdbconfigmanager.h> #include <vespa/searchcore/proton/server/memoryconfigstore.h> #include <vespa/searchcorespi/index/indexflushtarget.h> +#include <vespa/searchlib/attribute/attribute_read_guard.h> #include <vespa/searchlib/index/dummyfileheadercontext.h> #include <vespa/searchlib/transactionlog/translogserver.h> #include <vespa/vespalib/data/slime/slime.h> @@ -240,7 +241,8 @@ TEST_F("require that document db registers reference", Fixture) EXPECT_TRUE(reference); auto attr = reference->getAttribute("attr1"); EXPECT_TRUE(attr); - EXPECT_EQUAL(search::attribute::BasicType::INT32, attr->getBasicType()); + auto attrReadGuard = attr->makeReadGuard(false); + EXPECT_EQUAL(search::attribute::BasicType::INT32, attrReadGuard->attribute()->getBasicType()); } } // namespace diff --git a/searchcore/src/tests/proton/reference/document_db_reference_resolver/document_db_reference_resolver_test.cpp b/searchcore/src/tests/proton/reference/document_db_reference_resolver/document_db_reference_resolver_test.cpp index 4b126a6d7c3..f6da0c75d62 100644 --- a/searchcore/src/tests/proton/reference/document_db_reference_resolver/document_db_reference_resolver_test.cpp +++ b/searchcore/src/tests/proton/reference/document_db_reference_resolver/document_db_reference_resolver_test.cpp @@ -67,7 +67,7 @@ struct MyDocumentDBReference : public MockDocumentDBReference { virtual IGidToLidMapperFactory::SP getGidToLidMapperFactory() override { return factory; } - virtual AttributeVector::SP getAttribute(vespalib::stringref name) override { + virtual std::shared_ptr<search::attribute::ReadableAttributeVector> getAttribute(vespalib::stringref name) override { auto itr = attributes.find(name); ASSERT_TRUE(itr != attributes.end()); return itr->second; diff --git a/searchcore/src/vespa/searchcore/proton/reference/document_db_reference.cpp b/searchcore/src/vespa/searchcore/proton/reference/document_db_reference.cpp index 7cc352b23c3..db90f2ed464 100644 --- a/searchcore/src/vespa/searchcore/proton/reference/document_db_reference.cpp +++ b/searchcore/src/vespa/searchcore/proton/reference/document_db_reference.cpp @@ -5,11 +5,13 @@ #include "gid_to_lid_change_registrator.h" #include <vespa/searchcore/proton/documentmetastore/documentmetastore.h> #include <vespa/searchlib/attribute/attributeguard.h> -#include <vespa/searchlib/attribute/iattributemanager.h> +#include <vespa/searchlib/attribute/imported_attribute_vector.h> +#include <vespa/searchcore/proton/attribute/attributemanager.h> +#include <vespa/searchcore/proton/attribute/imported_attributes_repo.h> namespace proton { -DocumentDBReference::DocumentDBReference(std::shared_ptr<search::IAttributeManager> attrMgr, +DocumentDBReference::DocumentDBReference(std::shared_ptr<AttributeManager> attrMgr, std::shared_ptr<DocumentMetaStore> dms, std::shared_ptr<IGidToLidChangeHandler> gidToLidChangeHandler) : _attrMgr(std::move(attrMgr)), @@ -22,14 +24,18 @@ DocumentDBReference::~DocumentDBReference() { } -std::shared_ptr<search::AttributeVector> +std::shared_ptr<search::attribute::ReadableAttributeVector> DocumentDBReference::getAttribute(vespalib::stringref name) { search::AttributeGuard::UP guard = _attrMgr->getAttribute(name); - if (guard) { + if (guard && guard->valid()) { return guard->getSP(); } else { - return std::shared_ptr<search::AttributeVector>(); + auto importedAttributesRepo = _attrMgr->getImportedAttributes(); + if (importedAttributesRepo != nullptr) { + return importedAttributesRepo->get(name); + } + return std::shared_ptr<search::attribute::ReadableAttributeVector>(); } } diff --git a/searchcore/src/vespa/searchcore/proton/reference/document_db_reference.h b/searchcore/src/vespa/searchcore/proton/reference/document_db_reference.h index 8233cbb6c93..85b49f6b6bd 100644 --- a/searchcore/src/vespa/searchcore/proton/reference/document_db_reference.h +++ b/searchcore/src/vespa/searchcore/proton/reference/document_db_reference.h @@ -3,15 +3,9 @@ #include "i_document_db_reference.h" -namespace search -{ - -class IAttributeManager; - -} - namespace proton { +class AttributeManager; class DocumentMetaStore; class IGidToLidChangeHandler; @@ -22,15 +16,15 @@ class IGidToLidChangeHandler; */ class DocumentDBReference : public IDocumentDBReference { - std::shared_ptr<search::IAttributeManager> _attrMgr; + std::shared_ptr<AttributeManager> _attrMgr; std::shared_ptr<DocumentMetaStore> _dms; std::shared_ptr<IGidToLidChangeHandler> _gidToLidChangeHandler; public: - DocumentDBReference(std::shared_ptr<search::IAttributeManager> attrMgr, + DocumentDBReference(std::shared_ptr<AttributeManager> attrMgr, std::shared_ptr<DocumentMetaStore> dms, std::shared_ptr<IGidToLidChangeHandler> gidToLidChangeHandler); virtual ~DocumentDBReference(); - virtual std::shared_ptr<search::AttributeVector> getAttribute(vespalib::stringref name) override; + virtual std::shared_ptr<search::attribute::ReadableAttributeVector> getAttribute(vespalib::stringref name) override; virtual std::shared_ptr<search::IGidToLidMapperFactory> getGidToLidMapperFactory() override; virtual std::unique_ptr<GidToLidChangeRegistrator> makeGidToLidChangeRegistrator(const vespalib::string &docTypeName) override; }; diff --git a/searchcore/src/vespa/searchcore/proton/reference/document_db_reference_resolver.cpp b/searchcore/src/vespa/searchcore/proton/reference/document_db_reference_resolver.cpp index 9b097010fe1..99b7eb300bf 100644 --- a/searchcore/src/vespa/searchcore/proton/reference/document_db_reference_resolver.cpp +++ b/searchcore/src/vespa/searchcore/proton/reference/document_db_reference_resolver.cpp @@ -143,7 +143,7 @@ DocumentDBReferenceResolver::createImportedAttributesRepo(const IAttributeManage if (_useReferences) { for (const auto &attr : _importedFieldsCfg.attribute) { ReferenceAttribute::SP refAttr = getReferenceAttribute(attr.referencefield, attrMgr); - AttributeVector::SP targetAttr = getTargetDocumentDB(refAttr->getName())->getAttribute(attr.targetfield); + auto targetAttr = getTargetDocumentDB(refAttr->getName())->getAttribute(attr.targetfield); auto importedAttr = ImportedAttributeVectorFactory::create(attr.name, refAttr, targetAttr, documentMetaStore, useSearchCache); result->add(importedAttr->getName(), importedAttr); } diff --git a/searchcore/src/vespa/searchcore/proton/reference/i_document_db_reference.h b/searchcore/src/vespa/searchcore/proton/reference/i_document_db_reference.h index 15325537770..a37a553ed40 100644 --- a/searchcore/src/vespa/searchcore/proton/reference/i_document_db_reference.h +++ b/searchcore/src/vespa/searchcore/proton/reference/i_document_db_reference.h @@ -3,9 +3,10 @@ #include <vespa/vespalib/stllike/string.h> +namespace search::attribute { class ReadableAttributeVector; } + namespace search { -class AttributeVector; class IGidToLidMapperFactory; } @@ -24,7 +25,7 @@ class IDocumentDBReference public: using SP = std::shared_ptr<IDocumentDBReference>; virtual ~IDocumentDBReference() { } - virtual std::shared_ptr<search::AttributeVector> getAttribute(vespalib::stringref name) = 0; + virtual std::shared_ptr<search::attribute::ReadableAttributeVector> getAttribute(vespalib::stringref name) = 0; virtual std::shared_ptr<search::IGidToLidMapperFactory> getGidToLidMapperFactory() = 0; virtual std::unique_ptr<GidToLidChangeRegistrator> makeGidToLidChangeRegistrator(const vespalib::string &docTypeName) = 0; }; diff --git a/searchcore/src/vespa/searchcore/proton/server/searchabledocsubdb.cpp b/searchcore/src/vespa/searchcore/proton/server/searchabledocsubdb.cpp index e05ab4b798f..d1e0ba658e4 100644 --- a/searchcore/src/vespa/searchcore/proton/server/searchabledocsubdb.cpp +++ b/searchcore/src/vespa/searchcore/proton/server/searchabledocsubdb.cpp @@ -364,7 +364,9 @@ SearchableDocSubDB::close() std::shared_ptr<IDocumentDBReference> SearchableDocSubDB::getDocumentDBReference() { - return std::make_shared<DocumentDBReference>(getAttributeManager(), _dms, _gidToLidChangeHandler); + auto attrMgr = std::dynamic_pointer_cast<AttributeManager>(getAttributeManager()); + assert(attrMgr); + return std::make_shared<DocumentDBReference>(attrMgr, _dms, _gidToLidChangeHandler); } void diff --git a/searchcore/src/vespa/searchcore/proton/test/mock_document_db_reference.h b/searchcore/src/vespa/searchcore/proton/test/mock_document_db_reference.h index d835e3ea676..defe78c0e75 100644 --- a/searchcore/src/vespa/searchcore/proton/test/mock_document_db_reference.h +++ b/searchcore/src/vespa/searchcore/proton/test/mock_document_db_reference.h @@ -4,10 +4,8 @@ #include <vespa/searchcore/proton/reference/i_document_db_reference.h> #include <vespa/searchcore/proton/reference/gid_to_lid_change_registrator.h> -namespace search { -class AttributeVector; -class IGidToLidMapperFactory; -} +namespace search::attribute { class ReadableAttributeVector; } +namespace search { class IGidToLidMapperFactory; } namespace proton { namespace test { @@ -17,8 +15,8 @@ namespace test { */ struct MockDocumentDBReference : public IDocumentDBReference { using SP = std::shared_ptr<MockDocumentDBReference>; - virtual std::shared_ptr<search::AttributeVector> getAttribute(vespalib::stringref) override { - return std::shared_ptr<search::AttributeVector>(); + virtual std::shared_ptr<search::attribute::ReadableAttributeVector> getAttribute(vespalib::stringref) override { + return std::shared_ptr<search::attribute::ReadableAttributeVector>(); } virtual std::shared_ptr<search::IGidToLidMapperFactory> getGidToLidMapperFactory() override { return std::shared_ptr<search::IGidToLidMapperFactory>(); |