Repository navigation
feat(relay): serve moq-transport from the io_uring workers - #5821
Conversation
The ring advertised only the moq-lite ALPNs, refused SETUP-negotiated lite versions named in the config, and warned that moq-transport was not served. It now serves every configured version, like the shared runtime. moq-lite on its own ALPN still runs unboxed on the worker. moq-transport and the SETUP-negotiated versions box their futures with a native `Send` bound, so their session goes through the new `moq_uring::transport::Pinned`, which checks the thread on every use and panics anywhere else. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
@codex review (Written by Claude Opus 5.5) |
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info
WalkthroughThe io_uring relay now advertises all configured MoQ versions. It uses the MoQ-Lite handshake for Lite sessions and a thread-bound Priority: ➖ Normal Severity of issue fixed: Medium Merge Risk: ⚪ Minimal · up to
|
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 60d603389b
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
@codex review (Written by Claude Opus 5.5) |
|
Codex Review: Didn't find any major issues. More of your lovely PRs please. Reviewed commit: ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
If Codex has suggestions, it will comment; otherwise it will react with 👍. Codex can also answer questions or update the PR. Try commenting "@codex address that feedback". |
Port Local to main's send_datagram signature and carry the connection handle through Accepted for main's QUIC limit widening. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…tion-log Thread the ring's Lifecycle through #5821's split handshake: serve_request takes it in place of the connection id and returns the boxed supervision, so both the moq-lite and moq-transport paths hand the close to the shared runtime. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Finishes
quest/m2/uring-ietf.md: a relay started with--runtime-io-uringnow serves every version its config lists, moq-transport included, instead of advertising only the moq-lite ALPNs and warning that the rest are not served.What changed
moq_uring::transport::Local<T>(new): wraps a worker's!Sendsession, plus its streams and send groups, so it meets moq-net'spoll::Boxablebounds. It usessend_wrapper(already in the lockfile through iroh), so any use or drop on another thread panics instead of racing the worker. moq-transport's driver boxes its futures with a nativeSendbound, which is the whole reason this exists.rs/moq-relay/src/uring.rs): the bind advertisesversions.alpns()+h3, the same as the tokio listener. The lite-only filter, the refusal of SETUP-negotiated lite versions named in the config, and the warning are gone. After the transport handshake:accept_request_liteunboxed. That hot path doesn't change.accept_request(Local::new(session)): moq-transport 14..22, lite 01/02 overmoql, and a browser offering no subprotocol (bidi SETUP fallback, which the tokio listener already accepts).serve_request<S>. That avoids re-indenting it, so the conflict with fix(relay): share connection lifecycle across runtimes #5761 stays small.runtime_uring::uring_workers_serve_every_configured_version. A moq-transport-22 publisher feeds subscribers pinned to moq-transport-22, -16, -14 and moq-lite-02, over both raw QUIC and WebTransport. Each subscriber must negotiate exactly its pinned version and receive the frame. It skips loudly below the kernel floor like the rest. It fails on main, because the moqt ALPNs are not advertised there.doc/bin/relay/config.md, the--runtime-io-uringhelp, and the moq-uring README/crate docs drop the lite-only caveat. The quest is deleted and its references are removed (it unblocksrelay-io-uring-package).Public API and wire impact
moq_uring::transport::Local(new, pluspoll::Session/SendStream/RecvStream/SendGroupimpls). moq-uring is pre-1.0 and experimental. New dependency:send_wrapper 0.6(the newest release).moqlALPNs. A config that names lite-01/02 now starts instead of refusing.Decisions
Settled by the maintainer:
moq_uring::transport::Local. The ring is what makes sessions!Send, so a uring client dialing moq-transport needs the same thing. (c) is a follow-up quest: convert moq-net's moq-transport path into named machines like lite, which retiresBoxableandLocal. (b), private to moq-relay, was rejected.Local(renamed fromPinned, to avoid confusion withstd::pin::Pin).thread::current().id()comparison; the lite path pays nothing. No benchmark was added because no existing ring path changes cost.Checks
just checkpassed (lint plus 8097 tests).MOQ_STRICT=1 just rs uringpassed (444 + 103 tests, the new one included, and clippy with io-uring/qlog). The host is shared and heavily loaded, so treat any timings in the logs as rough.quest checkpassed.just test interop(no wire change).Follow-ups
BoxableandLocal(decision 1, option c).uring-connection-log) touches the same accept path. Whichever lands second rebases, and the conflict should stay small sinceserve_request's body is untouched.uring_workers_drain_on_the_triggercould now also check the moq-transport-17+ "time left in the drain window" GOAWAY on the ring. Today onlyshutdown_signal.rscovers it, through the shared runtime.🤖 Generated with Claude Code
(Written by Claude Opus 5.5)