diff options
author | Geir Storli <geirst@verizonmedia.com> | 2019-09-10 12:08:58 +0000 |
---|---|---|
committer | Geir Storli <geirst@verizonmedia.com> | 2019-09-10 12:08:58 +0000 |
commit | 5608083ccf31ac994fe0ba090b9325ffcaab74b6 (patch) | |
tree | 173304f87ce22ea2dfe7c120c143c8e22c1323af /searchlib | |
parent | cad5274df5ad5e2cc5f0d5f179c2d2d86d10cf50 (diff) |
Stop exposing low-level data store out of enum store.
Diffstat (limited to 'searchlib')
8 files changed, 34 insertions, 18 deletions
diff --git a/searchlib/src/tests/attribute/enumeratedsave/enumeratedsave_test.cpp b/searchlib/src/tests/attribute/enumeratedsave/enumeratedsave_test.cpp index e8e55acf117..09cd186811d 100644 --- a/searchlib/src/tests/attribute/enumeratedsave/enumeratedsave_test.cpp +++ b/searchlib/src/tests/attribute/enumeratedsave/enumeratedsave_test.cpp @@ -513,7 +513,7 @@ EnumeratedSaveTest::saveMemDuringCompaction(AttributeVector &v) if (enum_store_base != nullptr) { auto saver = v.onInitSave(v.getBaseFileName()); // Simulate compaction - enum_store_base->get_data_store_base().inc_compaction_count(); + enum_store_base->inc_compaction_count(); auto save_result = saver->save(*res); EXPECT_EQUAL(!v.hasMultiValue(), save_result); } diff --git a/searchlib/src/vespa/searchlib/attribute/enumattributesaver.cpp b/searchlib/src/vespa/searchlib/attribute/enumattributesaver.cpp index 449f89f0386..ae6fa6580c1 100644 --- a/searchlib/src/vespa/searchlib/attribute/enumattributesaver.cpp +++ b/searchlib/src/vespa/searchlib/attribute/enumattributesaver.cpp @@ -11,7 +11,7 @@ namespace search { EnumAttributeSaver:: EnumAttributeSaver(const IEnumStore &enumStore) : _enumStore(enumStore), - _enumerator(_enumStore.getEnumStoreDict(), _enumStore.get_data_store_base()) + _enumerator(enumStore.make_enumerator()) { } @@ -26,7 +26,7 @@ EnumAttributeSaver::writeUdat(IAttributeSaveTarget &saveTarget) std::unique_ptr<BufferWriter> udatWriter(saveTarget.udatWriter().allocBufferWriter()); const auto& enumDict = _enumStore.getEnumStoreDict(); - enumDict.writeAllValues(*udatWriter, _enumerator.get_frozen_root()); + enumDict.writeAllValues(*udatWriter, _enumerator->get_frozen_root()); udatWriter->flush(); } } diff --git a/searchlib/src/vespa/searchlib/attribute/enumattributesaver.h b/searchlib/src/vespa/searchlib/attribute/enumattributesaver.h index 6c52a7a4e2d..f7bb263d4cb 100644 --- a/searchlib/src/vespa/searchlib/attribute/enumattributesaver.h +++ b/searchlib/src/vespa/searchlib/attribute/enumattributesaver.h @@ -17,11 +17,11 @@ class IAttributeSaveTarget; class EnumAttributeSaver { public: - using Enumerator = datastore::UniqueStoreEnumerator<IEnumStore::InternalIndex>; + using Enumerator = IEnumStore::Enumerator; private: const IEnumStore &_enumStore; - Enumerator _enumerator; + std::unique_ptr<Enumerator> _enumerator; public: EnumAttributeSaver(const IEnumStore &enumStore); @@ -29,8 +29,8 @@ public: void writeUdat(IAttributeSaveTarget &saveTarget); const IEnumStore &getEnumStore() const { return _enumStore; } - Enumerator &get_enumerator() { return _enumerator; } - void clear() { _enumerator.clear(); } + Enumerator &get_enumerator() { return *_enumerator; } + void clear() { _enumerator->clear(); } }; } // namespace search diff --git a/searchlib/src/vespa/searchlib/attribute/enumstore.h b/searchlib/src/vespa/searchlib/attribute/enumstore.h index e8be6652403..bb07eaecd5e 100644 --- a/searchlib/src/vespa/searchlib/attribute/enumstore.h +++ b/searchlib/src/vespa/searchlib/attribute/enumstore.h @@ -108,10 +108,6 @@ public: return _dict->getPostingDictionary(); } - // TODO: Add API for getting compaction count instead. - const datastore::DataStoreBase &get_data_store_base() const override { return _store.get_allocator().get_data_store(); } - - bool getValue(Index idx, EntryType& value) const; EntryType getValue(uint32_t idx) const { return getValue(Index(EntryRef(idx))); } EntryType getValue(Index idx) const { return _store.get(idx); } @@ -212,6 +208,13 @@ public: vespalib::MemoryUsage update_stat() override; std::unique_ptr<EnumIndexRemapper> consider_compact(const CompactionStrategy& compaction_strategy) override; std::unique_ptr<EnumIndexRemapper> compact_worst(bool compact_memory, bool compact_address_space) override; + uint64_t get_compaction_count() const override { + return _store.get_data_store().get_compaction_count(); + } + void inc_compaction_count() override { + _store.get_allocator().get_data_store().inc_compaction_count(); + } + std::unique_ptr<Enumerator> make_enumerator() const override; }; std::unique_ptr<datastore::IUniqueStoreDictionary> diff --git a/searchlib/src/vespa/searchlib/attribute/enumstore.hpp b/searchlib/src/vespa/searchlib/attribute/enumstore.hpp index fc8ea284222..0beee6e0821 100644 --- a/searchlib/src/vespa/searchlib/attribute/enumstore.hpp +++ b/searchlib/src/vespa/searchlib/attribute/enumstore.hpp @@ -260,4 +260,11 @@ EnumStoreT<EntryType>::compact_worst(bool compact_memory, bool compact_address_s return _store.compact_worst(compact_memory, compact_address_space); } +template <typename EntryType> +std::unique_ptr<IEnumStore::Enumerator> +EnumStoreT<EntryType>::make_enumerator() const +{ + return std::make_unique<Enumerator>(*_dict, _store.get_data_store()); +} + } diff --git a/searchlib/src/vespa/searchlib/attribute/i_enum_store.h b/searchlib/src/vespa/searchlib/attribute/i_enum_store.h index acaa5556cd9..e55d41f12ab 100644 --- a/searchlib/src/vespa/searchlib/attribute/i_enum_store.h +++ b/searchlib/src/vespa/searchlib/attribute/i_enum_store.h @@ -6,6 +6,7 @@ #include "enum_store_types.h" #include <vespa/searchcommon/attribute/iattributevector.h> #include <vespa/vespalib/datastore/entryref.h> +#include <vespa/vespalib/datastore/unique_store_enumerator.h> #include <vespa/vespalib/stllike/hash_map.h> #include <vespa/vespalib/util/array.h> #include <vespa/vespalib/util/memoryusage.h> @@ -37,6 +38,7 @@ public: using EnumHandle = enumstore::EnumHandle; using EnumVector = enumstore::EnumVector; using EnumIndexRemapper = datastore::UniqueStoreRemapper<InternalIndex>; + using Enumerator = datastore::UniqueStoreEnumerator<IEnumStore::InternalIndex>; struct CompareEnumIndex { using Index = IEnumStore::Index; @@ -59,13 +61,15 @@ public: virtual bool foldedChange(const Index& idx1, const Index& idx2) const = 0; virtual IEnumStoreDictionary& getEnumStoreDict() = 0; virtual const IEnumStoreDictionary& getEnumStoreDict() const = 0; - virtual const datastore::DataStoreBase& get_data_store_base() const = 0; virtual uint32_t getNumUniques() const = 0; virtual vespalib::MemoryUsage getValuesMemoryUsage() const = 0; virtual vespalib::MemoryUsage getDictionaryMemoryUsage() const = 0; virtual vespalib::MemoryUsage update_stat() = 0; virtual std::unique_ptr<EnumIndexRemapper> consider_compact(const CompactionStrategy& compaction_strategy) = 0; virtual std::unique_ptr<EnumIndexRemapper> compact_worst(bool compact_memory, bool compact_address_space) = 0; + virtual uint64_t get_compaction_count() const = 0; + // Should only be used by unit tests. + virtual void inc_compaction_count() = 0; enumstore::EnumeratedLoader make_enumerated_loader() { return enumstore::EnumeratedLoader(*this); @@ -75,6 +79,8 @@ public: return enumstore::EnumeratedPostingsLoader(*this); } + virtual std::unique_ptr<Enumerator> make_enumerator() const = 0; + template <typename TreeT> void fixupRefCounts(const EnumVector& hist, TreeT& tree) { if (hist.empty()) { diff --git a/searchlib/src/vespa/searchlib/attribute/multienumattributesaver.cpp b/searchlib/src/vespa/searchlib/attribute/multienumattributesaver.cpp index 13079b6591c..016ed8bf710 100644 --- a/searchlib/src/vespa/searchlib/attribute/multienumattributesaver.cpp +++ b/searchlib/src/vespa/searchlib/attribute/multienumattributesaver.cpp @@ -84,8 +84,8 @@ MultiValueEnumAttributeSaver(GenerationHandler::Guard &&guard, : Parent(std::move(guard), header, mvMapping), _mvMapping(mvMapping), _enumSaver(enumStore), - _enum_store_data_store_base(enumStore.get_data_store_base()), - _compaction_count(_enum_store_data_store_base.get_compaction_count()) + _enum_store(enumStore), + _compaction_count(enumStore.get_compaction_count()) { } @@ -94,7 +94,7 @@ template <typename MultiValueT> bool MultiValueEnumAttributeSaver<MultiValueT>::compaction_interferred() const { - return _compaction_count != _enum_store_data_store_base.get_compaction_count(); + return _compaction_count != _enum_store.get_compaction_count(); } template <typename MultiValueT> diff --git a/searchlib/src/vespa/searchlib/attribute/multienumattributesaver.h b/searchlib/src/vespa/searchlib/attribute/multienumattributesaver.h index 3f770c2a0bb..766a828c147 100644 --- a/searchlib/src/vespa/searchlib/attribute/multienumattributesaver.h +++ b/searchlib/src/vespa/searchlib/attribute/multienumattributesaver.h @@ -24,9 +24,9 @@ class MultiValueEnumAttributeSaver : public MultiValueAttributeSaver using MultiValueMapping = attribute::MultiValueMapping<MultiValueType>; const MultiValueMapping &_mvMapping; - EnumAttributeSaver _enumSaver; - const datastore::DataStoreBase &_enum_store_data_store_base; - uint64_t _compaction_count; + EnumAttributeSaver _enumSaver; + const IEnumStore &_enum_store; + uint64_t _compaction_count; bool compaction_interferred() const; public: bool onSave(IAttributeSaveTarget &saveTarget) override; |