Support WebTransport anticipatedStreams#3473
Support WebTransport anticipatedStreams#3473jesup wants to merge 1 commit intousers/jesup/avoid_PMTUDfrom
Conversation
There was a problem hiding this comment.
Pull request overview
This PR adds a WebTransport-facing API to declare anticipated incoming stream concurrency per session and plumbs that through to QUIC MAX_STREAMS updates so the peer can open more streams than the handshake baseline.
Changes:
- Add transport-layer setters to update advertised remote stream limits (uni/bidi) via
MAX_STREAMS. - Track per-session anticipated uni/bidi incoming counts and sum them across sessions to drive connection-level stream limits.
- Add WebTransport tests validating when
MAX_STREAMSframes are (and are not) sent.
Reviewed changes
Copilot reviewed 9 out of 9 changed files in this pull request and generated 4 comments.
Show a summary per file
| File | Description |
|---|---|
| neqo-transport/src/streams.rs | Adds setters to update remote stream limits for uni/bidi streams. |
| neqo-transport/src/fc.rs | Documents intended set_max_active behavior related to monotonic limit updates. |
| neqo-transport/src/connection/params.rs | Updates docs for baseline stream limits and how they can be increased post-handshake. |
| neqo-transport/src/connection/mod.rs | Exposes connection-level setters for remote max streams (uni/bidi). |
| neqo-http3/src/features/extended_connect/tests/webtransport/mod.rs | Wires in the new anticipated-streams test module. |
| neqo-http3/src/features/extended_connect/tests/webtransport/anticipated_streams.rs | New tests for anticipated stream APIs and MAX_STREAMS transmission behavior. |
| neqo-http3/src/features/extended_connect/session.rs | Stores per-session anticipated incoming uni/bidi counts with accessors. |
| neqo-http3/src/connection_client.rs | Adds public Http3Client API methods to set anticipated incoming stream counts. |
| neqo-http3/src/connection.rs | Implements the handlers that store anticipated values and sum across sessions to update transport limits. |
mxinden
left a comment
There was a problem hiding this comment.
I am missing context. What is the goal of this feature? What does it enable applications to do?
Note that, in case we ever run multiple sessions and HTTP/3 requests on the same connection, a single session could choose the global limit, by setting its session limit, which propagates to a global limit.
| /// in neqo-transport). Values at or below this require no MAX_STREAMS frame. | ||
| const STREAM_LIMIT_DEFAULT: u64 = 100; | ||
|
|
||
| // ── helpers ────────────────────────────────────────────────────────────────── |
There was a problem hiding this comment.
I don't think we use these heading styles anywhere else in the codebase. Not opposed, but would like to be consistent.
martinthomson
left a comment
There was a problem hiding this comment.
This change is not what I would have expected from this one. The goal of this is to ensure that the flow control allocation for streams is generous enough that the server can make streams without getting blocked. To that end, this should route the message through to the max_active value on the relevant ReceiverFlowControl instance.
There is also the potential for this input to be fed to ConnectionParameters::max_streams() if the connection has not been created yet. That is a matter for the neqo glue code in Firefox.
In terms of spelling, this can use a better name than the one in the WT spec. set_active_streams or increase_max_active_streams...
9fdf5e7 to
2f30ddf
Compare
225f726 to
3dba9cd
Compare
|
This PR is part of a stack of 13 bookmarks:
Created with jj-stack |
|
Perhaps this is closer to what you expected |
Failed Interop TestsNone ❓ All resultsSucceeded Interop TestsQUIC Interop Runner, client vs. server neqo-pr as clientNone ❓ neqo-pr as serverNone ❓ Unsupported Interop TestsQUIC Interop Runner, client vs. server neqo-pr as clientNone ❓ neqo-pr as serverNone ❓ |
No description provided.