Repository navigation
feat(wal): bound producer state with reusable fenced slots - #434
Merged
beinan merged 1 commit intoOct 21, 2026
Merged
Conversation
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
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Writer UUID receipts currently accumulate until the replicated producer limit is reached, even after their data has been published and retired. Add an optional fixed slot table with durable generation fences so a closed writer can be replaced without accepting a delayed old request as a new write.
Allocation uses a saved generation/operation comparison; close checks the exact accepted tail; reuse requires that tail's signed source retirement. Latest retries remain valid until reuse, after which old generations are explicitly fenced. Quorum queries, checkpoint recovery and snapshot transfer preserve the cells. UUID-only groups keep their existing disk policy and image format; enabling slots requires fresh groups.
Validation includes real-process interrupted snapshot/restart coverage and a six-process real Lance publication/retirement case with early-reuse rejection, leader failure and full restart. This does not enable the production ingestion path or claim a throughput gain. Administrative authorization, SDK integration and migration remain separate work.
Refs #378.
Validation: the full repository check script passed (Rust workspace tests, fmt/Clippy, 229 Python tests, Ruff and Pyright) with a freshly built server. Optional WAL validation also passed: 105 library tests and 13 real-process regressions, including interrupted snapshot transfer, lost allocation replies, source retirement, leader loss and full restart.