]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
Also purge t_sstorage.ednsstatus and include edns size in the periodic report.
authorOtto Moerbeek <otto.moerbeek@open-xchange.com>
Tue, 12 Nov 2019 15:42:10 +0000 (16:42 +0100)
committerOtto Moerbeek <otto.moerbeek@open-xchange.com>
Tue, 19 Nov 2019 09:53:24 +0000 (10:53 +0100)
(cherry picked from commit bbc7101c05672d91f5131fa5baa884a750e139a4)

pdns/pdns_recursor.cc
pdns/rec_channel_rec.cc
pdns/syncres.hh

index 607d9d9c071d7492c31c9f8ce21d31a04f39d368..de0be62fb7bcf3e8ac4aafd744669dfa9f47a430 100644 (file)
@@ -2668,7 +2668,8 @@ static void doStats(void)
     g_log<<Logger::Notice<<"stats: throttle map: "
       << broadcastAccFunction<uint64_t>(pleaseGetThrottleSize) <<", ns speeds: "
       << broadcastAccFunction<uint64_t>(pleaseGetNsSpeedsSize)<<", failed ns: "
-      << broadcastAccFunction<uint64_t>(pleaseGetFailedServersSize)<<endl;
+      << broadcastAccFunction<uint64_t>(pleaseGetFailedServersSize)<<", ednsmap: "
+      <<broadcastAccFunction<uint64_t>(pleaseGetEDNSStatusesSize)<<endl;
     g_log<<Logger::Notice<<"stats: outpacket/query ratio "<<(int)(SyncRes::s_outqueries*100.0/SyncRes::s_queries)<<"%";
     g_log<<Logger::Notice<<", "<<(int)(SyncRes::s_throttledqueries*100.0/(SyncRes::s_outqueries+SyncRes::s_throttledqueries))<<"% throttled, "
      <<SyncRes::s_nodelegated<<" no-delegation drops"<<endl;
@@ -2734,6 +2735,8 @@ static void houseKeeping(void *)
         SyncRes::pruneNSSpeeds(limit);
         limit = now.tv_sec - SyncRes::s_serverdownthrottletime * 10;
         SyncRes::pruneFailedServers(limit);
+        limit = now.tv_sec - 2*3600;
+        SyncRes::pruneEDNSStatuses(limit);
       }
       last_prune=time(0);
     }
index d3e60b984f0eb22db9c88b03f4f7a9994d041a48..137429a0f7bf6c689ccb868c6bc67c3e0e1fef08 100644 (file)
@@ -917,6 +917,11 @@ uint64_t* pleaseGetFailedServersSize()
   return new uint64_t(SyncRes::getFailedServersSize());
 }
 
+uint64_t* pleaseGetEDNSStatusesSize()
+{
+  return new uint64_t(SyncRes::getEDNSStatusesSize());
+}
+
 uint64_t* pleaseGetConcurrentQueries()
 {
   return new uint64_t(getMT() ? getMT()->numProcesses() : 0);
index 7308f0cc4c8a90e5526fc58a46e79903b7b1ce8d..9241866fc62f3a334979c363a6043003d3131893 100644 (file)
@@ -509,6 +509,16 @@ public:
   {
     t_sstorage.ednsstatus.clear();
   }
+  static void pruneEDNSStatuses(time_t cutoff)
+  {
+    for (auto it = t_sstorage.ednsstatus.begin(); it != t_sstorage.ednsstatus.end(); ) {
+      if (it->second.modeSetAt && it->second.modeSetAt <= cutoff) {
+        it = t_sstorage.ednsstatus.erase(it);
+      } else {
+        ++it;
+      }
+    }
+  }
   static uint64_t getThrottledServersSize()
   {
     return t_sstorage.throttle.size();
@@ -1050,6 +1060,7 @@ template<class T> T broadcastAccFunction(const boost::function<T*()>& func);
 std::shared_ptr<SyncRes::domainmap_t> parseAuthAndForwards();
 uint64_t* pleaseGetNsSpeedsSize();
 uint64_t* pleaseGetFailedServersSize();
+uint64_t* pleaseGetEDNSStatusesSize();
 uint64_t* pleaseGetCacheSize();
 uint64_t* pleaseGetNegCacheSize();
 uint64_t* pleaseGetCacheHits();