Subject: [quicwg/base-drafts] Describe QPACK Feedback mechanisms (#1410)

From: Mike Bishop <[email-masked]>
Date: Sat, 02 Jun 2018 22:14:34 -0700

This feels like a huge wall of text, and I could use some help making it more readable.  However, it attempts to pull out the text from #1399 into its own section and describe the process of making sure encoder and decoder are on the same page.

Closes #1399, because I have those commits in here but have relocated most of the text.
You can view, comment on, or merge this pull request online at:

  https://github.com/quicwg/base-drafts/pull/1410

-- Commit Summary --

  * Implicit acknowledgment via header block acknowledgment
  * Make TSS incremental to Header Acknowledgment as well
  * A start, but not an end
  * State Synchronization section

-- File Changes --

    M draft-ietf-quic-qpack.md (60)

-- Patch Links --

https://github.com/quicwg/base-drafts/pull/1410.patch
https://github.com/quicwg/base-drafts/pull/1410.diff

-- 
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/pull/1410

---

From: Mike Bishop <[email-masked]>
Date: Sun, 03 Jun 2018 22:39:49 -0700

@MikeBishop pushed 1 commit.

8e8e819  necessary, but not doubly necessary

-- 
You are receiving this because you are subscribed to this thread.
View it on GitHub:
https://github.com/quicwg/base-drafts/pull/1410/files/c9cfcf9159b0a73dd643cef229187eb0cdd8da04..8e8e81900a8f82ee6fa8d3d8ec7e0515d5cb5423

---

From: Mike Bishop <[email-masked]>
Date: Sun, 03 Jun 2018 22:43:17 -0700

d6cb886  You know what I meant

-- 
You are receiving this because you are subscribed to this thread.
View it on GitHub:
https://github.com/quicwg/base-drafts/pull/1410/files/8e8e81900a8f82ee6fa8d3d8ec7e0515d5cb5423..d6cb886ad0f38d60440827a92175cbd9812777c5

---

From: afrind <[email-masked]>
Date: Mon, 04 Jun 2018 01:45:33 -0700

afrind commented on this pull request.

> +The decoder stream signals key events at the decoder that permit the encoder to
+track the decoder's state.  These events are:
+
+- Successful processing of a header block
+- Abandonment of a stream which might have remaining header blocks
+- Receipt of new dynamic table entries
+
+Regardless of whether a header block contained blocking references, the
+knowledge that it was processed successfully permits the encoder to avoid
+evicting entries while references remain outstanding; see {{blocked-eviction}}.
+When a stream is reset or abandoned, the indication that these header blocks
+will never be processed serves a similar function.
+
+For the encoder to identify which dynamic table entries can be safely used
+without a stream becoming blocked, the encoder tracks the Largest Known Received
+absolute index in the decoder's state.

"in the decoder's state" sounds kind of weird. Maybe "the encoder tracks the absolute index of the decoder's Largest Known Received entry.

> +- Successful processing of a header block
+- Abandonment of a stream which might have remaining header blocks
+- Receipt of new dynamic table entries
+
+Regardless of whether a header block contained blocking references, the
+knowledge that it was processed successfully permits the encoder to avoid
+evicting entries while references remain outstanding; see {{blocked-eviction}}.
+When a stream is reset or abandoned, the indication that these header blocks
+will never be processed serves a similar function.
+
+For the encoder to identify which dynamic table entries can be safely used
+without a stream becoming blocked, the encoder tracks the Largest Known Received
+absolute index in the decoder's state.
+
+When blocking references are permitted, the encoder uses acknowledgement of
+header blocks for this purpose.  If a header block was potentially blocking, the

"for this purpose" reads ambiguously to me.

> +- Abandonment of a stream which might have remaining header blocks
+- Receipt of new dynamic table entries
+
+Regardless of whether a header block contained blocking references, the
+knowledge that it was processed successfully permits the encoder to avoid
+evicting entries while references remain outstanding; see {{blocked-eviction}}.
+When a stream is reset or abandoned, the indication that these header blocks
+will never be processed serves a similar function.
+
+For the encoder to identify which dynamic table entries can be safely used
+without a stream becoming blocked, the encoder tracks the Largest Known Received
+absolute index in the decoder's state.
+
+When blocking references are permitted, the encoder uses acknowledgement of
+header blocks for this purpose.  If a header block was potentially blocking, the
+successful processing of the block by the decoder implies that all dynamic table

receipt of a header acknowledgement implies this

-- 
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/pull/1410#pullrequestreview-125472428

---

From: Mike Bishop <[email-masked]>
Date: Tue, 12 Jun 2018 11:43:37 -0700

a15bf25  Alan's feedback

-- 
You are receiving this because you are subscribed to this thread.
View it on GitHub:
https://github.com/quicwg/base-drafts/pull/1410/files/d6cb886ad0f38d60440827a92175cbd9812777c5..a15bf2576ca8db80c00896e4b2b2c1c13adee342

---

From: Mike Bishop <[email-masked]>
Date: Thu, 14 Jun 2018 12:02:07 -0700

Redone on top of #1400; look at the most recent commit if you want to see just this change.  The suggestion to land the text in the appropriate instructions and just forward-reference from the intro section does substantially reduce the "wall of text," and I think it reads much better.

-- 
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/pull/1410#issuecomment-397404112

---

From: Martin Thomson <[email-masked]>
Date: Thu, 14 Jun 2018 15:53:02 -0700

martinthomson approved this pull request.

Yep, this looks good.

-- 
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/pull/1410#pullrequestreview-128997170

---

From: afrind <[email-masked]>
Date: Fri, 15 Jun 2018 09:33:20 -0700

>  ~~~~~~~~~~
-{:#fig-size-sync title="Table Size Synchronize"}
+{:#fig-size-sync title="Table State Synchronize"}
+
+A decoder SHOULD emit a Table State Synchronize after receiving new dynamic
+table entries if the most recently inserted entry was not the Largest Reference

Since we are going to remove length prefix, 'entries' here is vague.  How many entries?  I think in the  common case the inserts will get processed before the references, but a blocking decoder would not want to send TSS without delaying to check for a referencing header block, so perhaps the SHOULD here is misleading?

Maybe it would help to describe the tradeoff -

A decoder chooses when to emit TSS instructions.  Emitting a TSS after adding each new dynamic table entry will provide the most timely feedback to the encoder, but could be redundant with other decoder feedback.  By delaying a TSS, a decoder might be able to coalesce multiple TSS instructions, or replace them entirely with Header Acknowledgements.  However, delaying too long may lead to compression inefficiencies if the encoder waits for an entry to be acknowledged before using it.

-- 
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/pull/1410#pullrequestreview-129227518

---

From: Mike Bishop <[email-masked]>
Date: Fri, 15 Jun 2018 11:25:24 -0700

MikeBishop commented on this pull request.

Works for me.

-- 
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/pull/1410#discussion_r195826783

---

From: Mike Bishop <[email-masked]>
Date: Fri, 15 Jun 2018 11:25:33 -0700

93aadb7  Alan's text

-- 
You are receiving this because you are subscribed to this thread.
View it on GitHub:
https://github.com/quicwg/base-drafts/pull/1410/files/b4ed7e487dd2c0d828f0f4422bd5044ab195674d..93aadb7e0f356d8e595db9e2cffd15504b13f86e

---

From: afrind <[email-masked]>
Date: Fri, 15 Jun 2018 11:49:19 -0700

Merged #1410.

-- 
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/pull/1410#event-1684058120