From 47407693b5ee2bdcf2ba93fb7384799a21b31b42 Mon Sep 17 00:00:00 2001 From: Geir Storli Date: Thu, 13 Oct 2022 12:44:49 +0000 Subject: Use the generic CompactionContext in ArrayStore. --- .../datastore/array_store/array_store_test.cpp | 2 +- .../src/vespa/vespalib/datastore/array_store.h | 6 ++- .../src/vespa/vespalib/datastore/array_store.hpp | 43 ++++------------------ 3 files changed, 13 insertions(+), 38 deletions(-) diff --git a/vespalib/src/tests/datastore/array_store/array_store_test.cpp b/vespalib/src/tests/datastore/array_store/array_store_test.cpp index afef530b33e..3179b60a4a1 100644 --- a/vespalib/src/tests/datastore/array_store/array_store_test.cpp +++ b/vespalib/src/tests/datastore/array_store/array_store_test.cpp @@ -208,7 +208,7 @@ TEST_P(NumberStoreTest, control_static_sizes) { EXPECT_EQ(464u, sizeof(store)); EXPECT_EQ(304u, sizeof(NumberStoreTest::ArrayStoreType::DataStoreType)); #else - EXPECT_EQ(496u, sizeof(store)); + EXPECT_EQ(504u, sizeof(store)); EXPECT_EQ(336u, sizeof(NumberStoreTest::ArrayStoreType::DataStoreType)); #endif EXPECT_EQ(112u, sizeof(NumberStoreTest::ArrayStoreType::SmallBufferType)); diff --git a/vespalib/src/vespa/vespalib/datastore/array_store.h b/vespalib/src/vespa/vespalib/datastore/array_store.h index e7662b9eb73..95d632d9603 100644 --- a/vespalib/src/vespa/vespalib/datastore/array_store.h +++ b/vespalib/src/vespa/vespalib/datastore/array_store.h @@ -10,6 +10,7 @@ #include "entryref.h" #include "atomic_entry_ref.h" #include "i_compaction_context.h" +#include "i_compactable.h" #include "large_array_buffer_type.h" #include "small_array_buffer_type.h" #include @@ -28,7 +29,7 @@ namespace vespalib::datastore { * The max value of maxSmallArrayTypeId is (2^bufferBits - 1). */ template , typename TypeMapperT = ArrayStoreTypeMapper > -class ArrayStore +class ArrayStore : public ICompactable { public: using AllocSpec = ArrayStoreConfig::AllocSpec; @@ -66,7 +67,7 @@ private: public: ArrayStore(const ArrayStoreConfig &cfg, std::shared_ptr memory_allocator); ArrayStore(const ArrayStoreConfig &cfg, std::shared_ptr memory_allocator, TypeMapper&& mapper); - ~ArrayStore(); + ~ArrayStore() override; EntryRef add(const ConstArrayRef &array); ConstArrayRef get(EntryRef ref) const { if (!ref.valid()) { @@ -104,6 +105,7 @@ public: } void remove(EntryRef ref); + EntryRef move_on_compact(EntryRef ref) override; ICompactionContext::UP compactWorst(CompactionSpec compaction_spec, const CompactionStrategy& compaction_strategy); vespalib::MemoryUsage getMemoryUsage() const { return _store.getMemoryUsage(); } diff --git a/vespalib/src/vespa/vespalib/datastore/array_store.hpp b/vespalib/src/vespa/vespalib/datastore/array_store.hpp index b31d47fe4fe..95f4a3c4155 100644 --- a/vespalib/src/vespa/vespalib/datastore/array_store.hpp +++ b/vespalib/src/vespa/vespalib/datastore/array_store.hpp @@ -4,13 +4,14 @@ #include "array_store.h" #include "compacting_buffers.h" +#include "compaction_context.h" #include "compaction_spec.h" -#include "entry_ref_filter.h" #include "datastore.hpp" +#include "entry_ref_filter.h" #include "large_array_buffer_type.hpp" #include "small_array_buffer_type.hpp" -#include #include +#include namespace vespalib::datastore { @@ -145,38 +146,11 @@ ArrayStore::remove(EntryRef ref) } } -namespace arraystore { - template -class CompactionContext : public ICompactionContext { -private: - using ArrayStoreType = ArrayStore; - ArrayStoreType &_store; - std::unique_ptr _compacting_buffers; - EntryRefFilter _filter; - -public: - CompactionContext(ArrayStoreType &store, - std::unique_ptr compacting_buffers) - : _store(store), - _compacting_buffers(std::move(compacting_buffers)), - _filter(_compacting_buffers->make_entry_ref_filter()) - { - } - ~CompactionContext() override { - _compacting_buffers->finish(); - } - void compact(vespalib::ArrayRef refs) override { - for (auto &atomic_entry_ref : refs) { - auto ref = atomic_entry_ref.load_relaxed(); - if (ref.valid() && _filter.has(ref)) { - EntryRef newRef = _store.add(_store.get(ref)); - atomic_entry_ref.store_release(newRef); - } - } - } -}; - +EntryRef +ArrayStore::move_on_compact(EntryRef ref) +{ + return add(get(ref)); } template @@ -184,8 +158,7 @@ ICompactionContext::UP ArrayStore::compactWorst(CompactionSpec compaction_spec, const CompactionStrategy &compaction_strategy) { auto compacting_buffers = _store.start_compact_worst_buffers(compaction_spec, compaction_strategy); - return std::make_unique> - (*this, std::move(compacting_buffers)); + return std::make_unique(*this, std::move(compacting_buffers)); } template -- cgit v1.2.3