]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: Do not update mtime in `set_attrs` 51806/head
authorSoumya Koduri <skoduri@redhat.com>
Sat, 24 Jun 2023 06:55:46 +0000 (12:25 +0530)
committerSoumya Koduri <skoduri@redhat.com>
Fri, 21 Jun 2024 18:04:47 +0000 (23:34 +0530)
As per https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingMetadata.html,
the only way for users to modify object metadata is to make a copy of the object and
set the metadata. Hence retain old mtime for any other attr changes

Signed-off-by: Soumya Koduri <skoduri@redhat.com>
(cherry picked from commit 31666d71aa5b58a9384938ba31892d48f2ac3f67)

src/rgw/rgw_rados.cc

index 535834547cb0a0dbb1f320cdeda6ef03358b4107..57c03cca280f7a7d55d54c7e5aa19dc4585ad36e 100644 (file)
@@ -4728,6 +4728,7 @@ int RGWRados::transition_obj(RGWObjectCtx& obj_ctx,
 
   if (read_mtime != mtime) {
     /* raced */
+    ldpp_dout(dpp, 0) << __func__ << " ERROR: failed to transition obj(" << obj.get_key() << ") read_mtime = " << read_mtime << " doesn't match mtime = " << mtime << dendl;
     return -ECANCELED;
   }
 
@@ -6163,10 +6164,11 @@ 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;
-  }
+  /* As per https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingMetadata.html, 
+   * the only way for users to modify object metadata is to make a copy of the object and
+   * set the metadata.
+   * Hence do not update mtime for any other attr changes */
+  real_time mtime = state->mtime;
   struct timespec mtime_ts = real_clock::to_timespec(mtime);
   op.mtime2(&mtime_ts);
   auto& ioctx = ref.pool.ioctx();