Conversation
|
This PR is part of a stack of 9 bookmarks:
Created with jj-stack |
There was a problem hiding this comment.
🟢 Approval recommended
No unresolved blocking issues were identified.
Pull request overview
Prevents unsupported or oversized extended-CONNECT datagrams from entering the outgoing queue.
Changes:
- Validates peer datagram support and encoded size.
- Returns
NotAvailablewhen datagrams cannot be sent. - Adds WebTransport regression coverage.
File summaries
| File | Description |
|---|---|
neqo-http3/src/features/extended_connect/tests/webtransport/datagrams.rs |
Tests synchronous rejection and queue preservation. |
neqo-http3/src/features/extended_connect/session.rs |
Validates datagram support and size before queueing. |
Review details
- Files reviewed: 2/2 changed files
- Comments generated: 0
- Review effort level: Lite (auto)
Note
Copilot is running an experiment and ran this review at Lite.
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
Codecov Report❌ Patch coverage is Additional details and impacted files@@ Coverage Diff @@
## users/jesup/expire_datagrams #3989 +/- ##
================================================================
- Coverage 97.01% 96.94% -0.08%
================================================================
Files 118 119 +1
Lines 41527 41441 -86
Branches 41527 41441 -86
================================================================
- Hits 40287 40174 -113
- Misses 1216 1243 +27
Partials 24 24
Flags with carried forward coverage won't be shown. Click here to find out more.
|
Merging this PR will regress 6 benchmarks
|
| Mode | Benchmark | BASE |
HEAD |
Efficiency | |
|---|---|---|---|---|---|
| ❌ | Simulation | decode 1000 STREAM frames |
179.6 µs | 226.5 µs | -20.71% |
| ❌ | Simulation | decode 100 STREAM frames |
19.2 µs | 24 µs | -20.13% |
| ❌ | Simulation | decode 10 STREAM frames |
3.3 µs | 4 µs | -15.93% |
| ❌ | Simulation | Builder encode+encrypt ACK packet |
21.9 µs | 22.6 µs | -3.26% |
| ❌ | Simulation | Builder encode+encrypt STREAM packet |
27.8 µs | 28.6 µs | -2.77% |
| ❌ | Simulation | simulated/pacing-false/varying-seeds |
73.3 ms | 75 ms | -2.31% |
| ⚡ | Simulation | coalesce_acked_from_zero 1 ranges |
555.1 µs | 2.8 µs | ×200 |
| ⚡ | Simulation | coalesce_acked_from_zero 3 ranges |
438.3 µs | 3.7 µs | ×120 |
| ⚡ | Simulation | coalesce_acked_from_zero 10 ranges |
541.1 µs | 9.9 µs | ×55 |
| ⚡ | Simulation | mark_sent sequential |
234.2 µs | 210.7 µs | +11.16% |
| ⚡ | Simulation | mark_sent retransmit |
33.5 µs | 32.3 µs | +3.94% |
| ⚡ | WallTime | walltime/1-streams/each-1000-bytes |
132.1 µs | 128 µs | +3.21% |
| ⚡ | WallTime | walltime/1000-streams/each-1000-bytes |
11.6 ms | 11.3 ms | +2.89% |
| ⚡ | WallTime | neqo-s2n |
49.8 ms | 48.5 ms | +2.64% |
| ⚡ | WallTime | walltime/10-streams/each-1048576-bytes |
28.7 ms | 28 ms | +2.55% |
| ⚡ | WallTime | 1-conn/1-100mb-resp (aka. Download) |
49.4 ms | 48.2 ms | +2.39% |
| ⚡ | WallTime | walltime/pacing-true/same-seed |
2.1 ms | 2 ms | +2.35% |
| ⚡ | WallTime | walltime/1-streams/each-4194304-bytes |
10.8 ms | 10.6 ms | +2.29% |
| ⚡ | WallTime | 1-conn/1-1b-resp (aka. HPS) |
3 ms | 2.9 ms | +2.17% |
Tip
Investigate this regression by commenting @codspeedbot fix this regression on this PR, or directly use the CodSpeed MCP with your agent.
Comparing users/jesup/reject_datagrams (099c751) with users/jesup/expire_datagrams (5dfb5fe)1
Footnotes
f4bbb65 to
d2a658d
Compare
b9ff5cb to
61a5677
Compare
d2a658d to
7057d30
Compare
61a5677 to
ae0ac84
Compare
7057d30 to
e16793a
Compare
ae0ac84 to
24ea77f
Compare
e16793a to
29d2f7b
Compare
I opened #4022. It adds the What it changes:
Other fixes I made:
Side effect: when a PR in the stack merges and its branch is deleted, GitHub moves the next PR's base to Not changed: the other Summary
Was this response helpful? React with 👍 or 👎 to help us improve CodSpeedBot. |
325e0d2 to
4ba7feb
Compare
00c69c0 to
83a14a7
Compare
4ba7feb to
31e9004
Compare
83a14a7 to
66c3fce
Compare
31e9004 to
3a9684b
Compare
66c3fce to
2f3db78
Compare
40e8b3a to
8a6e7f8
Compare
2f3db78 to
a5622da
Compare
8a6e7f8 to
5dfb5fe
Compare
a5622da to
5c574b1
Compare
mxinden
left a comment
There was a problem hiding this comment.
I don't think the pull request title matches the diff. This change does not reject more datagrams than before.
Got bit again by git not updating PR titles when I retitle the patch description. I'll correct it |
|
The title is fixed now, and I've filled in the description. You're right that it rejects nothing new: it only changes which error an unreachable path returns, and asserts in debug builds that it stays unreachable. This has collapsed down to almost nothing... |
…ram path If the peer supports neither QUIC DATAGRAM nor the HTTP DATAGRAM Capsule fallback (remote_datagram_size == 0, capsule unsupported), send_datagram fell through to the queue, which rejected the datagram as TooMuchData. Return Error::Transport(NotAvailable) instead. Neither WebTransport nor connect-udp can reach this today, so the branch is backed by a debug_assert.
5dfb5fe to
1f13246
Compare
5c574b1 to
099c751
Compare
Benchmark resultsNo significant performance differences relative to 1f13246. All resultstransfer/1-conn/1-100mb-req (aka. Upload)/mtu-1500 time: [49.374 ms 49.446 ms 49.558 ms]
thrpt: [1.9705 GiB/s 1.9750 GiB/s 1.9779 GiB/s]
Found 3 outliers among 100 measurements (3.00%)
1 (1.00%) high mild
2 (2.00%) high severetransfer/1-conn/1-100mb-resp (aka. Download)/mtu-1500 time: [49.913 ms 49.951 ms 49.993 ms]
thrpt: [1.9534 GiB/s 1.9550 GiB/s 1.9565 GiB/s]
Found 2 outliers among 100 measurements (2.00%)
1 (1.00%) high mild
1 (1.00%) high severetransfer/1-conn/1-1b-resp (aka. HPS)/mtu-1500 time: [2.9284 ms 2.9298 ms 2.9313 ms]
thrpt: [341.15 B/s 341.32 B/s 341.48 B/s]
Found 1 outliers among 100 measurements (1.00%)
1 (1.00%) high mildtransfer/1-conn/10_000-parallel-1b-resp (aka. RPS)/mtu-1500 time: [65.882 ms 66.167 ms 66.461 ms]
thrpt: [150.46 Kelem/s 151.13 Kelem/s 151.79 Kelem/s]
Found 1 outliers among 100 measurements (1.00%)
1 (1.00%) high mildstreams-flow-controlled/walltime/1-streams/each-4194304-bytes time: [10.688 ms 10.691 ms 10.693 ms]
thrpt: [374.07 MiB/s 374.16 MiB/s 374.25 MiB/s]
Found 2 outliers among 100 measurements (2.00%)
2 (2.00%) high mildstreams-flow-controlled/walltime/10-streams/each-1048576-bytes time: [27.616 ms 27.627 ms 27.638 ms]
thrpt: [361.81 MiB/s 361.97 MiB/s 362.11 MiB/s]
Found 4 outliers among 100 measurements (4.00%)
4 (4.00%) high mildstreams/walltime/1-streams/each-1000-bytes time: [129.00 µs 129.45 µs 130.03 µs]
thrpt: [7.3343 MiB/s 7.3670 MiB/s 7.3931 MiB/s]
Found 3 outliers among 100 measurements (3.00%)
3 (3.00%) high mildstreams/walltime/1000-streams/each-1-bytes time: [3.7407 ms 3.7533 ms 3.7654 ms]
thrpt: [259.35 KiB/s 260.18 KiB/s 261.06 KiB/s]streams/walltime/1000-streams/each-1000-bytes time: [11.040 ms 11.044 ms 11.048 ms]
thrpt: [86.323 MiB/s 86.355 MiB/s 86.387 MiB/s]
Found 3 outliers among 100 measurements (3.00%)
2 (2.00%) low mild
1 (1.00%) high mildtransfer/walltime/pacing-false/same-seed time: [2.0139 ms 2.0153 ms 2.0168 ms]
thrpt: [1.9368 GiB/s 1.9383 GiB/s 1.9396 GiB/s]transfer/walltime/pacing-false/varying-seeds time: [2.0342 ms 2.0356 ms 2.0371 ms]
thrpt: [1.9175 GiB/s 1.9190 GiB/s 1.9203 GiB/s]transfer/walltime/pacing-true/same-seed time: [2.0311 ms 2.0320 ms 2.0332 ms]
thrpt: [1.9212 GiB/s 1.9223 GiB/s 1.9233 GiB/s]transfer/walltime/pacing-true/varying-seeds time: [2.0669 ms 2.0683 ms 2.0701 ms]
thrpt: [1.8870 GiB/s 1.8886 GiB/s 1.8899 GiB/s]Instructions per cycleCriterion reported no significant timing changes. All benchmarks
Profiles for profiler.firefox.com (62)
Download data for |
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
|
Client/server transfer resultsPerformance differences relative to 1f13246. 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 |
If the peer supports neither QUIC DATAGRAM nor the HTTP DATAGRAM Capsule fallback (
remote_datagram_size() == 0and the protocol has no Capsule support),Session::send_datagramfell through to the queue, which rejected the datagram asTooMuchData. ReturnError::Transport(NotAvailable)instead, which says what actually went wrong.Neither protocol can reach this today: WebTransport is only enabled when the peer's transport parameters allow QUIC DATAGRAM (
handle_settingschecksremote_datagram_size() > 0), and connect-udp always has the Capsule fallback. So the branch carries adebug_assert!rather than a test.