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
1 change: 0 additions & 1 deletion quest/m1/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,6 @@ lands before the cut.
- [Resume reorder](/quest/m1/resume-reorder.md) - a group whose stream header arrives after its successor's still resumes on failover; only a dropped or long-gone group fails
- [A widened max age re-offers cached groups](/quest/m1/resolved-demand.md) - a warm relay serves a reader with a wider max age the cached groups a cold relay would, with no wire change
- [Drop set](/quest/m1/drop-set.md) - each cursor judges missing groups against its own budget, so a narrow reader drops promptly and a widening re-offers groups already reported dropped on lite-07
- [SUBSCRIBE_OK names where delivery starts](/quest/m1/subscribe-ok-start.md) - a warm relay names the same start group as a cold one instead of groups it skipped as stale
- [Resumed close](/quest/m1/resume-closed.md) - a resumed JS track keeps its declared end across copies, and its `closed` and `largest()` settle on a clean end
- [Resumed in-flight groups](/quest/m1/resume-in-flight.md) - a replaced route copy stays while a group below its bound is in flight or it backs a handed-out group late, and no longer than the reader's budget
- [Recovered group readiness](/quest/m1/resume-readable.md) - a recovered JS group's `readable()` ignores frames its replacement replays
Expand Down
1 change: 0 additions & 1 deletion quest/m1/archive/tracks.md
Original file line number Diff line number Diff line change
Expand Up @@ -207,5 +207,4 @@ answer it. Wire: a new lite-07-wip stream.
## Related

- [SUBSCRIBE_TRACKS](/quest/m1/archive/subscribe-tracks.md) - moq-transport answers and learns listings through this hook
- [SUBSCRIBE_OK names where delivery starts](/quest/m1/subscribe-ok-start.md) - a warm relay answers like a cold one, found while building SUBSCRIBE_ALL
- [Subscribe ranges](/quest/m1/subscribe-ranges/README.md) - the subscription shape each per-track SUBSCRIBE uses
34 changes: 0 additions & 34 deletions quest/m1/subscribe-ok-start.md

This file was deleted.

32 changes: 31 additions & 1 deletion rs/moq-net/benches/session.rs
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,8 @@ struct Shape {
/// Whole groups each watched broadcast writes per round, so a serve loop finds a
/// backlog ready: the group rate a round stands in for.
burst: usize,
/// Cached groups per track before a join, whose older groups the live budget skips.
history: usize,
/// Bytes queued before a mock stream applies backpressure.
window: usize,
/// Read each group via a fresh FETCH rather than a live subscription.
Expand All @@ -126,6 +128,7 @@ impl Shape {
group_frames: FRAMES,
paced: false,
burst: 1,
history: 1,
window: 1024 * 1024,
fetch: false,
};
Expand Down Expand Up @@ -180,6 +183,11 @@ impl Shape {
String::new()
},
if self.fetch { "/fetch" } else { "" },
if self.history > 1 {
format!("/history={}", self.history)
} else {
String::new()
},
)
}
}
Expand Down Expand Up @@ -753,7 +761,15 @@ fn join(c: &mut Criterion, name: &str, shapes: impl IntoIterator<Item = Shape>)
let cluster = Cluster::new(version, *shape).await;
let payload = Bytes::from(vec![0; shape.frame]);
for track in &cluster.tracks {
write_group(track, &payload, shape.group_frames);
for sequence in 0..shape.history {
let mut group = track.append_group().unwrap();
for _ in 0..shape.group_frames {
group
.write_frame(Timestamp::from_millis(sequence as u64).unwrap(), payload.clone())
.unwrap();
}
group.finish().unwrap();
}
}
cluster
})
Expand Down Expand Up @@ -1255,6 +1271,20 @@ fn session(c: &mut Criterion) {
})
}),
);
// A live join skips a cached prefix. Sweep publishers against that prefix so
// resolving one start cannot hide a scan of unrelated publishers or group IDs.
join(
c,
"stale",
[1, 8, 32].into_iter().flat_map(|publishers| {
[1, 64, 1024].map(move |history| Shape {
publishers,
history,
..base
})
}),
);

join(c, "relays", [1, 2, 8].map(|relays| Shape { relays, ..base }));

churn(c, "sessions", [1, 16, 128].map(|sessions| Churn { sessions, held: 16 }));
Expand Down
Loading