fix: retry on stream_version race in event store#1571
Open
sfncore wants to merge 1 commit intopingdotgg:mainfrom
Open
fix: retry on stream_version race in event store#1571sfncore wants to merge 1 commit intopingdotgg:mainfrom
sfncore wants to merge 1 commit intopingdotgg:mainfrom
Conversation
The stream_version is computed via subquery (SELECT max + 1), so two concurrent appends to the same stream both read the same max version and the second hits the UNIQUE constraint. Add optimistic retry (up to 3 attempts) on ConstraintError so the loser re-reads the incremented version and succeeds. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
|
Important Review skippedAuto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Repository UI Review profile: CHILL Plan: Pro Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
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.
Summary
OrchestrationEventStore.appendwhere concurrent appends to the same stream compute identicalstream_versionvia subquery, causing UNIQUE constraint violationsConstraintErrorso the losing writer re-reads the incremented version and succeedsTest plan
PersistenceSqlError: UNIQUE constraint failed🤖 Generated with Claude Code
Note
Medium Risk
Touches the event persistence write path and changes behavior under contention by retrying inserts, which could mask unexpected constraint failures if mis-scoped. Retry is bounded (3 attempts) and limited to SQL constraint errors, keeping overall risk moderate.
Overview
Improves robustness of event appends under concurrency.
OrchestrationEventStore.appendnow retries the insert up to 3 times when the database returns a SQLConstraintError, reducing failures from races where concurrent writers compute the samestream_version.Non-constraint SQL and decode errors are still surfaced via the existing error mapping; only qualifying constraint failures trigger the retry.
Written by Cursor Bugbot for commit 75247d3. This will update automatically on new commits. Configure here.
Note
Retry up to 3 times on
ConstraintErrorinmakeEventStore.appendAdds an
Effect.retrystage in OrchestrationEventStore.ts to handlestream_versionrace conditions. When an INSERT fails with aSqlErrorwrapping aConstraintError, the append is retried up to 3 times before propagating the error.Macroscope summarized 75247d3.