From c6a2025d80fcd77725b4fa99616df719141421ff Mon Sep 17 00:00:00 2001 From: Fred Morcos Date: Thu, 26 Oct 2023 14:38:28 +0200 Subject: [PATCH] Refactor UeberBackend::getAuth: UeberBackend::fillSOAFromCache --- pdns/ueberbackend.cc | 33 +++++++++++++++++++++------------ pdns/ueberbackend.hh | 1 + 2 files changed, 22 insertions(+), 12 deletions(-) diff --git a/pdns/ueberbackend.cc b/pdns/ueberbackend.cc index 593b1757a3..e528dc7d39 100644 --- a/pdns/ueberbackend.cc +++ b/pdns/ueberbackend.cc @@ -373,6 +373,24 @@ bool UeberBackend::fillSOAFromZoneRecord(DNSName& shorter, const int zoneId, SOA return true; } +UeberBackend::CacheResult UeberBackend::fillSOAFromCache(SOAData* soaData, DNSName& shorter) +{ + auto cacheResult = cacheHas(d_question, d_answers); + + if (cacheResult == CacheResult::Hit && !d_answers.empty() && d_cache_ttl != 0U) { + DLOG(g_log << Logger::Error << "has pos cache entry: " << shorter << endl); + fillSOAData(d_answers[0], *soaData); + + soaData->db = backends.size() == 1 ? *backends.begin() : nullptr; + soaData->qname = shorter; + } + else if (cacheResult == CacheResult::NegativeMatch && d_negcache_ttl != 0U) { + DLOG(g_log << Logger::Error << "has neg cache entry: " << shorter << endl); + } + + return cacheResult; +} + bool UeberBackend::getAuth(const DNSName& target, const QType& qtype, SOAData* soaData, bool cachedOk) { // A backend can respond to our authority request with the 'best' match it @@ -409,19 +427,10 @@ bool UeberBackend::getAuth(const DNSName& target, const QType& qtype, SOAData* s // Check cache. if (cachedOk && (d_cache_ttl != 0 || d_negcache_ttl != 0)) { - auto cacheResult = cacheHas(d_question, d_answers); - - if (cacheResult == CacheResult::Hit && !d_answers.empty() && d_cache_ttl != 0) { - DLOG(g_log << Logger::Error << "has pos cache entry: " << shorter << endl); - fillSOAData(d_answers[0], *soaData); - - soaData->db = backends.size() == 1 ? *backends.begin() : nullptr; - soaData->qname = shorter; - + auto cacheResult = fillSOAFromCache(soaData, shorter); + if (cacheResult == CacheResult::Hit) { goto found; - } - else if (cacheResult == CacheResult::NegativeMatch && d_negcache_ttl != 0) { - DLOG(g_log << Logger::Error << "has neg cache entry: " << shorter << endl); + } else if (cacheResult == CacheResult::NegativeMatch) { continue; } } diff --git a/pdns/ueberbackend.hh b/pdns/ueberbackend.hh index 4fd10f8e4c..7aaeb78f6e 100644 --- a/pdns/ueberbackend.hh +++ b/pdns/ueberbackend.hh @@ -177,4 +177,5 @@ private: void addCache(const Question& q, vector&& rrs) const; bool fillSOAFromZoneRecord(DNSName& shorter, int zoneId, SOAData* soaData); + CacheResult fillSOAFromCache(SOAData* soaData, DNSName& shorter); }; -- 2.47.3