Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion quest/m1/archive/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,9 @@ unreferenced group objects one grace period after recovery.
supplied `broadcast::Producer` and serves FETCH through `track::Dynamic` with a byte-bounded
object LRU. `Reader::refresh` follows by listing timeline keys after its cursor, so gaps and
DVR expiry recover from the next checkpoint; `Reader::finish` applies out-of-band finality.
`rs/moq-archive/src/proof.rs` records one multi-rendition broadcast end to end: its exact keys and
bytes match on memory, local disk, and an unordered listing, FETCH replays every group exactly,
and a rendition's playback GETs only that rendition's objects.

### Format

Expand Down Expand Up @@ -133,7 +136,7 @@ owned by that prerequisite, not duplicated in archive storage.
- [Replay catalog](/quest/m1/archive/replay-catalog.md) - `moq import archive` publishes the recorded catalog live with `store` set, so stock `moq export hls` serves the whole replay
- [Browser archive](/quest/m1/archive/browser.md) - the same contract for browser-published broadcasts
- [DVR rewind](/quest/m1/archive/dvr.md) - seek through a bounded archive and return to live playback
- [Archive proof](/quest/m1/archive/proof.md) - prove persistence ordering, selective reads, exact FETCH replay, and timeline-only HLS generation
- [DVR timeline pruning](/quest/m1/archive/pruning.md) - a DVR deletes timeline objects no retained checkpoint needs

## Related

Expand Down
67 changes: 0 additions & 67 deletions quest/m1/archive/proof.md

This file was deleted.

17 changes: 17 additions & 0 deletions quest/m1/archive/pruning.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# [S] DVR timeline pruning

## Goal

A DVR writer deletes timeline objects that no retained checkpoint needs, so a
long-running DVR stores a bounded number of objects.

## Plan

`moq_archive::Writer` deletes expired group objects but never a
`segments/<segment>` timeline object, so a 24/7 DVR with 2s segments adds
about 43,000 objects a day, and every restart lists all of them. The draft
already allows it: the writer keeps the latest timeline object and enough
earlier groups to recover the retained window from a checkpoint. Delete the
oldest timeline objects no longer needed, one grace period after they stop
being needed, keeping the remaining keys contiguous, as recovery requires.
Extend the restart cleanup and its tests in `rs/moq-archive/src/writer.rs`.
1 change: 1 addition & 0 deletions quest/m2/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ upstream release waits in [m4](/quest/m4/README.md).
- [AV1 metadata separation](/quest/m2/av1-metadata.md) - retain metadata OBUs inline while evaluating separate delivery
- [SEI separation](/quest/m2/sei/README.md) - retain inline SEI until measured savings or a metadata-only consumer justify a split
- [Catalog track identity](/quest/m2/catalog-tracks.md) - compare immutable track definitions with explicit catalog-to-group binding
- [Archive S3 wire proof](/quest/m2/archive-s3.md) - the archive proof also runs through the S3 client against an in-process S3-compatible server
- [Mobile ownership](/quest/m2/mobile-ownership.md) - decide whether Rust or platform code owns mobile capture, codecs, and rendering
- [iOS capture](/quest/m2/mobile-capture-ios.md) - camera and screen capture if the mobile ownership decision selects Rust
- [Android capture](/quest/m2/mobile-capture-android.md) - NDK/JNI capture using the existing codecs if mobile ownership selects Rust
Expand Down
22 changes: 22 additions & 0 deletions quest/m2/archive-s3.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
# [S] Archive S3 wire proof

## Goal

The `moq-archive` proof (`rs/moq-archive/src/proof.rs`) also runs through
`object_store`'s S3 client against an in-process S3-compatible server, in CI
with no external network.

## Plan

The proof covers memory, local disk, and an S3-style listing fake
(`rs/moq-archive/src/mock.rs`), but not the S3 client: percent-encoded keys
such as `catalog%2Ejson` inside request URLs, `PutMode::Create` through
`If-None-Match`, `start-after` listing, and continuation tokens. Evaluate a
maintained in-process server (for example `s3s` with `s3s-fs`) on loopback;
refuse one that ignores conditional creates, since collisions would pass
silently. Gate it behind a dev-dependency feature if the build cost is large,
and wire it into at least the nightly workflow.

## Related

- [Timeline-indexed MoQ archives](/quest/m1/archive/README.md)
4 changes: 4 additions & 0 deletions rs/moq-archive/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,11 @@ pub use object_store;

mod error;
pub mod info;
#[cfg(test)]
mod mock;
mod path;
#[cfg(test)]
mod proof;
pub mod reader;
mod recover;
pub mod segment;
Expand Down
Loading
Loading