summaryrefslogtreecommitdiffstats
path: root/searchlib
diff options
context:
space:
mode:
authorGeir Storli <geirst@verizonmedia.com>2019-09-10 12:08:58 +0000
committerGeir Storli <geirst@verizonmedia.com>2019-09-10 12:08:58 +0000
commit5608083ccf31ac994fe0ba090b9325ffcaab74b6 (patch)
tree173304f87ce22ea2dfe7c120c143c8e22c1323af /searchlib
parentcad5274df5ad5e2cc5f0d5f179c2d2d86d10cf50 (diff)
Stop exposing low-level data store out of enum store.
Diffstat (limited to 'searchlib')
-rw-r--r--searchlib/src/tests/attribute/enumeratedsave/enumeratedsave_test.cpp2
-rw-r--r--searchlib/src/vespa/searchlib/attribute/enumattributesaver.cpp4
-rw-r--r--searchlib/src/vespa/searchlib/attribute/enumattributesaver.h8
-rw-r--r--searchlib/src/vespa/searchlib/attribute/enumstore.h11
-rw-r--r--searchlib/src/vespa/searchlib/attribute/enumstore.hpp7
-rw-r--r--searchlib/src/vespa/searchlib/attribute/i_enum_store.h8
-rw-r--r--searchlib/src/vespa/searchlib/attribute/multienumattributesaver.cpp6
-rw-r--r--searchlib/src/vespa/searchlib/attribute/multienumattributesaver.h6
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;