in cachelib/allocator/MMTinyLFU-inl.h [65:101]
bool MMTinyLFU::Container<T, HookPtr>::recordAccess(T& node,
AccessMode mode) noexcept {
if ((mode == AccessMode::kWrite && !config_.updateOnWrite) ||
(mode == AccessMode::kRead && !config_.updateOnRead)) {
return false;
}
const auto curr = static_cast<Time>(util::getCurrentTimeSec());
// check if the node is still being memory managed
if (node.isInMMContainer() &&
((curr >= getUpdateTime(node) +
lruRefreshTime_.load(std::memory_order_relaxed)) ||
!isAccessed(node))) {
if (!isAccessed(node)) {
markAccessed(node);
}
LockHolder l(lruMutex_, std::defer_lock);
if (config_.tryLockUpdate) {
l.try_lock();
} else {
l.lock();
}
if (!l.owns_lock()) {
return false;
}
reconfigureLocked(curr);
if (!node.isInMMContainer()) {
return false;
}
lru_.getList(getLruType(node)).moveToHead(node);
setUpdateTime(node, curr);
updateFrequenciesLocked(node);
return true;
}
return false;
}