]> git.ipfire.org Git - thirdparty/pdns.git/commit
auth: Enforce a strict maximum size for the packet and records caches 8713/head
authorRemi Gacogne <remi.gacogne@powerdns.com>
Fri, 17 Jan 2020 13:56:27 +0000 (14:56 +0100)
committerRemi Gacogne <remi.gacogne@powerdns.com>
Fri, 17 Jan 2020 13:56:27 +0000 (14:56 +0100)
commitd2814f81c77709d628a3fc036aff96ccc8a74c64
tree4ec81668636a4bf8e687cf38d6c5d5ff7deab695
parent7c1219d249d2a45c2901048cd229e0545916a712
auth: Enforce a strict maximum size for the packet and records caches

Before this change, both the query and packet caches in the authoritative
server can exceed their maximum size by a lot, until the next cleaning
cycle.
This is particularly nasty since the current cleaning algorithm will
never remove entries from the cache until they expire, as opposed to
what we do in the recursor, for example, where we nuke the least-recently
used entries, even if they are still valid, when the cache is full.
This commit changes that by removing the least recently inserted or
updated entry from the cache after inserting a new one when the cache
is full, thus enforcing the maximum size more strictly.

Note that this is really the least recently inserted/updated and not
the least recently used one, as is done in the recursor. Having a
proper LRU in the auth would require acquering a write lock for a
simple lookup, instead of a potentially concurrent read-lock at the
moment. We might want to consider changing that at some point, as
a LRU might be fairer and the lock contention might be very small
since the caches are sharded.
pdns/auth-packetcache.cc
pdns/auth-packetcache.hh
pdns/auth-querycache.cc
pdns/auth-querycache.hh