diff --git a/quest/m1/test-flakes-2/README.md b/quest/m1/test-flakes-2/README.md index 953051feaaa..0c6d6445bcb 100644 --- a/quest/m1/test-flakes-2/README.md +++ b/quest/m1/test-flakes-2/README.md @@ -46,5 +46,6 @@ Public API: none. Wire: none. - [macOS receive credit](/quest/m1/test-flakes-2/macos-receive-credit.md) - `partial_control_requests_give_way` passes on the macOS lane, after checking for a shared platform cause - [moq-mux missing sequence](/quest/m1/test-flakes-2/mux-missing-sequence.md) - `missing_sequence_skips_on_live_track` runs on a paused clock - [moq-rtsp stall timers](/quest/m1/test-flakes-2/rtsp-stall-timers.md) - the 200 ms stall and keyframe tests run on a mocked clock +- [moq-gst sibling resume](/quest/m1/test-flakes-2/gst-sibling-resume.md) - an idle pad reads its named epoch again after a sibling restart, a likely liveness bug fixed before the test - [moq-gst pinned replay](/quest/m1/test-flakes-2/gst-pinned-replay.md) - the pinned-instance finish test waits on events instead of sleep loops - [Dart leak RSS](/quest/m1/test-flakes-2/dart-leak-rss.md) - the leak tests measure what moq owns, not process RSS diff --git a/quest/m1/test-flakes-2/gst-sibling-resume.md b/quest/m1/test-flakes-2/gst-sibling-resume.md new file mode 100644 index 00000000000..8757f54039e --- /dev/null +++ b/quest/m1/test-flakes-2/gst-sibling-resume.md @@ -0,0 +1,38 @@ +# [M] moq-gst resumes a named epoch after a sibling restart + +## Goal + +`a_sibling_restart_idles_a_reference_naming_the_old_epoch` +(`rs/moq-gst/src/source/imp.rs:4175`) never fails under load. Once the +instance a reference names serves its path again, the source always goes +back to reading it on the same pad. + +## Plan + +Decided 2026-10-25 (maintainer): treat it as a liveness bug first, then the +test. It failed once under host load during a `just check` for +[moq-dev/moq#6464](https://github.com/moq-dev/moq/pull/6464), and passed 5 of +5 times in isolation and in the full suite. The failure was +`3 never reached a pad: [Pad("video_0"), Segment("video_0", 46000), Buffer("video_0", 1)]` +at `Recorder::written`: after the replacing epoch dropped and the second +Restart arrived, the old instance wrote tag 3 every 50 ms for 10 s and none +of it reached the pad. A delay that long points to a missed resume, not a +slow test. + +- Reproduce first: under load, or deterministically by forcing the order of + the Restart and the old instance's re-subscription with a + `moq_clock::Manual` clock. +- Find why the idle pad never reads the named instance again, and fix it in + moq-gst or moq-net, wherever the resume is lost. +- Then make the test wait on the announce and pad events instead of the + sleep-polled `written()`. + +Separate from [gst-pinned-replay](/quest/m1/test-flakes-2/gst-pinned-replay.md) +by decision: it uses the same `Recorder` fixture, but the cause is likely +different. + +Public API: none expected. Wire: none. + +## Related + +- [moq-gst pinned replay](/quest/m1/test-flakes-2/gst-pinned-replay.md) - the same fixture's sleep-poll race