From: Miod Vallat Date: Fri, 18 Apr 2025 09:00:46 +0000 (+0200) Subject: Faster lookupEnd() for bind, geoip, ldap and lmdb backends. X-Git-Tag: rec-5.4.0-alpha1~368^2~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=329fb9b6950fc935faccfedb4f3e92cb01dda011;p=thirdparty%2Fpdns.git Faster lookupEnd() for bind, geoip, ldap and lmdb backends. --- diff --git a/modules/bindbackend/bindbackend2.cc b/modules/bindbackend/bindbackend2.cc index c53db4b37b..7246535548 100644 --- a/modules/bindbackend/bindbackend2.cc +++ b/modules/bindbackend/bindbackend2.cc @@ -1314,6 +1314,11 @@ bool Bind2Backend::get(DNSResourceRecord& r) return true; } +void Bind2Backend::lookupEnd() +{ + d_handle.reset(); +} + bool Bind2Backend::handle::get(DNSResourceRecord& r) { if (d_list) diff --git a/modules/bindbackend/bindbackend2.hh b/modules/bindbackend/bindbackend2.hh index ae32f6115e..573888798e 100644 --- a/modules/bindbackend/bindbackend2.hh +++ b/modules/bindbackend/bindbackend2.hh @@ -190,6 +190,7 @@ public: void lookup(const QType& qtype, const DNSName& qname, domainid_t zoneId, DNSPacket* p = nullptr) override; bool list(const ZoneName& target, domainid_t domainId, bool include_disabled = false) override; bool get(DNSResourceRecord&) override; + void lookupEnd() override; void getAllDomains(vector* domains, bool getSerial, bool include_disabled = false) override; static DNSBackend* maker(); diff --git a/modules/geoipbackend/geoipbackend.cc b/modules/geoipbackend/geoipbackend.cc index 8f65ed2508..9a6d9cbbdc 100644 --- a/modules/geoipbackend/geoipbackend.cc +++ b/modules/geoipbackend/geoipbackend.cc @@ -619,6 +619,11 @@ bool GeoIPBackend::get(DNSResourceRecord& r) return true; } +void GeoIPBackend::lookupEnd() +{ + d_result.clear(); +} + static string queryGeoIP(const Netmask& addr, GeoIPInterface::GeoIPQueryAttribute attribute, GeoIPNetmask& gl) { string ret = "unknown"; diff --git a/modules/geoipbackend/geoipbackend.hh b/modules/geoipbackend/geoipbackend.hh index cd0af1f8dd..57f29a808d 100644 --- a/modules/geoipbackend/geoipbackend.hh +++ b/modules/geoipbackend/geoipbackend.hh @@ -67,6 +67,7 @@ public: void lookup(const QType& qtype, const DNSName& qdomain, domainid_t zoneId, DNSPacket* pkt_p = nullptr) override; bool list(const ZoneName& /* target */, domainid_t /* domain_id */, bool /* include_disabled */ = false) override { return false; } // not supported bool get(DNSResourceRecord& r) override; + void lookupEnd() override; void reload() override; void rediscover(string* status = nullptr) override; bool getDomainInfo(const ZoneName& domain, DomainInfo& info, bool getSerial = true) override; diff --git a/modules/ldapbackend/ldapbackend.hh b/modules/ldapbackend/ldapbackend.hh index e5d61ce2cc..68b6abd059 100644 --- a/modules/ldapbackend/ldapbackend.hh +++ b/modules/ldapbackend/ldapbackend.hh @@ -114,6 +114,7 @@ public: bool list(const ZoneName& target, domainid_t domain_id, bool include_disabled = false) override; void lookup(const QType& qtype, const DNSName& qname, domainid_t zoneid, DNSPacket* dnspkt = nullptr) override; bool get(DNSResourceRecord& rr) override; + void lookupEnd() override; bool getDomainInfo(const ZoneName& domain, DomainInfo& info, bool getSerial = true) override; diff --git a/modules/ldapbackend/native.cc b/modules/ldapbackend/native.cc index 2038f8e3a8..f56496906a 100644 --- a/modules/ldapbackend/native.cc +++ b/modules/ldapbackend/native.cc @@ -380,6 +380,11 @@ bool LdapBackend::get(DNSResourceRecord& rr) return true; } +void LdapBackend::lookupEnd() +{ + d_results_cache.clear(); +} + bool LdapBackend::getDomainInfo(const ZoneName& domain, DomainInfo& info, bool /* getSerial */) { string filter; diff --git a/modules/lmdbbackend/lmdbbackend.cc b/modules/lmdbbackend/lmdbbackend.cc index adf3c26235..a65bf8c026 100644 --- a/modules/lmdbbackend/lmdbbackend.cc +++ b/modules/lmdbbackend/lmdbbackend.cc @@ -1950,6 +1950,12 @@ bool LMDBBackend::get(DNSResourceRecord& rr) return true; } +void LMDBBackend::lookupEnd() +{ + d_getcursor.reset(); + d_rotxn.reset(); +} + bool LMDBBackend::getSerial(DomainInfo& di) { auto txn = getRecordsROTransaction(di.id); diff --git a/modules/lmdbbackend/lmdbbackend.hh b/modules/lmdbbackend/lmdbbackend.hh index 4e4d1ced43..95841e9d93 100644 --- a/modules/lmdbbackend/lmdbbackend.hh +++ b/modules/lmdbbackend/lmdbbackend.hh @@ -102,6 +102,7 @@ public: void APILookup(const QType& type, const DNSName& qdomain, domainid_t zoneId, bool include_disabled = false) override { lookupInternal(type, qdomain, zoneId, nullptr, include_disabled); } bool get(DNSResourceRecord& rr) override; bool get(DNSZoneRecord& dzr) override; + void lookupEnd() override; // secondary support void getUnfreshSecondaryInfos(vector* domains) override;