fix(provider): make session ownership transitions atomic#4190
Draft
bdsqqq wants to merge 3 commits into
Draft
Conversation
|
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 |
4 tasks
2 tasks
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.
What Changed
serialize provider session ownership transitions per thread, and fence delayed updates with a session generation.
failed start and resume attempts now clean up only the child and mcp credential created by that attempt. during cross-instance replacement, the committed session stays active until replacement persistence succeeds. same-instance
activeSession: "replace"remains a destructive restart because adapters expose one session per thread.Why
provider startup could orphan a child when adapter startup succeeded but persistence failed. concurrent start, resume, stop, recovery, and delayed updates could also overwrite newer ownership state.
i hit this while adding pi: a session started successfully, failed to persist the files it needed, and then nobody owned the child.
so the persisted binding is now the ownership boundary. transitions around it are serialized, stale updates are rejected by generation, and cleanup is scoped to resources created by the failed attempt. cleanup failures stay secondary to the original lifecycle failure.
Stack
Checklist
I included before/after screenshots for any UI changesI included a video for animation/interaction changesNote
Make provider session ownership transitions atomic with per-thread locking and generation tracking
Semaphore-based locking and a generation counter toProviderServiceso that session start, stop, send-turn, and recovery operations are serialized per thread and stale updates from superseded sessions are silently dropped.prepareMcpSession,commitMcpSession,rollbackMcpSession) issue, selectively revoke, or restore credentials as a unit with session binding changes.startSessionaccepts a newactiveSession: 'reuse' | 'replace'option;ProviderCommandReactorpasses'replace'on restart and omits the option otherwise.McpSessionRegistrygainsissueUncommittedMcpCredentialandrevokeActiveMcpProviderSessionto support selective, single-credential revocation without affecting other credentials on the same thread.📊 Macroscope summarized d3b944e. 4 files reviewed, 0 issues evaluated, 0 issues filtered, 0 comments posted
🗂️ Filtered Issues
No issues evaluated.