From d76bdbf74bcaffd7f0a22991191a4e34de38c09a Mon Sep 17 00:00:00 2001 From: Luke Curley Date: Fri, 16 Oct 2026 10:30:17 -0700 Subject: [PATCH 1/2] quest: stats tracks fail loud on an oversized frame Co-Authored-By: Claude Opus 5.5 --- quest/m1/README.md | 1 + quest/m1/stats-frame-too-large.md | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+) create mode 100644 quest/m1/stats-frame-too-large.md diff --git a/quest/m1/README.md b/quest/m1/README.md index ffab052994f..f95d0551cb6 100644 --- a/quest/m1/README.md +++ b/quest/m1/README.md @@ -155,6 +155,7 @@ above them. - [Binding track resolver](/quest/m1/binding-track-helper.md) - binding apps subscribe to a rendition without inlining `track` or the key - [Exporters follow a rendition to a new track](/quest/m1/export-rendition-rebind.md) - the fMP4, TS, MKV and FLV exporters rebuild a rendition whose resolved `track` or `broadcast` changes under the same ID +- [Stats fail loud](/quest/m1/stats-frame-too-large.md) - a stats track whose frame outgrows the cache ends with FrameTooLarge instead of serving a stale snapshot - [Stats prefix tracks](/quest/m1/stats-prefix-tracks.md) - additive tracks required by the breaking lag API; existing maps remain supported - [C++ and OBS package proof](/quest/m1/cpp-package-check.md) - the installed artifacts pass before their first release diff --git a/quest/m1/stats-frame-too-large.md b/quest/m1/stats-frame-too-large.md new file mode 100644 index 00000000000..f07a0c6b3e8 --- /dev/null +++ b/quest/m1/stats-frame-too-large.md @@ -0,0 +1,18 @@ +# [XS] Stats tracks fail loud on an oversized frame + +## Goal + +A stats track whose next frame exceeds the cache limit ends with +`FrameTooLarge` instead of silently serving its previous snapshot, so a +reader learns the track stopped tracking the relay. + +## Plan + +- `TrackPair::publish` in `rs/moq-stats/src/produce.rs` gets + `FrameTooLarge` from `update` (payload over `group::MAX_CACHE_BYTES`) and + only logs it at debug level; readers keep the stale frame indefinitely. + `publisher.json` near 50k paths is the likely first hit. +- Abort the plain and compressed tracks with the error (log at warn), and + add a test that overflows one. Prefix tracks get the same rule from + [Stats prefix tracks](/quest/m1/stats-prefix-tracks.md). +- Found in #5719. From a3772e1c2ed987e2ef45ff26895099c8fcaccbb5 Mon Sep 17 00:00:00 2001 From: Luke Curley Date: Fri, 16 Oct 2026 16:02:55 -0700 Subject: [PATCH 2/2] quest: abort only the stats flavor that overflows Co-Authored-By: Claude Opus 5.5 --- quest/m1/stats-frame-too-large.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/quest/m1/stats-frame-too-large.md b/quest/m1/stats-frame-too-large.md index f07a0c6b3e8..72437489ef2 100644 --- a/quest/m1/stats-frame-too-large.md +++ b/quest/m1/stats-frame-too-large.md @@ -12,7 +12,9 @@ reader learns the track stopped tracking the relay. `FrameTooLarge` from `update` (payload over `group::MAX_CACHE_BYTES`) and only logs it at debug level; readers keep the stale frame indefinitely. `publisher.json` near 50k paths is the likely first hit. -- Abort the plain and compressed tracks with the error (log at warn), and - add a test that overflows one. Prefix tracks get the same rule from - [Stats prefix tracks](/quest/m1/stats-prefix-tracks.md). +- Abort only the flavor whose `update` failed (log at warn) and keep its + sibling publishing: DEFLATE can shrink an oversized plain frame or + slightly grow a fitting one. Test that the overflowing flavor ends with + `FrameTooLarge` while the other keeps updating. Prefix tracks get the same + rule from [Stats prefix tracks](/quest/m2/stats-prefix-tracks.md). - Found in #5719.