]> granicus.if.org Git - pdns/commitdiff
rec: Count a lookup into an internal auth zone as a cache miss
authorRemi Gacogne <remi.gacogne@powerdns.com>
Wed, 28 Feb 2018 10:26:03 +0000 (10:26 +0000)
committerRemi Gacogne <remi.gacogne@powerdns.com>
Wed, 28 Feb 2018 10:26:03 +0000 (10:26 +0000)
We only considered a query a cache miss if we had to do at least
one outgoing query, but having to look up into one of the internally
hosted zone (auth-zones) should count as a cache miss too.

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

index c2b916be69e94938622e1cb7fa1dbb9e63b76c63..60fc1ccab78fb7bc76aefa28c10e8d2da54ad67b 100644 (file)
@@ -1288,7 +1288,12 @@ static void startDoResolve(void *p)
 
     }
 
-    sr.d_outqueries ? t_RC->cacheMisses++ : t_RC->cacheHits++;
+    if (sr.d_outqueries || sr.d_authzonequeries) {
+      t_RC->cacheMisses++;
+    }
+    else {
+      t_RC->cacheHits++;
+    }
 
     if(spent < 0.001)
       g_stats.answers0_1++;
index b1b331003a247736f2ca3d056d955ea343be313e..7cd9c5461d7e195bfac9360f66930848141f4f08 100644 (file)
@@ -320,8 +320,10 @@ int SyncRes::AuthDomain::getRecords(const DNSName& qname, uint16_t qtype, std::v
   return result;
 }
 
-bool SyncRes::doOOBResolve(const AuthDomain& domain, const DNSName &qname, const QType &qtype, vector<DNSRecord>&ret, int& res) const
+bool SyncRes::doOOBResolve(const AuthDomain& domain, const DNSName &qname, const QType &qtype, vector<DNSRecord>&ret, int& res)
 {
+  d_authzonequeries++;
+
   res = domain.getRecords(qname, qtype.getCode(), ret);
   return true;
 }
index a73bd7bc506de6555fe6cfd82f4d3ca51e877e6a..b297eac079e19c8b8340301a03c800c91d851802 100644 (file)
@@ -697,6 +697,7 @@ public:
 
   std::unordered_map<std::string,bool> d_discardedPolicies;
   DNSFilterEngine::Policy d_appliedPolicy;
+  unsigned int d_authzonequeries;
   unsigned int d_outqueries;
   unsigned int d_tcpoutqueries;
   unsigned int d_throttledqueries;
@@ -736,7 +737,7 @@ private:
   bool processAnswer(unsigned int depth, LWResult& lwr, const DNSName& qname, const QType& qtype, DNSName& auth, bool wasForwarded, const boost::optional<Netmask> ednsmask, bool sendRDQuery, NsSet &nameservers, std::vector<DNSRecord>& ret, const DNSFilterEngine& dfe, bool* gotNewServers, int* rcode, vState& state);
 
   int doResolve(const DNSName &qname, const QType &qtype, vector<DNSRecord>&ret, unsigned int depth, set<GetBestNSAnswer>& beenthere, vState& state);
-  bool doOOBResolve(const AuthDomain& domain, const DNSName &qname, const QType &qtype, vector<DNSRecord>&ret, int& res) const;
+  bool doOOBResolve(const AuthDomain& domain, const DNSName &qname, const QType &qtype, vector<DNSRecord>&ret, int& res);
   bool doOOBResolve(const DNSName &qname, const QType &qtype, vector<DNSRecord>&ret, unsigned int depth, int &res);
   domainmap_t::const_iterator getBestAuthZone(DNSName* qname) const;
   bool doCNAMECacheCheck(const DNSName &qname, const QType &qtype, vector<DNSRecord>&ret, unsigned int depth, int &res, vState& state, bool wasAuthZone);