void insert(uint32_t key, const boost::optional<Netmask>& subnet, uint16_t queryFlags, bool dnssecOK, const DNSName& qname, uint16_t qtype, uint16_t qclass, const PacketBuffer& response, bool receivedOverUDP, uint8_t rcode, boost::optional<uint32_t> tempFailureTTL);
bool get(DNSQuestion& dnsQuestion, uint16_t queryId, uint32_t* keyOut, boost::optional<Netmask>& subnet, bool dnssecOK, bool receivedOverUDP, uint32_t allowExpired = 0, bool skipAging = false, bool truncatedOK = true, bool recordMiss = true);
- size_t purgeExpired(size_t upTo, const time_t now);
+ size_t purgeExpired(size_t upTo, time_t now);
size_t expunge(size_t upTo = 0);
size_t expungeByName(const DNSName& name, uint16_t qtype = QType::ANY, bool suffixMatch = false);
- bool isFull();
- string toString();
- uint64_t getSize();
- uint64_t getHits() const { return d_hits.load(); }
- uint64_t getMisses() const { return d_misses.load(); }
- uint64_t getDeferredLookups() const { return d_deferredLookups.load(); }
- uint64_t getDeferredInserts() const { return d_deferredInserts.load(); }
- uint64_t getLookupCollisions() const { return d_lookupCollisions.load(); }
- uint64_t getInsertCollisions() const { return d_insertCollisions.load(); }
- uint64_t getMaxEntries() const { return d_settings.d_maxEntries; }
- uint64_t getTTLTooShorts() const { return d_ttlTooShorts.load(); }
- uint64_t getCleanupCount() const { return d_cleanupCount.load(); }
- uint64_t getEntriesCount();
+ [[nodiscard]] bool isFull();
+ [[nodiscard]] string toString();
+ [[nodiscard]] uint64_t getSize();
+ [[nodiscard]] uint64_t getHits() const { return d_hits.load(); }
+ [[nodiscard]] uint64_t getMisses() const { return d_misses.load(); }
+ [[nodiscard]] uint64_t getDeferredLookups() const { return d_deferredLookups.load(); }
+ [[nodiscard]] uint64_t getDeferredInserts() const { return d_deferredInserts.load(); }
+ [[nodiscard]] uint64_t getLookupCollisions() const { return d_lookupCollisions.load(); }
+ [[nodiscard]] uint64_t getInsertCollisions() const { return d_insertCollisions.load(); }
+ [[nodiscard]] uint64_t getMaxEntries() const { return d_settings.d_maxEntries; }
+ [[nodiscard]] uint64_t getTTLTooShorts() const { return d_ttlTooShorts.load(); }
+ [[nodiscard]] uint64_t getCleanupCount() const { return d_cleanupCount.load(); }
+ [[nodiscard]] uint64_t getEntriesCount();
uint64_t dump(int fileDesc, bool rawResponse = false);
/* get the list of domains (qnames) that contains the given address in an A or AAAA record */
- std::set<DNSName> getDomainsContainingRecords(const ComboAddress& addr);
+ [[nodiscard]] std::set<DNSName> getDomainsContainingRecords(const ComboAddress& addr);
/* get the list of IP addresses contained in A or AAAA for a given domains (qname) */
- std::set<ComboAddress> getRecordsForDomain(const DNSName& domain);
+ [[nodiscard]] std::set<ComboAddress> getRecordsForDomain(const DNSName& domain);
- bool isECSParsingEnabled() const { return d_settings.d_parseECS; }
+ [[nodiscard]] bool isECSParsingEnabled() const { return d_settings.d_parseECS; }
- bool keepStaleData() const
+ [[nodiscard]] bool keepStaleData() const
{
return d_settings.d_keepStaleData;
}
- size_t getMaximumEntrySize() const { return d_settings.d_maximumEntrySize; }
+ [[nodiscard]] size_t getMaximumEntrySize() const { return d_settings.d_maximumEntrySize; }
- uint32_t getKey(const DNSName::string_t& qname, size_t qnameWireLength, const PacketBuffer& packet, bool receivedOverUDP);
+ uint32_t getKey(const DNSName::string_t& qname, size_t qnameWireLength, const PacketBuffer& packet, bool receivedOverUDP) const;
static uint32_t getMinTTL(const char* packet, uint16_t length, bool* seenNoDataSOA);
static bool getClientSubnet(const PacketBuffer& packet, size_t qnameWireLength, boost::optional<Netmask>& subnet);
private:
struct CacheValue
{
- time_t getTTD() const { return validity; }
+ [[nodiscard]] time_t getTTD() const { return validity; }
std::string value;
DNSName qname;
boost::optional<Netmask> subnet;
class CacheShard
{
public:
- CacheShard()
+ CacheShard() = default;
+ CacheShard(CacheShard&& /* old */) noexcept
{
}
CacheShard(const CacheShard& /* old */)
{
}
+ CacheShard& operator=(CacheShard&& /* old */) noexcept
+ {
+ return *this;
+ }
+ CacheShard& operator=(const CacheShard& /* old */)
+ {
+ return *this;
+ }
+ ~CacheShard() = default;
void setSize(size_t maxSize)
{
d_map.write_lock()->reserve(maxSize);
}
- SharedLockGuarded<std::unordered_map<uint32_t, CacheValue>> d_map;
+ SharedLockGuarded<std::unordered_map<uint32_t, CacheValue>> d_map{};
std::atomic<uint64_t> d_entriesCount{0};
};
- bool cachedValueMatches(const CacheValue& cachedValue, uint16_t queryFlags, const DNSName& qname, uint16_t qtype, uint16_t qclass, bool receivedOverUDP, bool dnssecOK, const boost::optional<Netmask>& subnet) const;
- uint32_t getShardIndex(uint32_t key) const;
+ [[nodiscard]] bool cachedValueMatches(const CacheValue& cachedValue, uint16_t queryFlags, const DNSName& qname, uint16_t qtype, uint16_t qclass, bool receivedOverUDP, bool dnssecOK, const boost::optional<Netmask>& subnet) const;
+ [[nodiscard]] uint32_t getShardIndex(uint32_t key) const;
bool insertLocked(std::unordered_map<uint32_t, CacheValue>& map, uint32_t key, CacheValue& newValue);
- std::vector<CacheShard> d_shards;
+ std::vector<CacheShard> d_shards{};
pdns::stat_t d_deferredLookups{0};
pdns::stat_t d_deferredInserts{0};