Add support for GOAWAY draining events to support WebTransport#3465
Add support for GOAWAY draining events to support WebTransport#3465jesup wants to merge 1 commit intousers/jesup/exportkeyfrom
Conversation
There was a problem hiding this comment.
Pull request overview
Adds client-side WebTransport “draining” notifications in response to HTTP/3 GOAWAY, aligning behavior with the WebTransport-over-HTTP/3 spec’s graceful shutdown expectations.
Changes:
- Emit
WebTransportEvent::Draining { session_id }for all WebTransport sessions when the client receives GOAWAY. - Add helper APIs to identify WebTransport sessions and to inject GOAWAY frames in tests.
- Add WebTransport tests covering GOAWAY behavior for both “active” and “rejected” sessions.
Reviewed changes
Copilot reviewed 8 out of 8 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
neqo-http3/src/server.rs |
Adds a test-only helper to queue GOAWAY on all server connections. |
neqo-http3/src/connection_server.rs |
Adds a test-only helper to queue a GOAWAY control frame on a server handler. |
neqo-http3/src/connection_client.rs |
Emits WebTransportEvent::Draining when handling GOAWAY, before resetting rejected streams. |
neqo-http3/src/connection.rs |
Adds webtransport_session_ids() helper to enumerate WebTransport session stream IDs. |
neqo-http3/src/client_events.rs |
Introduces the new public WebTransportEvent::Draining variant. |
neqo-http3/src/features/extended_connect/session.rs |
Exposes connect_type() on extended-connect sessions for filtering session kinds. |
neqo-http3/src/features/extended_connect/webtransport_session.rs |
Adds (currently unused) draining state and related accessors/TODOs. |
neqo-http3/src/features/extended_connect/tests/webtransport/sessions.rs |
Adds tests validating Draining + (non-)closure semantics around GOAWAY. |
cdf24cd to
feb57f8
Compare
66d783f to
798edf9
Compare
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## users/jesup/exportkey #3465 +/- ##
========================================================
Coverage ? 94.38%
========================================================
Files ? 133
Lines ? 40275
Branches ? 40275
========================================================
Hits ? 38015
Misses ? 1408
Partials ? 852
Flags with carried forward coverage won't be shown. Click here to find out more.
|
mxinden
left a comment
There was a problem hiding this comment.
I wonder whether a single draining event code path isn't a bit cleaner and easier for the consuming application. See comment below.
afd9b26 to
315089a
Compare
798edf9 to
1a5f003
Compare
|
This PR is part of a stack of 13 bookmarks:
Created with jj-stack |
|
ignore the downgrade bit, sorry. annoyances building; I have a temp patch for that |
Merging this PR will not alter performance
Comparing Footnotes
|
1a5f003 to
496a483
Compare
cd1f34c to
0626e18
Compare
496a483 to
1f45777
Compare
Benchmark resultsSignificant performance differences relative to 0626e18. streams/walltime/1000-streams/each-1000-bytes: 💔 Performance has regressed by +1.3111%. time: [45.146 ms 45.191 ms 45.237 ms]
change: [+1.0108% +1.3111% +1.5450] (p = 0.00 < 0.05)
Performance has regressed.
Found 1 outliers among 100 measurements (1.00%)
1 (1.00%) high mildAll resultstransfer/1-conn/1-100mb-resp (aka. Download): No change in performance detected. time: [211.82 ms 212.26 ms 212.79 ms]
thrpt: [469.95 MiB/s 471.13 MiB/s 472.10 MiB/s]
change:
time: [-0.1417% +0.1860% +0.5078] (p = 0.27 > 0.05)
thrpt: [-0.5052% -0.1856% +0.1419]
No change in performance detected.
Found 2 outliers among 100 measurements (2.00%)
2 (2.00%) high severetransfer/1-conn/10_000-parallel-1b-resp (aka. RPS): Change within noise threshold. time: [286.22 ms 287.79 ms 289.35 ms]
thrpt: [34.560 Kelem/s 34.747 Kelem/s 34.939 Kelem/s]
change:
time: [-1.9362% -1.0431% -0.1755] (p = 0.02 < 0.05)
thrpt: [+0.1758% +1.0541% +1.9744]
Change within noise threshold.transfer/1-conn/1-1b-resp (aka. HPS): No change in performance detected. time: [38.681 ms 38.828 ms 38.997 ms]
thrpt: [25.643 B/s 25.754 B/s 25.852 B/s]
change:
time: [-0.6048% +0.0244% +0.5989] (p = 0.94 > 0.05)
thrpt: [-0.5954% -0.0244% +0.6085]
No change in performance detected.
Found 6 outliers among 100 measurements (6.00%)
6 (6.00%) high severetransfer/1-conn/1-100mb-req (aka. Upload): Change within noise threshold. time: [213.28 ms 213.64 ms 213.99 ms]
thrpt: [467.32 MiB/s 468.08 MiB/s 468.86 MiB/s]
change:
time: [+0.7063% +0.9453% +1.1777] (p = 0.00 < 0.05)
thrpt: [-1.1640% -0.9364% -0.7014]
Change within noise threshold.streams/walltime/1-streams/each-1000-bytes: No change in performance detected. time: [588.05 µs 590.65 µs 593.65 µs]
change: [-0.6882% -0.0395% +0.6462] (p = 0.91 > 0.05)
No change in performance detected.
Found 11 outliers among 100 measurements (11.00%)
11 (11.00%) high severestreams/walltime/1000-streams/each-1-bytes: Change within noise threshold. time: [12.357 ms 12.384 ms 12.416 ms]
change: [+0.5378% +0.8241% +1.1448] (p = 0.00 < 0.05)
Change within noise threshold.
Found 2 outliers among 100 measurements (2.00%)
1 (1.00%) high mild
1 (1.00%) high severestreams/walltime/1000-streams/each-1000-bytes: 💔 Performance has regressed by +1.3111%. time: [45.146 ms 45.191 ms 45.237 ms]
change: [+1.0108% +1.3111% +1.5450] (p = 0.00 < 0.05)
Performance has regressed.
Found 1 outliers among 100 measurements (1.00%)
1 (1.00%) high mildtransfer/walltime/pacing-false/varying-seeds: Change within noise threshold. time: [23.099 ms 23.129 ms 23.176 ms]
change: [-1.7939% -1.6112% -1.3952] (p = 0.00 < 0.05)
Change within noise threshold.
Found 1 outliers among 100 measurements (1.00%)
1 (1.00%) high severetransfer/walltime/pacing-true/varying-seeds: Change within noise threshold. time: [23.492 ms 23.512 ms 23.532 ms]
change: [+0.0106% +0.1300% +0.2503] (p = 0.03 < 0.05)
Change within noise threshold.
Found 3 outliers among 100 measurements (3.00%)
3 (3.00%) high mildtransfer/walltime/pacing-false/same-seed: Change within noise threshold. time: [23.562 ms 23.583 ms 23.606 ms]
change: [-0.9367% -0.8229% -0.7073] (p = 0.00 < 0.05)
Change within noise threshold.
Found 1 outliers among 100 measurements (1.00%)
1 (1.00%) high severetransfer/walltime/pacing-true/same-seed: No change in performance detected. time: [23.859 ms 23.883 ms 23.911 ms]
change: [-0.1826% -0.0170% +0.1460] (p = 0.84 > 0.05)
No change in performance detected.
Found 6 outliers among 100 measurements (6.00%)
1 (1.00%) low mild
4 (4.00%) high mild
1 (1.00%) high severeDownload data for |
Client/server transfer resultsPerformance differences relative to 0626e18. Transfer of 33554432 bytes over loopback, min. 100 runs. All unit-less numbers are in milliseconds.
Table above only shows statistically significant changes. See all results below. All resultsTransfer of 33554432 bytes over loopback, min. 100 runs. All unit-less numbers are in milliseconds.
Download data for |
b76faba to
aeb6595
Compare
aeb6595 to
7880eee
Compare
1f45777 to
dd2d0c1
Compare
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.