server: own WebSocket close fan-out - #927
Conversation
|
Important Review skippedAuto reviews are disabled on base/target branches other than the default branch. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Organization UI Review profile: ASSERTIVE Plan: Pro Plus Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
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 |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 1d5f55349c
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
1d5f553 to
bab1273
Compare
bab1273 to
ec524f3
Compare
Problem
When VoiceServer escalated a natural drain, it spawned one raw close task per active WebSocket and kept only the hard-timeout boolean from a
gather(return_exceptions=True). Completed connection-close failures were silently discarded, and cancellation-resistant closes had no named owner.Changes
RuntimeTaskScopeWhy / impact
A broken connection close is now attributable to
easycat-raw-ws-close-<key>, while a close that resists the hard-timeout cancellation remains scope-owned after teardown advances.Root cause
The close fan-out used
return_exceptions=Trueto isolate sibling failures but discarded the returned list, and its manual raw spawns predated WS2.5 task scopes.Checks
voice_server.py— passed