diff options
| author | Douglas Rumbaugh <dbr4@psu.edu> | 2023-05-29 16:49:52 -0400 |
|---|---|---|
| committer | Douglas Rumbaugh <dbr4@psu.edu> | 2023-05-29 16:49:52 -0400 |
| commit | e47410d56c667cda9f8070a929df7a955ce13115 (patch) | |
| tree | 01ad4baa9869ad07ad6e6f4548de974c28ded301 | |
| parent | ab14529843d7bbb3a0d0c30b163ed444afee04ed (diff) | |
| download | dynamic-extension-e47410d56c667cda9f8070a929df7a955ce13115.tar.gz | |
Framework-level query testing + fixes
| -rw-r--r-- | include/framework/DynamicExtension.h | 20 | ||||
| -rw-r--r-- | include/shard/MemISAM.h | 2 | ||||
| -rw-r--r-- | include/shard/WIRS.h | 8 | ||||
| -rw-r--r-- | tests/dynamic_extension_tests.cpp | 12 | ||||
| -rw-r--r-- | tests/wirs_tests.cpp | 10 |
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; |