aboutsummaryrefslogtreecommitdiffstats
path: root/searchcore/src
diff options
context:
space:
mode:
authorTor Egge <Tor.Egge@oath.com>2018-04-20 12:40:58 +0000
committerTor Egge <Tor.Egge@oath.com>2018-04-20 12:40:58 +0000
commit8771271e8a8cfd3387fb388505f6006ad99dc18b (patch)
tree1232a76882cb51c417be33e1ca5cd5b0faf5903e /searchcore/src
parent0b71f5899ec4c0f2e74551daff901db36e7f4182 (diff)
Enable import of imported attribute vector in backend.
Diffstat (limited to 'searchcore/src')
-rw-r--r--searchcore/src/tests/proton/documentdb/documentdb_test.cpp4
-rw-r--r--searchcore/src/tests/proton/reference/document_db_reference_resolver/document_db_reference_resolver_test.cpp2
-rw-r--r--searchcore/src/vespa/searchcore/proton/reference/document_db_reference.cpp16
-rw-r--r--searchcore/src/vespa/searchcore/proton/reference/document_db_reference.h14
-rw-r--r--searchcore/src/vespa/searchcore/proton/reference/document_db_reference_resolver.cpp2
-rw-r--r--searchcore/src/vespa/searchcore/proton/reference/i_document_db_reference.h5
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/searchabledocsubdb.cpp4
-rw-r--r--searchcore/src/vespa/searchcore/proton/test/mock_document_db_reference.h10
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>();