Repository navigation
fix(ietf): skip FETCH holes to the next cached group when nothing is upstream - #4558
Conversation
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…upstream Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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 head: 82cc24a
Direction: a good, narrowly scoped optimization. A publisher with no miss handler can safely treat its cache as authoritative and jump to the next cached group. Keeping the handler-backed walk unchanged is preferable to silently declaring upstream holes absent. The relay-side range-fill design is a separate, larger change and should stay separate.
No additional actionable defect found in the changed walk, plain/spliced cache helpers, regression test, and benchmark. checked_add preserves termination at the maximum sequence, and the latest-group cap retains the terminal probe. The sparse-span test covers the original denial-of-service shape; splice coverage would be a useful extension.
Verification: static diff and surrounding-source review only; Rust/Nix/just tooling is unavailable here, so I did not execute the tests or benchmark.
(Written by OpenAI)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
…p-4558 # Conflicts: # quest/m1/moxygen/README.md
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
Problem
The standalone FETCH walk (
walk_fetchinrs/moq-net/src/ietf/publisher.rs) askedfetch_groupfor every sequence from the start of the range to the newest group. With no fetch handler, each miss resolves at once, so one FETCH over a sparse track (for example groups 0 and 2^40) ran 2^40 iterations without yielding. With a handler, a relay sends one upstream FETCH per missing sequence.Approach
This lands only the no-handler half of
quest/m1/moxygen/fetch-span.mdplus its benchmark, as the maintainer decided, and deletes that quest: its relay (handler) half moves to the newquest/m1/subscribe-ranges/line planned in #4565.track::Consumer::next_cachedandfetches_misses. A spliced track looks for the next cached group across every segment and checks its newest segment for a handler, since that is where fetches go.quest/m1/subscribe-ranges/(quest: subscribe ranges replace FETCH in lite-07 #4565).a_standalone_fetch_skips_a_sparse_spanfetches across groups{0, 5, 2^40}. Without the fix it hits nextest's TIMEOUT.fetch(cargo bench -p moq-net --features fuzz --bench fetch) sweeps range span and present-group count as separate axes, reaching the private walk through the hiddenfuzzmodule as the announce bench does. Local results with 64 groups:fetch/spanstays flat at about 100-150 µs from 2^6 to 2^40.fetch/presentover a 2^24 range grows about linearly, from 4.6 µs for 1 group to 16.6 ms for 4096 groups (noisy machine).Impact
track::Consumerhelpers arepub(crate), andmoq_net::fuzz::walk_fetchis behind the hidden, off-by-defaultfuzzfeature.fetch_groupprobes on holes changes.Alternatives
Considered for the handler case, which now moves to
quest/m1/subscribe-ranges/(#4565):MoQCachefills cache gaps (fetchImpl/fetchUpstream, one interval per gap). It needs a range request ontrack::Dynamicorgroup::Request(additive public API) and a receive path for multi-group fetch streams inietf/subscriber.rs, which should land afterquest/m1/moxygen/fetch-fill.md. moq-lite FETCH names a single group, so a lite upstream would keep probing one sequence at a time.Follow-ups
quest/m1/subscribe-ranges/(quest: subscribe ranges replace FETCH in lite-07 #4565). This PR deletesfetch-span.mdand its entry in the moxygen README.(Written by Claude Opus 5.5)
🤖 Generated with Claude Code