release: prepare beta79 - #292
Merged
Merged
Conversation
Fixes a durable write race in the engine and a credential expiry that never decoded. Two writers could both take commit points against one baseline, because settlement runs after the commit lock is released and a committed-but-unsettled transaction was invisible to the precondition check. Whichever settled second stranded its journal, and that journal then failed every later collection open, so an ordinary lost write race could leave a collection unopenable. The diagnostics surface reported no expiry for every temporary R2 credential, because the session token wraps its JWT rather than being one. Staging and lab were reported as permanent days before they expire. This release changes durable write-path behaviour. A modest rise in concurrent modification conflicts is expected and correct: races that previously succeeded and then stranded now surface as conflicts. See .ops/tasks/monitor-unsettled-transaction-journals.md in cloud-ops.
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.
Ships two fixes, one of which changes durable write-path behaviour.
Engine: unsettled-path commit race
Settlement runs after the commit lock is released, so a committed-but-unsettled transaction was invisible to the precondition check. Two writers could both take commit points against one baseline:
B stranded its journal as
NeedsManualRecovery, andrecover_pendingthen failed on it at every laterCollection::open. An ordinary lost write race could leave a collection unopenable until someone deleted the transaction directory by hand.B is now rejected before taking a commit point, reporting
concurrent_modification. (callumalpass/mdbase-rs#54, pinned via #291.)Diagnostics: credential expiry never decoded
storage.credential_expires_atreported no expiry for every temporary credential — staging and lab read as permanent, days before they expire. The session token is standard base64 ofjwt/<header>.<claims>.<signature>, not a bare JWT, so the claims were never read.Nonealso means "permanent credential", so the broken case was indistinguishable from the healthy one. (#289.)Also on main since beta.78
#290 adds
pnpm check:workspace-pins, a developer preflight comparing sibling checkouts against pinned revisions. No runtime effect.Operator note
A modest rise in
concurrent_modificationis expected and correct. Races that previously succeeded and then stranded now surface as conflicts. The signal worth investigating is a sustained rate against a small set of paths, not the aggregate change.One behaviour change to know: a stale
Committingjournal now blocks commits to its paths until recovery settles it, where previously those commits proceeded and stranded. Visible and self-healing on reopen, versus silent and terminal — but new. Tracked in cloud-ops#205.Verification
hosted-provider, the job hosting theunified_clirace this fixes.node scripts/check-release-version.mjs— consistent at 0.1.0-beta.79.