Repository navigation
test(mux): reproduce the live export's burst loss over a session - #5857
Conversation
The TS validation flake lost MPEG-1 audio groups right after the join: the export subscribed with a zero budget and widened it after its first read, and the publisher skipped every group of a PES burst but the newest until the widening landed. Reproduce that deterministically over a lite-07 session on the in-memory transport. On main the export reads [0, 72000, 96000, ...], the CI signature exactly; with the budget on the first SUBSCRIBE nothing is lost. Also file a quest for moq-audio's Start::Latest warmup join, which narrows and then widens its budget the same way. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
ae82021 to
754a5af
Compare
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. |
|
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 12 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 |
|
Merging. This adds test and quest only, rebased on
(written by Claude Opus 5.5) |
Problem
#5854 fixed the MP2 holes in TS validation, but its tests check the mechanism's inputs: the budget on the first SUBSCRIBE, and the local latch. Nothing reproduces the loss itself deterministically; its repro was 24 staggered joiners under load.
Approach
a_live_start_loses_no_group_the_publisher_bursts(inrs/moq-mux/src/container/source.rs) runs a real lite-07 session overmoq_net::transport::memory, with paused time:ExportSourcesubscribes, and the publisher writes group 0.Verified on this branch, rebased on
main:main, which carries fix(mux): put a live export's budget on its first SUBSCRIBE #5854's fix.[0, 72000, 96000, 120000, 144000, 168000]: one 48 ms hole right after the first frame, then nothing lost once the widening lands. That is the CI signature (media skipped upstream ... at=2.917977s skipped=48ms).While building it I found that a front-resolved
track::Subscriber::updatereaches the upstream session only on the reader's next poll (resume::Readermirrors preferences lazily). So the test keeps polling the export the way a real export task does.This also adds the quest
quest/m2/audio-join-budget.md. moq-audio'sStart::Latestjoin with a warmup subscribes with just the warmup and widens after the first frame (joining_latest), the same narrow-then-widen shape, so it should be checked for the same race.Impact
Alternatives
Follow-ups
quest/m2/audio-join-budget.md, above.(written by Claude Opus 5.5)
🤖 Generated with Claude Code