crimson: object state can be manually evicted from OSD's cache.

Signed-off-by: Radoslaw Zarzynski <rzarzyns@redhat.com>
This commit is contained in:
Radoslaw Zarzynski 2019-04-29 15:19:43 +02:00 committed by Kefu Chai
parent d86ffe51aa
commit c400cf336f
4 changed files with 16 additions and 3 deletions

View File

@ -29,11 +29,11 @@ class SharedLRU {
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:
@ -85,6 +85,11 @@ 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>

View File

@ -113,7 +113,7 @@ template <class Key, class Value, bool Ordered>
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);
}
}

View File

@ -149,6 +149,13 @@ PGBackend::_load_ss(const hobject_t& oid)
});
}
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,

View File

@ -34,6 +34,7 @@ public:
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,