]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw/multisite: remove source object's RGW_ATTR_OBJ_REPLICATION_TRACE during copy_object.
authorShilpa Jagannath <smanjara@redhat.com>
Wed, 10 Jul 2024 19:07:13 +0000 (15:07 -0400)
committerShilpa Jagannath <smanjara@redhat.com>
Thu, 11 Jul 2024 20:44:42 +0000 (16:44 -0400)
if a copy_object is executed on a replicated object, it fails to sync the copied object
to the original source zone where the source object was first written and replicated from.
this is because copy_object retains source attrs by default. when a get_obj() is issued
from a fetch_remote_obj() call during sync, we check for this RGW_ATTR_OBJ_REPLICATION_TRACE
and if that destination zone is already present in the trace, we return NOT_MODIFIED error,
thus failing to replicate the copied object.

also remove RGW_ATTR_OBJ_REPLICATION_STATUS and RGW_ATTR_OBJ_REPLICATION_TIMESTAMP

Signed-off-by: Shilpa Jagannath <smanjara@redhat.com>
src/rgw/driver/rados/rgw_rados.cc

index b010a63d44347f9319e55ceab8683ef746ef2e64..05dd35e5d8745d15173abb2ff6658337e3da2c47 100644 (file)
@@ -4724,6 +4724,10 @@ int RGWRados::copy_obj(RGWObjectCtx& obj_ctx,
     src_attrs.erase(RGW_ATTR_OLH_VER);
   }
 
+  src_attrs.erase(RGW_ATTR_OBJ_REPLICATION_TRACE);
+  src_attrs.erase(RGW_ATTR_OBJ_REPLICATION_TIMESTAMP);
+  src_attrs.erase(RGW_ATTR_OBJ_REPLICATION_STATUS);
+
   set_copy_attrs(src_attrs, attrs, attrs_mod);
   attrs.erase(RGW_ATTR_ID_TAG);
   attrs.erase(RGW_ATTR_PG_VER);