- 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
- 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.
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 anINTERNAL_ERRORapp code.Environment
master- 5012710Steps to reproduce
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_ERRORapp code.Other information
After inspecting the code, the culprit seems to be that the
quiche_conn_stream_sendfunction returns the value-1(QUICHE_ERR_DONE), which is because the stream is congested, as per the Quiche documentation. This causesdnsdistto lose a lot of legitimate queries in a high-volume traffic scenario.When
quiche_conn_stream_sendreturnsQUICHE_ERR_DONE,dnsdistshould defer sending the reply to a later time at which it gets notified that the stream is writable again.