]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
pdns: bind-backend speedup feedRecord() 9611/head
authorKees Monshouwer <mind04@monshouwer.org>
Tue, 13 Aug 2019 16:49:31 +0000 (18:49 +0200)
committermind04 <mind04@monshouwer.org>
Tue, 13 Oct 2020 17:12:18 +0000 (19:12 +0200)
modules/bindbackend/bindbackend2.cc
modules/bindbackend/bindbackend2.hh

index 78c8f0c6aa27552f2b6f207455a7674927f2c8a5..cf4f805cfbe8e24b6b3dd93fa73787e8ce7fccca 100644 (file)
@@ -206,6 +206,7 @@ bool Bind2Backend::startTransaction(const DNSName &qname, int id)
   }
 
   d_transaction_id=id;
+  d_transaction_qname=qname;
   BB2DomainInfo bbd;
   if(safeGetBBDomainInfo(id, &bbd)) {
     d_transaction_tmpname = bbd.d_filename + "XXXXXX";
@@ -268,26 +269,25 @@ bool Bind2Backend::abortTransaction()
 
 bool Bind2Backend::feedRecord(const DNSResourceRecord &rr, const DNSName &ordername, bool ordernameIsNSEC3)
 {
-  BB2DomainInfo bbd;
-  if (!safeGetBBDomainInfo(d_transaction_id, &bbd))
-    return false;
+  if (d_transaction_id < 1) {
+    throw DBException("Bind2Backend::feedRecord() called outside of transaction");
+  }
 
   string qname;
-  string name = bbd.d_name.toString();
-  if (bbd.d_name.empty()) {
+  if (d_transaction_qname.empty()) {
     qname = rr.qname.toString();
   }
-  else if (rr.qname.isPartOf(bbd.d_name)) {
-    if (rr.qname == bbd.d_name) {
+  else if (rr.qname.isPartOf(d_transaction_qname)) {
+    if (rr.qname == d_transaction_qname) {
       qname = "@";
     }
     else {
-      DNSName relName = rr.qname.makeRelative(bbd.d_name);
+      DNSName relName = rr.qname.makeRelative(d_transaction_qname);
       qname = relName.toStringNoDot();
     }
   }
   else {
-    throw DBException("out-of-zone data '"+rr.qname.toLogString()+"' during AXFR of zone '"+bbd.d_name.toLogString()+"'");
+    throw DBException("out-of-zone data '"+rr.qname.toLogString()+"' during AXFR of zone '"+d_transaction_qname.toLogString()+"'");
   }
 
   shared_ptr<DNSRecordContent> drc(DNSRecordContent::mastermake(rr.qtype.getCode(), QClass::IN, rr.content));
@@ -300,7 +300,7 @@ bool Bind2Backend::feedRecord(const DNSResourceRecord &rr, const DNSName &ordern
   case QType::CNAME:
   case QType::DNAME:
   case QType::NS:
-    stripDomainSuffix(&content, name);
+    stripDomainSuffix(&content, d_transaction_qname.toString());
     // fallthrough
   default:
     if (d_of && *d_of) {
index aa38223bd0976ea739d047d813bb1ba40c7c1c5d..831b62bc21c884d5f8ee7680ea2b99893a760c33 100644 (file)
@@ -288,6 +288,7 @@ private:
   unique_ptr<SSqlStatement> d_deleteTSIGKeyQuery_stmt;
   unique_ptr<SSqlStatement> d_getTSIGKeysQuery_stmt;
 
+  DNSName d_transaction_qname;
   string d_transaction_tmpname;
   string d_logprefix;
   set<string> alsoNotify; //!< this is used to store the also-notify list of interested peers.