]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
dnsdist: Better config refresh logic in the TCP/DoH threads
authorRemi Gacogne <remi.gacogne@powerdns.com>
Tue, 29 Jul 2025 08:34:48 +0000 (10:34 +0200)
committerRemi Gacogne <remi.gacogne@powerdns.com>
Thu, 28 Aug 2025 09:25:12 +0000 (11:25 +0200)
Signed-off-by: Remi Gacogne <remi.gacogne@powerdns.com>
(cherry picked from commit 51d2c34c0e209120a4692697a56e3a8bcaeb9af0)

pdns/dnsdistdist/dnsdist-nghttp2.cc
pdns/dnsdistdist/dnsdist-tcp.cc

index 5eea2a3429cdb234b8d2c99af87d5d88bc987d19..36dedd43c8f8ac1d1e8a94f0698e22e9bc71b502 100644 (file)
@@ -874,11 +874,15 @@ static void dohClientThread(pdns::channel::Receiver<CrossProtocolQuery>&& 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;
index d58cd24f3620eee614b5a88d485a091888e9ea8d..6397d5a415841066dc4bbf7a7bdb7a8735f6e20d 100644 (file)
@@ -1713,11 +1713,15 @@ static void tcpClientThread(pdns::channel::Receiver<ConnectionInfo>&& 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<ClientState*>& states)
 
   if (params.size() == 1) {
     while (true) {
+      dnsdist::configuration::refreshLocalRuntimeConfiguration();
       acceptNewConnection(params.at(0), nullptr);
     }
   }
@@ -1880,9 +1885,14 @@ void tcpAcceptorThread(const std::vector<ClientState*>& 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();
+      }
     }
   }
 }