Skip to content

Minor TLP composition improvements - #2169

Merged
Ralith merged 5 commits into
mainfrom
tidy-ptos
Mar 8, 2025
Merged

Minor TLP composition improvements#2169
Ralith merged 5 commits into
mainfrom
tidy-ptos

Conversation

@Ralith

@Ralith Ralith commented Mar 7, 2025

Copy link
Copy Markdown
Collaborator

No description provided.

@djc

djc commented Mar 7, 2025

Copy link
Copy Markdown
Member

Probably ignore the paste advisory for now? aws-lc-rs are on it.

Comment thread quinn-proto/src/connection/mod.rs Outdated
Comment thread deny.toml Outdated
@djc

djc commented Mar 7, 2025

Copy link
Copy Markdown
Member

Nice!

Ralith added 3 commits March 8, 2025 00:38
This caused rare flakes in at least
single_ack_eliciting_packet_triggers_ack_after_delay by classifying a
the connection as active for longer than expected.
@Ralith
Ralith enabled auto-merge March 8, 2025 08:40
@Ralith
Ralith added this pull request to the merge queue Mar 8, 2025
Merged via the queue into main with commit d8302df Mar 8, 2025
@Ralith
Ralith deleted the tidy-ptos branch March 8, 2025 08:49

// Retransmit the data of the oldest in-flight packet
if !self.pending.is_empty(streams) {
if !self.pending.is_empty(streams) || !datagrams.outgoing.is_empty() {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

I don't think this is sufficient, because the next user datagram might not be able to fit in the next QUIC packet. And in that case you'd still have to include a ping frame. I guess the bug in this scenario is worse than sending the extra ping frame.

I also think it would be really good to write a test for this.

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.

Hmm, good catch. I think we actually want exactly the same judgement as Connection::can_send_1rtt here. It looks like that would actually fix another pre-existing bug here, since lazy cleanup of reset streams means self.pending.is_empty doesn't actually necessarily imply the ability to transmit any stream frames.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

TIL, I assumed the stream side of this was correct.

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.

I'm actually waffling a bit on whether the datagram side is an issue or not. The interaction of TLP queue accounting and size limits is nontrivial. I think I'll need to build some tests to draw empirical conclusions and validate a solution.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

I'm wondering whether the best thing is to revert this change and create an issue for the extra ping. That way we have a correct-but-slightly-wasteful implementation and don't forget to follow up.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

I'm wondering whether the best thing is to revert this change and create an issue for the extra ping. That way we have a correct-but-slightly-wasteful implementation and don't forget to follow up.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants