]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
dnsdist: Use unordered sets to speed things up a bit
authorRemi Gacogne <remi.gacogne@powerdns.com>
Fri, 24 Jun 2022 13:50:10 +0000 (15:50 +0200)
committerRemi Gacogne <remi.gacogne@powerdns.com>
Wed, 11 Jan 2023 13:42:28 +0000 (14:42 +0100)
pdns/dnsdist-idstate.hh
pdns/dnsdist-lua-actions.cc
pdns/dnsdist-lua.hh

index d11c5c4226e2c4656027cf79e44c75d9b2e9ae0f..e90bf953c2278809dcb9ab247520bb47e34ef10f 100644 (file)
@@ -117,7 +117,7 @@ struct InternalQueryState
   InternalQueryState& operator=(const InternalQueryState& orig) = delete;
 
   boost::optional<Netmask> subnet{boost::none}; // 40
-  std::set<QType> ttlCapTypes;
+  std::unordered_set<QType> ttlCapTypes;
   ComboAddress origRemote; // 28
   ComboAddress origDest; // 28
   ComboAddress hopRemote;
index af6fec942f01f402507ba8ceb848ad2923966824..7e5ecb8df6eb6a4d72b016e2d57e9ef0585659e9 100644 (file)
@@ -2329,8 +2329,9 @@ void setupLuaActions(LuaContext& luaCtx)
     });
 
   luaCtx.writeFunction("LimitTTLResponseAction", [](uint32_t min, uint32_t max, boost::optional<LuaArray<uint16_t>> types) {
-      std::set<QType> capTypes;
+      std::unordered_set<QType> capTypes;
       if (types) {
+        capTypes.reserve(types->size());
         for (const auto& [idx, type] : *types) {
           capTypes.insert(QType(type));
         }
index abaf11904a108089b4998d1ba1f6a39b6f92acf7..9570f3e80251d68d144204e9332c94d4fd5c683a 100644 (file)
@@ -88,7 +88,7 @@ public:
 private:
   static thread_local std::default_random_engine t_randomEngine;
   std::vector<ComboAddress> d_addrs;
-  std::set<uint16_t> d_types;
+  std::unordered_set<uint16_t> d_types;
   std::vector<std::string> d_rawResponses;
   PacketBuffer d_raw;
   DNSName d_cname;
@@ -99,7 +99,7 @@ class LimitTTLResponseAction : public DNSResponseAction, public boost::noncopyab
 public:
   LimitTTLResponseAction() {}
 
-  LimitTTLResponseAction(uint32_t min, uint32_t max = std::numeric_limits<uint32_t>::max(), std::set<QType> types = {}) : d_types(types), d_min(min), d_max(max)
+  LimitTTLResponseAction(uint32_t min, uint32_t max = std::numeric_limits<uint32_t>::max(), std::unordered_set<QType> types = {}) : d_types(types), d_min(min), d_max(max)
   {
   }
 
@@ -146,7 +146,7 @@ public:
   }
 
 private:
-  std::set<QType> d_types;
+  std::unordered_set<QType> d_types;
   uint32_t d_min{0};
   uint32_t d_max{std::numeric_limits<uint32_t>::max()};
 };