]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
dnsdist: Only include the expensive LuaContext header when required 14497/head
authorRemi Gacogne <remi.gacogne@powerdns.com>
Tue, 16 Jul 2024 13:08:45 +0000 (15:08 +0200)
committerRemi Gacogne <remi.gacogne@powerdns.com>
Thu, 18 Jul 2024 06:58:43 +0000 (08:58 +0200)
13 files changed:
pdns/dnsdistdist/dnsdist-backend.cc
pdns/dnsdistdist/dnsdist-console.cc
pdns/dnsdistdist/dnsdist-dynblocks.hh
pdns/dnsdistdist/dnsdist-healthchecks.cc
pdns/dnsdistdist/dnsdist-lbpolicies.cc
pdns/dnsdistdist/dnsdist-lbpolicies.hh
pdns/dnsdistdist/dnsdist-lua-ffi.hh
pdns/dnsdistdist/dnsdist-lua.hh
pdns/dnsdistdist/dnsdist-rules.hh
pdns/dnsdistdist/dnsdist-tcp.cc
pdns/dnsdistdist/dnsdist-web.cc
pdns/dnsdistdist/dnsdist.hh
pdns/dnsdistdist/test-dnsdistrules_cc.cc

index eb5e3c6c60086fe1c142869d5bc37e3f3e9d19e6..11b00667b9b47d606114dbdb82a1159e09975d0d 100644 (file)
@@ -19,6 +19,8 @@
  * along with this program; if not, write to the Free Software
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  */
+#include <boost/format.hpp>
+
 #include "config.h"
 #include "dnsdist.hh"
 #include "dnsdist-backend.hh"
index f5ed5c705f202d0073b34687924fa56e0cba0ac8..2b382977fa5d5f6db741074dcfd7728fa14489ce 100644 (file)
@@ -44,6 +44,7 @@
 #include "dnsdist.hh"
 #include "dnsdist-console.hh"
 #include "dnsdist-crypto.hh"
+#include "dnsdist-lua.hh"
 #include "threadname.hh"
 
 static LockGuarded<std::vector<pair<timeval, string>>> s_confDelta;
index f700e16416a18f9e60a1b66d00449e0bf25ba841..7c240f5fd26ca1362b74f1c8aece1863aa3dc73a 100644 (file)
@@ -33,6 +33,8 @@ extern "C"
 #include "dnsdist-lua-inspection-ffi.h"
 }
 
+#include "ext/luawrapper/include/LuaContext.hpp"
+
 // dnsdist_ffi_stat_node_t is a lightuserdata
 template <>
 struct LuaContext::Pusher<dnsdist_ffi_stat_node_t*>
index 02c08037461a520c3ce4c8b6aed563fd35df3bac..7f02b24f76d017729f4c68d4f38770d34e134e91 100644 (file)
@@ -24,6 +24,7 @@
 #include "tcpiohandler-mplexer.hh"
 #include "dnswriter.hh"
 #include "dolog.hh"
+#include "dnsdist-lua.hh"
 #include "dnsdist-random.hh"
 #include "dnsdist-tcp.hh"
 #include "dnsdist-nghttp2.hh"
index 6fb2c24b434338b18b29188bce217b1a242c1888..337a062669d89a38ef0d8cfb49b269c977210949 100644 (file)
@@ -338,24 +338,30 @@ ServerPolicy::ServerPolicy(const std::string& name_, const std::string& code): d
   auto ret = tmpContext.executeCode<ServerPolicy::ffipolicyfunc_t>(code);
 }
 
