]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: RGWRados::set_attrs() takes optional mtime
authorCasey Bodley <cbodley@redhat.com>
Tue, 30 May 2023 21:23:36 +0000 (17:23 -0400)
committerCasey Bodley <cbodley@redhat.com>
Fri, 4 Aug 2023 19:21:25 +0000 (15:21 -0400)
Signed-off-by: Casey Bodley <cbodley@redhat.com>
(cherry picked from commit 237fa27710af3b7dd3a253283a95783dc44aa148)

Conflicts: missing change for PutACL mtime
src/rgw/rgw_rados.cc

src/rgw/rgw_rados.cc
src/rgw/rgw_rados.h

index 1c1bce52a50e7ef1886662b8541310d67d079066..239bab1b4effec120bcde6afb8746c33f638f7d0 100644 (file)
@@ -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<string, bufferlist>& attrs,
                         map<string, bufferlist>* 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;
index 08a825b8dba53105807969e933e8f1571f52bf82..11ce10505b539532173e8a02bd15c4c7df25fba9 100644 (file)
@@ -1233,7 +1233,8 @@ public:
   int set_attrs(const DoutPrefixProvider *dpp, void *ctx, const RGWBucketInfo& bucket_info, rgw_obj& obj,
                         std::map<std::string, bufferlist>& attrs,
                         std::map<std::string, bufferlist>* 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);