From: Casey Bodley Date: Tue, 30 May 2023 21:23:36 +0000 (-0400) Subject: rgw: RGWRados::set_attrs() takes optional mtime X-Git-Tag: v17.2.7~116^2~2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=232ba75f42f4abb216ec14d6bad0c69104297ef5;p=ceph.git rgw: RGWRados::set_attrs() takes optional mtime Signed-off-by: Casey Bodley (cherry picked from commit 237fa27710af3b7dd3a253283a95783dc44aa148) Conflicts: missing change for PutACL mtime src/rgw/rgw_rados.cc --- diff --git a/src/rgw/rgw_rados.cc b/src/rgw/rgw_rados.cc index 1c1bce52a50e..239bab1b4eff 100644 --- a/src/rgw/rgw_rados.cc +++ b/src/rgw/rgw_rados.cc @@ -5953,7 +5953,8 @@ int RGWRados::set_attr(const DoutPrefixProvider *dpp, void *ctx, const RGWBucket int RGWRados::set_attrs(const DoutPrefixProvider *dpp, void *ctx, const RGWBucketInfo& bucket_info, 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") { @@ -6037,6 +6038,9 @@ int RGWRados::set_attrs(const DoutPrefixProvider *dpp, void *ctx, const RGWBucke real_time mtime = real_clock::now(); + 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(); @@ -6084,6 +6088,8 @@ int RGWRados::set_attrs(const DoutPrefixProvider *dpp, void *ctx, const RGWBucke if (iter != state->attrset.end()) { iter->second = state->obj_tag; } + + state->mtime = mtime; } return 0; diff --git a/src/rgw/rgw_rados.h b/src/rgw/rgw_rados.h index 08a825b8dba5..11ce10505b53 100644 --- a/src/rgw/rgw_rados.h +++ b/src/rgw/rgw_rados.h @@ -1233,7 +1233,8 @@ public: int set_attrs(const DoutPrefixProvider *dpp, void *ctx, const RGWBucketInfo& bucket_info, 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, const RGWBucketInfo& bucket_info, const rgw_obj& obj, RGWObjState **state, bool follow_olh, optional_yield y, bool assume_noent = false);