Home / Class/ QpackEncoderDynamicTable Class — netty Architecture

QpackEncoderDynamicTable Class — netty Architecture

Architecture documentation for the QpackEncoderDynamicTable class in QpackEncoderDynamicTable.java from the netty codebase.

Entity Profile

Dependency Diagram

graph TD
  4f2fd884_2460_757f_867b_2f1f2c79f9b9["QpackEncoderDynamicTable"]
  e46b63f7_a325_3795_be25_17be3a787249["QpackEncoderDynamicTable.java"]
  4f2fd884_2460_757f_867b_2f1f2c79f9b9 -->|defined in| e46b63f7_a325_3795_be25_17be3a787249
  b4159dce_fe68_534e_68db_02f7c19dfb60["QpackEncoderDynamicTable()"]
  4f2fd884_2460_757f_867b_2f1f2c79f9b9 -->|method| b4159dce_fe68_534e_68db_02f7c19dfb60
  ef672b49_5f7c_b883_8dcc_2b6479f4097c["add()"]
  4f2fd884_2460_757f_867b_2f1f2c79f9b9 -->|method| ef672b49_5f7c_b883_8dcc_2b6479f4097c
  0a901964_d825_b903_5e9a_9b0a52054e86["acknowledgeInsertCountOnAck()"]
  4f2fd884_2460_757f_867b_2f1f2c79f9b9 -->|method| 0a901964_d825_b903_5e9a_9b0a52054e86
  7ad0adeb_aa99_f682_5545_846f56b11697["acknowledgeInsertCountOnCancellation()"]
  4f2fd884_2460_757f_867b_2f1f2c79f9b9 -->|method| 7ad0adeb_aa99_f682_5545_846f56b11697
  4f153071_c170_fc5c_fb3b_551b3a5e579e["acknowledgeInsertCount()"]
  4f2fd884_2460_757f_867b_2f1f2c79f9b9 -->|method| 4f153071_c170_fc5c_fb3b_551b3a5e579e
  9a14e250_717c_465f_08fd_352c3d9743cf["incrementKnownReceivedCount()"]
  4f2fd884_2460_757f_867b_2f1f2c79f9b9 -->|method| 9a14e250_717c_465f_08fd_352c3d9743cf
  cba5fe41_0a21_a783_5182_bccb6fb8d9c9["insertCount()"]
  4f2fd884_2460_757f_867b_2f1f2c79f9b9 -->|method| cba5fe41_0a21_a783_5182_bccb6fb8d9c9
  1b0bdefb_23b9_c13d_cb67_e8e9f354f031["encodedRequiredInsertCount()"]
  4f2fd884_2460_757f_867b_2f1f2c79f9b9 -->|method| 1b0bdefb_23b9_c13d_cb67_e8e9f354f031
  67115d8b_6ff8_dc77_25fb_4e867b23fef2["encodedKnownReceivedCount()"]
  4f2fd884_2460_757f_867b_2f1f2c79f9b9 -->|method| 67115d8b_6ff8_dc77_25fb_4e867b23fef2
  7bee1cc8_fb10_4557_d83c_ebacd2e5f371["maxTableCapacity()"]
  4f2fd884_2460_757f_867b_2f1f2c79f9b9 -->|method| 7bee1cc8_fb10_4557_d83c_ebacd2e5f371
  5c17adfe_8f56_570d_084c_469304601afe["relativeIndexForEncoderInstructions()"]
  4f2fd884_2460_757f_867b_2f1f2c79f9b9 -->|method| 5c17adfe_8f56_570d_084c_469304601afe
  f75601b2_b056_67da_709d_f36cf23dfab5["getEntryIndex()"]
  4f2fd884_2460_757f_867b_2f1f2c79f9b9 -->|method| f75601b2_b056_67da_709d_f36cf23dfab5
  072609f9_81d2_a5c1_f916_0a22a93b134d["addReferenceToEntry()"]
  4f2fd884_2460_757f_867b_2f1f2c79f9b9 -->|method| 072609f9_81d2_a5c1_f916_0a22a93b134d

