Skip to content

dnsdist closes congested DNS-over-QUIC streams with INTERNAL_ERROR #13631

Description

@Spiffyk
  • Program: dnsdist
  • Issue type: Bug report

Short description

While testing my implementation of DNS-over-QUIC in DNS Shotgun against dnsdist, I have found that it closes a large number of streams with an INTERNAL_ERROR app code.

Environment

  • Operating system: OpenSUSE Tumbleweed
  • Software version: master - 5012710
  • Software source: Compiled myself

Steps to reproduce

  1. Send high-volume DNS-over-QUIC traffic to dnsdist, e.g. using DNS Shotgun.

Expected behaviour

Pretty much 100% of the queries should be answered in a localhost setting.

Actual behaviour

A large number of the queries are lost because dnsdist closes the streams with an INTERNAL_ERROR app code.

Other information

After inspecting the code, the culprit seems to be that the quiche_conn_stream_send function returns the value -1 (QUICHE_ERR_DONE), which is because the stream is congested, as per the Quiche documentation. This causes dnsdist to lose a lot of legitimate queries in a high-volume traffic scenario.

When quiche_conn_stream_send returns QUICHE_ERR_DONE, dnsdist should defer sending the reply to a later time at which it gets notified that the stream is writable again.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions