Repository navigation
refactor(cli): give independent importers distinct epochs - #5967
Conversation
Remove the CLI shared epoch, HLS clock override, and epoch-only TS grid/window machinery. Restore passthrough history-based cuts and clamping; unwrap PES against program history instead of wall time. Checkpoint: cargo fmt and git diff --check passed. CLI, mux, and HLS suites are compiling. Full just check, draft validation, interop, demux 1+1 and bufferbloat acceptance are not yet complete. The original before-fix regression build was interrupted by source changes and is not evidence of reproduction. Unresolved: quest requests passthrough --stitch acceptance, but passthrough intentionally refuses --stitch to preserve source bytes. Await maintainer choice before altering or asserting that behavior. Co-Authored-By: GPT-6 <noreply@openai.com>
Preserve in-progress demux 1+1 and finite bufferbloat acceptance tests. The plain 1+1 test and fast-file regression passed before arrival-gap instrumentation and the shaped variant were added. The shaped build and draft validation were interrupted on maintainer instruction to skip this quest while passthrough acceptance is unresolved. No scope decision was made; passthrough identity and refusal remain unchanged. Checks: original targeted CLI/mux/HLS suite 1907 passed, 5 skipped; initial new demux and fast-file regressions 2 passed. Formatting and diff checks pass. Current shaped test build, full just check, drafts, interop, and benchmark validation remain incomplete. Co-Authored-By: GPT-6 <noreply@openai.com>
|
Stopped at the maintainer's request to skip uncertain quests. Checkpoints 49f8ca9 and 0715e18 preserve all source; passthrough byte identity and its refusal of Initial CLI/mux/HLS checks passed 1907 tests (5 skipped), and the initial demux 1+1 plus fast-file regressions passed 2 tests. Later bufferbloat instrumentation/build and draft validation were interrupted; full checks, interop, benchmarks, and gap measurements remain incomplete. The draft body records the unresolved passthrough acceptance choice. Recommendation when resumed: retain byte identity, test passthrough termination on restart, and reserve marked program switching for demultiplexed exports, subject to a maintainer decision. (written by GPT-6.1-Sol) |
Place whole PES on the program's PTS history instead of the removed clock-nearest era. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Window each stitched program from the PCR that opens its slot, throttle the bufferbloat run below the media rate without starving it, and cover a passthrough pair: its export stays on its importer and ends with it. Delete the finished quest, drop MIGRATE notes for APIs that never shipped, and rewrap the docs. 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 1 minute. 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. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: ac8d3dc5fb
ℹ️ 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".
Place TS sections (#6005) on the program's PTS history like whole PES, and keep that history across a flagged clock break, so a forward jump across the 33-bit wrap carries on instead of rewinding. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 4a1705fff2
ℹ️ 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".
Add Unreleased MIGRATE entries for moq --epoch / MOQ_EPOCH, moq_hls import::Config::timebase and Error::ForeignTimebase, and moq_mux catalog::Timebase::is_on, and stop clearing MOQ_EPOCH in CLI tests. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: d8d1b2a0c3
ℹ️ 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".
Add Unreleased entries to hang and moq-mux MIGRATE.md: randomAccess stays false once a group starts off a random access point, muxRate follows the measured source rate, and passthrough fallback cuts follow each group's start. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 85c88fa007
ℹ️ 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".
An import started just past a wrap read a lagging stream's pre-wrap PTS as a whole wrap forward. The PTS history is now signed, so it reads as a small step back; a PES landing before the broadcast clock's zero is dropped and counted as unplaced, as a whole PES there already is. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
--epoch is gone (moq-dev#5967), so its refusal of --stats goes with it; the stats report asks Demand::wanted (moq-dev#5930) whether anyone reads it. Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Problem
Independent importers cannot publish identical tracks. Each one has its own loss, start point, and group history. A shared
--epochlet a relay resume a subscription mid-group on another importer's media, andmoq export tsexited on the rewind (#4354).Approach
Implements the distinct importer epochs quest, as replanned in moq-dev/moq#5963 and moq-dev/moq#5964. This PR deletes the quest and its references.
moq --epochandMOQ_EPOCHare removed. Each run mints its own epoch. Route and binding epochs stay for replicas of one publisher's bytes.randomAccesscovers every published group, andmuxRateis the measured source rate, instead of two-second windows.Timebase::is_onis removed.unplaced.Kept after the audit, since a single importer is better with each:
Timebase::place, for sources whose timestamps are real wall clocks (moqsink uses it).Decisions
No maintainer input was available for this round, so each recommended option was taken.
How should the
--passthroughpair be tested, given thatexport ts --passthroughrefuses--stitchto keep source bytes?export ts --passthrough. It stays on its importer while a backup starts, and ends when that importer goes. This is the quest Goal's "any other consumer ends, as on any restart".How deep should the in-tree bufferbloat run throttle?
Should MIGRATE notes cover the removed
Timebase::is_on,import::Config::timebaseandError::ForeignTimebase?releasehas noTimebase).rs/moq-cli,rs/moq-hlsandrs/moq-muxMIGRATE.md cover--epoch/MOQ_EPOCH,Config::timebase/Error::ForeignTimebase, andTimebase::is_on, each with how to migrate.How should an import started just past a wrap place a stream still before it?
stats::Stream::unplaced, as a whole PES there already is. That costs at most the few hundred ms the stream lags behind the wrap.Validation
just check: lint, and all tests passed.export tsexits with "frame timestamp is below the live edge" when the relay switches to a same-hop standby quickly #4354's 1+1 setup on lite-07: one relay, twomoq import tsfed one live stream, twomoq export ts --stitch. Starting the backup, killing the newest, and restarting it each produce one marked program switch (a new PAT version, every PID flagging the break), and no exit. The bufferbloat variant passed 5 of 5 local runs.a_flagged_jump_across_a_wrap_carries_onfails without the kept history (the import rejects the jump as a rewind) and passes with it.a_stream_behind_the_first_wrap_steps_backfails without the signed history (the peer lands a whole wrap ahead) and passes with it.Viewer output gap at each switch (export
--delay 3s):When the newest importer is killed, the 11 s gap is the relay noticing the dead session (QUIC idle timeout) before the older route wins back. Each other gap is about the export's delay, plus the queue under bufferbloat.
Impact
--epochflag andMOQ_EPOCHare gone.moq_hls::import::Config::timebase,moq_hls::Error::ForeignTimebaseandmoq_mux::catalog::Timebase::is_onare removed, with MIGRATE entries.randomAccess, a measuredmuxRate, history-based PCR unwrap, and a one-second fallback cut.drafts/draft-lcurley-moq-mpegts.mdis updated. The e2ee draft drops "explicit or shared epoch".Follow-ups
bursts_cross_a_transport_peer::impairedfailed once on the io_uring job of the previous head ("the subscription aborted: internal error"). It passed on this head, and this PR does not touch the relay.PID 258 B underflow x1on this head. The same failure hit unrelated branches in the same hour (fix/quic-no-default-clippy,quest/m1/auth/request-race), and no open PR fixes it. The job is not required.Closes #4354
(Written by Claude Opus 5.5)
🤖 Generated with Claude Code