From 39258cb4c79eb74d3d0ed5471364662859d66783 Mon Sep 17 00:00:00 2001 From: Yehuda Sadeh Date: Fri, 12 Oct 2018 15:37:42 -0700 Subject: [PATCH] rgw: unregister chained cache on shutdown Signed-off-by: Yehuda Sadeh --- src/rgw/rgw_cache.cc | 12 ++++++++++++ src/rgw/rgw_cache.h | 1 + src/rgw/services/svc_sys_obj_cache.cc | 5 +++++ src/rgw/services/svc_sys_obj_cache.h | 12 ++++++++++-- 4 files changed, 28 insertions(+), 2 deletions(-) diff --git a/src/rgw/rgw_cache.cc b/src/rgw/rgw_cache.cc index e4d38b678a0..a53940b2626 100644 --- a/src/rgw/rgw_cache.cc +++ b/src/rgw/rgw_cache.cc @@ -322,3 +322,15 @@ void ObjectCache::chain_cache(RGWChainedCache *cache) { chained_cache.push_back(cache); } +void ObjectCache::unchain_cache(RGWChainedCache *cache) { + RWLock::WLocker l(lock); + + auto iter = chained_cache.begin(); + for (; iter != chained_cache.end(); ++iter) { + if (cache == *iter) { + chained_cache.erase(iter); + return; + } + } +} + diff --git a/src/rgw/rgw_cache.h b/src/rgw/rgw_cache.h index 3a1c3495edc..60087f92ea4 100644 --- a/src/rgw/rgw_cache.h +++ b/src/rgw/rgw_cache.h @@ -209,6 +209,7 @@ public: void set_enabled(bool status); void chain_cache(RGWChainedCache *cache); + void unchain_cache(RGWChainedCache *cache); void invalidate_all(); }; diff --git a/src/rgw/services/svc_sys_obj_cache.cc b/src/rgw/services/svc_sys_obj_cache.cc index 03786a8ff91..abedea936d9 100644 --- a/src/rgw/services/svc_sys_obj_cache.cc +++ b/src/rgw/services/svc_sys_obj_cache.cc @@ -438,6 +438,11 @@ void RGWSI_SysObj_Cache::register_chained_cache(RGWChainedCache *cc) cache.chain_cache(cc); } +void RGWSI_SysObj_Cache::unregister_chained_cache(RGWChainedCache *cc) +{ + cache.unchain_cache(cc); +} + static void cache_list_dump_helper(Formatter* f, const std::string& name, const ceph::real_time mtime, diff --git a/src/rgw/services/svc_sys_obj_cache.h b/src/rgw/services/svc_sys_obj_cache.h index 98be1c6c50d..71421131e4c 100644 --- a/src/rgw/services/svc_sys_obj_cache.h +++ b/src/rgw/services/svc_sys_obj_cache.h @@ -87,6 +87,7 @@ public: bool chain_cache_entry(std::initializer_list cache_info_entries, RGWChainedCache::Entry *chained_entry); void register_chained_cache(RGWChainedCache *cc); + void unregister_chained_cache(RGWChainedCache *cc); void call_list(const std::optional& filter, Formatter* f); int call_inspect(const std::string& target, Formatter* f); @@ -104,11 +105,18 @@ class RGWChainedCacheImpl : public RGWChainedCache { public: RGWChainedCacheImpl() : lock("RGWChainedCacheImpl::lock") {} - - void init(RGWSI_SysObj_Cache *svc) { + ~RGWChainedCacheImpl() { if (!svc) { return; } + svc->unregister_chained_cache(this); + } + + void init(RGWSI_SysObj_Cache *_svc) { + if (!_svc) { + return; + } + svc = _svc; svc->register_chained_cache(this); expiry = std::chrono::seconds(svc->ctx()->_conf.get_val( "rgw_cache_expiry_interval")); -- 2.47.3