Repository navigation
fix: keep blob misses under shared store locks - #413
Merged
Merged
Conversation
beinan
marked this pull request as ready for review
October 20, 2026 20:07
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.
Blob misses currently reacquire an exclusive store guard to refresh the resident dataset. A concurrent append/flush holds a shared guard, so one absent-ID lookup can wait behind the write and queue later blob hits behind itself.
Keep blob lookups under a shared guard and refresh cloned base snapshots around WAL fallback. After a complete WAL miss, check the latest base again so a row merged and drained between the initial base check and WAL discovery remains readable. Preserve resident and pinned versions, read caps, the base-hit fast path, and the bounded missing-file retries from #411.
Validation:
Nonefor a row flushed before the read and merged during the base-to-WAL transition.cargo fmt --all -- --checkalso passes. Full CI remains in progress.The second patched miss still took 2.1 s: this does not resolve every source of read latency. The runtime image IDs matched the immutable image built from this PR's exact head (
768495e) in services build 2159160.A separate isolated five-worker fixture with 100,586,357-byte payloads passed six status checks and four full payload comparisons during five concurrent writes. All three lookup types (base hit, WAL hit, absent ID) overlapped actual merges; the four writer shards reclaimed 32 generations. Maximum read header latency was 0.849 s, with no OOM/restarts. This is a bounded correctness run, not a soak test. All four fixture Pods were deleted and verified absent. Production has not been changed.