From 702156dfc973632f62ee2b93422487bdb4d6d717 Mon Sep 17 00:00:00 2001 From: Bert Hubert Date: Fri, 30 Nov 2007 22:25:36 +0000 Subject: [PATCH] first 20% speedup of bind backend, possibly much more in setups with a lot of zones git-svn-id: svn://svn.powerdns.com/pdns/trunk/pdns@1108 d19b8d6e-7fed-0310-83ef-9ca221ded41b --- pdns/backends/bind/bindbackend2.cc | 33 +++++++++++++----------------- pdns/backends/bind/bindbackend2.hh | 9 ++++++++ 2 files changed, 23 insertions(+), 19 deletions(-) diff --git a/pdns/backends/bind/bindbackend2.cc b/pdns/backends/bind/bindbackend2.cc index 0895e3dc8..380d237db 100644 --- a/pdns/backends/bind/bindbackend2.cc +++ b/pdns/backends/bind/bindbackend2.cc @@ -725,15 +725,6 @@ void Bind2Backend::queueReload(BB2DomainInfo *bbd) } } -bool operator<(const Bind2DNSRecord &a, const string &b) -{ - return a.qname < b; -} - -bool operator<(const string &a, const Bind2DNSRecord &b) -{ - return a < b.qname; -} void Bind2Backend::lookup(const QType &qtype, const string &qname, DNSPacket *pkt_p, int zoneId ) @@ -742,15 +733,16 @@ void Bind2Backend::lookup(const QType &qtype, const string &qname, DNSPacket *pk string domain=toLower(qname); - bool mustlog=::arg().mustDo("query-logging"); + static bool mustlog=::arg().mustDo("query-logging"); if(mustlog) L< state = s_state; - while(!state->name_id_map.count(domain) && chopOff(domain)); + name_id_map_t::const_iterator iditer; + while((iditer=state->name_id_map.find(domain)) == state->name_id_map.end() && chopOff(domain)) + ; - name_id_map_t::const_iterator iditer=state->name_id_map.find(domain); if(iditer==state->name_id_map.end()) { if(mustlog) @@ -760,7 +752,7 @@ void Bind2Backend::lookup(const QType &qtype, const string &qname, DNSPacket *pk } // unsigned int id=*iditer; if(mustlog) - L<second<second<<") that might contain data "<second; @@ -787,7 +779,7 @@ void Bind2Backend::lookup(const QType &qtype, const string &qname, DNSPacket *pk state = s_state; } - d_handle.d_records = state->id_zone_map[iditer->second].d_records; // give it a reference counted copy + d_handle.d_records = bbd.d_records; // give it a reference counted copy if(d_handle.d_records->empty()) DLOG(L<<"Query with no results"<begin(), d_handle.d_records->end(), lname); + d_handle.mustlog = mustlog; if(range.first==range.second) { d_handle.d_list=false; @@ -806,7 +799,6 @@ void Bind2Backend::lookup(const QType &qtype, const string &qname, DNSPacket *pk else { d_handle.d_iter=range.first; d_handle.d_end_iter=range.second; - d_handle.mustlog = mustlog; } d_handle.d_list=false; @@ -819,14 +811,17 @@ Bind2Backend::handle::handle() bool Bind2Backend::get(DNSResourceRecord &r) { - if(!d_handle.d_records) + if(!d_handle.d_records) { + if(d_handle.mustlog) + L<