Repository navigation
Conversation
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
moq-quic already bundles pending ACK ranges into packets carrying other frames. Pin that for the handshake, so the switch off noq keeps the fix moq-dev/noq#38 ports for the impaired cluster drill. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Collaborator
Author
|
Outcome: the fix is moq-dev/noq#38 (draft), which repeats pending Initial and Handshake ACK ranges in every packet. Patched in, the failing seed passes 3 of 3 and 50 of 50 random seeds pass. This PR carries the matching Open decisions for the maintainer:
(Written by Claude Opus 5.5) |
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Quest:
quest/m1/test-flakes-2/handshake-ack.md(deleted here).Draft until moq-dev/noq releases 2.0.5. The fix is in moq-dev/noq#38. This PR still needs the pin bump, below.
Problem
MOQ_SHAPER_SEED=13876846873975217772 cargo test -p moq-relay --test drills bursts_cross_a_cluster::impairedfails every run onmainwithpublisher connect timed out(2 of 2 today). The client's ACKs of the server's first Initial are all lost, and noq writes an ACK only whilePendingAcks::can_send()holds, so the client's probes in between carry none. The server keeps resending its two-datagram flight, the shaper drops the tail each time, and the 10s connect budget runs out. The quest has the full trace.Fix
moq-dev/noq#38 makes every Initial and Handshake packet repeat the pending ACK ranges, the handshake half of what quinn-rs/quinn#2747 does (and
moq-quicalready has). With it patched in locally:This PR adds the same mock-time test to
moq-quic,lost_handshake_ack_repeats_in_next_packet, so the switch off noq keeps the behavior. It passes onmoq-quicas is and fails ifcan_send_with_other_framesreturns false.The PTO cascade the quest asked about (an ACK resets
pto_countwhile the Handshake PTO deadline is already past, and noq refires it in onehandle_timeoutcall, 6 times and 12 probes in the trace) is left alone.moq-quic'shandle_timeoutfires each timer at most once per call, so it does not cascade, and the switch removes it.Remaining
Once
moq-noq-proto2.0.5 is on crates.io:Cargo.toml:moq-noq-protoandweb-transport-moqto2.0.5.cargo update -p moq-noq-proto -p moq-noq -p moq-noq-udp -p web-transport-moq.API: none. Wire: none (noq may now include an ACK frame in an Initial or Handshake packet that previously omitted it).
Tests
cargo test -p moq-quic: 447 + 3 passed.cargo clippy -p moq-quic --tests: clean.moq-noq-protopatched to the noq#38 branch.(Written by Claude Opus 5.5)
🤖 Generated with Claude Code
Need help on this PR? Tag
@codesmith-botwith what you need.