-thread_local ServerPolicy::PerThreadState ServerPolicy::t_perThreadState;
+struct ServerPolicy::PerThreadState
+{
+  LuaContext d_luaContext;
+  std::unordered_map<std::string, ffipolicyfunc_t> d_policies;
+};
+
+thread_local std::unique_ptr<ServerPolicy::PerThreadState> ServerPolicy::t_perThreadState;
 
 const ServerPolicy::ffipolicyfunc_t& ServerPolicy::getPerThreadPolicy() const
 {
   auto& state = t_perThreadState;
-  if (!state.d_initialized) {
-    setupLuaLoadBalancingContext(state.d_luaContext);
-    state.d_initialized = true;
+  if (!state) {
+    state = std::make_unique<ServerPolicy::PerThreadState>();
+    setupLuaLoadBalancingContext(state->d_luaContext);
   }
 
-  const auto& it = state.d_policies.find(d_name);
-  if (it != state.d_policies.end()) {
-    return it->second;
+  const auto& policyIt = state->d_policies.find(d_name);
+  if (policyIt != state->d_policies.end()) {
+    return policyIt->second;
   }
 
-  auto newPolicy = state.d_luaContext.executeCode<ServerPolicy::ffipolicyfunc_t>(d_perThreadPolicyCode);
-  state.d_policies[d_name] = std::move(newPolicy);
-  return state.d_policies.at(d_name);
+  auto newPolicy = state->d_luaContext.executeCode<ServerPolicy::ffipolicyfunc_t>(d_perThreadPolicyCode);
+  state->d_policies[d_name] = std::move(newPolicy);
+  return state->d_policies.at(d_name);
 }
 
 std::shared_ptr<DownstreamState> ServerPolicy::getSelectedBackend(const ServerPolicy::NumberedServerVector& servers, DNSQuestion& dq) const
index ce95addab9c58062d20b6a0d71487f9efdf684a9..3ddc4ec592d502867c184239614c2d4506030eee 100644 (file)
@@ -69,15 +69,10 @@ public:
   }
 
 private:
-  struct PerThreadState
-  {
-    LuaContext d_luaContext;
-    std::unordered_map<std::string, ffipolicyfunc_t> d_policies;
-    bool d_initialized{false};
-  };
+  struct PerThreadState;
 
   const ffipolicyfunc_t& getPerThreadPolicy() const;
-  static thread_local PerThreadState t_perThreadState;
+  static thread_local std::unique_ptr<PerThreadState> t_perThreadState;
 
 public:
   std::string d_name;
index a91003b971ad0ae557d05665325ae4c000dc6a39..d620c2455493de2aa39ad19910d098886846bd85 100644 (file)
@@ -27,6 +27,8 @@ extern "C" {
 #include "dnsdist-lua-ffi-interface.h"
 }
 
+#include "ext/luawrapper/include/LuaContext.hpp"
+
 // dnsdist_ffi_dnsquestion_t is a lightuserdata
 template<>
 struct LuaContext::Pusher<dnsdist_ffi_dnsquestion_t*> {
index e8123a387c5a14f30e6c85eb023c771986df79f2..e2be6dca1e806d104a4765f2c19d8374ffab0ec4 100644 (file)
  */
 #pragma once
 
+#include <random>
+
 #include "dolog.hh"
 #include "dnsdist.hh"
 #include "dnsdist-dnsparser.hh"
 #include "dnsparser.hh"
-#include <random>
+
+#include "ext/luawrapper/include/LuaContext.hpp"
+
+extern RecursiveLockGuarded<LuaContext> g_lua;
+extern std::string g_outputBuffer; // locking for this is ok, as locked by g_luamutex
 
 class SpoofAction : public DNSAction
 {
index ac136968a4a585c2a3db9ca6c6e7b67fba34dafb..83ea08dbd7063d9648ea1388f6c5bdc8a827a376 100644 (file)
@@ -30,6 +30,7 @@
 #include "dnsdist.hh"
 #include "dnsdist-ecs.hh"
 #include "dnsdist-kvs.hh"
+#include "dnsdist-lua.hh"
 #include "dnsdist-lua-ffi.hh"
 #include "dolog.hh"
 #include "dnsparser.hh"
index e5f9fcdb0a885ff2a4382f394bfda6fc44ccf5da..1e02000fe4adee9219d3fc0ef783babef990dbda 100644 (file)
@@ -23,6 +23,7 @@
 #include <thread>
 #include <netinet/tcp.h>
 #include <queue>
+#include <boost/format.hpp>
 
 #include "dnsdist.hh"
 #include "dnsdist-concurrent-connections.hh"
index 7790e755f0d34a709209c45160de430ff7fab734..d4f392920fe77937a6411ba82bdcef7917a89b96 100644 (file)
@@ -38,6 +38,7 @@
 #include "dnsdist-dynbpf.hh"
 #include "dnsdist-frontend.hh"
 #include "dnsdist-healthchecks.hh"
+#include "dnsdist-lua.hh"
 #include "dnsdist-metrics.hh"
 #include "dnsdist-prometheus.hh"
 #include "dnsdist-rings.hh"
index 5754af6a70a9f83e50f40c0d01c13af434ead776..e682172780b93e4f6408cf4a0dc7c3c9086ae316 100644 (file)
@@ -22,7 +22,6 @@
 #pragma once
 
 #include "config.h"
-#include "ext/luawrapper/include/LuaContext.hpp"
 
 #include <condition_variable>
 #include <memory>
@@ -890,8 +889,6 @@ public:
 };
 
 void responderThread(std::shared_ptr<DownstreamState> dss);
-extern RecursiveLockGuarded<LuaContext> g_lua;
-extern std::string g_outputBuffer; // locking for this is ok, as locked by g_luamutex
 
 class DNSDistPacketCache;
 
index 0cda248317a4e62577a2ee3517c20aed30dfd58b..7457fb3bb16f1005d60d72574537803f586855dc 100644 (file)
@@ -10,7 +10,6 @@
 
 #include "dnsdist-rules.hh"
 
-void checkParameterBound(const std::string& parameter, uint64_t value, size_t max);
 void checkParameterBound(const std::string& parameter, uint64_t value, size_t max)
 {
   if (value > max) {