diff options
| author | Douglas Rumbaugh <dbr4@psu.edu> | 2023-11-13 10:41:13 -0500 |
|---|---|---|
| committer | Douglas Rumbaugh <dbr4@psu.edu> | 2023-11-13 10:41:13 -0500 |
| commit | 83486744600e8be338c75c2e3d2339452a392a9d (patch) | |
| tree | 1599636939a2e2146c4a66c584cdd035d6b803ba | |
| parent | 39d22316be1708073e4fe1f708814cc801ecdc69 (diff) | |
| download | dynamic-extension-83486744600e8be338c75c2e3d2339452a392a9d.tar.gz | |
Fixed merge logic bug in tiering
In InternalLevel::clone(), the m_shard_cnt variable was not being set
appropriately in the clone, resulting in the record counts reported for
a multi-shard level to be reported incorrectly.
In DynamicExtension::merge(), the merges were being performed in the
wrong order, resulting in multi-level merges deleting records. The
leveling tests all passed even with this bug for some reason, but it
caused tiering tests to fail. It isn't clear _why_ leveling appeared to
work, but the bug is now fixed, so that's largely irrelevant I suppose.
| -rw-r--r-- | include/framework/DynamicExtension.h | 3 | ||||
| -rw-r--r-- | include/framework/structure/InternalLevel.h | 1 |
2 files changed, 3 insertions, 1 deletions
diff --git a/include/framework/DynamicExtension.h b/include/framework/DynamicExtension.h index a6047ea..9554c8c 100644 --- a/include/framework/DynamicExtension.h +++ b/include/framework/DynamicExtension.h @@ -436,11 +436,12 @@ private: MergeArgs<R, S, Q, L> *args = (MergeArgs<R, S, Q, L> *) arguments; Structure *vers = args->epoch->get_structure(); + // FIXME: with an improved shard interface, multiple full buffers // could be merged at once here. Buffer *buff = (Buffer *) args->epoch->get_buffers()[0]; - for (ssize_t i=args->merges.size() - 1; i>=0; i--) { + for (ssize_t i=0; i<args->merges.size(); i++) { vers->merge_levels(args->merges[i].second, args->merges[i].first); } diff --git a/include/framework/structure/InternalLevel.h b/include/framework/structure/InternalLevel.h index 00e0c58..d146b73 100644 --- a/include/framework/structure/InternalLevel.h +++ b/include/framework/structure/InternalLevel.h @@ -219,6 +219,7 @@ public: for (size_t i=0; i<m_shard_cnt; i++) { new_level->m_shards[i] = m_shards[i]; } + new_level->m_shard_cnt = m_shard_cnt; return new_level; } |