diff options
author | Tor Brede Vekterli <vekterli@verizonmedia.com> | 2020-08-31 15:36:29 +0000 |
---|---|---|
committer | Tor Brede Vekterli <vekterli@verizonmedia.com> | 2020-08-31 15:36:29 +0000 |
commit | f3688d43d016e6725cd4a9b3763733d3eb1dcfea (patch) | |
tree | 64e0ea70ca29e2a2c2c7cc78b9a670453803f8b5 | |
parent | d704dc37471f26eb9838766f730983001a4703ac (diff) |
Explicitly enable freelists for content node B-tree DB data store
Freelists were unintentionally not enabled due to the difference
in how `ArrayStore` and `DataStore` freelist setup is done. The
existing distributor `ArrayStore` traits set this up implicitly via
the constructor config, while the content node `DataStore` needs to
have freelists explicitly enabled.
3 files changed, 9 insertions, 1 deletions
diff --git a/storage/src/vespa/storage/bucketdb/btree_bucket_database.cpp b/storage/src/vespa/storage/bucketdb/btree_bucket_database.cpp index 7bf78c8ba7e..602cdbdc5d5 100644 --- a/storage/src/vespa/storage/bucketdb/btree_bucket_database.cpp +++ b/storage/src/vespa/storage/bucketdb/btree_bucket_database.cpp @@ -69,6 +69,9 @@ struct BTreeBucketDatabase::ReplicaValueTraits { using ConstValueRef = ConstEntryRef; using DataStoreType = vespalib::datastore::ArrayStore<BucketCopy>; + static void init_data_store(DataStoreType&) { + // No-op; initialized via config provided to ArrayStore constructor. + } static ValueType make_invalid_value() { return Entry::createInvalid(); } diff --git a/storage/src/vespa/storage/bucketdb/btree_lockable_map.hpp b/storage/src/vespa/storage/bucketdb/btree_lockable_map.hpp index e8c91f04a9e..69f43e7c3ae 100644 --- a/storage/src/vespa/storage/bucketdb/btree_lockable_map.hpp +++ b/storage/src/vespa/storage/bucketdb/btree_lockable_map.hpp @@ -34,6 +34,9 @@ struct BTreeLockableMap<T>::ValueTraits { using ConstValueRef = const T&; using DataStoreType = vespalib::datastore::DataStore<ValueType>; + static void init_data_store(DataStoreType& store) { + store.enableFreeLists(); + } static EntryRef entry_ref_from_value(uint64_t value) { return EntryRef(value & 0xffffffffULL); } diff --git a/storage/src/vespa/storage/bucketdb/generic_btree_bucket_database.h b/storage/src/vespa/storage/bucketdb/generic_btree_bucket_database.h index 977aeb8f925..5044193ed79 100644 --- a/storage/src/vespa/storage/bucketdb/generic_btree_bucket_database.h +++ b/storage/src/vespa/storage/bucketdb/generic_btree_bucket_database.h @@ -64,7 +64,9 @@ public: template <typename... DataStoreArgs> explicit GenericBTreeBucketDatabase(DataStoreArgs&&... data_store_args) : _store(std::forward<DataStoreArgs>(data_store_args)...) - {} + { + DataStoreTraitsT::init_data_store(_store); + } GenericBTreeBucketDatabase(const GenericBTreeBucketDatabase&) = delete; GenericBTreeBucketDatabase& operator=(const GenericBTreeBucketDatabase&) = delete; |