summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDouglas Rumbaugh <dbr4@psu.edu>2024-01-11 16:31:24 -0500
committerDouglas Rumbaugh <dbr4@psu.edu>2024-01-11 16:31:24 -0500
commit7e503464176adbd0880373325e30a6bfd58616f0 (patch)
tree8c7b999379caa5a3fdcfac3452749a56b5aaf852
parent5a2c378aad3f1a9923db3191ffaa3fb807d392b2 (diff)
downloaddynamic-extension-7e503464176adbd0880373325e30a6bfd58616f0.tar.gz
InternalLevel update and tests
Plus some assorted fixes for move semantics stuff in BufferView that accompanied these changes.
-rw-r--r--CMakeLists.txt64
-rw-r--r--include/framework/structure/BufferView.h44
-rw-r--r--include/framework/structure/InternalLevel.h11
-rw-r--r--tests/internal_level_tests.cpp8
4 files changed, 76 insertions, 51 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 6c733f2..1164cee 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -6,11 +6,13 @@ set(CMAKE_CXX_STANDARD_REQUIRED True)
set(namespace "de")
project("Practical Dynamic Extension" VERSION 0.1.0)
-set(debug false)
+set(debug true)
set(tests True)
-set(bench true)
+set(bench false)
set(old_bench False)
+set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
+
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/bin")
add_compile_options(-Iinclude -Iexternal/PLEX/include -Iexternal)
@@ -30,9 +32,9 @@ if (tests)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/bin/tests")
file(MAKE_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/tests/data")
- add_executable(augbtree_tests ${CMAKE_CURRENT_SOURCE_DIR}/tests/augbtree_tests.cpp)
- target_link_libraries(augbtree_tests PUBLIC gsl check subunit pthread)
- target_include_directories(augbtree_tests PRIVATE include external/psudb-common/cpp/include external/ctpl)
+ #add_executable(augbtree_tests ${CMAKE_CURRENT_SOURCE_DIR}/tests/augbtree_tests.cpp)
+ #target_link_libraries(augbtree_tests PUBLIC gsl check subunit pthread)
+ #target_include_directories(augbtree_tests PRIVATE include external/psudb-common/cpp/include external/ctpl)
add_executable(internal_level_tests ${CMAKE_CURRENT_SOURCE_DIR}/tests/internal_level_tests.cpp)
target_link_libraries(internal_level_tests PUBLIC gsl check subunit pthread)
@@ -42,42 +44,42 @@ if (tests)
target_link_libraries(mutable_buffer_tests PUBLIC gsl check subunit pthread)
target_include_directories(mutable_buffer_tests PRIVATE include external/psudb-common/cpp/include)
- add_executable(vptree_tests ${CMAKE_CURRENT_SOURCE_DIR}/tests/vptree_tests.cpp)
- target_link_libraries(vptree_tests PUBLIC gsl check subunit pthread)
- target_include_directories(vptree_tests PRIVATE include external/vptree external/psudb-common/cpp/include)
-
- add_executable(de_tier_tag ${CMAKE_CURRENT_SOURCE_DIR}/tests/de_tier_tag.cpp)
- target_link_libraries(de_tier_tag PUBLIC gsl check subunit pthread)
- target_include_directories(de_tier_tag PRIVATE include external/psudb-common/cpp/include external)
+ #add_executable(vptree_tests ${CMAKE_CURRENT_SOURCE_DIR}/tests/vptree_tests.cpp)
+ #target_link_libraries(vptree_tests PUBLIC gsl check subunit pthread)
+ #target_include_directories(vptree_tests PRIVATE include external/vptree external/psudb-common/cpp/include)
+
+ #add_executable(de_tier_tag ${CMAKE_CURRENT_SOURCE_DIR}/tests/de_tier_tag.cpp)
+ #target_link_libraries(de_tier_tag PUBLIC gsl check subunit pthread)
+ #target_include_directories(de_tier_tag PRIVATE include external/psudb-common/cpp/include external)
- add_executable(de_tier_tomb ${CMAKE_CURRENT_SOURCE_DIR}/tests/de_tier_tomb.cpp)
- target_link_libraries(de_tier_tomb PUBLIC gsl check subunit pthread)
- target_include_directories(de_tier_tomb PRIVATE include external/psudb-common/cpp/include external)
+ #add_executable(de_tier_tomb ${CMAKE_CURRENT_SOURCE_DIR}/tests/de_tier_tomb.cpp)
+ #target_link_libraries(de_tier_tomb PUBLIC gsl check subunit pthread)
+ #target_include_directories(de_tier_tomb PRIVATE include external/PLEX/include external/psudb-common/cpp/include external)
- add_executable(de_level_tag ${CMAKE_CURRENT_SOURCE_DIR}/tests/de_level_tag.cpp)
- target_link_libraries(de_level_tag PUBLIC gsl check subunit pthread)
- target_include_directories(de_level_tag PRIVATE include external/psudb-common/cpp/include external)
+ #add_executable(de_level_tag ${CMAKE_CURRENT_SOURCE_DIR}/tests/de_level_tag.cpp)
+ #target_link_libraries(de_level_tag PUBLIC gsl check subunit pthread)
+ #target_include_directories(de_level_tag PRIVATE include external/psudb-common/cpp/include external)
- add_executable(de_level_tomb ${CMAKE_CURRENT_SOURCE_DIR}/tests/de_level_tomb.cpp)
- target_link_libraries(de_level_tomb PUBLIC gsl check subunit pthread)
- target_include_directories(de_level_tomb PRIVATE include external/ctpl external/psudb-common/cpp/include external)
+ #add_executable(de_level_tomb ${CMAKE_CURRENT_SOURCE_DIR}/tests/de_level_tomb.cpp)
+ #target_link_libraries(de_level_tomb PUBLIC gsl check subunit pthread)
+ #target_include_directories(de_level_tomb PRIVATE include external/ctpl external/PLEX/include external/psudb-common/cpp/include external)
add_executable(memisam_tests ${CMAKE_CURRENT_SOURCE_DIR}/tests/memisam_tests.cpp)
target_link_libraries(memisam_tests PUBLIC gsl check subunit pthread)
target_include_directories(memisam_tests PRIVATE include external/psudb-common/cpp/include)
- add_executable(alias_tests ${CMAKE_CURRENT_SOURCE_DIR}/tests/alias_tests.cpp)
- target_link_libraries(alias_tests PUBLIC gsl check subunit pthread)
- target_include_directories(alias_tests PRIVATE include external/psudb-common/cpp/include)
+ #add_executable(alias_tests ${CMAKE_CURRENT_SOURCE_DIR}/tests/alias_tests.cpp)
+ #target_link_libraries(alias_tests PUBLIC gsl check subunit pthread)
+ #target_include_directories(alias_tests PRIVATE include external/psudb-common/cpp/include)
- add_executable(triespline_tests ${CMAKE_CURRENT_SOURCE_DIR}/tests/triespline_tests.cpp)
- target_link_libraries(triespline_tests PUBLIC gsl check subunit pthread)
- target_include_directories(triespline_tests PRIVATE include external/PLEX/include external/psudb-common/cpp/include)
+ #add_executable(triespline_tests ${CMAKE_CURRENT_SOURCE_DIR}/tests/triespline_tests.cpp)
+ #target_link_libraries(triespline_tests PUBLIC gsl check subunit pthread)
+ #target_include_directories(triespline_tests PRIVATE include external/PLEX/include external/psudb-common/cpp/include)
- add_executable(pgm_tests ${CMAKE_CURRENT_SOURCE_DIR}/tests/pgm_tests.cpp)
- target_link_libraries(pgm_tests PUBLIC gsl check subunit pthread gomp)
- target_include_directories(pgm_tests PRIVATE include external/PGM-index/include external/psudb-common/cpp/include)
- target_compile_options(pgm_tests PUBLIC -fopenmp)
+ #add_executable(pgm_tests ${CMAKE_CURRENT_SOURCE_DIR}/tests/pgm_tests.cpp)
+ #target_link_libraries(pgm_tests PUBLIC gsl check subunit pthread gomp)
+ #target_include_directories(pgm_tests PRIVATE include external/PGM-index/include external/psudb-common/cpp/include)
+ #target_compile_options(pgm_tests PUBLIC -fopenmp)
endif()
# Benchmark build instructions
diff --git a/include/framework/structure/BufferView.h b/include/framework/structure/BufferView.h
index 98e41dd..d058714 100644
--- a/include/framework/structure/BufferView.h
+++ b/include/framework/structure/BufferView.h
@@ -18,12 +18,25 @@
namespace de {
-typedef std::_Bind<void (*(void*, long unsigned int))(void*, long unsigned int)> ReleaseFunction;
+typedef std::_Bind<void (*(void*, long unsigned int))(void*, long unsigned int)> ReleaseFunction;
+
+static void noop_func(void *arg1, size_t arg2) {
+ return;
+}
+
+constexpr auto noop_bind = std::bind(noop_func, (void*) nullptr, 0ul);
template <RecordInterface R>
class BufferView {
public:
- BufferView() = default;
+ BufferView()
+ : m_data(nullptr)
+ , m_release(noop_bind)
+ , m_head(0)
+ , m_tail(0)
+ , m_cap(0)
+ , m_approx_ts_cnt(0)
+ , m_tombstone_filter(nullptr) {}
/*
* the BufferView's lifetime is tightly linked to buffer versioning, and so
@@ -32,14 +45,25 @@ public:
BufferView(const BufferView&) = delete;
BufferView &operator=(BufferView &) = delete;
- void operator=(BufferView &&src) {
- m_data = src.m_data;
- m_release = src.m_release;
- m_head = src.m_head;
- m_tail = src.m_tail;
- m_cap = src.m_cap;
- m_approx_ts_cnt = src.m_approx_ts_cnt;
- m_tombstone_filter = src.filter;
+ BufferView(BufferView &&other)
+ : m_data(std::exchange(other.m_data, nullptr))
+ , m_release(std::move(other.m_release))
+ , m_head(std::exchange(other.m_head, 0))
+ , m_tail(std::exchange(other.m_tail, 0))
+ , m_cap(std::exchange(other.m_cap, 0))
+ , m_approx_ts_cnt(std::exchange(other.m_approx_ts_cnt, 0))
+ , m_tombstone_filter(std::exchange(other.m_tombstone_filter, nullptr)) {}
+
+ BufferView &operator=(BufferView &&other) noexcept {
+ std::swap(m_data, other.m_data);
+ m_release = std::move(other.m_release);
+ std::swap(m_head, other.m_head);
+ std::swap(m_tail, other.m_tail);
+ std::swap(m_cap, other.m_cap);
+ std::swap(m_approx_ts_cnt, other.m_approx_ts_cnt);
+ std::swap(m_tombstone_filter, other.m_tombstone_filter);
+
+ return *this;
}
BufferView(Wrapped<R> *buffer, size_t cap, size_t head, size_t tail, size_t tombstone_cnt, psudb::BloomFilter<R> *filter,
diff --git a/include/framework/structure/InternalLevel.h b/include/framework/structure/InternalLevel.h
index ee85cb3..b35cadd 100644
--- a/include/framework/structure/InternalLevel.h
+++ b/include/framework/structure/InternalLevel.h
@@ -16,7 +16,7 @@
#include "framework/interface/Shard.h"
#include "framework/interface/Query.h"
#include "framework/interface/Record.h"
-#include "framework/structure/MutableBuffer.h"
+#include "framework/structure/BufferView.h"
namespace de {
template <RecordInterface R, ShardInterface S, QueryInterface Q>
@@ -27,7 +27,7 @@ class InternalLevel;
template <RecordInterface R, ShardInterface S, QueryInterface Q>
class InternalLevel {
typedef S Shard;
- typedef MutableBuffer<R> Buffer;
+ typedef BufferView<R> BuffView;
public:
InternalLevel(ssize_t level_no, size_t shard_cap)
: m_level_no(level_no)
@@ -97,14 +97,14 @@ public:
* into this level. This is used for buffer
* flushes under the tiering layout policy.
*/
- void append_buffer(Buffer* buffer) {
+ void append_buffer(BuffView buffer) {
if (m_shard_cnt == m_shards.size()) {
assert(m_pending_shard == nullptr);
- m_pending_shard = new S(buffer);
+ m_pending_shard = new S(std::move(buffer));
return;
}
- m_shards[m_shard_cnt] = std::make_shared<S>(buffer);
+ m_shards[m_shard_cnt] = std::make_shared<S>(std::move(buffer));
++m_shard_cnt;
}
@@ -140,7 +140,6 @@ public:
return new S(shards, m_shard_cnt);
}
- /* Append the sample range in-order */
void get_query_states(std::vector<std::pair<ShardID, Shard *>> &shards, std::vector<void*>& shard_states, void *query_parms) {
for (size_t i=0; i<m_shard_cnt; i++) {
if (m_shards[i]) {
diff --git a/tests/internal_level_tests.cpp b/tests/internal_level_tests.cpp
index 9299c07..b8aa56f 100644
--- a/tests/internal_level_tests.cpp
+++ b/tests/internal_level_tests.cpp
@@ -30,11 +30,11 @@ START_TEST(t_memlevel_merge)
auto tbl2 = create_test_mbuffer<Rec>(100);
auto base_level = new ILevel(1, 1);
- base_level->append_buffer(tbl1);
+ base_level->append_buffer(tbl1->get_buffer_view());
ck_assert_int_eq(base_level->get_record_count(), 100);
auto merging_level = new ILevel(0, 1);
- merging_level->append_buffer(tbl2);
+ merging_level->append_buffer(tbl2->get_buffer_view());
ck_assert_int_eq(merging_level->get_record_count(), 100);
auto new_level = ILevel::reconstruction(base_level, merging_level);
@@ -53,8 +53,8 @@ ILevel *create_test_memlevel(size_t reccnt) {
auto tbl2 = create_test_mbuffer<Rec>(reccnt/2);
auto base_level = new ILevel(1, 2);
- base_level->append_buffer(tbl1);
- base_level->append_buffer(tbl2);
+ base_level->append_buffer(tbl1->get_buffer_view());
+ base_level->append_buffer(tbl2->get_buffer_view());
delete tbl1;
delete tbl2;