From: Casey Bodley Date: Tue, 12 Jul 2022 18:23:20 +0000 (-0400) Subject: rgw: simplify sysobj stat() X-Git-Tag: v18.0.0~432^2~3 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=91fa64ac210b59ce0d915ab67089f898383cebfc;p=ceph.git rgw: simplify sysobj stat() stop caching the results of raw_stat() in RGWSysObjectCtx stat() calls raw_stat() directly epoch and first_chunk were unused Signed-off-by: Casey Bodley --- diff --git a/src/rgw/services/svc_sys_obj_cache.cc b/src/rgw/services/svc_sys_obj_cache.cc index b64a6a9a491f..238db954dfe5 100644 --- a/src/rgw/services/svc_sys_obj_cache.cc +++ b/src/rgw/services/svc_sys_obj_cache.cc @@ -357,8 +357,9 @@ int RGWSI_SysObj_Cache::write_data(const DoutPrefixProvider *dpp, return ret; } -int RGWSI_SysObj_Cache::raw_stat(const DoutPrefixProvider *dpp, const rgw_raw_obj& obj, uint64_t *psize, real_time *pmtime, uint64_t *pepoch, - map *attrs, bufferlist *first_chunk, +int RGWSI_SysObj_Cache::raw_stat(const DoutPrefixProvider *dpp, const rgw_raw_obj& obj, + uint64_t *psize, real_time *pmtime, + map *attrs, RGWObjVersionTracker *objv_tracker, optional_yield y) { @@ -370,7 +371,6 @@ int RGWSI_SysObj_Cache::raw_stat(const DoutPrefixProvider *dpp, const rgw_raw_ob uint64_t size; real_time mtime; - uint64_t epoch; ObjectCacheInfo info; uint32_t flags = CACHE_FLAG_META | CACHE_FLAG_XATTRS; @@ -383,7 +383,6 @@ int RGWSI_SysObj_Cache::raw_stat(const DoutPrefixProvider *dpp, const rgw_raw_ob size = info.meta.size; mtime = info.meta.mtime; - epoch = info.epoch; if (objv_tracker) objv_tracker->read_version = info.version; goto done; @@ -391,8 +390,8 @@ int RGWSI_SysObj_Cache::raw_stat(const DoutPrefixProvider *dpp, const rgw_raw_ob if (r == -ENODATA) { return -ENOENT; } - r = RGWSI_SysObj_Core::raw_stat(dpp, obj, &size, &mtime, &epoch, &info.xattrs, - first_chunk, objv_tracker, y); + r = RGWSI_SysObj_Core::raw_stat(dpp, obj, &size, &mtime, &info.xattrs, + objv_tracker, y); if (r < 0) { if (r == -ENOENT) { info.status = r; @@ -401,7 +400,6 @@ int RGWSI_SysObj_Cache::raw_stat(const DoutPrefixProvider *dpp, const rgw_raw_ob return r; } info.status = 0; - info.epoch = epoch; info.meta.mtime = mtime; info.meta.size = size; info.flags = CACHE_FLAG_META | CACHE_FLAG_XATTRS; @@ -415,8 +413,6 @@ done: *psize = size; if (pmtime) *pmtime = mtime; - if (pepoch) - *pepoch = epoch; if (attrs) *attrs = info.xattrs; return 0; diff --git a/src/rgw/services/svc_sys_obj_cache.h b/src/rgw/services/svc_sys_obj_cache.h index 2bd89d45e2ab..a3628d84cdd2 100644 --- a/src/rgw/services/svc_sys_obj_cache.h +++ b/src/rgw/services/svc_sys_obj_cache.h @@ -37,8 +37,9 @@ protected: int do_start(optional_yield, const DoutPrefixProvider *dpp) override; void shutdown() override; - int raw_stat(const DoutPrefixProvider *dpp, const rgw_raw_obj& obj, uint64_t *psize, real_time *pmtime, uint64_t *epoch, - std::map *attrs, bufferlist *first_chunk, + int raw_stat(const DoutPrefixProvider *dpp, const rgw_raw_obj& obj, + uint64_t *psize, real_time *pmtime, + std::map *attrs, RGWObjVersionTracker *objv_tracker, optional_yield y) override; diff --git a/src/rgw/services/svc_sys_obj_core.cc b/src/rgw/services/svc_sys_obj_core.cc index e0b38dc03c04..32d11e9153c7 100644 --- a/src/rgw/services/svc_sys_obj_core.cc +++ b/src/rgw/services/svc_sys_obj_core.cc @@ -53,68 +53,9 @@ int RGWSI_SysObj_Core::get_rados_obj(const DoutPrefixProvider *dpp, return 0; } -int RGWSI_SysObj_Core::get_system_obj_state_impl(RGWSysObjectCtxBase *rctx, - const rgw_raw_obj& obj, - RGWSysObjState **state, - RGWObjVersionTracker *objv_tracker, - optional_yield y, - const DoutPrefixProvider *dpp) -{ - if (obj.empty()) { - return -EINVAL; - } - - RGWSysObjState *s = rctx->get_state(obj); - ldpp_dout(dpp, 20) << "get_system_obj_state: rctx=" << (void *)rctx << " obj=" << obj << " state=" << (void *)s << " s->prefetch_data=" << s->prefetch_data << dendl; - *state = s; - if (s->has_attrs) { - return 0; - } - - s->obj = obj; - - int r = raw_stat(dpp, obj, &s->size, &s->mtime, &s->epoch, &s->attrset, - (s->prefetch_data ? &s->data : nullptr), objv_tracker, y); - if (r == -ENOENT) { - s->exists = false; - s->has_attrs = true; - s->mtime = real_time(); - return 0; - } - if (r < 0) - return r; - - s->exists = true; - s->has_attrs = true; - s->obj_tag = s->attrset[RGW_ATTR_ID_TAG]; - - if (s->obj_tag.length()) { - ldpp_dout(dpp, 20) << "get_system_obj_state: setting s->obj_tag to " << s->obj_tag.c_str() << dendl; - } else { - ldpp_dout(dpp, 20) << "get_system_obj_state: s->obj_tag was set empty" << dendl; - } - - return 0; -} - -int RGWSI_SysObj_Core::get_system_obj_state(RGWSysObjectCtxBase *rctx, - const rgw_raw_obj& obj, - RGWSysObjState **state, - RGWObjVersionTracker *objv_tracker, - optional_yield y, - const DoutPrefixProvider *dpp) -{ - int ret; - - do { - ret = get_system_obj_state_impl(rctx, obj, state, objv_tracker, y, dpp); - } while (ret == -EAGAIN); - - return ret; -} - -int RGWSI_SysObj_Core::raw_stat(const DoutPrefixProvider *dpp, const rgw_raw_obj& obj, uint64_t *psize, real_time *pmtime, uint64_t *epoch, - map *attrs, bufferlist *first_chunk, +int RGWSI_SysObj_Core::raw_stat(const DoutPrefixProvider *dpp, const rgw_raw_obj& obj, + uint64_t *psize, real_time *pmtime, + map *attrs, RGWObjVersionTracker *objv_tracker, optional_yield y) { @@ -135,16 +76,8 @@ int RGWSI_SysObj_Core::raw_stat(const DoutPrefixProvider *dpp, const rgw_raw_obj if (psize || pmtime) { op.stat2(&size, &mtime_ts, nullptr); } - if (first_chunk) { - op.read(0, cct->_conf->rgw_max_chunk_size, first_chunk, nullptr); - } bufferlist outbl; r = rados_obj.operate(dpp, &op, &outbl, y); - - if (epoch) { - *epoch = rados_obj.get_last_version(); - } - if (r < 0) return r; @@ -167,21 +100,19 @@ int RGWSI_SysObj_Core::stat(RGWSysObjectCtxBase& obj_ctx, optional_yield y, const DoutPrefixProvider *dpp) { - RGWSysObjState *astate = nullptr; + uint64_t size = 0; + ceph::real_time mtime; + std::map attrset; - int r = get_system_obj_state(&obj_ctx, obj, &astate, objv_tracker, y, dpp); + int r = raw_stat(dpp, obj, &size, &mtime, &attrset, objv_tracker, y); if (r < 0) return r; - if (!astate->exists) { - return -ENOENT; - } - if (attrs) { if (raw_attrs) { - *attrs = astate->attrset; + *attrs = std::move(attrset); } else { - rgw_filter_attrset(astate->attrset, RGW_ATTR_PREFIX, attrs); + rgw_filter_attrset(attrset, RGW_ATTR_PREFIX, attrs); } if (cct->_conf->subsys.should_gather()) { map::iterator iter; @@ -192,9 +123,9 @@ int RGWSI_SysObj_Core::stat(RGWSysObjectCtxBase& obj_ctx, } if (obj_size) - *obj_size = astate->size; + *obj_size = size; if (lastmod) - *lastmod = astate->mtime; + *lastmod = mtime; return 0; } diff --git a/src/rgw/services/svc_sys_obj_core.h b/src/rgw/services/svc_sys_obj_core.h index 179e31633748..6536d29c48e5 100644 --- a/src/rgw/services/svc_sys_obj_core.h +++ b/src/rgw/services/svc_sys_obj_core.h @@ -33,9 +33,9 @@ protected: } int get_rados_obj(const DoutPrefixProvider *dpp, RGWSI_Zone *zone_svc, const rgw_raw_obj& obj, RGWSI_RADOS::Obj *pobj); - virtual int raw_stat(const DoutPrefixProvider *dpp, const rgw_raw_obj& obj, uint64_t *psize, - real_time *pmtime, uint64_t *epoch, - std::map *attrs, bufferlist *first_chunk, + virtual int raw_stat(const DoutPrefixProvider *dpp, const rgw_raw_obj& obj, + uint64_t *psize, real_time *pmtime, + std::map *attrs, RGWObjVersionTracker *objv_tracker, optional_yield y); @@ -127,18 +127,6 @@ protected: virtual int pool_list_objects_get_marker(RGWSI_SysObj::Pool::ListCtx& _ctx, std::string *marker); - /* wrappers */ - int get_system_obj_state_impl(RGWSysObjectCtxBase *rctx, - const rgw_raw_obj& obj, RGWSysObjState **state, - RGWObjVersionTracker *objv_tracker, - optional_yield y, - const DoutPrefixProvider *dpp); - int get_system_obj_state(RGWSysObjectCtxBase *rctx, const rgw_raw_obj& obj, - RGWSysObjState **state, - RGWObjVersionTracker *objv_tracker, - optional_yield y, - const DoutPrefixProvider *dpp); - int stat(RGWSysObjectCtxBase& obj_ctx, RGWSI_SysObj_Obj_GetObjState& state, const rgw_raw_obj& obj,