summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTor Brede Vekterli <vekterli@verizonmedia.com>2020-08-31 15:36:29 +0000
committerTor Brede Vekterli <vekterli@verizonmedia.com>2020-08-31 15:36:29 +0000
commitf3688d43d016e6725cd4a9b3763733d3eb1dcfea (patch)
tree64e0ea70ca29e2a2c2c7cc78b9a670453803f8b5
parentd704dc37471f26eb9838766f730983001a4703ac (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.
-rw-r--r--storage/src/vespa/storage/bucketdb/btree_bucket_database.cpp3
-rw-r--r--storage/src/vespa/storage/bucketdb/btree_lockable_map.hpp3
-rw-r--r--storage/src/vespa/storage/bucketdb/generic_btree_bucket_database.h4
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;