From 21bf59706344088593b1f73a7420c9b6e06f654a Mon Sep 17 00:00:00 2001 From: Remi Gacogne Date: Tue, 29 Jul 2025 10:34:48 +0200 Subject: [PATCH] dnsdist: Better config refresh logic in the TCP/DoH threads Signed-off-by: Remi Gacogne (cherry picked from commit 51d2c34c0e209120a4692697a56e3a8bcaeb9af0) --- pdns/dnsdistdist/dnsdist-nghttp2.cc | 6 +++++- pdns/dnsdistdist/dnsdist-tcp.cc | 14 ++++++++++++-- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/pdns/dnsdistdist/dnsdist-nghttp2.cc b/pdns/dnsdistdist/dnsdist-nghttp2.cc index 5eea2a3429..36dedd43c8 100644 --- a/pdns/dnsdistdist/dnsdist-nghttp2.cc +++ b/pdns/dnsdistdist/dnsdist-nghttp2.cc @@ -874,11 +874,15 @@ static void dohClientThread(pdns::channel::Receiver&& receiv gettimeofday(&now, nullptr); time_t lastTimeoutScan = now.tv_sec; + time_t lastConfigRefresh = now.tv_sec; for (;;) { data.mplexer->run(&now, 1000); - dnsdist::configuration::refreshLocalRuntimeConfiguration(); + if (now.tv_sec > lastConfigRefresh) { + lastConfigRefresh = now.tv_sec; + dnsdist::configuration::refreshLocalRuntimeConfiguration(); + } if (now.tv_sec > lastTimeoutScan) { lastTimeoutScan = now.tv_sec; diff --git a/pdns/dnsdistdist/dnsdist-tcp.cc b/pdns/dnsdistdist/dnsdist-tcp.cc index d58cd24f36..6397d5a415 100644 --- a/pdns/dnsdistdist/dnsdist-tcp.cc +++ b/pdns/dnsdistdist/dnsdist-tcp.cc @@ -1713,11 +1713,15 @@ static void tcpClientThread(pdns::channel::Receiver&& queryRecei timeval now{}; gettimeofday(&now, nullptr); time_t lastTimeoutScan = now.tv_sec; + time_t lastConfigRefresh = now.tv_sec; for (;;) { data.mplexer->run(&now); - dnsdist::configuration::refreshLocalRuntimeConfiguration(); + if (now.tv_sec > lastConfigRefresh) { + lastConfigRefresh = now.tv_sec; + dnsdist::configuration::refreshLocalRuntimeConfiguration(); + } try { t_downstreamTCPConnectionsManager.cleanupClosedConnections(now); @@ -1864,6 +1868,7 @@ void tcpAcceptorThread(const std::vector& states) if (params.size() == 1) { while (true) { + dnsdist::configuration::refreshLocalRuntimeConfiguration(); acceptNewConnection(params.at(0), nullptr); } } @@ -1880,9 +1885,14 @@ void tcpAcceptorThread(const std::vector& states) } timeval now{}; + time_t lastConfigRefresh = now.tv_sec; while (true) { mplexer->run(&now, -1); - dnsdist::configuration::refreshLocalRuntimeConfiguration(); + + if (now.tv_sec > lastConfigRefresh) { + lastConfigRefresh = now.tv_sec; + dnsdist::configuration::refreshLocalRuntimeConfiguration(); + } } } } -- 2.47.3