Skip to content

Follow-on for #3467 #3747

Description

@larseggert

@jesup wanted to land #3467 and work on the Claude review comments as a follow-on.

Summary

This PR adds WebTransport sendGroup support across the HTTP/3 and transport layers: per-connection SendGroupId minting, session-scoped group registration/validation, and a per-group round-robin scheduler in SendStreams::write_frames that treats groups as bandwidth-equals with per-group sendOrder namespacing — matching the WebTransport spec.

Architecture: The design cleanly separates concerns — HTTP/3 owns group-to-session binding, transport owns scheduling. The PerGroupQueues abstraction and the single-group fast path are well-motivated. The new benchmarks (make_grouped_streams, make_sendordered_streams) and thorough unit tests (flow-control-blocked starvation, drained-peer cursor, fairness toggle round-trip) give good confidence in the scheduler correctness.

Main finding: The index-based round-robin cursors (per_group_next, fair_rr_next) can skip entries after shift_remove / retain / extract_if shift indices — see inline comments for details and a suggested fix. This is a minor fairness issue (bounded by one frame per removal event), not a correctness bug.

Originally posted by @github-actions[bot] in #3467 (review)

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Fields

Priority

None yet

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions