SharedLRU<K,V>* cache;
const K key;
void operator()(V* ptr) {
- cache->_erase(key);
+ cache->_erase_weak(key);
delete ptr;
}
};
- void _erase(const K& key) {
+ void _erase_weak(const K& key) {
weak_refs.erase(key);
}
public:
shared_ptr_t lower_bound(const K& key);
// return the first element that is greater than key
std::optional<value_type> upper_bound(const K& key);
+
+ void erase(const K& key) {
+ cache.erase(key);
+ _erase_weak(key);
+ }
};
template<class K, class V>
void SimpleLRU<Key,Value,Ordered>::erase(const Key& key)
{
if (auto found = cache.find(key); found != cache.end()) {
- lru.erase(found->second->second);
+ lru.erase(found->second.second);
cache.erase(found);
}
}
});
}
+seastar::future<>
+PGBackend::evict_object_state(const hobject_t& oid)
+{
+ os_cache.erase(oid);
+ return seastar::now();
+}
+
seastar::future<bufferlist> PGBackend::read(const object_info_t& oi,
size_t offset,
size_t length,
const ec_profile_t& ec_profile);
using cached_os_t = boost::local_shared_ptr<ObjectState>;
seastar::future<cached_os_t> get_object_state(const hobject_t& oid);
+ seastar::future<> evict_object_state(const hobject_t& oid);
seastar::future<bufferlist> read(const object_info_t& oi,
uint64_t off,
uint64_t len,