From 26f41a969b82c3d15b46da8b46706eb8eba83fec Mon Sep 17 00:00:00 2001 From: Remi Gacogne Date: Thu, 15 Apr 2021 11:54:45 +0200 Subject: [PATCH] Constify remaining response stats methods --- pdns/responsestats-auth.cc | 2 +- pdns/responsestats.cc | 16 ++++++++-------- pdns/responsestats.hh | 15 ++++++++++----- 3 files changed, 19 insertions(+), 14 deletions(-) diff --git a/pdns/responsestats-auth.cc b/pdns/responsestats-auth.cc index 4caae74f42..833cd025a3 100644 --- a/pdns/responsestats-auth.cc +++ b/pdns/responsestats-auth.cc @@ -7,7 +7,7 @@ extern StatBag S; * Function that creates all the stats * when udpOrTCP is true, it is udp */ -void ResponseStats::submitResponse(DNSPacket &p, bool udpOrTCP, bool last) { +void ResponseStats::submitResponse(DNSPacket &p, bool udpOrTCP, bool last) const { const string& buf=p.getString(); static AtomicCounter &udpnumanswered=*S.getPointer("udp-answers"); static AtomicCounter &udpnumanswered4=*S.getPointer("udp4-answers"); diff --git a/pdns/responsestats.cc b/pdns/responsestats.cc index 824ee60d66..a41add2630 100644 --- a/pdns/responsestats.cc +++ b/pdns/responsestats.cc @@ -28,24 +28,24 @@ ResponseStats::ResponseStats() : d_sizecounters("SizeCounters", sizeBounds()) { for (unsigned int n = 0; n < 65535; ++n) { - d_qtypecounters[n] = 0; + d_qtypecounters[n].value = 0; } for (unsigned int n = 0; n < 256; ++n) { - d_rcodecounters[n] = 0; + d_rcodecounters[n].value = 0; } } ResponseStats g_rs; -void ResponseStats::submitResponse(uint16_t qtype, uint16_t respsize, uint8_t rcode, bool udpOrTCP) +void ResponseStats::submitResponse(uint16_t qtype, uint16_t respsize, uint8_t rcode, bool udpOrTCP) const { - d_rcodecounters.at(rcode)++; + d_rcodecounters.at(rcode).value++; submitResponse(qtype, respsize, udpOrTCP); } -void ResponseStats::submitResponse(uint16_t qtype, uint16_t respsize, bool udpOrTCP) +void ResponseStats::submitResponse(uint16_t qtype, uint16_t respsize, bool udpOrTCP) const { - d_qtypecounters.at(qtype)++; + d_qtypecounters.at(qtype).value++; d_sizecounters(respsize); } @@ -54,7 +54,7 @@ map ResponseStats::getQTypeResponseCounts() const map ret; uint64_t count; for (unsigned int i = 0; i < 65535; ++i) { - count = d_qtypecounters.at(i); + count = d_qtypecounters.at(i).value; if (count) { ret[i] = count; } @@ -78,7 +78,7 @@ map ResponseStats::getRCodeResponseCounts() const map ret; uint64_t count; for (unsigned int i = 0; i < 256; ++i) { - count = d_rcodecounters.at(i); + count = d_rcodecounters.at(i).value; if (count) { ret[i] = count; } diff --git a/pdns/responsestats.hh b/pdns/responsestats.hh index e9ace35284..421c814cfc 100644 --- a/pdns/responsestats.hh +++ b/pdns/responsestats.hh @@ -31,17 +31,22 @@ class ResponseStats public: ResponseStats(); - void submitResponse(DNSPacket& p, bool udpOrTCP, bool last = true); - void submitResponse(uint16_t qtype, uint16_t respsize, bool udpOrTCP); - void submitResponse(uint16_t qtype, uint16_t respsize, uint8_t rcode, bool udpOrTCP); + void submitResponse(DNSPacket& p, bool udpOrTCP, bool last = true) const; + void submitResponse(uint16_t qtype, uint16_t respsize, bool udpOrTCP) const; + void submitResponse(uint16_t qtype, uint16_t respsize, uint8_t rcode, bool udpOrTCP) const; map getQTypeResponseCounts() const; map getSizeResponseCounts() const; map getRCodeResponseCounts() const; string getQTypeReport() const; private: - std::array, 65535> d_qtypecounters; - std::array, 256> d_rcodecounters; + struct Counter + { + mutable std::atomic value; + }; + + std::array d_qtypecounters; + std::array d_rcodecounters; pdns::AtomicHistogram d_sizecounters; }; -- 2.47.2