Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 8 additions & 8 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -154,7 +154,7 @@ moq-mux = { version = "0.10.11", path = "rs/moq-mux" }
moq-net = { version = "0.3.10", path = "rs/moq-net" }
# The MoQ fork of noq (moq-dev/noq). iroh keeps upstream noq, so a build with the
# iroh feature carries both stacks.
moq-noq-proto = { version = "2.0.2", default-features = false }
moq-noq-proto = { version = "2.0.4", default-features = false }

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Preserve the configured timeout for moq-uring handshakes

When a moq-uring caller sets Transport::idle_timeout below 10 seconds, this upgrade leaves noq 2.0.4's new handshake_idle_timeout at its 10-second default because rs/moq-uring/src/quic/noq/mod.rs::transport_config only forwards the value through max_idle_timeout. Consequently, black-holed handshakes no longer obey the public field's documented bound; for example, the existing 500 ms cases in rs/moq-uring/tests/endpoint.rs now wait about 10 seconds instead of the documented roughly three seconds. Forward an appropriate handshake timeout in the io_uring adapter, or expose and document the separate setting so callers can retain the previous bound.

AGENTS.md reference: AGENTS.md:L27-L28

Useful? React with 👍 / 👎.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Keeping noq's 10s handshake bound for moq-uring rather than forwarding idle_timeout into it. A short idle timeout cutting the handshake to two Initial flights is the bug this bump fixes, and it applies to moq-uring dials as much as to the drills. Transport::idle_timeout documents inactivity on a connection, not a dial bound. The only stale promise was in the tests: a8a443c drops their 500ms idle timeouts, which no longer shortened anything, and the "about three seconds" comment. Those three tests now take 10s each. If they should stay fast, the follow-up is a separate Transport handshake-timeout field in moq-uring, which is an API addition for the maintainer to decide.

(Written by Claude Opus 5.5)

# NVENC bindings, forked from ViliamVadocz/nvidia-video-codec-sdk to dlopen the
# driver at runtime. Compiles on any platform (macOS included) but only actually
# used by moq-video on Linux.
Expand Down Expand Up @@ -238,7 +238,7 @@ web-transport-iroh = "0.8.1"
# default-features off so the QUIC crypto provider is chosen by moq-tokio's
# aws-lc-rs / ring features.
# The WebTransport adapter released with moq-noq, from the same repository.
web-transport-moq = { version = "2.0.2", default-features = false }
web-transport-moq = { version = "2.0.4", default-features = false }
web-transport-proto = "0.6"
web-transport-trait = "0.5"
web-transport-wasm = "0.7"
Expand Down
1 change: 0 additions & 1 deletion quest/m1/test-flakes-2/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,6 @@ Public API: none. Wire: none.

## Required

- [Impaired handshake](/quest/m1/test-flakes-2/impaired-handshake.md) - the impaired drills' clients never time out while connecting
- [Interop close code](/quest/m1/test-flakes-2/interop-close-code.md) - the browser close-code test reliably sees `unauthorized` for a refused session
- [TS duration fidelity](/quest/m1/test-flakes-2/ts-duration-fidelity.md) - TS compliance captures the whole round-tripped stream
- [Cluster burst overrun](/quest/m1/test-flakes-2/cluster-burst-overrun.md) - the impaired cluster burst drill always overruns its bottleneck, so it always exercises it
Expand Down
47 changes: 0 additions & 47 deletions quest/m1/test-flakes-2/impaired-handshake.md

This file was deleted.

16 changes: 6 additions & 10 deletions rs/moq-uring/tests/endpoint.rs
Original file line number Diff line number Diff line change
Expand Up @@ -360,10 +360,8 @@ fn an_unanswered_dial_times_out() {
let client_sock = handle
.udp(UdpSocket::bind("127.0.0.1:0").expect("bind"), udp::Config::default())
.expect("client socket");
let mut dial = dial_config(hole.local_addr().expect("addr"));
// QUIC stretches this to 3x the initial probe timeout (RFC 9000 §10.1),
// so the dial resolves in about three seconds.
dial.transport.idle_timeout = Duration::from_millis(500);
// The dial ends at noq's handshake idle timeout (10s), not the idle timeout.
let dial = dial_config(hole.local_addr().expect("addr"));

let result = worker
.block_on(async move { quic::client::connect(client_sock, &dial).await })
Expand Down Expand Up @@ -399,10 +397,9 @@ fn the_backlog_bounds_pending_handshakes() {
let client_sock = handle
.udp(UdpSocket::bind("127.0.0.1:0").expect("bind"), udp::Config::default())
.expect("client socket");
let mut dial = dial_config(server);
// The server never answers, so the dial ends at the idle timeout; keep the
// test short.
dial.transport.idle_timeout = Duration::from_millis(500);
// The server never answers, so the dial ends at noq's handshake idle
// timeout (10s).
let dial = dial_config(server);

let result = worker
.block_on(async move { quic::client::connect(client_sock, &dial).await })
Expand Down Expand Up @@ -438,8 +435,7 @@ fn the_backlog_bounds_queued_connections() {
let second_sock = handle
.udp(UdpSocket::bind("127.0.0.1:0").expect("bind"), udp::Config::default())
.expect("second client socket");
let mut second_config = dial_config(server);
second_config.transport.idle_timeout = Duration::from_millis(500);
let second_config = dial_config(server);
let second = worker
.block_on(async { quic::client::connect(second_sock, &second_config).await })
.expect("worker");
Expand Down
Loading