]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw/dbstore: Do not update mtime for attr change 52372/head
authorSoumya Koduri <skoduri@redhat.com>
Fri, 7 Jul 2023 11:05:57 +0000 (16:35 +0530)
committerSoumya Koduri <skoduri@redhat.com>
Mon, 10 Jul 2023 04:11:59 +0000 (09:41 +0530)
Signed-off-by: Soumya Koduri <skoduri@redhat.com>
src/rgw/driver/dbstore/common/dbstore.cc

index 3936368e6f7f8057fe394820684ecc1a994c76a2..dc5a90c31873d7e992285e10988c0d40ba41551f 100644 (file)
@@ -1082,17 +1082,21 @@ int DB::Object::set_attrs(const DoutPrefixProvider *dpp,
   DBOpParams params = {};
   rgw::sal::Attrs *attrs;
   map<string, bufferlist>::iterator iter;
+  RGWObjState* state;
 
-  ret = get_object_impl(dpp, params);
+  store->InitializeParams(dpp, &params);
+  InitializeParamsfromObject(dpp, &params);
+  ret = get_state(dpp, &state, true);
 
-  if (ret) {
-    ldpp_dout(dpp, 0) <<"get_object_impl failed err:(" <<ret<<")" << dendl;
+  if (ret && !state->exists) {
+    ldpp_dout(dpp, 0) <<"get_state failed err:(" <<ret<<")" << dendl;
     goto out;
   }
 
   /* For now lets keep it simple..rmattrs & setattrs ..
    * XXX: Check rgw_rados::set_attrs
    */
+  params.op.obj.state = *state;
   attrs = &params.op.obj.state.attrset;
   if (rmattrs) {
     for (iter = rmattrs->begin(); iter != rmattrs->end(); ++iter) {
@@ -1104,7 +1108,10 @@ int DB::Object::set_attrs(const DoutPrefixProvider *dpp,
   }
 
   params.op.query_str = "attrs";
-  params.op.obj.state.mtime = real_clock::now();
+  /* 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 */
 
   ret = store->ProcessOp(dpp, "UpdateObject", &params);