summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/framework/DynamicExtension.h41
-rw-r--r--include/framework/MutableBuffer.h2
-rw-r--r--tests/memisam_tests.cpp2
-rw-r--r--tests/mutable_buffer_tests.cpp10
-rw-r--r--tests/pgm_tests.cpp2
-rw-r--r--tests/testing.h10
-rw-r--r--tests/triespline_tests.cpp2
-rw-r--r--tests/wirs_tests.cpp2
-rw-r--r--tests/wss_tests.cpp2
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});