summaryrefslogtreecommitdiffstats
path: root/searchlib
diff options
context:
space:
mode:
authorGeir Storli <geirstorli@yahoo.no>2017-09-08 16:36:18 +0200
committerGitHub <noreply@github.com>2017-09-08 16:36:18 +0200
commitce32546fbf9f2552b0474097ac54c45705caee3e (patch)
treec362ae9a80bcd26034b6e20aa8084d2318769e82 /searchlib
parent092f8895ca6e7ee8007086355c2d27047cbd8923 (diff)
parent81d1801e29e73c700de8ba233c341e14c34e6d5b (diff)
Merge pull request #3344 from vespa-engine/toregge/remove-unneeded-boundary-check
Remove boundary check for mapping from lid to referenced lid since
Diffstat (limited to 'searchlib')
-rw-r--r--searchlib/src/vespa/searchlib/attribute/imported_attribute_vector_read_guard.cpp2
-rw-r--r--searchlib/src/vespa/searchlib/attribute/imported_attribute_vector_read_guard.h4
-rw-r--r--searchlib/src/vespa/searchlib/attribute/imported_search_context.cpp1
-rw-r--r--searchlib/src/vespa/searchlib/attribute/imported_search_context.h4
-rw-r--r--searchlib/src/vespa/searchlib/attribute/reference_attribute.cpp2
-rw-r--r--searchlib/src/vespa/searchlib/attribute/reference_mappings.cpp5
-rw-r--r--searchlib/src/vespa/searchlib/attribute/reference_mappings.h9
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;