From: Casey Bodley Date: Tue, 30 May 2023 21:23:36 +0000 (-0400) Subject: rgw: RGWRados::set_attrs() takes optional mtime X-Git-Tag: v19.0.0~746^2~2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=237fa27710af3b7dd3a253283a95783dc44aa148;p=ceph.git rgw: RGWRados::set_attrs() takes optional mtime Signed-off-by: Casey Bodley --- diff --git a/src/rgw/driver/rados/rgw_rados.cc b/src/rgw/driver/rados/rgw_rados.cc index b357ecbf670c..6eb0036adea5 100644 --- a/src/rgw/driver/rados/rgw_rados.cc +++ b/src/rgw/driver/rados/rgw_rados.cc @@ -5991,7 +5991,8 @@ int RGWRados::set_attr(const DoutPrefixProvider *dpp, RGWObjectCtx* rctx, RGWBuc int RGWRados::set_attrs(const DoutPrefixProvider *dpp, RGWObjectCtx* rctx, RGWBucketInfo& bucket_info, const rgw_obj& src_obj, map& attrs, map* rmattrs, - optional_yield y) + optional_yield y, + ceph::real_time set_mtime /* = zero() */) { rgw_obj obj = src_obj; if (obj.key.instance == "null") { @@ -6077,6 +6078,9 @@ int RGWRados::set_attrs(const DoutPrefixProvider *dpp, RGWObjectCtx* rctx, RGWBu * set the metadata. * Hence do not update mtime for any other attr changes */ real_time mtime = state->mtime; + if (set_mtime != ceph::real_clock::zero()) { + mtime = set_mtime; + } struct timespec mtime_ts = real_clock::to_timespec(mtime); op.mtime2(&mtime_ts); auto& ioctx = ref.pool.ioctx(); @@ -6130,6 +6134,8 @@ int RGWRados::set_attrs(const DoutPrefixProvider *dpp, RGWObjectCtx* rctx, RGWBu if (iter != state->attrset.end()) { iter->second = state->obj_tag; } + + state->mtime = mtime; } return 0; diff --git a/src/rgw/driver/rados/rgw_rados.h b/src/rgw/driver/rados/rgw_rados.h index d6300a0023dd..4c8dea23e639 100644 --- a/src/rgw/driver/rados/rgw_rados.h +++ b/src/rgw/driver/rados/rgw_rados.h @@ -1268,7 +1268,8 @@ public: int set_attrs(const DoutPrefixProvider *dpp, RGWObjectCtx* ctx, RGWBucketInfo& bucket_info, const rgw_obj& obj, std::map& attrs, std::map* rmattrs, - optional_yield y); + optional_yield y, + ceph::real_time set_mtime = ceph::real_clock::zero()); int get_obj_state(const DoutPrefixProvider *dpp, RGWObjectCtx *rctx, RGWBucketInfo& bucket_info, const rgw_obj& obj, RGWObjState **state, RGWObjManifest** manifest, bool follow_olh, optional_yield y, bool assume_noent = false);