forked from fjall-rs/lsm-tree
-
Notifications
You must be signed in to change notification settings - Fork 1
feat(salvage): total recovery for SSTs and blob files with in-place ECC autoheal #587
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
Closed
Closed
Changes from 15 commits
Commits
Show all changes
140 commits
Select commit
Hold shift + click to select a range
26bcd86
feat(salvage): total recovery for SSTs and blob files with in-place E…
polaz 84c9d06
ci: pin official GitHub actions by major tag
polaz c38c81d
fix(columnar): clamp columnar scans to a restricted table's live suffix
polaz 75d9042
fix(columnar): dedup MVCC versions inside singleton columnar segments
polaz 0704859
fix(repair): derive punched blob frontiers during manifest-loss recovery
polaz 0542f74
docs(recovery): blob frontier resolution section and edit-format rati…
polaz a4da5e7
feat(repair): live recovery-progress counters for repair and salvage
polaz 1ddd0e8
style(repair): clippy cleanups for the frontier probe and progress wi…
polaz dedf9d7
fix(manifest): replace restriction sets wholesale during edit replay
polaz 89dcf36
fix(repair): quarantine persistently unreadable blob files
polaz 03ebc25
fix(repair): quarantine duplicate blob ids deterministically
polaz 7f1c3cb
fix(repair): anchor the punch guard's zero runs on block structure
polaz 088d57e
fix(repair): count salvaged tables after blob-dependency filtering
polaz 8dec6bf
fix(compaction): roll back slice outputs when a restricted blob reope…
polaz 8648763
style(repair): lint hygiene in the zero-filled-value guard test
polaz 3fe4a2e
test(compaction): make the blob-reopen rollback check interleaving-ro…
polaz a7c8252
fix(repair): count recovered-table progress after all repair filtering
polaz 909232c
fix(repair): set aside tables whose blob handles precede a punched fr…
polaz 29fc2b2
fix(heal): probe actual holes when detaching a restricted SST for hea…
polaz 017c99e
style(repair): drop a redundant clone in the frontier-handle test
polaz a0c76d3
ci(fuzz-heal): use the documented ignored-only selector
polaz 136b7df
feat(salvage): blob-handle rewrite and compressed blob-file recovery
polaz e702929
fix(repair): validate blob frames, then salvage and remap instead of …
polaz 5c01839
fix(compaction): refuse to punch a hard-linked SST prefix
polaz 5581821
fix(scrub): sync healed SST bytes before refreshing the manifest digest
polaz a437aa4
fix(repair): publish a salvaged blob from a private temp, restore on …
polaz 7485c8a
style(tests): satisfy the all-targets lint set
polaz 7df5e71
docs(heal): record why a failed sync keeps its attestation
polaz 2e992ac
fix(repair): block-verify every recovered SST, not only under salvage
polaz c925260
fix(scrub): open the reconcile sync handle with write access
polaz 07cff77
fix(repair): resolve degraded-ECC verdicts without a rewrite when sal…
polaz e4184f5
fix(vlog): defer the blob-prefix punch while a checkpoint pause is ac…
polaz 848c148
fix(salvage): carry the re-emitted on-disk size through the blob-hand…
polaz 9846d1f
docs(table): correct the SST section-layout claims at the punch sites
polaz 39c6db8
docs(repair): record the every-repair verification contract; test the…
polaz 9dca59d
docs(scrub): record the cross-platform rename contract at the sidecar…
polaz 13d5a3e
ci(codecov): fixed patch bar, exclude the fuzz harness
polaz b4e5870
fix(compaction): defer the user filter on tight-space slices
polaz 01918eb
fix(repair): verify decompression, frame order, and metadata in blob …
polaz 7d14636
fix(salvage): decode dictionary-compressed blobs with the caller's di…
polaz 1d02761
fix(repair): quarantine blob files whose metadata id disagrees with t…
polaz a2e5e59
docs(fs): state the cross-platform replace contract on Fs::rename
polaz b75a7d7
fix(repair): bound a punched blob file's metadata by its live suffix
polaz 874d269
docs(fs): note the Windows replace semantics at the StdFs::rename del…
polaz 9a8066a
test(repair): isolate the punched-suffix range containment rejection
polaz b062d26
fix(fs): accept the implicit root in MemFs::sync_directory
polaz ee1bf21
docs(fs): state that sync_directory accepts the implicit-root spelling
polaz 239edb7
fix(repair): complete the lagged drop of a fully punched blob file
polaz 2722327
test(salvage): note why the bare-relative-destination pin is blob-only
polaz a303370
fix(table): carry the heal-hint sink across a restricted reopen
polaz efe2f5e
fix(salvage): claim the publish destination atomically without hard l…
polaz 7724317
fix(repair): seed garbage accounting for a recovered punched blob prefix
polaz b18acfd
docs(recovery): describe the punched-prefix garbage seed
polaz 044934b
fix(repair): set aside a fully punched blob whose drop cannot complete
polaz f476725
docs(recovery): quarantine, not orphan, when the lagged blob drop fails
polaz f462e26
test(repair): match the removal-fault path filter on Windows separators
polaz a74ab82
fix(repair): set aside a leftover salvage temp whose removal fails
polaz fa14f66
fix(repair): resolve duplicate-file aliases through the backend, not …
polaz d5d9f11
test(repair): name the symlink-alias fixture bindings descriptively
polaz 7f5323b
fix(table): clamp range tombstones to a restricted view for CDC
polaz a3b8c64
fix(repair): fail honestly when discardable leftovers cannot be removed
polaz 0c76a5e
fix(table): start compaction scans at a restricted view's bound
polaz 21c346a
docs(version): state the no-bump contract for restriction sections
polaz d3e66b3
docs(compaction): note the restricted view stays compactable via scan
polaz 46fbfde
fix(scrub): reconcile attributable heals of legacy delete-bitmap tables
polaz a667306
fix(salvage): surface a stuck temp name after a published arbitration
polaz 6b8272a
test(table): pass the repair-context flag to metadata-bounds checks
polaz d4102b7
fix(salvage): unwind the fresh destination when the temp name sticks
polaz ff5f3a7
fix(repair): make the blob publish to table rewrite window crash-cons…
polaz 927b985
fix(cdc): deduplicate identical events from duplicated tables in scan…
polaz e5889c3
fix(repair): track blob remap stamps per blob so a grown retry set st…
polaz 0aa1db9
docs(compaction): note CDC dedup covers the unpunched sidecar-failure…
polaz 9995eff
test(table): gate the legacy-bitmap case to columnar builds
polaz 432d895
fix(vlog): keep a repair's own leftovers from blocking the open
polaz cf87d8f
fix(repair): adopt only canonical remap sidecars, bounded by their blob
polaz 8b0d6c3
fix(compaction): install the tree-wide sinks on compaction outputs
polaz f86b752
refactor(repair): publish salvaged blobs under fresh ids, drop the re…
polaz 0dd50e9
feat(recovery): report a read into a punched extent as excised
polaz f7d60bd
fix(verify): derive the restricted frontier by walking frames
polaz 10568c3
fix(heal): bind every published table to the tree through one choke p…
polaz 7b16382
ci(lint): lint the default feature set, and fix what that surfaced
polaz bad2e99
fix(repair): fail on an exhausted blob id space and an unmovable orig…
polaz ed1fbd0
fix(compaction): bind published blob files, and drop unreferenced one…
polaz 8eeedb8
fix(cdc): keep event multiplicity a single source holds
polaz d58aa59
fix(tight-space): defer a paused prefix reclaim instead of dropping it
polaz 8979674
fix(repair): publish rewrites without displacing their sources
polaz 3f16574
fix(cdc): deliver an entry at the maximum seqno from an SST
polaz 67afac3
perf(verify): cross a reclaimed prefix in bulk reads
polaz 7380b7a
fix(repair): never leave an unpublished rewrite where the scan finds it
polaz 396c4fa
docs(recovery): describe the publish model the code implements
polaz e07c934
fix(cdc): keep every merge operand the read path applies
polaz 3ea9712
fix(verify): match a restriction sidecar to the file it sits beside
polaz 29bc78e
fix(verify): bound a restricted skip by the index, not by the first z…
polaz 4203b94
fix(repair): keep a rebuild from duplicating a committed history
polaz d8823df
fix(cdc): replay tied seqnos in source order, not payload order
polaz cb02642
fix(repair): require a physical hole before reading zeros as a reclaim
polaz 48efc54
fix(repair): never hand a fresh id to a table a sidecar already names
polaz d543828
feat(fs): add an extent-local hole probe
polaz e5086a0
fix(repair): prove the hole under the zeroed block, not the file
polaz 7c7cb01
fix(repair): order the table scan so a duplicate id resolves the same…
polaz cf4a79a
fix(fs): compile the hole probe on Linux
polaz bc4f303
fix(db_bench): drop a no-op clone on a string slice
polaz a732057
fix(cdc): replay a tied range deletion before the write it spares
polaz 74d8b68
fix(repair): salvage a table whose leading bytes were destroyed
polaz 054ed7d
fix(repair): require hole evidence before calling a zeroed extent rec…
polaz 973f798
fix(salvage): drop the boundary key when a lost block held its newest…
polaz 84f1825
fix(repair): order rebuilt L0 by table id, never by highest seqno
polaz 86bbe6a
fix(repair): count blob files once the surviving reference set is final
polaz 2bdc0e2
fix(ingest): bind bulk-ingested blob files before publishing them
polaz d03ed2d
fix(cdc): replay a tied range deletion first across sources too
polaz a4a470c
fix(salvage): complete the no-resurrection rule across every emit path
polaz 9b16241
fix(salvage): make boundary suppression actually reach the emitted block
polaz ea51f66
fix(salvage): arm an unknown boundary for a lost block with no key range
polaz 31776e5
fix(cdc): replay one source's tied operands in application order
polaz 2ac54d4
fix(compaction): keep restricted views out of verbatim block reuse
polaz d1e701b
fix(recovery): republish a restriction sidecar that never landed
polaz 2229fe1
fix(columnar): refuse a projected scan on a tree that merges
polaz dd8507e
docs(format): record why retired versions keep no public names
polaz a4259cc
feat(repair): report the key coverage an excluded table lost
polaz 887b993
fix(reclaim): retain a deferred punch instead of discarding it
polaz 8b5fce0
fix(columnar): drop a key whose newest columnar row deletes it
polaz 6cda286
fix(repair): report an unknown seqno bound when the ingest offset is …
polaz d78d479
fix(columnar): emit projected seqnos in tree-global coordinates
polaz fdc18c3
fix(salvage): accept a tied-seqno merge operand run as ordered
polaz 009d358
fix(recovery): validate a restriction sidecar instead of trusting its…
polaz 218e68d
fix(reclaim): retain the extents a failed punch left behind
polaz 36ce1c2
fix(salvage): suppress the boundary key by comparator, not bytes
polaz 287f624
fix(cdc): capture the active memtable under the version guard
polaz 2c4d14f
refactor(repair): remove quarantine; a repair fixes the tree or fails
polaz f05af1a
fix(salvage): suppress a beheaded blob chain by comparator, not bytes
polaz 0981c02
fix(reclaim): run a deferred punch inside the mutation window
polaz d310966
fix(repair): require hole evidence for a blob frontier
polaz 7e62b9b
style(tests): satisfy the lint set on the new regression tests
polaz 1552628
refactor(comparator): state key identity once, in one place
polaz f1b98b8
docs(columnar): state what the duplicate-free proof rests on
polaz 82a8154
refactor(version): one body per ordering decision, not a byte twin
polaz 8bfbe08
refactor(file): one grammar for what a tables/ directory entry is
polaz 828d740
docs(repair): state why unreferenced bare-id orphans are removed pre-…
polaz 2e5b6fd
refactor(table): recover takes named params, not fourteen positions
polaz 2f4d602
fix(tree): hold the version-history guard through range-tombstone insert
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
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
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
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.