diff options
| author | Douglas Rumbaugh <dbr4@psu.edu> | 2023-06-07 12:23:38 -0400 |
|---|---|---|
| committer | Douglas Rumbaugh <dbr4@psu.edu> | 2023-06-07 12:23:38 -0400 |
| commit | 730fc4e9bae5a157c83db8061c2c6831a297e959 (patch) | |
| tree | c0186e9f89d726c3596f9a120534490fe06a15f7 | |
| parent | a6c17386c4e76576f578795947c1763e06f06f46 (diff) | |
| download | dynamic-extension-730fc4e9bae5a157c83db8061c2c6831a297e959.tar.gz | |
Interface adjustments
Layout and Delete Policies are now specified via template parameters,
and rejection sampling has been removed as an argument to the mutable
buffer constructor.
| -rw-r--r-- | include/framework/DynamicExtension.h | 41 | ||||
| -rw-r--r-- | include/framework/MutableBuffer.h | 2 | ||||
| -rw-r--r-- | tests/memisam_tests.cpp | 2 | ||||
| -rw-r--r-- | tests/mutable_buffer_tests.cpp | 10 | ||||
| -rw-r--r-- | tests/pgm_tests.cpp | 2 | ||||
| -rw-r--r-- | tests/testing.h | 10 | ||||
| -rw-r--r-- | tests/triespline_tests.cpp | 2 | ||||
| -rw-r--r-- | tests/wirs_tests.cpp | 2 | ||||
| -rw-r--r-- | tests/wss_tests.cpp | 2 |
9 files changed, 25 insertions, 48 deletions
diff --git a/include/framework/DynamicExtension.h b/include/framework/DynamicExtension.h index a345da6..7565085 100644 --- a/include/framework/DynamicExtension.h +++ b/include/framework/DynamicExtension.h @@ -46,21 +46,6 @@ thread_local size_t disklevel_sample_time = 0; thread_local size_t sampling_bailouts = 0; -/* - * LSM Tree configuration global variables - */ - -// True for buffer rejection sampling -static constexpr bool LSM_REJ_SAMPLE = false; - -// True for leveling, false for tiering -static constexpr bool LSM_LEVELING = false; - -static constexpr bool DELETE_TAGGING = true; - -// TODO: Replace the constexpr bools above -// with template parameters based on these -// enums. enum class LayoutPolicy { LEVELING, TEIRING @@ -73,7 +58,7 @@ enum class DeletePolicy { typedef ssize_t level_index; -template <RecordInterface R, ShardInterface S, QueryInterface Q, typename FQ=void> +template <RecordInterface R, ShardInterface S, QueryInterface Q, LayoutPolicy L=LayoutPolicy::TEIRING, DeletePolicy D=DeletePolicy::TAGGING> class DynamicExtension { //typedef typename S<R> Shard; typedef S Shard; @@ -82,7 +67,7 @@ class DynamicExtension { public: DynamicExtension(size_t buffer_cap, size_t scale_factor, double max_delete_prop) : m_scale_factor(scale_factor), m_max_delete_prop(max_delete_prop), - m_buffer(new Buffer(buffer_cap, LSM_REJ_SAMPLE, buffer_cap * max_delete_prop)) + m_buffer(new Buffer(buffer_cap, buffer_cap * max_delete_prop)) { } ~DynamicExtension() { @@ -100,7 +85,7 @@ public: int erase(const R &rec) { Buffer *buffer; - if constexpr (DELETE_TAGGING) { + if constexpr (L == LayoutPolicy::LEVELING) { auto buffer = get_buffer(); // Check the levels first. This assumes there aren't @@ -121,14 +106,6 @@ public: } std::vector<R> query(void *parms) { - - // Use the provided top-level query function is one - // is specified. Otherwise, use the default framework - // behavior. - if constexpr (!std::is_same<FQ, void>::value) { - return FQ(parms); - } - auto buffer = get_buffer(); // Get the buffer query state @@ -293,7 +270,7 @@ private: // For delete tagging, we just need to check the delete bit on each // record. - if constexpr (DELETE_TAGGING) { + if constexpr (D == DeletePolicy::TAGGING) { for (auto &rec : records) { if (rec.is_deleted()) { continue; @@ -342,7 +319,7 @@ private: inline level_index grow() { level_index new_idx; - size_t new_shard_cnt = (LSM_LEVELING) ? 1 : m_scale_factor; + size_t new_shard_cnt = (L == LayoutPolicy::LEVELING) ? 1 : m_scale_factor; new_idx = m_levels.size(); if (new_idx > 0) { assert(m_levels[new_idx - 1]->get_shard(0)->get_tombstone_count() == 0); @@ -424,7 +401,7 @@ private: */ inline void merge_levels(level_index base_level, level_index incoming_level) { // merging two memory levels - if (LSM_LEVELING) { + if constexpr (L == LayoutPolicy::LEVELING) { auto tmp = m_levels[base_level]; m_levels[base_level] = InternalLevel<R, Shard, Q>::merge_levels(m_levels[base_level], m_levels[incoming_level]); mark_as_unused(tmp); @@ -433,13 +410,13 @@ private: } mark_as_unused(m_levels[incoming_level]); - m_levels[incoming_level] = new InternalLevel<R, Shard, Q>(incoming_level, (LSM_LEVELING) ? 1 : m_scale_factor); + m_levels[incoming_level] = new InternalLevel<R, Shard, Q>(incoming_level, (L == LayoutPolicy::LEVELING) ? 1 : m_scale_factor); } inline void merge_buffer_into_l0(Buffer *buffer) { assert(m_levels[0]); - if (LSM_LEVELING) { + if constexpr (L == LayoutPolicy::LEVELING) { // FIXME: Kludgey implementation due to interface constraints. auto old_level = m_levels[0]; auto temp_level = new InternalLevel<R, Shard, Q>(0, 1); @@ -515,7 +492,7 @@ private: return false; } - if (LSM_LEVELING) { + if (L == LayoutPolicy::LEVELING) { return m_levels[idx]->get_record_cnt() + incoming_rec_cnt <= calc_level_record_capacity(idx); } else { return m_levels[idx]->get_shard_count() < m_scale_factor; diff --git a/include/framework/MutableBuffer.h b/include/framework/MutableBuffer.h index 2beb27f..9eea5c8 100644 --- a/include/framework/MutableBuffer.h +++ b/include/framework/MutableBuffer.h @@ -29,7 +29,7 @@ namespace de { template <RecordInterface R> class MutableBuffer { public: - MutableBuffer(size_t capacity, bool rej_sampling, size_t max_tombstone_cap) + MutableBuffer(size_t capacity, size_t max_tombstone_cap) : m_cap(capacity), m_tombstone_cap(max_tombstone_cap), m_reccnt(0) , m_tombstonecnt(0), m_weight(0), m_max_weight(0) { auto len = capacity * sizeof(Wrapped<R>); diff --git a/tests/memisam_tests.cpp b/tests/memisam_tests.cpp index 713a732..8f4c842 100644 --- a/tests/memisam_tests.cpp +++ b/tests/memisam_tests.cpp @@ -21,7 +21,7 @@ typedef MemISAM<Rec> Shard; START_TEST(t_mbuffer_init) { - auto buffer = new MutableBuffer<Rec>(1024, true, 1024); + auto buffer = new MutableBuffer<Rec>(1024, 1024); for (uint64_t i = 512; i > 0; i--) { uint32_t v = i; buffer->append({i,v, 1}); diff --git a/tests/mutable_buffer_tests.cpp b/tests/mutable_buffer_tests.cpp index bb8e2c2..201fddb 100644 --- a/tests/mutable_buffer_tests.cpp +++ b/tests/mutable_buffer_tests.cpp @@ -25,7 +25,7 @@ using namespace de; START_TEST(t_create) { - auto buffer = new MutableBuffer<Rec>(100, true, 50); + auto buffer = new MutableBuffer<Rec>(100, 50); ck_assert_ptr_nonnull(buffer); ck_assert_int_eq(buffer->get_capacity(), 100); @@ -42,7 +42,7 @@ END_TEST START_TEST(t_insert) { - auto buffer = new MutableBuffer<WRec>(100, true, 50); + auto buffer = new MutableBuffer<WRec>(100, 50); uint64_t key = 0; uint32_t val = 5; @@ -77,7 +77,7 @@ END_TEST START_TEST(t_insert_tombstones) { - auto buffer = new MutableBuffer<Rec>(100, true, 50); + auto buffer = new MutableBuffer<Rec>(100, 50); size_t ts_cnt = 0; @@ -120,7 +120,7 @@ END_TEST START_TEST(t_truncate) { - auto buffer = new MutableBuffer<Rec>(100, true, 100); + auto buffer = new MutableBuffer<Rec>(100, 100); size_t ts_cnt = 0; Rec rec = {0, 5}; @@ -162,7 +162,7 @@ START_TEST(t_get_data) { size_t cnt = 100; - auto buffer = new MutableBuffer<Rec>(cnt, true, cnt/2); + auto buffer = new MutableBuffer<Rec>(cnt, cnt/2); std::vector<uint64_t> keys(cnt); diff --git a/tests/pgm_tests.cpp b/tests/pgm_tests.cpp index 254de03..80116d4 100644 --- a/tests/pgm_tests.cpp +++ b/tests/pgm_tests.cpp @@ -21,7 +21,7 @@ typedef PGM<Rec> Shard; START_TEST(t_mbuffer_init) { - auto buffer = new MutableBuffer<Rec>(1024, true, 1024); + auto buffer = new MutableBuffer<Rec>(1024, 1024); for (uint64_t i = 512; i > 0; i--) { uint32_t v = i; buffer->append({i,v, 1}); diff --git a/tests/testing.h b/tests/testing.h index 4277015..fe6623e 100644 --- a/tests/testing.h +++ b/tests/testing.h @@ -78,7 +78,7 @@ static bool roughly_equal(int n1, int n2, size_t mag, double epsilon) { template <de::RecordInterface R> static de::MutableBuffer<R> *create_test_mbuffer(size_t cnt) { - auto buffer = new de::MutableBuffer<R>(cnt, true, cnt); + auto buffer = new de::MutableBuffer<R>(cnt, cnt); R rec; for (size_t i = 0; i < cnt; i++) { @@ -99,7 +99,7 @@ template <de::RecordInterface R> static de::MutableBuffer<R> *create_sequential_mbuffer(decltype(R::key) start, decltype(R::key) stop) { size_t cnt = stop - start; - auto buffer = new de::MutableBuffer<R>(cnt, true, cnt); + auto buffer = new de::MutableBuffer<R>(cnt, cnt); for (size_t i=start; i<stop; i++) { R rec; @@ -119,7 +119,7 @@ static de::MutableBuffer<R> *create_sequential_mbuffer(decltype(R::key) start, d template <de::RecordInterface R> static de::MutableBuffer<R> *create_test_mbuffer_tombstones(size_t cnt, size_t ts_cnt) { - auto buffer = new de::MutableBuffer<R>(cnt, true, ts_cnt); + auto buffer = new de::MutableBuffer<R>(cnt, ts_cnt); std::vector<std::pair<uint64_t, uint32_t>> tombstones; @@ -150,7 +150,7 @@ static de::MutableBuffer<R> *create_test_mbuffer_tombstones(size_t cnt, size_t t template <de::WeightedRecordInterface R> static de::MutableBuffer<R> *create_weighted_mbuffer(size_t cnt) { - auto buffer = new de::MutableBuffer<R>(cnt, true, cnt); + auto buffer = new de::MutableBuffer<R>(cnt, cnt); // Put in half of the count with weight one. for (uint32_t i=0; i< cnt / 2; i++) { @@ -173,7 +173,7 @@ static de::MutableBuffer<R> *create_weighted_mbuffer(size_t cnt) template <de::RecordInterface R> static de::MutableBuffer<R> *create_double_seq_mbuffer(size_t cnt, bool ts=false) { - auto buffer = new de::MutableBuffer<R>(cnt, true, cnt); + auto buffer = new de::MutableBuffer<R>(cnt, cnt); for (size_t i = 0; i < cnt / 2; i++) { R rec; diff --git a/tests/triespline_tests.cpp b/tests/triespline_tests.cpp index d88d4b1..c3bd707 100644 --- a/tests/triespline_tests.cpp +++ b/tests/triespline_tests.cpp @@ -21,7 +21,7 @@ typedef TrieSpline<Rec> Shard; START_TEST(t_mbuffer_init) { - auto buffer = new MutableBuffer<Rec>(1024, true, 1024); + auto buffer = new MutableBuffer<Rec>(1024, 1024); for (uint64_t i = 512; i > 0; i--) { uint32_t v = i; buffer->append({i,v, 1}); diff --git a/tests/wirs_tests.cpp b/tests/wirs_tests.cpp index 133950d..60537e5 100644 --- a/tests/wirs_tests.cpp +++ b/tests/wirs_tests.cpp @@ -21,7 +21,7 @@ typedef WIRS<WRec> Shard; START_TEST(t_mbuffer_init) { - auto buffer = new MutableBuffer<WRec>(1024, true, 1024); + auto buffer = new MutableBuffer<WRec>(1024, 1024); for (uint64_t i = 512; i > 0; i--) { uint32_t v = i; buffer->append({i,v, 1}); diff --git a/tests/wss_tests.cpp b/tests/wss_tests.cpp index de62006..d138cfe 100644 --- a/tests/wss_tests.cpp +++ b/tests/wss_tests.cpp @@ -21,7 +21,7 @@ typedef WSS<WRec> Shard; START_TEST(t_mbuffer_init) { - auto buffer = new MutableBuffer<WRec>(1024, true, 1024); + auto buffer = new MutableBuffer<WRec>(1024, 1024); for (uint64_t i = 512; i > 0; i--) { uint32_t v = i; buffer->append({i,v, 1}); |