diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2022-05-27 22:19:38 +0000 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2022-05-27 22:19:38 +0000 |
commit | 48830aa130c67574cdf2ffefc43072e6704f8c65 (patch) | |
tree | d5051b375e31ea21e7fcc17aa1c68e8fda4af691 /searchlib | |
parent | 031e0b85bb6498f3071598a3daaf6bc5721745e1 (diff) |
Simplify AttributeVector by moving out ValueModifier, EnumModifier and BaseName.
Diffstat (limited to 'searchlib')
24 files changed, 215 insertions, 165 deletions
diff --git a/searchlib/src/tests/attribute/attribute_test.cpp b/searchlib/src/tests/attribute/attribute_test.cpp index ab0c6c28ad1..6f86112a0f2 100644 --- a/searchlib/src/tests/attribute/attribute_test.cpp +++ b/searchlib/src/tests/attribute/attribute_test.cpp @@ -303,7 +303,7 @@ AttributeTest::AttributeTest() = default; void AttributeTest::testBaseName() { - AttributeVector::BaseName v("attr1"); + attribute::BaseName v("attr1"); EXPECT_EQ(v.getAttributeName(), "attr1"); EXPECT_TRUE(v.getDirName().empty()); v = "attribute/attr1/attr1"; @@ -320,12 +320,10 @@ void AttributeTest::testBaseName() EXPECT_EQ(v.getDirName(), "index.1/1.ready/attribute/attr1/snapshot-X"); v = "/index.1/1.ready/attribute/attr1/snapshot-X/attr1"; EXPECT_EQ(v.getAttributeName(), "attr1"); - EXPECT_EQ(v.getDirName(), - "/index.1/1.ready/attribute/attr1/snapshot-X"); + EXPECT_EQ(v.getDirName(), "/index.1/1.ready/attribute/attr1/snapshot-X"); v = "xxxyyyy/zzz/index.1/1.ready/attribute/attr1/snapshot-X/attr1"; EXPECT_EQ(v.getAttributeName(), "attr1"); - EXPECT_EQ(v.getDirName(), - "xxxyyyy/zzz/index.1/1.ready/attribute/attr1/snapshot-X"); + EXPECT_EQ(v.getDirName(), "xxxyyyy/zzz/index.1/1.ready/attribute/attr1/snapshot-X"); } void AttributeTest::addDocs(const AttributePtr & v, size_t sz) diff --git a/searchlib/src/vespa/searchlib/attribute/CMakeLists.txt b/searchlib/src/vespa/searchlib/attribute/CMakeLists.txt index 5fa691394fb..5e86c350b55 100644 --- a/searchlib/src/vespa/searchlib/attribute/CMakeLists.txt +++ b/searchlib/src/vespa/searchlib/attribute/CMakeLists.txt @@ -23,6 +23,7 @@ vespa_add_library(searchlib_attribute OBJECT attributesaver.cpp attributevector.cpp attrvector.cpp + basename.cpp bitvector_search_cache.cpp changevector.cpp configconverter.cpp @@ -42,6 +43,7 @@ vespa_add_library(searchlib_attribute OBJECT enumattributesaver.cpp enumcomparator.cpp enumhintsearchcontext.cpp + enummodifier.cpp enum_store_compaction_spec.cpp enum_store_dictionary.cpp enum_store_loaders.cpp @@ -128,5 +130,6 @@ vespa_add_library(searchlib_attribute OBJECT string_matcher.cpp string_search_context.cpp string_search_helper.cpp + valuemodifier.cpp DEPENDS ) diff --git a/searchlib/src/vespa/searchlib/attribute/attributemanager.cpp b/searchlib/src/vespa/searchlib/attribute/attributemanager.cpp index d218f11d198..38416b009eb 100644 --- a/searchlib/src/vespa/searchlib/attribute/attributemanager.cpp +++ b/searchlib/src/vespa/searchlib/attribute/attributemanager.cpp @@ -206,7 +206,7 @@ AttributeManager::createBaseFileName(const string & name) const dir += "/"; dir += getSnapshot().dirName; } - return AttributeVector::BaseName(dir, name); + return attribute::BaseName(dir, name); } bool diff --git a/searchlib/src/vespa/searchlib/attribute/attributevector.cpp b/searchlib/src/vespa/searchlib/attribute/attributevector.cpp index 5db3411ba73..c0df44d26e9 100644 --- a/searchlib/src/vespa/searchlib/attribute/attributevector.cpp +++ b/searchlib/src/vespa/searchlib/attribute/attributevector.cpp @@ -1,15 +1,17 @@ // Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +#include "attributevector.h" #include "address_space_components.h" #include "attribute_read_guard.h" #include "attributefilesavetarget.h" #include "attributesaver.h" -#include "attributevector.h" #include "attributevector.hpp" #include "floatbase.h" #include "interlock.h" #include "ipostinglistattributebase.h" #include "stringbase.h" +#include "enummodifier.h" +#include "valuemodifier.h" #include <vespa/document/update/assignvalueupdate.h> #include <vespa/document/update/mapvalueupdate.h> #include <vespa/fastlib/io/bufferedfile.h> @@ -19,7 +21,7 @@ #include <vespa/searchlib/index/dummyfileheadercontext.h> #include <vespa/searchlib/query/query_term_decoder.h> #include <vespa/searchlib/util/file_settings.h> -#include <vespa/searchlib/util/logutil.h> +#include <vespa/vespalib/util/jsonwriter.h> #include <vespa/vespalib/util/exceptions.h> #include <vespa/vespalib/util/mmap_file_allocator_factory.h> #include <vespa/vespalib/util/size_literals.h> @@ -32,13 +34,12 @@ using vespalib::getLastErrorString; using document::ValueUpdate; using document::AssignValueUpdate; -using vespalib::make_string; -using vespalib::Array; using vespalib::IllegalStateException; using search::attribute::SearchContextParams; using search::common::FileHeaderContext; using search::index::DummyFileHeaderContext; using search::queryeval::SearchIterator; +using namespace vespalib::make_string_short; namespace { @@ -51,59 +52,6 @@ const vespalib::string docIdLimitTag = "docIdLimit"; namespace search { -AttributeVector::BaseName::BaseName(vespalib::stringref base, vespalib::stringref name) - : string(base), - _name(name) -{ - if (!empty()) { - push_back('/'); - } - append(name); -} - -AttributeVector::BaseName::~BaseName() = default; - - -AttributeVector::BaseName::string -AttributeVector::BaseName::createAttributeName(vespalib::stringref s) -{ - size_t p(s.rfind('/')); - if (p == string::npos) { - return s; - } else { - return s.substr(p+1); - } -} - - -AttributeVector::BaseName::string -AttributeVector::BaseName::getDirName() const -{ - size_t p = rfind('/'); - if (p == string::npos) { - return ""; - } else { - return substr(0, p); - } -} - - -AttributeVector::ValueModifier::ValueModifier(AttributeVector &attr) - : _attr(&attr) -{ } - - -AttributeVector::ValueModifier::ValueModifier(const ValueModifier &rhs) - : _attr(rhs.stealAttr()) -{ } - - -AttributeVector::ValueModifier::~ValueModifier() { - if (_attr) { - _attr->incGeneration(); - } -} - namespace { bool @@ -226,7 +174,6 @@ AttributeVector::addDocs(DocId &startDoc, DocId &lastDoc, uint32_t numDocs) return true; } - bool AttributeVector::addDocs(uint32_t numDocs) { @@ -234,7 +181,6 @@ AttributeVector::addDocs(uint32_t numDocs) return addDocs(doc, doc, numDocs); } - void AttributeVector::incGeneration() { @@ -245,7 +191,6 @@ AttributeVector::incGeneration() removeAllOldGenerations(); } - void AttributeVector::updateStatistics(uint64_t numValues, uint64_t numUniqueValue, uint64_t allocated, uint64_t used, uint64_t dead, uint64_t onHold) @@ -360,21 +305,21 @@ void AttributeVector::onSave(IAttributeSaveTarget &) bool AttributeVector::hasLoadData() const { FastOS_StatInfo statInfo; - if (!FastOS_File::Stat(make_string("%s.dat", getBaseFileName().c_str()).c_str(), &statInfo)) { + if (!FastOS_File::Stat(fmt("%s.dat", getBaseFileName().c_str()).c_str(), &statInfo)) { return false; } if (hasMultiValue() && - !FastOS_File::Stat(make_string("%s.idx", getBaseFileName().c_str()).c_str(), &statInfo)) + !FastOS_File::Stat(fmt("%s.idx", getBaseFileName().c_str()).c_str(), &statInfo)) { return false; } if (hasWeightedSetType() && - !FastOS_File::Stat(make_string("%s.weight", getBaseFileName().c_str()).c_str(), &statInfo)) + !FastOS_File::Stat(fmt("%s.weight", getBaseFileName().c_str()).c_str(), &statInfo)) { return false; } if (isEnumeratedSaveFormat() && - !FastOS_File::Stat(make_string("%s.udat", getBaseFileName().c_str()).c_str(), &statInfo)) + !FastOS_File::Stat(fmt("%s.udat", getBaseFileName().c_str()).c_str(), &statInfo)) { return false; } @@ -385,12 +330,12 @@ AttributeVector::hasLoadData() const { bool AttributeVector::isEnumeratedSaveFormat() const { - vespalib::string datName(vespalib::make_string("%s.dat", getBaseFileName().c_str())); + vespalib::string datName(fmt("%s.dat", getBaseFileName().c_str())); Fast_BufferedFile datFile; vespalib::FileHeader datHeader(FileSettings::DIRECTIO_ALIGNMENT); if ( ! datFile.OpenReadOnly(datName.c_str()) ) { LOG(error, "could not open %s: %s", datFile.GetFileName(), getLastErrorString().c_str()); - throw IllegalStateException(make_string("Failed opening attribute data file '%s' for reading", + throw IllegalStateException(fmt("Failed opening attribute data file '%s' for reading", datFile.GetFileName())); } datHeader.readFile(datFile); @@ -589,11 +534,16 @@ AttributeVector::clearDocs(DocId lidLow, DocId lidLimit, bool in_shrink_lid_spac } } -AttributeVector::EnumModifier +attribute::EnumModifier AttributeVector::getEnumModifier() { attribute::InterlockGuard interlockGuard(*_interlock); - return EnumModifier(_enumLock, interlockGuard); + return attribute::EnumModifier(_enumLock, interlockGuard); +} + +attribute::ValueModifier +AttributeVector::getValueModifier() { + return ValueModifier(*this); } @@ -759,7 +709,7 @@ AttributeVector::logEnumStoreEvent(const char *reason, const char *stage) jstr.beginObject(); jstr.appendKey("path").appendString(getBaseFileName()); jstr.endObject(); - vespalib::string eventName(make_string("%s.attribute.enumstore.%s", reason, stage)); + vespalib::string eventName(fmt("%s.attribute.enumstore.%s", reason, stage)); EV_STATE(eventName.c_str(), jstr.toString().data()); } diff --git a/searchlib/src/vespa/searchlib/attribute/attributevector.h b/searchlib/src/vespa/searchlib/attribute/attributevector.h index 2d0a03a0d90..f245a216aeb 100644 --- a/searchlib/src/vespa/searchlib/attribute/attributevector.h +++ b/searchlib/src/vespa/searchlib/attribute/attributevector.h @@ -5,6 +5,7 @@ #include "address_space_usage.h" #include "changevector.h" #include "readable_attribute_vector.h" +#include "basename.h" #include <vespa/searchcommon/attribute/i_search_context.h> #include <vespa/searchcommon/attribute/iattributevector.h> #include <vespa/searchcommon/attribute/search_context_params.h> @@ -61,6 +62,8 @@ namespace search { class SearchContext; class MultiValueMappingBase; class Config; + class ValueModifier; + class EnumModifier; } namespace fileutil { @@ -97,31 +100,10 @@ protected: using QueryTermSimpleUP = std::unique_ptr<QueryTermSimple>; using QueryPacketT = vespalib::stringref; using stringref = vespalib::stringref; + using ValueModifier = attribute::ValueModifier; + using EnumModifier = attribute::EnumModifier; public: - typedef std::shared_ptr<AttributeVector> SP; - class BaseName : public vespalib::string - { - public: - typedef vespalib::string string; - BaseName(vespalib::stringref s) - : string(s), - _name(createAttributeName(s)) - { } - BaseName & operator = (vespalib::stringref s) { - BaseName n(s); - std::swap(*this, n); - return *this; - } - - BaseName(vespalib::stringref base, vespalib::stringref name); - ~BaseName(); - - const string & getAttributeName() const { return _name; } - string getDirName() const; - private: - static string createAttributeName(vespalib::stringref s); - string _name; - }; + using SP = std::shared_ptr<AttributeVector>; using GenerationHandler = vespalib::GenerationHandler; using GenerationHolder = vespalib::GenerationHolder; @@ -157,46 +139,11 @@ protected: void setNumDocs(uint32_t n) { _status.setNumDocs(n); } void incNumDocs() { _status.incNumDocs(); } - class ValueModifier - { - public: - ValueModifier(AttributeVector &attr); - ValueModifier(const ValueModifier &rhs); - ~ValueModifier(); - private: - AttributeVector * stealAttr() const { - AttributeVector * ret(_attr); - _attr = nullptr; - return ret; - } - - mutable AttributeVector * _attr; - }; - public: - class EnumModifier - { - std::unique_lock<std::shared_mutex> _enumLock; - public: - EnumModifier(std::shared_mutex &lock, attribute::InterlockGuard &interlockGuard) - : _enumLock(lock) - { - (void) interlockGuard; - } - EnumModifier(EnumModifier &&rhs) - : _enumLock(std::move(rhs._enumLock)) - { } - EnumModifier &operator=(EnumModifier &&rhs) - { - _enumLock = std::move(rhs._enumLock); - return *this; - } - virtual ~EnumModifier() { } - }; EnumModifier getEnumModifier(); protected: - ValueModifier getValueModifier() { return ValueModifier(*this); } + ValueModifier getValueModifier(); void updateCommittedDocIdLimit() { if (_uncommittedDocIdLimit != 0) { @@ -341,7 +288,7 @@ public: const Config &getConfig() const noexcept { return *_config; } void update_config(const Config& cfg); - const BaseName & getBaseFileName() const { return _baseFileName; } + const attribute::BaseName & getBaseFileName() const { return _baseFileName; } void setBaseFileName(vespalib::stringref name) { _baseFileName = name; } bool isUpdateableInMemoryOnly() const { return _isUpdateableInMemoryOnly; } @@ -470,7 +417,7 @@ private: virtual bool onLoad(vespalib::Executor * executor); - BaseName _baseFileName; + attribute::BaseName _baseFileName; std::unique_ptr<Config> _config; std::shared_ptr<attribute::Interlock> _interlock; mutable std::shared_mutex _enumLock; diff --git a/searchlib/src/vespa/searchlib/attribute/basename.cpp b/searchlib/src/vespa/searchlib/attribute/basename.cpp new file mode 100644 index 00000000000..34a98c19630 --- /dev/null +++ b/searchlib/src/vespa/searchlib/attribute/basename.cpp @@ -0,0 +1,52 @@ +// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. + +#include "basename.h" + +namespace search::attribute { + +BaseName::BaseName(vespalib::stringref base, vespalib::stringref name) + : string(base), + _name(name) +{ + if (!empty()) { + push_back('/'); + } + append(name); +} + +BaseName::BaseName(vespalib::stringref s) + : string(s), + _name(createAttributeName(s)) +{ } +BaseName & +BaseName::operator = (vespalib::stringref s) { + BaseName n(s); + std::swap(*this, n); + return *this; + } + +BaseName::~BaseName() = default; + +vespalib::string +BaseName::createAttributeName(vespalib::stringref s) +{ + size_t p(s.rfind('/')); + if (p == string::npos) { + return s; + } else { + return s.substr(p+1); + } +} + +vespalib::string +BaseName::getDirName() const +{ + size_t p = rfind('/'); + if (p == string::npos) { + return ""; + } else { + return substr(0, p); + } +} + +} diff --git a/searchlib/src/vespa/searchlib/attribute/basename.h b/searchlib/src/vespa/searchlib/attribute/basename.h new file mode 100644 index 00000000000..23c8d28b2d8 --- /dev/null +++ b/searchlib/src/vespa/searchlib/attribute/basename.h @@ -0,0 +1,25 @@ +// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. + +#pragma once + +#include <vespa/vespalib/stllike/string.h> + +namespace search::attribute { + +class BaseName : public vespalib::string +{ +public: + using string = vespalib::string; + BaseName(vespalib::stringref s); + BaseName(vespalib::stringref base, vespalib::stringref name); + BaseName & operator = (vespalib::stringref s); + ~BaseName(); + + const string & getAttributeName() const { return _name; } + string getDirName() const; +private: + static string createAttributeName(vespalib::stringref s); + string _name; +}; + +} diff --git a/searchlib/src/vespa/searchlib/attribute/enummodifier.cpp b/searchlib/src/vespa/searchlib/attribute/enummodifier.cpp new file mode 100644 index 00000000000..72fd624d18a --- /dev/null +++ b/searchlib/src/vespa/searchlib/attribute/enummodifier.cpp @@ -0,0 +1,15 @@ +// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. + +#include "enummodifier.h" + +namespace search::attribute { + +EnumModifier::EnumModifier(std::shared_mutex &lock, attribute::InterlockGuard &interlockGuard) + : _enumLock(lock) +{ + (void) interlockGuard; +} + +EnumModifier::~EnumModifier() = default; + +} diff --git a/searchlib/src/vespa/searchlib/attribute/enummodifier.h b/searchlib/src/vespa/searchlib/attribute/enummodifier.h new file mode 100644 index 00000000000..c147ac5cd75 --- /dev/null +++ b/searchlib/src/vespa/searchlib/attribute/enummodifier.h @@ -0,0 +1,20 @@ +// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. + +#pragma once + +#include <shared_mutex> +#include <mutex> + +namespace search::attribute { + +class InterlockGuard; + +class EnumModifier +{ + std::unique_lock<std::shared_mutex> _enumLock; +public: + EnumModifier(std::shared_mutex &lock, InterlockGuard &interlockGuard); + ~EnumModifier(); +}; + +} diff --git a/searchlib/src/vespa/searchlib/attribute/imported_search_context.h b/searchlib/src/vespa/searchlib/attribute/imported_search_context.h index 0b36e5657f8..15e0c3228bb 100644 --- a/searchlib/src/vespa/searchlib/attribute/imported_search_context.h +++ b/searchlib/src/vespa/searchlib/attribute/imported_search_context.h @@ -2,8 +2,8 @@ #pragma once -#include "attributevector.h" #include "bitvector_search_cache.h" +#include <vespa/searchcommon/attribute/search_context_params.h> #include <vespa/searchcommon/attribute/i_search_context.h> #include <vespa/searchlib/attribute/posting_list_merger.h> #include <vespa/searchlib/common/i_document_meta_store_context.h> @@ -11,9 +11,10 @@ #include <vespa/vespalib/util/arrayref.h> namespace search::fef { class TermFieldMatchData; } - +namespace search { class QueryTermSimple; } namespace search::attribute { +class IAttributeVector; class ReferenceAttribute; class ImportedAttributeVector; class SearchContextParams; @@ -65,7 +66,7 @@ public: const QueryTermUCS4 * queryTerm() const override; const vespalib::string& attributeName() const override; - using DocId = IAttributeVector::DocId; + using DocId = uint32_t; int32_t find(DocId docId, int32_t elemId, int32_t& weight) const { return _target_search_context->find(getTargetLid(docId), elemId, weight); diff --git a/searchlib/src/vespa/searchlib/attribute/load_utils.h b/searchlib/src/vespa/searchlib/attribute/load_utils.h index 8801b0fe5a4..98b32031d1f 100644 --- a/searchlib/src/vespa/searchlib/attribute/load_utils.h +++ b/searchlib/src/vespa/searchlib/attribute/load_utils.h @@ -3,17 +3,18 @@ #pragma once #include "atomic_utils.h" -#include "attributevector.h" #include "readerbase.h" #include <vespa/vespalib/util/arrayref.h> #include <vespa/searchcommon/attribute/multi_value_traits.h> namespace vespalib::datastore { + class AtomicEntryRef; + class EntryRef; +} -class AtomicEntryRef; -class EntryRef; +namespace vespalib { class GenerationHolder; } -} +namespace search { class AttributeVector; } namespace search::attribute { diff --git a/searchlib/src/vespa/searchlib/attribute/load_utils.hpp b/searchlib/src/vespa/searchlib/attribute/load_utils.hpp index 47839f4af98..62d645326ce 100644 --- a/searchlib/src/vespa/searchlib/attribute/load_utils.hpp +++ b/searchlib/src/vespa/searchlib/attribute/load_utils.hpp @@ -3,10 +3,10 @@ #pragma once #include "load_utils.h" +#include "attributevector.h" #include <vespa/searchcommon/attribute/multivalue.h> -namespace search { -namespace attribute { +namespace search::attribute { template <class MvMapping, class Saver> uint32_t @@ -86,5 +86,4 @@ loadFromEnumeratedSingleValue(Vector &vector, } } -} // namespace search::attribute -} // namespace search +} diff --git a/searchlib/src/vespa/searchlib/attribute/multienumattribute.cpp b/searchlib/src/vespa/searchlib/attribute/multienumattribute.cpp index c3eefaaaf93..80ba87dde0e 100644 --- a/searchlib/src/vespa/searchlib/attribute/multienumattribute.cpp +++ b/searchlib/src/vespa/searchlib/attribute/multienumattribute.cpp @@ -2,6 +2,7 @@ #include "multienumattribute.h" #include "multienumattribute.hpp" +#include "enummodifier.h" #include <stdexcept> namespace search::multienumattribute { @@ -18,7 +19,7 @@ remap_enum_store_refs(const EnumIndexRemapper& remapper, AttributeVector& v, att // update multi_value_mapping with new EnumIndex values after enum store has been compacted. v.logEnumStoreEvent("compactfixup", "drain"); { - AttributeVector::EnumModifier enum_guard(v.getEnumModifier()); + attribute::EnumModifier enum_guard(v.getEnumModifier()); auto& filter = remapper.get_entry_ref_filter(); v.logEnumStoreEvent("compactfixup", "start"); for (uint32_t doc = 0; doc < v.getNumDocs(); ++doc) { diff --git a/searchlib/src/vespa/searchlib/attribute/multienumattribute.hpp b/searchlib/src/vespa/searchlib/attribute/multienumattribute.hpp index c1cb6b1f75b..ec948882312 100644 --- a/searchlib/src/vespa/searchlib/attribute/multienumattribute.hpp +++ b/searchlib/src/vespa/searchlib/attribute/multienumattribute.hpp @@ -8,6 +8,7 @@ #include "load_utils.h" #include "enum_store_loaders.h" #include "ipostinglistattributebase.h" +#include "valuemodifier.h" #include <vespa/vespalib/stllike/hashtable.hpp> #include <vespa/vespalib/datastore/unique_store_remapper.h> diff --git a/searchlib/src/vespa/searchlib/attribute/multinumericattribute.hpp b/searchlib/src/vespa/searchlib/attribute/multinumericattribute.hpp index 0946994f8ec..8cabd8483bf 100644 --- a/searchlib/src/vespa/searchlib/attribute/multinumericattribute.hpp +++ b/searchlib/src/vespa/searchlib/attribute/multinumericattribute.hpp @@ -8,6 +8,7 @@ #include "multi_numeric_search_context.h" #include "load_utils.h" #include "primitivereader.h" +#include "valuemodifier.h" #include <vespa/searchlib/query/query_term_simple.h> #include <vespa/searchlib/util/fileutil.h> diff --git a/searchlib/src/vespa/searchlib/attribute/singleboolattribute.cpp b/searchlib/src/vespa/searchlib/attribute/singleboolattribute.cpp index bb45e5dbbf3..7574508517d 100644 --- a/searchlib/src/vespa/searchlib/attribute/singleboolattribute.cpp +++ b/searchlib/src/vespa/searchlib/attribute/singleboolattribute.cpp @@ -6,6 +6,7 @@ #include "ipostinglistsearchcontext.h" #include "primitivereader.h" #include "search_context.h" +#include "valuemodifier.h" #include <vespa/searchlib/common/bitvectoriterator.h> #include <vespa/searchlib/query/query_term_simple.h> #include <vespa/searchlib/queryeval/emptysearch.h> diff --git a/searchlib/src/vespa/searchlib/attribute/singleenumattribute.cpp b/searchlib/src/vespa/searchlib/attribute/singleenumattribute.cpp index aada952a7c9..a0a93946bb0 100644 --- a/searchlib/src/vespa/searchlib/attribute/singleenumattribute.cpp +++ b/searchlib/src/vespa/searchlib/attribute/singleenumattribute.cpp @@ -5,6 +5,8 @@ #include "stringbase.h" #include "integerbase.h" #include "floatbase.h" +#include "enumattribute.h" +#include "enummodifier.h" #include <vespa/log/log.h> LOG_SETUP(".searchlib.attribute.single_enum_attribute"); @@ -19,11 +21,7 @@ SingleValueEnumAttributeBase(const Config & c, GenerationHolder &genHolder, cons { } - -SingleValueEnumAttributeBase::~SingleValueEnumAttributeBase() -{ -} - +SingleValueEnumAttributeBase::~SingleValueEnumAttributeBase() = default; AttributeVector::DocId SingleValueEnumAttributeBase::addDoc(bool &incGeneration) @@ -33,7 +31,6 @@ SingleValueEnumAttributeBase::addDoc(bool &incGeneration) return _enumIndices.size() - 1; } - SingleValueEnumAttributeBase::EnumIndexCopyVector SingleValueEnumAttributeBase::getIndicesCopy(uint32_t size) const { @@ -65,7 +62,7 @@ SingleValueEnumAttributeBase::remap_enum_store_refs(const EnumIndexRemapper& rem } v.logEnumStoreEvent("compactfixup", "drain"); { - AttributeVector::EnumModifier enum_guard(v.getEnumModifier()); + attribute::EnumModifier enum_guard(v.getEnumModifier()); v.logEnumStoreEvent("compactfixup", "start"); _enumIndices.replaceVector(std::move(new_indexes)); } diff --git a/searchlib/src/vespa/searchlib/attribute/singleenumattribute.hpp b/searchlib/src/vespa/searchlib/attribute/singleenumattribute.hpp index 9f11b444c2c..c4abcfbc25a 100644 --- a/searchlib/src/vespa/searchlib/attribute/singleenumattribute.hpp +++ b/searchlib/src/vespa/searchlib/attribute/singleenumattribute.hpp @@ -8,6 +8,7 @@ #include "singleenumattributesaver.h" #include "load_utils.h" #include "enum_store_loaders.h" +#include "valuemodifier.h" #include <vespa/vespalib/datastore/unique_store_remapper.h> namespace search { diff --git a/searchlib/src/vespa/searchlib/attribute/singlenumericattribute.hpp b/searchlib/src/vespa/searchlib/attribute/singlenumericattribute.hpp index 7a72572745a..b9c1c3686de 100644 --- a/searchlib/src/vespa/searchlib/attribute/singlenumericattribute.hpp +++ b/searchlib/src/vespa/searchlib/attribute/singlenumericattribute.hpp @@ -9,6 +9,7 @@ #include "singlenumericattribute.h" #include "singlenumericattributesaver.h" #include "single_numeric_search_context.h" +#include "valuemodifier.h" #include <vespa/searchlib/query/query_term_simple.h> #include <vespa/searchcommon/attribute/config.h> diff --git a/searchlib/src/vespa/searchlib/attribute/singlesmallnumericattribute.cpp b/searchlib/src/vespa/searchlib/attribute/singlesmallnumericattribute.cpp index a98b32d705a..b69ed017b52 100644 --- a/searchlib/src/vespa/searchlib/attribute/singlesmallnumericattribute.cpp +++ b/searchlib/src/vespa/searchlib/attribute/singlesmallnumericattribute.cpp @@ -5,6 +5,7 @@ #include "iattributesavetarget.h" #include "primitivereader.h" #include "single_small_numeric_search_context.h" +#include "valuemodifier.h" #include <vespa/searchlib/query/query_term_simple.h> #include <vespa/searchlib/util/file_settings.h> #include <vespa/searchcommon/attribute/config.h> diff --git a/searchlib/src/vespa/searchlib/attribute/valuemodifier.cpp b/searchlib/src/vespa/searchlib/attribute/valuemodifier.cpp new file mode 100644 index 00000000000..56bffa2a551 --- /dev/null +++ b/searchlib/src/vespa/searchlib/attribute/valuemodifier.cpp @@ -0,0 +1,18 @@ +// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. + +#include "valuemodifier.h" +#include "attributevector.h" + +namespace search::attribute { + +ValueModifier::ValueModifier(AttributeVector &attr) + : _attr(&attr) +{ } + +ValueModifier::~ValueModifier() { + if (_attr) { + _attr->incGeneration(); + } +} + +} diff --git a/searchlib/src/vespa/searchlib/attribute/valuemodifier.h b/searchlib/src/vespa/searchlib/attribute/valuemodifier.h new file mode 100644 index 00000000000..47416eedc51 --- /dev/null +++ b/searchlib/src/vespa/searchlib/attribute/valuemodifier.h @@ -0,0 +1,22 @@ +// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. + +#pragma once + +#include "interlock.h" + +namespace search { class AttributeVector; } + +namespace search::attribute { + +class ValueModifier +{ +public: + ValueModifier(AttributeVector &attr); + ValueModifier(const ValueModifier &) = delete; + ValueModifier & operator = (const ValueModifier &) = delete; + ~ValueModifier(); +private: + AttributeVector * _attr; +}; + +} diff --git a/searchlib/src/vespa/searchlib/util/logutil.cpp b/searchlib/src/vespa/searchlib/util/logutil.cpp index 0f8e28adeb0..7f10c1598df 100644 --- a/searchlib/src/vespa/searchlib/util/logutil.cpp +++ b/searchlib/src/vespa/searchlib/util/logutil.cpp @@ -6,8 +6,7 @@ using vespalib::JSONStringer; -namespace search { -namespace util { +namespace search::util { vespalib::string LogUtil::extractLastElements(const vespalib::string & path, size_t numElems) @@ -47,5 +46,4 @@ LogUtil::logDir(JSONStringer & jstr, const vespalib::string & path, size_t numEl jstr.endObject(); } -} // namespace util -} // namespace search +} diff --git a/searchlib/src/vespa/searchlib/util/logutil.h b/searchlib/src/vespa/searchlib/util/logutil.h index e30fd15a33a..6afb654a960 100644 --- a/searchlib/src/vespa/searchlib/util/logutil.h +++ b/searchlib/src/vespa/searchlib/util/logutil.h @@ -3,8 +3,7 @@ #include <vespa/vespalib/util/jsonwriter.h> -namespace search { -namespace util { +namespace search::util { class LogUtil { public: @@ -24,6 +23,4 @@ public: static void logDir(vespalib::JSONStringer & jstr, const vespalib::string & path, size_t numElems); }; -} // namespace util -} // namespace search - +} |