From: Kees Monshouwer Date: Wed, 17 Sep 2014 06:23:58 +0000 (+0200) Subject: revert: fixes PowerDNS/pdns/657 85a41ee7 X-Git-Tag: auth-3.4.0-rc2~7^2~2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6242d8a436bfe336a31c0eed6bfcbaf3aee8bf76;p=thirdparty%2Fpdns.git revert: fixes PowerDNS/pdns/657 85a41ee7 --- diff --git a/pdns/dynhandler.cc b/pdns/dynhandler.cc index bedf7f65a0..98a1a9a7a3 100644 --- a/pdns/dynhandler.cc +++ b/pdns/dynhandler.cc @@ -275,13 +275,23 @@ string DLNotifyHandler(const vector&parts, Utility::pid_t ppid) string DLRediscoverHandler(const vector&parts, Utility::pid_t ppid) { - UeberBackend::rediscover_all(); - return "Ok"; + PacketHandler P; + try { + L<rediscover(&status); + return status; + } + catch(PDNSException &ae) { + return ae.reason; + } + } string DLReloadHandler(const vector&parts, Utility::pid_t ppid) { - UeberBackend::reload_all(); + PacketHandler P; + P.getBackend()->reload(); L<::const_iterator i=backends.begin();i!=backends.end();++i) if((*i)->getDomainInfo(domain, di)) return true; @@ -112,7 +111,6 @@ bool UeberBackend::createDomain(const string &domain) int UeberBackend::addDomainKey(const string& name, const KeyData& key) { int ret; - check_op_requests(); BOOST_FOREACH(DNSBackend* db, backends) { if((ret = db->addDomainKey(name, key)) >= 0) return ret; @@ -121,7 +119,6 @@ int UeberBackend::addDomainKey(const string& name, const KeyData& key) } bool UeberBackend::getDomainKeys(const string& name, unsigned int kind, std::vector& keys) { - check_op_requests(); BOOST_FOREACH(DNSBackend* db, backends) { if(db->getDomainKeys(name, kind, keys)) return true; @@ -131,7 +128,6 @@ bool UeberBackend::getDomainKeys(const string& name, unsigned int kind, std::vec bool UeberBackend::getAllDomainMetadata(const string& name, std::map >& meta) { - check_op_requests(); BOOST_FOREACH(DNSBackend* db, backends) { if(db->getAllDomainMetadata(name, meta)) return true; @@ -141,7 +137,6 @@ bool UeberBackend::getAllDomainMetadata(const string& name, std::map& meta) { - check_op_requests(); BOOST_FOREACH(DNSBackend* db, backends) { if(db->getDomainMetadata(name, kind, meta)) return true; @@ -151,7 +146,6 @@ bool UeberBackend::getDomainMetadata(const string& name, const std::string& kind bool UeberBackend::setDomainMetadata(const string& name, const std::string& kind, const std::vector& meta) { - check_op_requests(); BOOST_FOREACH(DNSBackend* db, backends) { if(db->setDomainMetadata(name, kind, meta)) return true; @@ -161,7 +155,6 @@ bool UeberBackend::setDomainMetadata(const string& name, const std::string& kind bool UeberBackend::activateDomainKey(const string& name, unsigned int id) { - check_op_requests(); BOOST_FOREACH(DNSBackend* db, backends) { if(db->activateDomainKey(name, id)) return true; @@ -171,7 +164,6 @@ bool UeberBackend::activateDomainKey(const string& name, unsigned int id) bool UeberBackend::deactivateDomainKey(const string& name, unsigned int id) { - check_op_requests(); BOOST_FOREACH(DNSBackend* db, backends) { if(db->deactivateDomainKey(name, id)) return true; @@ -181,7 +173,6 @@ bool UeberBackend::deactivateDomainKey(const string& name, unsigned int id) bool UeberBackend::removeDomainKey(const string& name, unsigned int id) { - check_op_requests(); BOOST_FOREACH(DNSBackend* db, backends) { if(db->removeDomainKey(name, id)) return true; @@ -192,7 +183,6 @@ bool UeberBackend::removeDomainKey(const string& name, unsigned int id) bool UeberBackend::getTSIGKey(const string& name, string* algorithm, string* content) { - check_op_requests(); BOOST_FOREACH(DNSBackend* db, backends) { if(db->getTSIGKey(name, algorithm, content)) return true; @@ -245,21 +235,6 @@ bool UeberBackend::getDirectRRSIGs(const string &signer, const string &qname, co return false; } -/* Called from anywhere to signal a reload of all backend databases */ -void UeberBackend::reload_all() -{ - BOOST_FOREACH(UeberBackend* b, instances) { - b->cur_op_request = RELOAD; - } -} -void UeberBackend::rediscover_all() -{ - BOOST_FOREACH(UeberBackend* b, instances) { - b->cur_op_request = REDISCOVER; - } -} - -/* OPS */ void UeberBackend::reload() { for ( vector< DNSBackend * >::iterator i = backends.begin(); i != backends.end(); ++i ) @@ -275,13 +250,14 @@ void UeberBackend::rediscover(string *status) { string tmpstr; ( *i )->rediscover(&tmpstr); + if(status) + *status+=tmpstr + (i!=backends.begin() ? "\n" : ""); } } void UeberBackend::getUnfreshSlaveInfos(vector* domains) { - check_op_requests(); for ( vector< DNSBackend * >::iterator i = backends.begin(); i != backends.end(); ++i ) { ( *i )->getUnfreshSlaveInfos( domains ); @@ -292,41 +268,17 @@ void UeberBackend::getUnfreshSlaveInfos(vector* domains) void UeberBackend::getUpdatedMasters(vector* domains) { - check_op_requests(); for ( vector< DNSBackend * >::iterator i = backends.begin(); i != backends.end(); ++i ) { ( *i )->getUpdatedMasters( domains ); } } -void UeberBackend::check_op_requests() -{ - if( !cur_op_request ) - return; - - switch(cur_op_request) { - - case RELOAD: - reload(); - break; - - case REDISCOVER: - rediscover(); - break; - - default: - break; - } - cur_op_request = NONE; -} - bool UeberBackend::getAuth(DNSPacket *p, SOAData *sd, const string &target, int *zoneId) { int best_match_len = -1; bool from_cache = false; // Was this result fetched from the cache? - check_op_requests(); - // If not special case of caching explicitly disabled (sd->db = -1), first // find the best match from the cache. If DS then we need to find parent so // dont bother with caching as it confuses matters. @@ -419,7 +371,6 @@ bool UeberBackend::getSOA(const string &domain, SOAData &sd, DNSPacket *p) } } - check_op_requests(); for(vector::const_iterator i=backends.begin();i!=backends.end();++i) if((*i)->getSOA(domain, sd, p)) { if( d_cache_ttl ) { @@ -442,7 +393,6 @@ bool UeberBackend::getSOA(const string &domain, SOAData &sd, DNSPacket *p) bool UeberBackend::superMasterBackend(const string &ip, const string &domain, const vector&nsset, string *nameserver, string *account, DNSBackend **db) { - check_op_requests(); for(vector::const_iterator i=backends.begin();i!=backends.end();++i) if((*i)->superMasterBackend(ip, domain, nsset, nameserver, account, db)) return true; @@ -459,7 +409,6 @@ UeberBackend::UeberBackend(const string &pname) pthread_mutex_lock(&instances_lock); instances.push_back(this); // report to the static list of ourself pthread_mutex_unlock(&instances_lock); - cur_op_request = NONE; d_cache_ttl = ::arg().asNum("query-cache-ttl"); d_negcache_ttl = ::arg().asNum("negquery-cache-ttl"); @@ -481,12 +430,6 @@ void del(DNSBackend* d) delete d; } -void cleanup_backends(UeberBackend *b) -{ - for_each(b->backends.begin(),b->backends.end(),del); - b->backends.clear(); -} - void UeberBackend::cleanup() { pthread_mutex_lock(&instances_lock); @@ -496,7 +439,7 @@ void UeberBackend::cleanup() pthread_mutex_unlock(&instances_lock); - cleanup_backends(this); + for_each(backends.begin(),backends.end(),del); } // silly Solaris fix @@ -568,7 +511,6 @@ void UeberBackend::addCache(const Question &q, const vector & void UeberBackend::alsoNotifies(const string &domain, set *ips) { - check_op_requests(); for ( vector< DNSBackend * >::iterator i = backends.begin(); i != backends.end(); ++i ) (*i)->alsoNotifies(domain,ips); } @@ -611,34 +553,32 @@ void UeberBackend::lookup(const QType &qtype,const string &qname, DNSPacket *pkt stale=true; // please recycle us! throw PDNSException("We are stale, please recycle"); } - - check_op_requests(); - - d_question.qtype=qtype; - d_question.qname=qname; - d_question.zoneId=zoneId; - int cstat=cacheHas(d_question, d_answers); - if(cstat<0) { // nothing - d_negcached=d_cached=false; - d_answers.clear(); - (d_handle.d_hinterBackend=backends[d_handle.i++])->lookup(qtype, qname,pkt_p,zoneId); - } - else if(cstat==0) { - d_negcached=true; - d_cached=false; - d_answers.clear(); - } else { - d_negcached=false; - d_cached=true; - d_cachehandleiter = d_answers.begin(); + d_question.qtype=qtype; + d_question.qname=qname; + d_question.zoneId=zoneId; + int cstat=cacheHas(d_question, d_answers); + if(cstat<0) { // nothing + d_negcached=d_cached=false; + d_answers.clear(); + (d_handle.d_hinterBackend=backends[d_handle.i++])->lookup(qtype, qname,pkt_p,zoneId); + } + else if(cstat==0) { + d_negcached=true; + d_cached=false; + d_answers.clear(); + } + else { + d_negcached=false; + d_cached=true; + d_cachehandleiter = d_answers.begin(); + } } d_handle.parent=this; } void UeberBackend::getAllDomains(vector *domains, bool include_disabled) { - check_op_requests(); for (vector::iterator i = backends.begin(); i != backends.end(); ++i ) { (*i)->getAllDomains(domains, include_disabled); @@ -658,8 +598,6 @@ bool UeberBackend::get(DNSResourceRecord &rr) } return false; } - - /* Don't check_op_requests - don't reload a backend in the middle of a zone fetch operation */ if(!d_handle.get(rr)) { if(!d_ancount && !d_handle.qname.empty()) // don't cache axfr addNegCache(d_question); diff --git a/pdns/ueberbackend.hh b/pdns/ueberbackend.hh index f153b03104..6837ed1b72 100644 --- a/pdns/ueberbackend.hh +++ b/pdns/ueberbackend.hh @@ -78,8 +78,6 @@ public: instructions to load new modules */ static void *DynListener(void *); static void go(void); - static void reload_all(); - static void rediscover_all(); /** This contains all registered backends. The DynListener modifies this list for us when new modules are loaded */ @@ -182,15 +180,6 @@ private: static bool d_go; static int s_s; static string s_status; - - // Operational requests for the backends - enum backend_op_requests { - NONE = 0, - RELOAD, - REDISCOVER - } cur_op_request; - void check_op_requests(); - int d_ancount; bool stale;