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 into
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 95.04% 95.07% +0.02%
=========================================================
Files 116 116
Lines 38628 38659 +31
Branches 38628 38659 +31
=========================================================
+ Hits 36715 36754 +39
+ Misses 1218 1208 -10
- Partials 695 697 +2
Flags with carried forward coverage won't be shown. Click here to find out more.
🚀 New features to boost your workflow:
|
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 16 bookmarks:
Created with jj-stack |
|
ignore the downgrade bit, sorry. annoyances building; I have a temp patch for that |
Merging this PR will improve performance by 3%
Performance Changes
Tip Curious why this is faster? Comment Comparing Footnotes
|
1a5f003 to
496a483
Compare
cd1f34c to
0626e18
Compare
091e626 to
f5b1f79
Compare
bd4f72d to
15a9465
Compare
f5b1f79 to
7ea062e
Compare
15a9465 to
dc1bae8
Compare
7ea062e to
2f74e3e
Compare
dc1bae8 to
63b6749
Compare
2f74e3e to
fc122d4
Compare
63b6749 to
60bcf58
Compare
fc122d4 to
9b792fb
Compare
60bcf58 to
2f2b85a
Compare
9b792fb to
4d47a99
Compare
2f2b85a to
60541e7
Compare
4d47a99 to
e7673f4
Compare
60541e7 to
b4db298
Compare
Re-requested; everything was resolved
e7673f4 to
ec66fb7
Compare
b4db298 to
32e0127
Compare
ec66fb7 to
9b3eac1
Compare
32e0127 to
e22c6dd
Compare
Failed Interop TestsQUIC Interop Runner, client vs. server, differences relative to
All resultsSucceeded Interop TestsQUIC Interop Runner, client vs. server neqo-pr as client
neqo-pr as server
Unsupported Interop TestsQUIC Interop Runner, client vs. server neqo-pr as client
neqo-pr as server
|
Benchmark resultsSignificant performance differences relative to 9b3eac1. streams/walltime/1000-streams/each-1-bytes: 💔 Performance has regressed by +1.4934%. time: [11.667 ms 11.686 ms 11.706 ms]
change: [+1.2614% +1.4934% +1.7380] (p = 0.00 < 0.05)
Performance has regressed.
Found 1 outliers among 100 measurements (1.00%)
1 (1.00%) high mildstreams-flow-controlled/walltime/1-streams/each-4194304-bytes: 💔 Performance has regressed by +1.4125%. time: [33.271 ms 33.340 ms 33.420 ms]
change: [+1.1335% +1.4125% +1.6885] (p = 0.00 < 0.05)
Performance has regressed.
Found 3 outliers among 100 measurements (3.00%)
2 (2.00%) high mild
1 (1.00%) high severeAll resultstransfer/1-conn/1-100mb-resp (aka. Download): No change in performance detected. time: [165.89 ms 166.27 ms 166.65 ms]
thrpt: [600.05 MiB/s 601.45 MiB/s 602.82 MiB/s]
change:
time: [-0.2516% +0.0388% +0.3403] (p = 0.80 > 0.05)
thrpt: [-0.3391% -0.0387% +0.2522]
No change in performance detected.
Found 1 outliers among 100 measurements (1.00%)
1 (1.00%) high mildtransfer/1-conn/10_000-parallel-1b-resp (aka. RPS): Change within noise threshold. time: [262.36 ms 264.35 ms 266.32 ms]
thrpt: [37.549 Kelem/s 37.829 Kelem/s 38.116 Kelem/s]
change:
time: [-2.6230% -1.5936% -0.5489] (p = 0.00 < 0.05)
thrpt: [+0.5519% +1.6195% +2.6937]
Change within noise threshold.transfer/1-conn/1-1b-resp (aka. HPS): No change in performance detected. time: [38.457 ms 38.630 ms 38.825 ms]
thrpt: [25.756 B/s 25.887 B/s 26.003 B/s]
change:
time: [-0.6352% -0.0019% +0.6578] (p = 1.00 > 0.05)
thrpt: [-0.6535% +0.0019% +0.6393]
No change in performance detected.
Found 12 outliers among 100 measurements (12.00%)
4 (4.00%) high mild
8 (8.00%) high severetransfer/1-conn/1-100mb-req (aka. Upload): Change within noise threshold. time: [168.55 ms 169.04 ms 169.62 ms]
thrpt: [589.55 MiB/s 591.59 MiB/s 593.29 MiB/s]
change:
time: [-1.1238% -0.5746% -0.1141] (p = 0.03 < 0.05)
thrpt: [+0.1142% +0.5779% +1.1366]
Change within noise threshold.
Found 2 outliers among 100 measurements (2.00%)
2 (2.00%) high severestreams/walltime/1-streams/each-1000-bytes: No change in performance detected. time: [573.33 µs 575.21 µs 577.46 µs]
change: [-0.6268% +0.0400% +0.6749] (p = 0.90 > 0.05)
No change in performance detected.
Found 9 outliers among 100 measurements (9.00%)
2 (2.00%) high mild
7 (7.00%) high severestreams/walltime/1000-streams/each-1-bytes: 💔 Performance has regressed by +1.4934%. time: [11.667 ms 11.686 ms 11.706 ms]
change: [+1.2614% +1.4934% +1.7380] (p = 0.00 < 0.05)
Performance has regressed.
Found 1 outliers among 100 measurements (1.00%)
1 (1.00%) high mildstreams/walltime/1000-streams/each-1000-bytes: No change in performance detected. time: [36.962 ms 37.005 ms 37.049 ms]
change: [-0.1111% +0.0659% +0.2344] (p = 0.46 > 0.05)
No change in performance detected.
Found 1 outliers among 100 measurements (1.00%)
1 (1.00%) high mildstreams-flow-controlled/walltime/1-streams/each-4194304-bytes: 💔 Performance has regressed by +1.4125%. time: [33.271 ms 33.340 ms 33.420 ms]
change: [+1.1335% +1.4125% +1.6885] (p = 0.00 < 0.05)
Performance has regressed.
Found 3 outliers among 100 measurements (3.00%)
2 (2.00%) high mild
1 (1.00%) high severestreams-flow-controlled/walltime/10-streams/each-1048576-bytes: No change in performance detected. time: [88.443 ms 88.758 ms 89.132 ms]
change: [-0.0866% +0.5061% +1.0991] (p = 0.09 > 0.05)
No change in performance detected.
Found 5 outliers among 100 measurements (5.00%)
3 (3.00%) high mild
2 (2.00%) high severetransfer/walltime/pacing-false/varying-seeds: Change within noise threshold. time: [19.039 ms 19.051 ms 19.064 ms]
change: [-2.7681% -2.5779% -2.4351] (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 severetransfer/walltime/pacing-true/varying-seeds: Change within noise threshold. time: [19.535 ms 19.548 ms 19.561 ms]
change: [-3.1764% -3.0619% -2.9523] (p = 0.00 < 0.05)
Change within noise threshold.
Found 3 outliers among 100 measurements (3.00%)
2 (2.00%) high mild
1 (1.00%) high severetransfer/walltime/pacing-false/same-seed: Change within noise threshold. time: [19.280 ms 19.293 ms 19.307 ms]
change: [-1.7067% -1.5943% -1.4884] (p = 0.00 < 0.05)
Change within noise threshold.
Found 3 outliers among 100 measurements (3.00%)
1 (1.00%) low mild
1 (1.00%) high mild
1 (1.00%) high severetransfer/walltime/pacing-true/same-seed: Change within noise threshold. time: [19.566 ms 19.580 ms 19.593 ms]
change: [-2.7472% -2.5627% -2.4236] (p = 0.00 < 0.05)
Change within noise threshold.
Found 2 outliers among 100 measurements (2.00%)
2 (2.00%) high mildDownload data for |
9b3eac1 to
515d026
Compare
e22c6dd to
b22beda
Compare
Client/server transfer resultsPerformance differences relative to 515d026. 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 |
No description provided.