From: Mark Zealey Date: Mon, 2 Dec 2013 09:24:52 +0000 (+0200) Subject: fixes PowerDNS/pdns#693 X-Git-Tag: rec-3.6.0-rc1~310^2 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=f1d64762867270c4ab27c2324dd814ce38f6cd75;p=pdns fixes PowerDNS/pdns#693 removes number of static variables and makes them class, also optimizes if query cache is disabled. --- diff --git a/pdns/ueberbackend.cc b/pdns/ueberbackend.cc index fb27c53dc..01671204f 100644 --- a/pdns/ueberbackend.cc +++ b/pdns/ueberbackend.cc @@ -279,15 +279,17 @@ bool UeberBackend::getSOA(const string &domain, SOAData &sd, DNSPacket *p) for(vector::const_iterator i=backends.begin();i!=backends.end();++i) if((*i)->getSOA(domain, sd, p)) { - DNSResourceRecord rr; - rr.qname=domain; - rr.qtype=QType::SOA; - rr.content=serializeSOAData(sd); - rr.ttl=sd.ttl; - rr.domain_id=sd.domain_id; - vector rrs; - rrs.push_back(rr); - addCache(d_question, rrs); + if( d_cache_ttl ) { + DNSResourceRecord rr; + rr.qname=domain; + rr.qtype=QType::SOA; + rr.content=serializeSOAData(sd); + rr.ttl=sd.ttl; + rr.domain_id=sd.domain_id; + vector rrs; + rrs.push_back(rr); + addCache(d_question, rrs); + } return true; } @@ -315,6 +317,9 @@ UeberBackend::UeberBackend(const string &pname) instances.push_back(this); // report to the static list of ourself pthread_mutex_unlock(&instances_lock); + d_cache_ttl = ::arg().asNum("query-cache-ttl"); + d_negcache_ttl = ::arg().asNum("negquery-cache-ttl"); + tid=pthread_self(); stale=false; @@ -354,10 +359,7 @@ int UeberBackend::cacheHas(const Question &q, vector &rrs) static unsigned int *qcachehit=S.getPointer("query-cache-hit"); static unsigned int *qcachemiss=S.getPointer("query-cache-miss"); - static int negqueryttl=::arg().asNum("negquery-cache-ttl"); - static int queryttl=::arg().asNum("query-cache-ttl"); - - if(!negqueryttl && !queryttl) { + if(!d_cache_ttl && ! d_negcache_ttl) { (*qcachemiss)++; return -1; } @@ -384,36 +386,34 @@ int UeberBackend::cacheHas(const Question &q, vector &rrs) void UeberBackend::addNegCache(const Question &q) { extern PacketCache PC; - static int negqueryttl=::arg().asNum("negquery-cache-ttl"); - if(!negqueryttl) + if(!d_negcache_ttl) return; // we should also not be storing negative answers if a pipebackend does scopeMask, but we can't pass a negative scopeMask in an empty set! - PC.insert(q.qname, q.qtype, PacketCache::QUERYCACHE, "", negqueryttl, q.zoneId); + PC.insert(q.qname, q.qtype, PacketCache::QUERYCACHE, "", d_negcache_ttl, q.zoneId); } void UeberBackend::addCache(const Question &q, const vector &rrs) { extern PacketCache PC; - static unsigned int queryttl=::arg().asNum("query-cache-ttl"); - unsigned int cachettl; - if(!queryttl) + if(!d_cache_ttl) return; - + + unsigned int store_ttl = d_cache_ttl; + // L< *ips) diff --git a/pdns/ueberbackend.hh b/pdns/ueberbackend.hh index 3c29cff0b..23d583663 100644 --- a/pdns/ueberbackend.hh +++ b/pdns/ueberbackend.hh @@ -144,6 +144,8 @@ public: void rediscover(string* status=0); void reload(); private: + unsigned int d_cache_ttl, d_negcache_ttl; + DNSResourceRecord lastrr; pthread_t tid; handle d_handle;