]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
ixfrdist: Make sure that our metrics are properly initialized 12521/head
authorRemi Gacogne <remi.gacogne@powerdns.com>
Mon, 6 Feb 2023 09:07:04 +0000 (10:07 +0100)
committerPeter van Dijk <peter.van.dijk@powerdns.com>
Wed, 8 Feb 2023 12:44:30 +0000 (13:44 +0100)
Before C++20 std::atomic variables are not guaranteed to be initialized,
even though it looks like compilers are actually doing the initialization
even in C++17.
Reported by Coverity as CID 1504405.

(cherry picked from commit de9fbd402dc05263e8ddb2e6ffc09b5cf01bef1e)

pdns/ixfrdist-stats.hh
regression-tests.ixfrdist/test_Stats.py

index 26a27be60f4472c9245f446fb6d6f1ba50ff6940..74d0344d055a6911eb2552b282be2549cf62c6b1 100644 (file)
@@ -71,22 +71,22 @@ class ixfrdistStats {
     class perDomainStat {
       public:
         bool                  haveZone;
-        std::atomic<uint32_t> currentSOA; // NOTE: this will wrongly be zero for unavailable zones
+        std::atomic<uint32_t> currentSOA{0}; // NOTE: this will wrongly be zero for unavailable zones
 
-        std::atomic<uint32_t> numSOAChecks;
-        std::atomic<uint32_t> numSOAChecksFailed;
+        std::atomic<uint32_t> numSOAChecks{0};
+        std::atomic<uint32_t> numSOAChecksFailed{0};
 
-        std::atomic<uint64_t> numSOAinQueries;
-        std::atomic<uint64_t> numAXFRinQueries;
-        std::atomic<uint64_t> numIXFRinQueries;
+        std::atomic<uint64_t> numSOAinQueries{0};
+        std::atomic<uint64_t> numAXFRinQueries{0};
+        std::atomic<uint64_t> numIXFRinQueries{0};
 
-        std::atomic<uint64_t> numAXFRFailures;
-        std::atomic<uint64_t> numIXFRFailures;
+        std::atomic<uint64_t> numAXFRFailures{0};
+        std::atomic<uint64_t> numIXFRFailures{0};
     };
     class programStats {
       public:
         time_t startTime;
-        std::atomic<uint32_t> unknownDomainInQueries;
+        std::atomic<uint32_t> unknownDomainInQueries{0};
     };
 
     std::map<DNSName, perDomainStat> domainStats;
index 93705f7eb7cd82bd7a6a49251840797906f5b126..d9c8c8c35b980b6e623dc9b4c71c3e551fe8f8f1 100644 (file)
@@ -76,8 +76,12 @@ webserver-address: %s
                 continue
             if "{" in line:
                 continue
-            self.assertIn(line.split(" ")[0],
+            tokens = line.split(" ")
+            self.assertIn(tokens[0],
                           self.metric_prog_stats + self.metric_domain_stats)
+            if tokens[0] == 'ixfrdist_unknown_domain_inqueries_total':
+                self.assertEqual(int(tokens[1]), 0)
+
         self.checkPrometheusContentPromtool(res.content)
 
     def test_registered(self):