summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDouglas Rumbaugh <dbr4@psu.edu>2023-05-29 16:49:52 -0400
committerDouglas Rumbaugh <dbr4@psu.edu>2023-05-29 16:49:52 -0400
commite47410d56c667cda9f8070a929df7a955ce13115 (patch)
tree01ad4baa9869ad07ad6e6f4548de974c28ded301
parentab14529843d7bbb3a0d0c30b163ed444afee04ed (diff)
downloaddynamic-extension-e47410d56c667cda9f8070a929df7a955ce13115.tar.gz
Framework-level query testing + fixes
-rw-r--r--include/framework/DynamicExtension.h20
-rw-r--r--include/shard/MemISAM.h2
-rw-r--r--include/shard/WIRS.h8
-rw-r--r--tests/dynamic_extension_tests.cpp12
-rw-r--r--tests/wirs_tests.cpp10
5 files changed, 29 insertions, 23 deletions
diff --git a/include/framework/DynamicExtension.h b/include/framework/DynamicExtension.h
index 91d41f8..2dcbf18 100644
--- a/include/framework/DynamicExtension.h
+++ b/include/framework/DynamicExtension.h
@@ -142,24 +142,27 @@ public:
level->get_query_states(shards, states, parms);
}
- std::vector<std::vector<R>*> query_results(shards.size() + 1, nullptr);
+ std::vector<std::vector<R>> query_results(shards.size() + 1);
// Execute the query for the buffer
- query_results[0] = filter_deletes(Q::buffer_query(buffer, buffer_state, parms), {-1, -1}, buffer);
+ auto buffer_results = Q::buffer_query(buffer, buffer_state, parms);
+ query_results[0] = filter_deletes(buffer_results, {-1, -1}, buffer);
// Execute the query for each shard
for (size_t i=0; i<shards.size(); i++) {
- query_results[i] = filter_deletes(Q::query(shards[i].second, states[i], parms), shards[i].first, buffer);
+ auto shard_results = Q::query(shards[i].second, states[i], parms);
+ query_results[i] = filter_deletes(shard_results, shards[i].first, buffer);
}
// Merge the results together
- auto result = Q::merge(&query_results);
+ auto result = Q::merge(query_results);
for (size_t i=0; i<query_results.size(); i++) {
- delete query_results[i];
Q::delete_query_state(states[i]);
}
+ Q::delete_buffer_query_state(buffer_state);
+
return result;
}
@@ -282,9 +285,9 @@ private:
return buffer->append(rec, ts);
}
- std::vector<R> filter_deletes(std::vector<Wrapped<R>> *records, ShardID shid, Buffer *buffer) {
+ std::vector<R> filter_deletes(std::vector<Wrapped<R>> &records, ShardID shid, Buffer *buffer) {
std::vector<R> processed_records;
- processed_records->reserve(records->size());
+ processed_records.reserve(records.size());
// For delete tagging, we just need to check the delete bit on each
// record.
@@ -297,7 +300,6 @@ private:
processed_records.emplace_back(rec.rec);
}
- delete records;
return processed_records;
}
@@ -327,7 +329,7 @@ private:
processed_records.emplace_back(rec.rec);
}
- delete records;
+ return processed_records;
}
/*
diff --git a/include/shard/MemISAM.h b/include/shard/MemISAM.h
index 8ac17e4..7bfbd3f 100644
--- a/include/shard/MemISAM.h
+++ b/include/shard/MemISAM.h
@@ -180,7 +180,7 @@ public:
return m_tombstone_cnt;
}
- R *point_lookup(R &rec, bool filter) {
+ R *point_lookup(const R &rec, bool filter) {
if (filter && !m_bf->lookup(rec.key)) {
return nullptr;
diff --git a/include/shard/WIRS.h b/include/shard/WIRS.h
index 7e3f468..020df19 100644
--- a/include/shard/WIRS.h
+++ b/include/shard/WIRS.h
@@ -203,7 +203,7 @@ public:
free_tree(m_root);
}
- Wrapped<R> *point_lookup(R &rec, bool filter=false) {
+ Wrapped<R> *point_lookup(const R &rec, bool filter=false) {
if (filter && !m_bf->lookup(rec.key)) {
return nullptr;
}
@@ -213,9 +213,9 @@ public:
return nullptr;
}
- while (idx < m_reccnt && m_data[idx] < rec) ++idx;
+ while (idx < m_reccnt && m_data[idx].rec < rec) ++idx;
- if (m_data[idx] == rec) {
+ if (m_data[idx].rec == rec) {
return m_data + idx;
}
@@ -254,7 +254,7 @@ private:
while (min < max) {
size_t mid = (min + max) / 2;
- if (key > m_data[mid].key) {
+ if (key > m_data[mid].rec.key) {
min = mid + 1;
} else {
max = mid;
diff --git a/tests/dynamic_extension_tests.cpp b/tests/dynamic_extension_tests.cpp
index 9fdd5f9..518801a 100644
--- a/tests/dynamic_extension_tests.cpp
+++ b/tests/dynamic_extension_tests.cpp
@@ -149,7 +149,6 @@ START_TEST(t_range_sample_memlevels)
END_TEST
*/
-/*
START_TEST(t_range_sample_weighted)
{
auto ext_wirs = new DE(100, 2, 1);
@@ -196,6 +195,7 @@ START_TEST(t_range_sample_weighted)
uint64_t upper_key = 5;
size_t cnt[3] = {0};
+ size_t total_samples = 0;
for (size_t i=0; i<1000; i++) {
wirs_query_parms<WRec> p;
p.lower_bound = lower_key;
@@ -203,20 +203,20 @@ START_TEST(t_range_sample_weighted)
p.sample_size = k;
auto result = ext_wirs->query(&p);
+ total_samples += result.size();
- for (size_t j=0; j<k; j++) {
+ for (size_t j=0; j<result.size(); j++) {
cnt[result[j].key - 1]++;
}
}
- ck_assert(roughly_equal(cnt[0] / 1000, (double) k/4.0, k, .05));
- ck_assert(roughly_equal(cnt[1] / 1000, (double) k/4.0, k, .05));
- ck_assert(roughly_equal(cnt[2] / 1000, (double) k/2.0, k, .05));
+ ck_assert(roughly_equal(cnt[0] / total_samples, (double) k/4.0, k, .05));
+ ck_assert(roughly_equal(cnt[1] / total_samples, (double) k/4.0, k, .05));
+ ck_assert(roughly_equal(cnt[2] / total_samples, (double) k/2.0, k, .05));
delete ext_wirs;
}
END_TEST
-*/
START_TEST(t_tombstone_merging_01)
diff --git a/tests/wirs_tests.cpp b/tests/wirs_tests.cpp
index 0a9b1d0..32cb863 100644
--- a/tests/wirs_tests.cpp
+++ b/tests/wirs_tests.cpp
@@ -268,10 +268,14 @@ START_TEST(t_wirs_buffer_query_rejection)
wirs_query_parms<WRec> parms = {lower_key, upper_key, k};
parms.rng = gsl_rng_alloc(gsl_rng_mt19937);
+ size_t total_samples = 0;
+
for (size_t i=0; i<1000; i++) {
auto state = WIRSQuery<WRec>::get_buffer_query_state(buffer, &parms);
auto result = WIRSQuery<WRec>::buffer_query(buffer, state, &parms);
+ total_samples += result.size();
+
for (size_t j=0; j<result.size(); j++) {
cnt[result[j].rec.key - 1]++;
}
@@ -279,9 +283,9 @@ START_TEST(t_wirs_buffer_query_rejection)
WIRSQuery<WRec>::delete_buffer_query_state(state);
}
- ck_assert(roughly_equal(cnt[0] / 1000, (double) k/4.0, k, .05));
- ck_assert(roughly_equal(cnt[1] / 1000, (double) k/4.0, k, .05));
- ck_assert(roughly_equal(cnt[2] / 1000, (double) k/2.0, k, .05));
+ ck_assert(roughly_equal(cnt[0] / total_samples, (double) k/4.0, k, .05));
+ ck_assert(roughly_equal(cnt[1] / total_samples, (double) k/4.0, k, .05));
+ ck_assert(roughly_equal(cnt[2] / total_samples, (double) k/2.0, k, .05));
gsl_rng_free(parms.rng);
delete buffer;