diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2016-06-22 12:36:03 +0200 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2016-06-22 12:36:03 +0200 |
commit | f8f4ad4c4ab14fde3f54a0074df50809d5862ecf (patch) | |
tree | 70929e9ec4d65e5d5ce03721ead2b15d2254bb09 /searchcore | |
parent | 3c62ec294306e957e376fb79501758d4f90ebd28 (diff) |
Retake guard to ensure that we have not moved.
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; |