Repository navigation
moq-net: bound incomplete messages with receive credit #5735
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Closed
Closed
Changes from all commits
Commits
Show all changes
79 commits
Select commit
Hold shift + click to select a range
a62b26d
quest: claim quest/m1/quic/fork/switch
kixelated 590d323
feat(moq-tokio): import quinn's async layer and web-transport-moq ver…
kixelated e8195bd
feat(quic)!: run moq-tokio and moq-uring on moq-quic
kixelated 866b13d
fix(moq-tokio): log a CONNECT stream cut off by the close at debug
kixelated 88a6fae
docs: point fork and advisory guidance at moq-quic
kixelated 2d50267
docs: format the upgrade note
kixelated c2993ca
quest: finish quest/m1/quic/fork/switch
kixelated fcd8ea4
Merge origin/main into quest/m1/quic/fork/switch
kixelated 5c7093f
claim quest/m1/quic/receive-credit
kixelated 15d4076
feat(quic): hold connection credit until the receiver releases it
kixelated e111abf
test(moq-tokio): gate the timed helper with its only caller
kixelated a945ea1
Merge remote-tracking branch 'origin/quest/m1/quic/fork/switch' into …
kixelated 5b7bff2
Merge origin/main into quest/m1/quic/fork/switch
kixelated 43193f9
Merge remote-tracking branch 'origin/main' into quest-switch-alias
kixelated 188b08c
fix(tokio): mark quic::web and quic::driver error enums non_exhaustive
kixelated d35e2cd
feat(quic): hand native receivers owned Credit handles
kixelated 5d21b4f
fix(tokio): count in-flight accepts in wait_all_draining
kixelated 50ebb4e
style(moq-tokio): apply quinn formatting to the held credit code
kixelated 21cac2b
fix(tokio): wake draining waiters when accept empties the queue
kixelated 2c3b97b
Merge remote-tracking branch 'origin/quest/m1/quic/fork/switch' into …
kixelated c1f4cfd
fix(tokio): surface non-WouldBlock receive errors, cap moq_quic logs
kixelated b389763
refactor(moq-uring): rename Connection::credit to credit_stats
kixelated c9b8403
quest: claim quest/m1/quic/receive-memory
kixelated 420f102
Merge remote-tracking branch 'origin/quest/m1/quic/fork/switch' into …
kixelated f793080
Merge remote-tracking branch 'origin/quest/m1/quic/receive-credit' in…
kixelated 738c16e
refactor(moq-uring): expose Connection::stats instead of credit_stats
kixelated 888523e
Merge remote-tracking branch 'origin/main' into iter/receive-credit
kixelated c0f8705
wip(moq-net): carry receive credit through transport and Reader
kixelated a787581
Merge remote-tracking branch 'origin/quest/m1/quic/receive-credit' in…
kixelated 0d565cf
wip: Unheld credit for the WebTransport adapters
kixelated ecd05da
wip(moq-net): track every lite and ietf reader for receive-credit rec…
kixelated 8e780f4
test(moq-net): receive-credit recovery over a finite memory window
kixelated b2f62b3
feat(moq-quic): report when held credit is all the peer may send
kixelated 8528176
feat(moq-tokio): hold receive credit through native QUIC
kixelated c31d16d
Merge remote-tracking branch 'origin/main' into iter/receive-credit
kixelated 5ed1dd3
refactor(moq-tokio): fold held reads into read and read_chunk
kixelated 78dfcfb
Merge remote-tracking branch 'origin/main' into iter/receive-credit
kixelated 1d06361
style: rustfmt receive credit changes
kixelated cc58807
fix(moq-quic): bind Credit to the connection that handed it out
kixelated b857247
feat(moq-uring): hold receive credit through native QUIC
kixelated 2a57949
Merge remote-tracking branch 'origin/quest/m1/quic/receive-credit' in…
kixelated c97deab
Merge branch 'quest/m1/quic/receive-credit' of github.com:moq-dev/moq…
kixelated 33479f3
test(moq-uring): a partial frame gives way over the worker's QUIC path
kixelated e1bac99
fix(moq-tokio): keep the scripted session behind the websocket feature
kixelated 071d21f
quest: split JavaScript sender and benchmark coverage out of receive-…
kixelated cd4bade
Merge branch 'main' of github.com:moq-dev/moq into quest/m1/quic/rece…
kixelated 62d3fe8
quest: complete receive-memory
kixelated b0250ca
Merge branch 'main' of github.com:moq-dev/moq into quest/m1/quic/rece…
kixelated 661b8bb
fix(moq-net): pick a pressure victim in linear time
kixelated a19b7c1
Merge branch 'main' of github.com:moq-dev/moq into quest/m1/quic/rece…
kixelated 2d468d4
fix(moq-net): report a memory window fill only while it lasts
kixelated 093c45b
fix(moq-quic): credit a reset stream's bytes once when it is then sto…
kixelated d6891e0
Merge main into quest/m1/quic/receive-memory
kixelated a1a4765
Merge main into quest/m1/quic/receive-memory
kixelated 9f787af
Merge branch 'main' of github.com:moq-dev/moq into quest/m1/quic/rece…
kixelated ebb81d9
test: link the receive credit tests into each crate's integration binary
kixelated f229baa
fix(moq-net): evict a subgroup tail parked on its fill
kixelated 78065cf
fix(moq-net): end an evicted data stream wherever its handler waits
kixelated 9a25891
Merge the parallel fill-handoff eviction fix
kixelated baee41e
fix(moq-net): end evicted control streams wherever their handler waits
kixelated d53a229
Merge branch 'main' of github.com:moq-dev/moq into quest/m1/quic/rece…
kixelated 26ae1e7
fix(moq-net): evict a stream without its reader
kixelated 4af7531
style(moq-tokio): format the driver's stopper as quinn does
kixelated 6fa775c
Merge branch 'main' of github.com:moq-dev/moq into quest/m1/quic/rece…
kixelated 95af801
docs(moq-tokio): bound iroh's incomplete messages by its stream limit…
kixelated 12c00ec
Merge branch 'main' of github.com:moq-dev/moq into quest/m1/quic/rece…
kixelated 27d3b18
Merge branch 'main' of github.com:moq-dev/moq into quest/m1/quic/rece…
kixelated 2f5be7e
fix(moq-net): free a parked reader's buffer with its evicted credit
kixelated 98c7189
Merge branch 'main' of github.com:moq-dev/moq into quest/m1/quic/rece…
kixelated 9c14af1
fix(moq-net): never return credit before its buffered bytes are freed
kixelated e1d4e86
Merge branch 'main' of github.com:moq-dev/moq into quest/m1/quic/rece…
kixelated b9ebaf2
fix(moq-net): keep a partial frame's credit until the frame is given up
kixelated b961141
fix(moq-net): wait out an evicted partial unit before cancelling another
kixelated 01ab75d
fix(moq-tokio,moq-uring): wake a parked read when a Stopper stops it
kixelated 8d22af6
Merge branch 'main' of github.com:moq-dev/moq into quest/m1/quic/rece…
kixelated 4dcd59c
refactor(moq-net): give a partial frame's credit to the frame that ow…
kixelated 0b0fcd7
fix(moq-uring): keep a stop from reading as the stream's end in poll_…
kixelated a5a71b5
Merge branch 'main' of github.com:moq-dev/moq into quest/m1/quic/rece…
kixelated 76660fe
test: move this branch's tests onto moq-clock
kixelated File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,39 @@ | ||
| # [M] Prove receive memory with JavaScript senders and benchmarks | ||
|
|
||
| ## Goal | ||
|
|
||
| A JavaScript sender drives both native receivers into receive-credit | ||
| exhaustion and they recover, and nightly measures what bounded receive memory | ||
| costs. This is coverage for the message-assembly work in #5735, with no new | ||
| transport behavior. | ||
|
|
||
| ## Plan | ||
|
|
||
| Split out of #5735, which lands native credit holding, pressure recovery, and | ||
| the minimum receive window with Rust-only end-to-end tests over tokio and | ||
| io_uring. | ||
|
|
||
| A JavaScript sender over the stock receivers cannot stall them. The minimum | ||
| window fits the largest unit, and a strict-priority sender finishes one | ||
| stream before the next, so every frame completes. The test therefore needs a | ||
| receiver whose connection window is far below the minimum. Neither stock | ||
| config allows that, so the test assembles a WebTransport (HTTP/3) server | ||
| from each raw driver: tokio's `quic::driver` with `quic::web::Server`, and | ||
| an io_uring endpoint in web mode. Keep it test-only; do not add a public way | ||
| to configure a window below `MIN_RECEIVE_WINDOW`. | ||
|
|
||
| The sender is a Bun script using `@moq/web-transport`, pinned to the test | ||
| server's certificate hash with WebSocket disabled. It mirrors the Rust tests | ||
| in `rs/moq-tokio/tests/integration/receive_credit.rs`. A low-priority track sends a frame | ||
| larger than the window. A high-priority frame then has to complete, and a | ||
| later low-priority group has to arrive after the low stream is stopped. Run | ||
| it from Rust the way `rs/moq-tokio/tests/integration/max_age.rs` drives its Bun client, | ||
| and wire it into the interop workflow, since normal CI has no Bun. | ||
|
|
||
| The benchmark sweeps concurrent streams and frame sizes, and compares a | ||
| finite stream window with one that follows the connection window. Report | ||
| retained bytes (held plus unread credit), throughput, and frame completion | ||
| latency. Sweep streams and frame sizes on separate axes, so a cost that grows | ||
| with the stream count shows up as a slope. Wire it into `sh/gh/nightly.sh` | ||
| next to `benchmark_held_reads`. Unit tests stay on mocked time; the benchmark | ||
| is the only wall-clock part. | ||
This file was deleted.
Oops, something went wrong.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.