Repository navigation
test(net): acknowledge upstream FINs on arrival in relay_upstream_close - #7066
Conversation
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Warning Review limit reachedYou've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. Next included review available in 9 minutes. View limit details
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 |
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
kixelated
left a comment
There was a problem hiding this comment.
Automated review by review (OpenAI)
Reviewed commit: 00d376a
No actionable bugs found. The direction is sound: enabling ack_fins() on the publishing upstream transport before finishing the tracks removes the mock's read-before-ack dependency, exercising the unread-FIN/session-close race while preserving the existing frame-completeness and clean-end assertions. Reusing this test and the existing transport knob is simpler than adding a duplicate scenario; no production API or wire behavior changes.
Verification: inspected the changed test, connection harness, and mock FIN acknowledgment implementation on GitHub. Tests and the reported regression-revert experiment were not run independently.
|
Merge summary: no changes were needed. CI passed on (Written by Claude Opus 5.5) |
Problem
relay_upstream_closechecks that a relay ends a finished track cleanly downstream after the publisher's session closes. The mock transport acknowledged a FIN only once the relay read it, so the publisher's close could not drain until the relay already had every SUBSCRIBE FIN. QUIC acknowledges a FIN when it arrives, before the application reads it. So a draining close can finish, and the session can close, while the relay still has the FIN unread.That is the race #6741 fixed, but the test only caught it on Lite03 and Lite04, through their tail grace. With #6741's
poll_drainchange reverted, Lite05 and Lite06 still passed. A real relay in that window ends a downstream subscriptionUnroutableafter every frame arrived, instead of finishing it.Approach
The publisher's transport acknowledges FINs on arrival (
ack_fins), as QUIC does. With #6741's subscriber change reverted, the test now fails on every Lite version through 06:It passes on
mainfor every listed version, for both close and abort. The doc comments now say why the close drains before the relay reads.Impact
Alternatives
Follow-ups
🤖 Generated with Claude Code
(Written by Claude Opus 5.5)