]> granicus.if.org Git - pdns/commitdiff
revert: fixes PowerDNS/pdns/657 85a41ee7
authorKees Monshouwer <mind04@monshouwer.org>
Wed, 17 Sep 2014 06:23:58 +0000 (08:23 +0200)
committermind04 <mind04@monshouwer.org>
Wed, 17 Sep 2014 06:23:58 +0000 (08:23 +0200)
pdns/dynhandler.cc
pdns/ueberbackend.cc
pdns/ueberbackend.hh

index bedf7f65a04dfb9d319ed992e5ef3de55824edd7..98a1a9a7a354709340cf02ec53c28a55d051bc4c 100644 (file)
@@ -275,13 +275,23 @@ string DLNotifyHandler(const vector<string>&parts, Utility::pid_t ppid)
 
 string DLRediscoverHandler(const vector<string>&parts, Utility::pid_t ppid)
 {
-  UeberBackend::rediscover_all();
-  return "Ok";
+  PacketHandler P;
+  try {
+    L<<Logger::Error<<"Rediscovery was requested"<<endl;
+    string status="Ok";
+    P.getBackend()->rediscover(&status);
+    return status;
+  }
+  catch(PDNSException &ae) {
+    return ae.reason;
+  }
+
 }
 
 string DLReloadHandler(const vector<string>&parts, Utility::pid_t ppid)
 {
-  UeberBackend::reload_all();
+  PacketHandler P;
+  P.getBackend()->reload();
   L<<Logger::Error<<"Reload was requested"<<endl;
   return "Ok";
 }
index 64d3ceb05bef9cb1e36b9eadb12f7f4716d95785..3d87f8b272e4195e21930488c1e66c473978c0b1 100644 (file)
@@ -92,7 +92,6 @@ void UeberBackend::go(void)
 
 bool UeberBackend::getDomainInfo(const string &domain, DomainInfo &di)
 {
-  check_op_requests();
   for(vector<DNSBackend *>::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<KeyData>& 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<std::string, std::vector<std::string> >& 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<std::string
 
 bool UeberBackend::getDomainMetadata(const string& name, const std::string& kind, std::vector<std::string>& 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<std::string>& 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<DomainInfo>* 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<DomainInfo>* domains)
 
 void UeberBackend::getUpdatedMasters(vector<DomainInfo>* 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<DNSBackend *>::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<DNSResourceRecord>&nsset, string *nameserver, string *account, DNSBackend **db)
 {
-  check_op_requests();
   for(vector<DNSBackend *>::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<DNSResourceRecord> &
 
 void UeberBackend::alsoNotifies(const string &domain, set<string> *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<DomainInfo> *domains, bool include_disabled) {
-  check_op_requests();
   for (vector<DNSBackend*>::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);
index f153b03104f1d384791ffca263dfc6b155ce366a..6837ed1b72baf6eb83d63d0ae1a1bf61a6aa01e2 100644 (file)
@@ -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;