From 46eef5fb5c06ac1af723cba0e3c3980fb6a431ce Mon Sep 17 00:00:00 2001 From: Shilpa Jagannath Date: Wed, 10 Jul 2024 15:07:13 -0400 Subject: [PATCH] rgw/multisite: remove source object's RGW_ATTR_OBJ_REPLICATION_TRACE during copy_object. 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 --- src/rgw/driver/rados/rgw_rados.cc | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/rgw/driver/rados/rgw_rados.cc b/src/rgw/driver/rados/rgw_rados.cc index b010a63d44347..05dd35e5d8745 100644 --- a/src/rgw/driver/rados/rgw_rados.cc +++ b/src/rgw/driver/rados/rgw_rados.cc @@ -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); -- 2.39.5