Skip to content

fix(net): a moq-transport FETCH run reads at its stream's speed - #8231

Merged
kixelated merged 2 commits into
mainfrom
quest/m2/unbounded-groups/fetch-run-unpaced
Nov 8, 2026
Merged

kixelated merged 2 commits into
mainfrom
quest/m2/unbounded-groups/fetch-run-unpaced

Conversation

@kixelated

@kixelated kixelated commented Nov 8, 2026 •

Copy link
Copy Markdown
Collaborator

Finishes quest/m2/unbounded-groups/fetch-run-unpaced.md, per the 2026-11-07 /quest-unblock decision (moq-dev/moq#8215): no flow control between groups on either wire.

Summary

Undoes the moq-transport FETCH-run pacing moq-dev/moq#8117 added. Once a reader had lost a group to eviction, a FETCH stream was held unread at each group boundary until a reader took the group before. That is head-of-line blocking: under backpressure the head is evicted and cancels everything queued behind it. A FETCH run now reads at the speed its stream arrives, as a lite-07 history run does, and a reader that falls off the cache tail gets Evicted, then refill-once or a refresh.

Overlap checked: moq-dev/moq#8041 and moq-dev/moq#8201 touch the same files but neither removes this pacing; expect textual conflicts only.

Public API: none. Wire: none.

Validation

  • cargo clippy -p moq-net --all-targets --all-features -- -D warnings
  • cargo clippy -p moq-net --all-targets --no-default-features -- -D warnings
  • cargo fmt --check -p moq-net
  • cargo test -p moq-net --all-features (all pass)
  • quest check

Follow-ups

None.

Models

  • Size: S
  • Implementer: Claude Code, claude-opus-5-5, medium effort

Review

Rewritten by quest review after each round.

  • Reviewer: Codex, gpt-6.1-sol, high effort
  • Session: 01a1b894-eb36-7cf1-8a4e-b1f96c27e561, round 1
  • Head: b1f3b35
  • Base: origin/main at 7a272fc
  • Score: 9/10, The focused removal preserves group completion, within-group pacing, and existing eviction and refill handling; builds and tests were not run, as instructed.
  • Findings: none

🤖 Generated with Claude Code

(Written by Claude Opus 5.5)

kixelated and others added 2 commits November 7, 2026 16:06
Remove the group-boundary pacing #8117 added: once a reader lost a group to
eviction, the FETCH stream was held unread until a reader took the group
before. Pacing between groups is head-of-line blocking, so a slow reader now
falls back on Evicted and refill-once or a refresh, as on lite-07.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@kixelated kixelated changed the title Remove FETCH-run pacing fix(net): a moq-transport FETCH run reads at its stream's speed Nov 8, 2026
@kixelated
kixelated marked this pull request as ready for review November 8, 2026 00:37
@coderabbitai

coderabbitai Bot commented Nov 8, 2026

Copy link
Copy Markdown
Contributor

Warning

Review limit reached

You'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 5 minutes.

Check out review usage here.

View limit details

Limit details: You’ve used all 4 included reviews currently available.

Learn how review limits work.

Review configuration:

Run configuration

  • Source mode: Auto
  • Repository: Unavailable
  • Branch: Unavailable
  • File: No configuration file from this repository applied
  • Commit: Unavailable
  • Layers: Organization UI
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: e27eead3-a914-4638-aa5c-ced89af05471
Commits

Reviewing files that changed from the base of the PR and between fe00d62 and b1f3b35.

Files selected for processing: 6

  • quest/m2/unbounded-groups/README.md
  • quest/m2/unbounded-groups/fetch-run-unpaced.md
  • rs/moq-net/src/coding/reader.rs
  • rs/moq-net/src/ietf/subscriber.rs
  • rs/moq-net/src/lite/test_transport.rs
  • rs/moq-net/src/model/track/fill.rs
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

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.

Share

@kixelated kixelated left a comment

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Automated review by review (OpenAI)

Reviewed head: b1f3b35.

No actionable findings in this removal. GroupFetchObjects now advances directly to RangeWriter::open, which still finishes the preceding group, validates ordering/range bounds, and settles errors. Within-group admission/payload pacing remains in FetchPayloadRecv and Reader; local batch-fill pacing and the eviction counter used by refill-once handling also remain.

Direction: keep the focused removal of cross-group wire pacing, consistent with the recorded decision to let slow readers use eviction/refill behavior. Verification was GitHub-only static review of the diff and relevant FETCH, reader, fill, miss, and test-transport paths. Tests, builds, and quest tooling were not run.

@pullfrog pullfrog Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ No new issues found.

Reviewed changes

A complete, faithful revert of the FETCH-run pacing added in #8117, per the 2026-11-07 no-flow-control-between-groups decision (#8215). I diffed this branch against #8117's own patch: every line that PR added is removed here, and the pre-#8117 shape is restored in each file.

  • GroupFetchObjects reads at the stream's speed ( rs/moq-net/src/ietf/subscriber.rs:7648 ): the paced hold and the per-boundary poll_pace call are gone, leaving writer.open(...) as the only step. RangeWriter::open (:539) calls finish() itself, so the prior group still completes exactly as before; only the wait is removed.
  • Fill::poll_run_paced deleted ( rs/moq-net/src/model/track/fill.rs:1049 ): Fill::poll_paced stays and still has a live consumer in lite's FillServeRun (rs/moq-net/src/lite/subscriber.rs:12326), which is the #8017 batch-fill pacing the body keeps. TrackState::evictions is still bumped (rs/moq-net/src/model/track.rs:1132) and still read by track/miss.rs:662, so nothing is orphaned.
  • Reader::poll_pace private again ( rs/moq-net/src/coding/reader.rs:482 ): no callers outside the module (poll_admit at :474, poll_lease at :394), so within-group pacing and the Pause budget are untouched.
  • #8117's test and hooks removed: ScriptedSession::with_receive_window, its receive_window impl, and the Stream::open route in GroupFetchRun::with_session all go; the harness returns to session.open_bi + Reader::new, matching pre-#8117. The remaining with_receive_window/receive_window in that file belong to SinkSession, not ScriptedSession.
  • Quest bookkeeping: fetch-run-unpaced.md and its epic README entry are deleted, with no other references to the path or title left in the tree (including sh/gh/test-inventory.allow). The epic README's remaining "paced" prose describes flights and rungs, not FETCH runs.

No stale prose about FETCH-run pacing remains in doc/, drafts/, or the crate. The residual behavior change is the one the maintainer decided: a run wider than the cache now evicts its own groups, and the existing, bounded refill-once path in track/miss.rs handles a reader that falls off the tail.

Pullfrog  | View workflow run | Using deepseek-v4.1-flash-1017 (free via Pullfrog for OSS) | 𝕏

@kixelated
kixelated added this pull request to the merge queue Nov 8, 2026
Merged via the queue into main with commit 8b14218 Nov 8, 2026
14 checks passed
@kixelated
kixelated deleted the quest/m2/unbounded-groups/fetch-run-unpaced branch November 8, 2026 05:34
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant