diff options
Diffstat (limited to 'searchcore')
-rw-r--r-- | searchcore/src/vespa/searchcore/proton/server/documentretriever.cpp | 6 | ||||
-rw-r--r-- | searchcore/src/vespa/searchcore/proton/server/documentretriever.h | 4 |
2 files changed, 7 insertions, 3 deletions
diff --git a/searchcore/src/vespa/searchcore/proton/server/documentretriever.cpp b/searchcore/src/vespa/searchcore/proton/server/documentretriever.cpp index 4b031f28900..f0c0e12cf76 100644 --- a/searchcore/src/vespa/searchcore/proton/server/documentretriever.cpp +++ b/searchcore/src/vespa/searchcore/proton/server/documentretriever.cpp @@ -123,7 +123,7 @@ void DocumentRetriever::visitDocuments(const LidVector & lids, search::IDocument _doc_store.visit(lids, getDocumentTypeRepo(), populater); } -void DocumentRetriever::populate(DocumentIdT lid, Document & doc) const +void DocumentRetriever::populate(DocumentIdT lid, Document & doc, ReadConsistency consistency) const { for (uint32_t i = 0; i < _schema.getNumAttributeFields(); ++i) { const Schema::AttributeField &field = _schema.getAttributeField(i); @@ -131,6 +131,10 @@ void DocumentRetriever::populate(DocumentIdT lid, Document & doc) const if (attrGuard.get() && attrGuard->valid()) { const search::attribute::IAttributeVector & attr = **attrGuard; if (lid < attr.getNumDocs()) { + if (consistency != ReadConsistency::STRONG) { + // Lock must be retaken to ensure as non-strong consitency allows lids to arrive later on. + attrGuard = _attr_manager.getAttribute(field.getName()); + } DocumentFieldRetriever::populate(lid, doc, field, attr, _schema.isIndexField(field.getName())); } } diff --git a/searchcore/src/vespa/searchcore/proton/server/documentretriever.h b/searchcore/src/vespa/searchcore/proton/server/documentretriever.h index 94446a0c738..0a81a9dc845 100644 --- a/searchcore/src/vespa/searchcore/proton/server/documentretriever.h +++ b/searchcore/src/vespa/searchcore/proton/server/documentretriever.h @@ -24,8 +24,8 @@ public: const search::IDocumentStore &doc_store); document::Document::UP getDocument(search::DocumentIdT lid) const override; - void visitDocuments(const LidVector & lids, search::IDocumentVisitor & visitor, ReadConsistency) const override; - void populate(search::DocumentIdT lid, document::Document & doc) const; + void visitDocuments(const LidVector & lids, search::IDocumentVisitor & visitor, ReadConsistency consistency) const override; + void populate(search::DocumentIdT lid, document::Document & doc, ReadConsistency consistency) const; private: const search::index::Schema &_schema; const search::IAttributeManager &_attr_manager; |