From 301779cf0964a972a7f70b9c3270d7cbb3e77480 Mon Sep 17 00:00:00 2001 From: Remi Gacogne Date: Mon, 6 Apr 2020 15:05:37 +0200 Subject: [PATCH] auth: Add a new 'backend-queries' metric Counting the numbers of queries sent to the backend(s), instead of relying on the number of cache misses. --- pdns/dnsbackend.cc | 4 ++++ pdns/ueberbackend.cc | 11 ++++++++--- pdns/ueberbackend.hh | 1 + regression-tests.nobackend/counters/command | 2 +- 4 files changed, 14 insertions(+), 4 deletions(-) diff --git a/pdns/dnsbackend.cc b/pdns/dnsbackend.cc index 07fe9c6d42f4..9113d966a5ac 100644 --- a/pdns/dnsbackend.cc +++ b/pdns/dnsbackend.cc @@ -32,6 +32,9 @@ #include "pdns/packetcache.hh" #include "dnspacket.hh" #include "dns.hh" +#include "statbag.hh" + +extern StatBag S; // this has to be somewhere central, and not in a file that requires Lua // this is so the geoipbackend can set this pointer if loaded for lua-record.cc @@ -223,6 +226,7 @@ vectorBackendMakerClass::all(bool metadataOnly) bool DNSBackend::getSOA(const DNSName &domain, SOAData &sd) { this->lookup(QType(QType::SOA),domain,-1); + S.inc("backend-queries"); DNSResourceRecord rr; rr.auth = true; diff --git a/pdns/ueberbackend.cc b/pdns/ueberbackend.cc index 24af24c4ca79..3282b5567f64 100644 --- a/pdns/ueberbackend.cc +++ b/pdns/ueberbackend.cc @@ -50,10 +50,11 @@ extern StatBag S; vectorUeberBackend::instances; -pthread_mutex_t UeberBackend::instances_lock=PTHREAD_MUTEX_INITIALIZER; +pthread_mutex_t UeberBackend::instances_lock = PTHREAD_MUTEX_INITIALIZER; // initially we are blocked -bool UeberBackend::d_go=false; +bool UeberBackend::d_go = false; +AtomicCounter* UeberBackend::s_backendQueries = nullptr; pthread_mutex_t UeberBackend::d_mut = PTHREAD_MUTEX_INITIALIZER; pthread_cond_t UeberBackend::d_cond = PTHREAD_COND_INITIALIZER; @@ -95,7 +96,9 @@ bool UeberBackend::loadModules(const vector& modules, const string& path void UeberBackend::go(void) { pthread_mutex_lock(&d_mut); - d_go=true; + d_go = true; + S.declare("backend-queries", "Number of queries sent to the backend(s)"); + s_backendQueries = S.getPointer("backend-queries"); pthread_cond_broadcast(&d_cond); pthread_mutex_unlock(&d_mut); } @@ -632,6 +635,7 @@ void UeberBackend::lookup(const QType &qtype,const DNSName &qname, int zoneId, D d_answers.clear(); d_handle.d_hinterBackend = backends.at(d_handle.i++); d_handle.d_hinterBackend->lookup(QType::ANY, qname, zoneId, pkt_p); + ++(*s_backendQueries); } else if (cstat == 0) { // cout<<"UeberBackend::lookup("<backends.at(i++); d_hinterBackend->lookup(qtype, qname, parent->d_domain_id, pkt_p); + ++(*s_backendQueries); } else { break; diff --git a/pdns/ueberbackend.hh b/pdns/ueberbackend.hh index b4b5427c7255..e8a5aa126a46 100644 --- a/pdns/ueberbackend.hh +++ b/pdns/ueberbackend.hh @@ -158,6 +158,7 @@ private: bool d_cached{false}; bool d_stale{false}; + static AtomicCounter* s_backendQueries; static bool d_go; int cacheHas(const Question &q, vector &rrs); diff --git a/regression-tests.nobackend/counters/command b/regression-tests.nobackend/counters/command index 9ff54727d7c9..91ef56e8dce5 100755 --- a/regression-tests.nobackend/counters/command +++ b/regression-tests.nobackend/counters/command @@ -27,7 +27,7 @@ $SDIG ::1 $port example.com SOA >&2 >/dev/null $SDIG ::1 $port example.com SOA tcp >&2 >/dev/null $PDNSCONTROL --config-name= --no-config --socket-dir=./ 'show *' | \ - tr ',' '\n'| grep -v -E '(user-msec|sys-msec|cpu-iowait|cpu-steal|uptime|udp-noport-errors|udp-in-errors|real-memory-usage|special-memory-usage|udp-recvbuf-errors|udp-sndbuf-errors|-hit|-miss|fd-usage|latency)' | LC_ALL=C sort + tr ',' '\n'| grep -v -E '(user-msec|sys-msec|cpu-iowait|cpu-steal|uptime|udp-noport-errors|udp-in-errors|real-memory-usage|special-memory-usage|udp-recvbuf-errors|udp-sndbuf-errors|-hit|-miss|fd-usage|latency|backend-queries)' | LC_ALL=C sort kill $(cat pdns*.pid) rm pdns*.pid