In HTTP/3 QPACK there exists an instruction for duplicating an existing entry in the dynamic table; supposedly it is used to avoid adding reference to an older entry which may block inserting new entries.
However, I fail to see how this is helpful.
If the dynamic table does not contain enough room for a new entry without evicting other entries, and the entries that would be evicted are not evictable, the encoder MUST NOT insert that entry into the dynamic table (including duplicates of existing entries).
To ensure that the encoder is not prevented from adding new entries, the encoder can avoid referencing entries that are close to eviction. Rather than reference such an entry, the encoder can emit a Duplicate instruction (Section 4.3.4), and reference the duplicate instead.
+--------+---------------------------------+----------+
| Unused | Referenceable | Draining |
| Space | Entries | Entries |
+--------+---------------------------------+----------+
^ ^ ^
| | |
Insertion Point Draining Index Dropping
Point
(Taken from IETF-QUIC-QPACK-DRAFT16)
Is the idea here that once a field passes the draining index, we want to make it a lower priority to exist, so we'll add a reference to it, make any new requests refer to that reference, so that the old field becomes unreferenced and it will be removed? And between when it becomes removed, and the new reference gets added, those intermediate requests can be populated into the dynamic table which would otherwise become blocked?
Thank you.