From: Adam C. Emerson Date: Fri, 15 Dec 2017 21:39:19 +0000 (-0500) Subject: rgw: Have ChainedCacheImpl::find return an optional X-Git-Tag: v13.0.2~675^2~5 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=d622aa0e0ada6513ad3099a547a92cff3b86a2b8;p=ceph.git rgw: Have ChainedCacheImpl::find return an optional Signed-off-by: Adam C. Emerson --- diff --git a/src/rgw/rgw_rados.cc b/src/rgw/rgw_rados.cc index 96af0ab9d150..2cc1d628d437 100644 --- a/src/rgw/rgw_rados.cc +++ b/src/rgw/rgw_rados.cc @@ -11907,27 +11907,28 @@ int RGWRados::_get_bucket_info(RGWObjectCtx& obj_ctx, map *pattrs, boost::optional refresh_version) { - bucket_info_entry e; string bucket_entry; rgw_make_bucket_entry_name(tenant, bucket_name, bucket_entry); - if (binfo_cache->find(bucket_entry, &e)) { + if (auto e = binfo_cache->find(bucket_entry)) { if (refresh_version && - e.info.objv_tracker.read_version.compare(&(*refresh_version))) { + e->info.objv_tracker.read_version.compare(&(*refresh_version))) { lderr(cct) << "WARNING: The bucket info cache is inconsistent. This is " << "a failure that should be debugged. I am a nice machine, " << "so I will try to recover." << dendl; binfo_cache->invalidate(bucket_entry); + } else { + info = e->info; + if (pattrs) + *pattrs = e->attrs; + if (pmtime) + *pmtime = e->mtime; + return 0; } - info = e.info; - if (pattrs) - *pattrs = e.attrs; - if (pmtime) - *pmtime = e.mtime; - return 0; } + bucket_info_entry e; RGWBucketEntryPoint entry_point; real_time ep_mtime; RGWObjVersionTracker ot; diff --git a/src/rgw/rgw_rados.h b/src/rgw/rgw_rados.h index 24330e273d7e..4240e5a53a4f 100644 --- a/src/rgw/rgw_rados.h +++ b/src/rgw/rgw_rados.h @@ -3759,7 +3759,7 @@ class RGWChainedCacheImpl : public RGWChainedCache { ceph::timespan expiry; RWLock lock; - map> entries; + std::unordered_map> entries; public: RGWChainedCacheImpl() : lock("RGWChainedCacheImpl::lock") {} @@ -3770,19 +3770,18 @@ public: "rgw_bucket_info_cache_expiry_interval")); } - bool find(const string& key, T *entry) { + boost::optional find(const string& key) { RWLock::RLocker rl(lock); auto iter = entries.find(key); if (iter == entries.end()) { - return false; + return boost::none; } if (expiry.count() && (ceph::coarse_mono_clock::now() - iter->second.second) > expiry) { - return false; + return boost::none; } - *entry = iter->second.first; - return true; + return iter->second.first; } bool put(RGWRados *store, const string& key, T *entry, list& cache_info_entries) { diff --git a/src/rgw/rgw_user.cc b/src/rgw/rgw_user.cc index 210b01c8faa1..6a968efaa4be 100644 --- a/src/rgw/rgw_user.cc +++ b/src/rgw/rgw_user.cc @@ -262,16 +262,16 @@ int rgw_get_user_info_from_index(RGWRados * const store, RGWObjVersionTracker * const objv_tracker, real_time * const pmtime) { - user_info_entry e; - if (uinfo_cache.find(key, &e)) { - info = e.info; + if (auto e = uinfo_cache.find(key)) { + info = e->info; if (objv_tracker) - *objv_tracker = e.objv_tracker; + *objv_tracker = e->objv_tracker; if (pmtime) - *pmtime = e.mtime; + *pmtime = e->mtime; return 0; } + user_info_entry e; bufferlist bl; RGWUID uid; RGWObjectCtx obj_ctx(store);