}
auto iter = cache_map.find(name);
- if (iter == cache_map.end() ||
- (expiry.count() &&
- (ceph::coarse_mono_clock::now() - iter->second.info.time_added) > expiry)) {
+ if (iter == cache_map.end()) {
ldout(cct, 10) << "cache get: name=" << name << " : miss" << dendl;
if (perfcounter)
perfcounter->inc(l_rgw_cache_miss);
return -ENOENT;
}
+ if (expiry.count() &&
+ (ceph::coarse_mono_clock::now() - iter->second.info.time_added) > expiry) {
+ ldout(cct, 10) << "cache get: name=" << name << " : expiry miss" << dendl;
+ lock.unlock();
+ lock.get_write();
+ // check that wasn't already removed by other thread
+ iter = cache_map.find(name);
+ if (iter != cache_map.end()) {
+ for (auto &kv : iter->second.chained_entries)
+ kv.first->invalidate(kv.second);
+ remove_lru(name, iter->second.lru_iter);
+ cache_map.erase(iter);
+ }
+ if(perfcounter)
+ perfcounter->inc(l_rgw_cache_miss);
+ return -ENOENT;
+ }
ObjectCacheEntry *entry = &iter->second;