diff options
author | Geir Storli <geirstorli@yahoo.no> | 2017-09-08 16:36:18 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-09-08 16:36:18 +0200 |
commit | ce32546fbf9f2552b0474097ac54c45705caee3e (patch) | |
tree | c362ae9a80bcd26034b6e20aa8084d2318769e82 | |
parent | 092f8895ca6e7ee8007086355c2d27047cbd8923 (diff) | |
parent | 81d1801e29e73c700de8ba233c341e14c34e6d5b (diff) |
Merge pull request #3344 from vespa-engine/toregge/remove-unneeded-boundary-check
Remove boundary check for mapping from lid to referenced lid since
7 files changed, 13 insertions, 14 deletions
diff --git a/searchlib/src/vespa/searchlib/attribute/imported_attribute_vector_read_guard.cpp b/searchlib/src/vespa/searchlib/attribute/imported_attribute_vector_read_guard.cpp index 9586e2be79b..4eedb6ce915 100644 --- a/searchlib/src/vespa/searchlib/attribute/imported_attribute_vector_read_guard.cpp +++ b/searchlib/src/vespa/searchlib/attribute/imported_attribute_vector_read_guard.cpp @@ -13,13 +13,11 @@ ImportedAttributeVectorReadGuard::ImportedAttributeVectorReadGuard( bool stableEnumGuard) : ImportedAttributeVector(name, std::move(reference_attribute), std::move(target_attribute), std::move(search_cache)), _referencedLids(), - _referencedLidLimit(0u), _reference_attribute_guard(_reference_attribute), _target_attribute_guard(stableEnumGuard ? std::shared_ptr<AttributeVector>() : _target_attribute), _target_attribute_enum_guard(stableEnumGuard ? _target_attribute : std::shared_ptr<AttributeVector>()) { _referencedLids = _reference_attribute->getReferencedLids(); - _referencedLidLimit = _target_attribute->getCommittedDocIdLimit(); } ImportedAttributeVectorReadGuard::~ImportedAttributeVectorReadGuard() { diff --git a/searchlib/src/vespa/searchlib/attribute/imported_attribute_vector_read_guard.h b/searchlib/src/vespa/searchlib/attribute/imported_attribute_vector_read_guard.h index 77554fdb849..7b226d2556a 100644 --- a/searchlib/src/vespa/searchlib/attribute/imported_attribute_vector_read_guard.h +++ b/searchlib/src/vespa/searchlib/attribute/imported_attribute_vector_read_guard.h @@ -19,14 +19,12 @@ class ImportedAttributeVectorReadGuard : public ImportedAttributeVector { using ReferencedLids = vespalib::ConstArrayRef<uint32_t>; ReferencedLids _referencedLids; - uint32_t _referencedLidLimit; AttributeGuard _reference_attribute_guard; AttributeGuard _target_attribute_guard; AttributeEnumGuard _target_attribute_enum_guard; uint32_t getReferencedLid(uint32_t lid) const { - uint32_t referencedLid = _referencedLids[lid]; - return ((referencedLid >= _referencedLidLimit) ? 0u : referencedLid); + return _referencedLids[lid]; } public: diff --git a/searchlib/src/vespa/searchlib/attribute/imported_search_context.cpp b/searchlib/src/vespa/searchlib/attribute/imported_search_context.cpp index 26e51f77ccf..d2dc52ec2c7 100644 --- a/searchlib/src/vespa/searchlib/attribute/imported_search_context.cpp +++ b/searchlib/src/vespa/searchlib/attribute/imported_search_context.cpp @@ -33,7 +33,6 @@ ImportedSearchContext::ImportedSearchContext( _target_attribute(*_imported_attribute.getTargetAttribute()), _target_search_context(_target_attribute.getSearch(std::move(term), params)), _referencedLids(_reference_attribute.getReferencedLids()), - _referencedLidLimit(_target_attribute.getCommittedDocIdLimit()), _merger(_reference_attribute.getCommittedDocIdLimit()), _fetchPostingsDone(false) { diff --git a/searchlib/src/vespa/searchlib/attribute/imported_search_context.h b/searchlib/src/vespa/searchlib/attribute/imported_search_context.h index f3f44332a2e..0f6f8125cf8 100644 --- a/searchlib/src/vespa/searchlib/attribute/imported_search_context.h +++ b/searchlib/src/vespa/searchlib/attribute/imported_search_context.h @@ -34,13 +34,11 @@ class ImportedSearchContext : public ISearchContext { const AttributeVector& _target_attribute; std::unique_ptr<AttributeVector::SearchContext> _target_search_context; ReferencedLids _referencedLids; - uint32_t _referencedLidLimit; PostingListMerger<int32_t> _merger; bool _fetchPostingsDone; uint32_t getReferencedLid(uint32_t lid) const { - uint32_t referencedLid = _referencedLids[lid]; - return ((referencedLid >= _referencedLidLimit) ? 0u : referencedLid); + return _referencedLids[lid]; } void makeMergedPostings(bool isFilter); diff --git a/searchlib/src/vespa/searchlib/attribute/reference_attribute.cpp b/searchlib/src/vespa/searchlib/attribute/reference_attribute.cpp index 8666f0bdced..f286d7a5fa4 100644 --- a/searchlib/src/vespa/searchlib/attribute/reference_attribute.cpp +++ b/searchlib/src/vespa/searchlib/attribute/reference_attribute.cpp @@ -35,7 +35,7 @@ ReferenceAttribute::ReferenceAttribute(const vespalib::stringref baseFileName, _indices(getGenerationHolder()), _cachedUniqueStoreMemoryUsage(), _gidToLidMapperFactory(), - _referenceMappings(getGenerationHolder()) + _referenceMappings(getGenerationHolder(), getCommittedDocIdLimitRef()) { setEnum(true); enableEnumeratedSave(true); diff --git a/searchlib/src/vespa/searchlib/attribute/reference_mappings.cpp b/searchlib/src/vespa/searchlib/attribute/reference_mappings.cpp index ae93dfba225..41a2c52de1c 100644 --- a/searchlib/src/vespa/searchlib/attribute/reference_mappings.cpp +++ b/searchlib/src/vespa/searchlib/attribute/reference_mappings.cpp @@ -7,11 +7,12 @@ namespace search::attribute { -ReferenceMappings::ReferenceMappings(GenerationHolder &genHolder) +ReferenceMappings::ReferenceMappings(GenerationHolder &genHolder, const uint32_t &committedDocIdLimit) : _reverseMappingIndices(genHolder), _referencedLidLimit(0), _reverseMapping(), - _referencedLids(genHolder) + _referencedLids(genHolder), + _committedDocIdLimit(committedDocIdLimit) { } diff --git a/searchlib/src/vespa/searchlib/attribute/reference_mappings.h b/searchlib/src/vespa/searchlib/attribute/reference_mappings.h index 43ae8a5bdb8..9ba6dd5853e 100644 --- a/searchlib/src/vespa/searchlib/attribute/reference_mappings.h +++ b/searchlib/src/vespa/searchlib/attribute/reference_mappings.h @@ -35,6 +35,7 @@ class ReferenceMappings ReverseMapping _reverseMapping; // vector containing referenced lid given referencing lid RcuVectorBase<uint32_t> _referencedLids; + const uint32_t &_committedDocIdLimit; void syncForwardMapping(const Reference &entry); void syncReverseMappingIndices(const Reference &entry); @@ -43,7 +44,7 @@ public: using ReferencedLids = vespalib::ConstArrayRef<uint32_t>; using ReverseMappingRefs = vespalib::ConstArrayRef<EntryRef>; - ReferenceMappings(GenerationHolder &genHolder); + ReferenceMappings(GenerationHolder &genHolder, const uint32_t &committedDocIdLimit); ~ReferenceMappings(); @@ -78,7 +79,11 @@ public: void foreach_lid(uint32_t referencedLid, FunctionType &&func) const; - ReferencedLids getReferencedLids() const { return ReferencedLids(&_referencedLids[0], _referencedLids.size()); } + ReferencedLids getReferencedLids() const { + uint32_t committedDocIdLimit = _committedDocIdLimit; + std::atomic_thread_fence(std::memory_order_acquire); + return ReferencedLids(&_referencedLids[0], committedDocIdLimit); + } uint32_t getReferencedLid(uint32_t doc) const { return _referencedLids[doc]; } ReverseMappingRefs getReverseMappingRefs() const { uint32_t referencedLidLimit = _referencedLidLimit; |