sendgroup and sendorder improved implementation & tracking#3470
sendgroup and sendorder improved implementation & tracking#3470jesup wants to merge 5 commits intousers/jesup/highwatermarksfrom
Conversation
There was a problem hiding this comment.
Pull request overview
This PR extends WebTransport/CONNECT-UDP datagram sending to carry send-group and send-order information, and updates the internal per-session datagram queue to schedule datagrams by send group (round-robin) and send order (priority), while also cleaning up datagram tracking and timestamp handling.
Changes:
- Plumb
send_group_idandsend_orderthrough WebTransport and CONNECT-UDP datagram send APIs (client/server/tests). - Refactor
WebTransportDatagramQueueto support per-group round-robin + per-order priority scheduling, and make datagram tracking IDs optional. - Make queue aging/max-age logic use a caller-provided
now(improves determinism and avoidsInstant::now()in queue internals).
Reviewed changes
Copilot reviewed 13 out of 14 changed files in this pull request and generated 7 comments.
Show a summary per file
| File | Description |
|---|---|
| neqo-http3/tests/webtransport.rs | Update test calls to new datagram send signature. |
| neqo-http3/tests/connect_udp.rs | Update proxy/session tests to new datagram send signature. |
| neqo-http3/src/server_events.rs | Extend request APIs to accept send-group/order and forward to handlers. |
| neqo-http3/src/features/extended_connect/webtransport_session.rs | Update protocol queue APIs to pass now, send-group, and send-order; tracking IDs now Option<u64>. |
| neqo-http3/src/features/extended_connect/tests/webtransport/mod.rs | Update helper to pass send-group/order defaults. |
| neqo-http3/src/features/extended_connect/tests/webtransport/datagrams.rs | Update expected errors and call signatures for datagram send. |
| neqo-http3/src/features/extended_connect/session.rs | Plumb send-group/order into enqueueing; switch tracking ID from sentinel 0 to Option<u64>. |
| neqo-http3/src/features/extended_connect/datagram_queue.rs | New grouped+priority scheduler, eviction logic, max-age handling, and extensive unit tests. |
| neqo-http3/src/features/extended_connect/connect_udp_session.rs | Adapt protocol trait methods to new queue signatures; CONNECT-UDP ignores send-group/order. |
| neqo-http3/src/connection_server.rs | Extend server handler APIs and pass now into queue draining. |
| neqo-http3/src/connection_client.rs | Extend client APIs; only emit DatagramOutcome events when tracking ID is present; pass now into max-age/drain. |
| neqo-http3/src/connection.rs | Extend public connection APIs and queue draining/max-age APIs with send-group/order and now. |
| neqo-http3/Cargo.toml | Add indexmap dependency for stable insertion-order group iteration. |
| Cargo.lock | Record new direct dependency. |
c153dd1 to
6115654
Compare
d6cb526 to
48ece96
Compare
|
This PR is part of a stack of 13 bookmarks:
Created with jj-stack |
Add documentation
48ece96 to
17fea3f
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 ❓ |
|
I have a request. For changes like this, which do not depend on the rest of this very deep stack, can you please split them out into an independent change? It's very hard to follow a change where the substrate is shifting constantly. From what I can see, much of this stack is entirely unrelated to each other. Not all, but most. So stacking is not necessary. |
No description provided.