Subject: [quicwg/base-drafts] Pseudo code issue (#1724)

From: Lars Eggert <[email-masked]>
Date: Wed, 05 Sep 2018 05:15:34 -0700

i think there is an issue in the pseudo code (but I may be wrong - I find the code much more difficult to follow than an actual textual explanation.)

In `OnAckReceived`, there is the following call sequence:
```
       DetectLostPackets(ack.largest_acked_packet)
       SetLossDetectionTimer()
```

`DetectLostPackets` calls `OnPacketsLost`, which reduces `in_flight` potentially to zero. Then in `SetLossDetectionTimer`, the timer is cancelled via `loss_detection_timer.cancel()`.

This causes no retransmissions to happen, at least when (blindly) implementing the pseudo code.

Related to that, it is not clear where exactly the pseudo code expects actual retransmissions to happen. There is code in `OnLossDetectionTimeout` (`RetransmitAllUnackedHandshakeData`, `SendOnePacket`, `SendTwoPackets`) but what those do is not explained. There is also a comment in `DetectLostPackets` ("Inform the congestion controller...") but it remains unclear when and how that would lead to retransmissions.

IMO, if we rely on pseudo code for this document, it needs a lot more work to make sure it actually does what is intended. (My preference would be to instead describe the concepts in text.)

-- 
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/quicwg/base-drafts/issues/1724

---

From: MikkelFJ <[email-masked]>
Date: Wed, 05 Sep 2018 12:19:52 +0000 (UTC)

This might be related to https://github.com/quicwg/base-drafts/issues/1718

-- 
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/quicwg/base-drafts/issues/1724#issuecomment-418709648

---

From: mirjak <[email-masked]>
Date: Thu, 06 Sep 2018 01:33:39 -0700

I believe this is general issue with TLP which shows up as you are sending only with a low constant rate. We observed a similar problem in TCP...

-- 
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/quicwg/base-drafts/issues/1724#issuecomment-419011384

---

From: mirjak <[email-masked]>
Date: Thu, 06 Sep 2018 01:34:11 -0700

However, +1 to more text explanation!

-- 
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/quicwg/base-drafts/issues/1724#issuecomment-419011556

---

From: Lars Eggert <[email-masked]>
Date: Thu, 06 Sep 2018 10:31:55 +0000 (UTC)

The pseudo code shouldn't have "general issues" :-)

-- 
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/quicwg/base-drafts/issues/1724#issuecomment-419045765

---

From: ianswett <[email-masked]>
Date: Thu, 06 Sep 2018 08:58:57 -0700

There needs to be some more clarity here, and I believe the core issue is this document is trying to describe both how to quickly detect packets as lost and congestion control, but is avoiding what send a bit too much.

Given QUIC doesn't retransmit packets, and instead retransmits stream data/etc, just because a packet is lost doesn't mean it's payload needs to be retransmitted, and if it does, it may be bundled differently from the original transmission.

Would a section on "What to send" be helpful?  Or would it be better to work that into the existing text and/or pseudocode?

-- 
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/quicwg/base-drafts/issues/1724#issuecomment-419148147