Relationship Graph

Source Code

codec-http3/src/main/java/io/netty/handler/codec/http3/QpackEncoderDynamicTable.java lines 31–490

final class QpackEncoderDynamicTable {
    private static final QpackException INVALID_KNOW_RECEIVED_COUNT_INCREMENT =
            QpackException.newStatic(QpackDecoder.class, "incrementKnownReceivedCount(...)",
                    "QPACK - invalid known received count increment.");
    private static final QpackException INVALID_REQUIRED_INSERT_COUNT_INCREMENT =
            QpackException.newStatic(QpackDecoder.class, "acknowledgeInsertCount(...)",
                    "QPACK - invalid required insert count acknowledgment.");
    private static final QpackException INVALID_TABLE_CAPACITY =
            QpackException.newStatic(QpackDecoder.class, "validateCapacity(...)",
                    "QPACK - dynamic table capacity is invalid.");
    private static final QpackException CAPACITY_ALREADY_SET =
            QpackException.newStatic(QpackDecoder.class, "maxTableCapacity(...)",
                    "QPACK - dynamic table capacity is already set.");
    /**
     * Special return value of {@link #getEntryIndex(CharSequence, CharSequence)} when the entry is not found.
     */
    public static final int NOT_FOUND = Integer.MIN_VALUE;

    /**
     * A hashmap of header entries.
     */
    private final HeaderEntry[] fields;

    /**
     * Percentage of capacity that we expect to be free after eviction of old entries.
     */
    private final int expectedFreeCapacityPercentage;

    /**
     * Hash mask for all entries in the hashmap.
     */
    private final byte hashMask;

    /**
     * <a href="https://www.rfc-editor.org/rfc/rfc9204.html#name-dynamic-table-size">Current size of the table</a>.
     */
    private long size;

    /**
     * <a href="https://www.rfc-editor.org/rfc/rfc9204.html#name-maximum-dynamic-table-capac">
     *     Maximum capacity of the table</a>. This is set once based on the
     *     {@link Http3SettingsFrame#HTTP3_SETTINGS_QPACK_MAX_TABLE_CAPACITY} received by the remote peer.
     */
    private long maxTableCapacity = -1;

    /*
     * The below indexes follow the suggested heuristics in Section 2.1.1.1 Avoiding Prohibited insertions
     * https://www.rfc-editor.org/rfc/rfc9204.html#name-avoiding-prohibited-inserti
     *
     *                Tail                             Drain       Head
     *                 |                                |           |
     *                 v                                v           v
     *       +--------+---------------------------------+----------+
     *       | Unused |          Referenceable          | Draining |
     *       | Space  |             Entries             | Entries  |
     *       +--------+---------------------------------+----------+
     *                ^                                 ^          ^
     *                |                                 |          |
     *          Insertion Index                 Draining Index  Dropping Index
     */

    /**
     * Head of the entries, such that {@link HeaderEntry#index} is the {@code droppingIndex}.
     */
    private final HeaderEntry head;

    /**
     * Pointer before which entries are marked for eviction post {@link #incrementKnownReceivedCount(int)}.
     * {@link HeaderEntry#index} is the {@code drainingIndex}.
     */
    private HeaderEntry drain;

     /**
     * Pointer to the entry representing the <a
     * href="https://quicwg.org/base-drafts/draft-ietf-quic-qpack.html#name-known-received-count">
     * known received count</a>.
     */
    private HeaderEntry knownReceived;

    /**
     * Tail of the entries, such that {@link HeaderEntry#index} is the {@code insertionIndex}.

Frequently Asked Questions

What is the QpackEncoderDynamicTable class?
QpackEncoderDynamicTable is a class in the netty codebase, defined in codec-http3/src/main/java/io/netty/handler/codec/http3/QpackEncoderDynamicTable.java.
Where is QpackEncoderDynamicTable defined?
QpackEncoderDynamicTable is defined in codec-http3/src/main/java/io/netty/handler/codec/http3/QpackEncoderDynamicTable.java at line 31.

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free