forked from fjall-rs/lsm-tree
-
Notifications
You must be signed in to change notification settings - Fork 1
feat: merge operators for commutative LSM operations #28
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
polaz
merged 51 commits into
main
from
feat/#15-feat-merge-operators-for-commutative-lsm-operation
Mar 22, 2026
Merged
Changes from 47 commits
Commits
Show all changes
51 commits
Select commit
Hold shift + click to select a range
0c95794
feat: add merge operators for commutative LSM operations
polaz 0ea3ea8
fix(merge): correct MVCC safety and operand collection in merge paths
polaz 62ce167
test(merge): blob tree merge, sealed memtable resolution, edge cases
polaz a42b0c5
fix(merge): correct reverse merge trigger, clarify Indirection handling
polaz 0431741
fix(merge): remove coverage(off) from trait (unsupported target)
polaz bb4ea63
fix(merge): prevent operand loss in compaction GC and table scan
polaz 83eb390
docs(merge): document idempotency contract for MergeOperator
polaz 0aa9e95
refactor(merge): avoid Arc clone in forward merge, add #[must_use], r…
polaz 4bdac68
fix(merge): handle Indirection base in compaction merge resolution
polaz bc060b3
fix(merge): do not drain entries after Indirection in merge resolution
polaz c15e08c
docs(merge): qualify intra-doc links for cross-module references
polaz 82ab1e7
fix(merge): pass Indirection through as base, document lazy alloc lim…
polaz 60dee44
fix(merge): reject merge when base is Indirection (blob pointer)
polaz 4e54100
fix(merge): correct Indirection handling in merge resolution paths
polaz f85ad44
fix(lint): remove orphaned expect(clippy::expect_used) attribute
polaz 7a8a424
docs(merge): add TODO for range tombstone interaction
polaz 0286fe9
test(merge): add unit and integration tests for edge cases
polaz 54aa9f7
feat(merge): add range tombstone awareness to merge resolution
polaz 1e256e9
test(merge): BlobTree indirection fallback, seqno=0 boundary, RT+flush
polaz 33452ed
fix(merge): pending buffer pipeline bypass, partial merge type, RT he…
polaz e6fef94
fix(merge): RT head suppression in reverse None branch, targeted tests
polaz fd74f2c
test(merge): memtable get_all_for_key edge cases, RT sealed/cross-layer
polaz 1eed669
fix(test): use Memtable::new(0) and flush-based RT sealed test
polaz ea3b394
docs(merge): partial merge keeps MergeOperand, not Value
polaz f704bfa
fix(merge): complete doctest, correct insert arity, deduplicate doc
polaz 5e86556
fix(merge): skip seqno zeroing for preserved MergeOperands
polaz 1922ec5
fix(lint): expect too_many_lines on CompactionStream::next
polaz 561b63e
docs(merge): hide doctest setup lines from codecov diff
polaz 0985389
refactor(merge): simplify expired-tail drain, no MergeOperand guard n…
polaz 9fcbb4d
perf(merge): reuse key_entries buffer across next_back() calls
polaz a016f2f
fix(merge): per-source RT cutoffs, seqno=0 sentinel, reusable buffer
polaz 9d9091c
fix(lint): remove unused mut, unfulfilled too_many_lines expect
polaz f4ac637
fix(merge): partial merge seqno zeroing, RT on no-operator path, reve…
polaz 86806b7
fix(lint): CompactionStream::next under 100 lines
polaz 35bbc19
fix(lint): restore missing brace, keep CompactionStream::next at 100 …
polaz 289ed56
fix(merge): add RT suppression check to multi_get no-operator path
polaz 05be183
perf(merge): avoid clone in get match, O(1) pending pop, remove unuse…
polaz d3fe671
refactor(merge): extract resolve_or_passthrough for get/multi_get
polaz 6c28eaa
refactor(merge): use &dyn MergeOperator in resolve_or_passthrough
polaz 4b246ed
perf(merge): drain key_entries_buf instead of mem::take
polaz def410c
fix(merge): document InternalKey ordering, pass TempDir by reference
polaz 501be93
docs(merge): note seek-based optimization opportunity in range scan
polaz 622091f
fix(merge): only preserve MergeOperand type for Value replacement
polaz 8b73bbf
docs(merge): document partial merge re-stability and panic propagation
polaz 0c394d1
test(merge): disk range scan RT, point lookup base, tombstone, cross-…
polaz ebca11f
fix(error): remove duplicate MergeOperator enum variant
polaz 5799df9
docs(merge): document L0 overlap limitation in resolve_merge_get
polaz 5944026
docs(merge): correct RT suppression semantics in test and flush path
polaz 18d9b1f
fix(merge): collect all disk entries before processing in resolve_mer…
polaz c7b6d0c
fix(lint): remove unused key_hash and dead found_base assignments
polaz 5592216
perf(merge): gate RT check on merge_operator presence in next()
polaz File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.