From 4b7c61381f186e20a476c35032a871295ebbd385 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Sur=C3=BD?= Date: Tue, 2 Jul 2024 20:17:49 +0200 Subject: [PATCH] Throttle the reading when writes are asynchronous Be more aggressive when throttling the reading - when we can't send the outgoing TCP synchronously with uv_try_write(), we start throttling the reading immediately instead of waiting for the send buffers to fill up. This should not affect behaved clients that read the data from the TCP on the other end. (cherry picked from commit bc3e713317df838b4bbe6582b357cd8d78e585cd) --- lib/isc/netmgr/tcpdns.c | 7 +++++++ lib/isc/netmgr/tlsdns.c | 8 ++++++++ 2 files changed, 15 insertions(+) diff --git a/lib/isc/netmgr/tcpdns.c b/lib/isc/netmgr/tcpdns.c index d7ec755bec..639ff7af02 100644 --- a/lib/isc/netmgr/tcpdns.c +++ b/lib/isc/netmgr/tcpdns.c @@ -1284,6 +1284,13 @@ isc__nm_async_tcpdnssend(isc__networker_t *worker, isc__netievent_t *ev0) { goto fail; } + isc_log_write(isc_lctx, ISC_LOGCATEGORY_GENERAL, ISC_LOGMODULE_NETMGR, + ISC_LOG_DEBUG(3), + "throttling TCP connection, the other side is not " + "reading the data, switching to uv_write()"); + sock->reading_throttled = true; + isc__nm_stop_reading(sock); + r = uv_write(&uvreq->uv_req.write, &sock->uv_handle.stream, bufs, nbufs, tcpdns_send_cb); if (r < 0) { diff --git a/lib/isc/netmgr/tlsdns.c b/lib/isc/netmgr/tlsdns.c index b41c353842..dbcd34b8ed 100644 --- a/lib/isc/netmgr/tlsdns.c +++ b/lib/isc/netmgr/tlsdns.c @@ -1377,6 +1377,14 @@ tls_cycle_output(isc_nmsocket_t *sock) { break; } + isc_log_write( + isc_lctx, ISC_LOGCATEGORY_GENERAL, ISC_LOGMODULE_NETMGR, + ISC_LOG_DEBUG(3), + "throttling TCP connection, the other side is not " + "reading the data, switching to uv_write()"); + sock->reading_throttled = true; + isc__nm_stop_reading(sock); + r = uv_write(&req->uv_req.write, &sock->uv_handle.stream, &req->uvbuf, 1, tls_write_cb); if (r < 0) {