ObjectCacheEntry& entry = iter->second;
ObjectCacheInfo& target = entry.info;
- for (list<pair<RGWChainedCache *, string> >::iterator iiter = entry.chained_entries.begin();
- iiter != entry.chained_entries.end(); ++iiter) {
- RGWChainedCache *chained_cache = iiter->first;
- chained_cache->invalidate(iiter->second);
- }
+ invalidate_lru(entry);
entry.chained_entries.clear();
entry.gen++;
}
map<string, ObjectCacheEntry>::iterator map_iter = cache_map.find(*iter);
ldout(cct, 10) << "removing entry: name=" << *iter << " from cache LRU" << dendl;
- if (map_iter != cache_map.end())
+ if (map_iter != cache_map.end()) {
+ ObjectCacheEntry& entry = map_iter->second;
+ invalidate_lru(entry);
cache_map.erase(map_iter);
+ }
lru.pop_front();
lru_size--;
}
lru_iter = lru.end();
}
+void ObjectCache::invalidate_lru(ObjectCacheEntry& entry)
+{
+ for (list<pair<RGWChainedCache *, string> >::iterator iter = entry.chained_entries.begin();
+ iter != entry.chained_entries.end(); ++iter) {
+ RGWChainedCache *chained_cache = iter->first;
+ chained_cache->invalidate(iter->second);
+ }
+}
+
void ObjectCache::set_enabled(bool status)
{
RWLock::WLocker l(lock);
void touch_lru(string& name, ObjectCacheEntry& entry, std::list<string>::iterator& lru_iter);
void remove_lru(string& name, std::list<string>::iterator& lru_iter);
+ void invalidate_lru(ObjectCacheEntry& entry);
void do_invalidate_all();
public: