From: Shilpa Jagannath Date: Thu, 11 Jul 2024 20:46:29 +0000 (-0400) Subject: qa/multisite: add copy_object tests X-Git-Tag: v18.2.5~330^2 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=refs%2Fheads%2Fwip-67026-reef;p=ceph.git qa/multisite: add copy_object tests Signed-off-by: Shilpa Jagannath (cherry picked from commit 204101c452f2503b47bf79873807f7b620d3ba91) --- diff --git a/src/rgw/driver/rados/rgw_rados.cc b/src/rgw/driver/rados/rgw_rados.cc index 373c3e8bf6679..c4f34aeed86fc 100644 --- a/src/rgw/driver/rados/rgw_rados.cc +++ b/src/rgw/driver/rados/rgw_rados.cc @@ -4419,7 +4419,6 @@ int RGWRados::copy_obj(RGWObjectCtx& obj_ctx, } 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); diff --git a/src/test/rgw/rgw_multi/tests.py b/src/test/rgw/rgw_multi/tests.py index fee0c9a3a4940..29de3ef1e05ae 100644 --- a/src/test/rgw/rgw_multi/tests.py +++ b/src/test/rgw/rgw_multi/tests.py @@ -2892,3 +2892,71 @@ def test_sync_single_bucket_to_multiple(): remove_sync_policy_group(c1, "sync-bucket", bucketA.name) remove_sync_policy_group(c1, "sync-group") return + +@attr('copy_object') +def test_copy_object_same_bucket(): + zonegroup = realm.master_zonegroup() + zonegroup_conns = ZonegroupConns(zonegroup) + primary = zonegroup_conns.rw_zones[0] + secondary = zonegroup_conns.rw_zones[1] + + bucket = primary.create_bucket(gen_bucket_name()) + log.debug('created bucket=%s', bucket.name) + + objname = 'dummy' + + # upload a dummy object and wait for sync. + k = new_key(primary, bucket, objname) + k.set_contents_from_string('foo') + zonegroup_meta_checkpoint(zonegroup) + + zonegroup_data_checkpoint(zonegroup_conns) + log.debug('created object=%s', objname) + + zonegroup_bucket_checkpoint(zonegroup_conns, bucket.name) + + # copy object on primary zone + primary.s3_client.copy_object(Bucket=bucket.name, + CopySource=bucket.name + '/'+ objname, + Key= objname + '-copy1') + + zonegroup_bucket_checkpoint(zonegroup_conns, bucket.name) + + # copy object on secondary zone + secondary.s3_client.copy_object(Bucket=bucket.name, + Key= objname + '-copy2', + CopySource=bucket.name + '/'+ objname) + + zonegroup_bucket_checkpoint(zonegroup_conns, bucket.name) + +@attr('copy_object') +def test_copy_object_different_bucket(): + zonegroup = realm.master_zonegroup() + zonegroup_conns = ZonegroupConns(zonegroup) + primary = zonegroup_conns.rw_zones[0] + secondary = zonegroup_conns.rw_zones[1] + + source_bucket = primary.create_bucket(gen_bucket_name()) + log.debug('created bucket=%s', source_bucket.name) + + objname = 'dummy' + + # upload a dummy object and wait for sync. + k = new_key(primary, source_bucket, objname) + k.set_contents_from_string('foo') + zonegroup_meta_checkpoint(zonegroup) + + zonegroup_bucket_checkpoint(zonegroup_conns, source_bucket.name) + + # create destination bucket + dest_bucket = primary.create_bucket(gen_bucket_name()) + log.debug('created bucket=%s', dest_bucket.name) + + zonegroup_meta_checkpoint(zonegroup) + + # copy object on primary zone + primary.s3_client.copy_object(Bucket = dest_bucket.name, + Key = objname + '-copy', + CopySource = source_bucket.name + '/' + objname) + + zonegroup_bucket_checkpoint(zonegroup_conns, dest_bucket.name) \ No newline at end of file