Skip to content

Commit f0f3810

Browse files
authored
Merge pull request ceph#58519 from smanjara/wip-fix-copy-obj-replication
rgw/multisite: don't retain RGW_ATTR_OBJ_REPLICATION_TRACE attr on copy_object Reviewed-by: Casey Bodley <[email protected]>
2 parents 17315e1 + 204101c commit f0f3810

File tree

2 files changed

+74
-0
lines changed

2 files changed

+74
-0
lines changed

src/rgw/driver/rados/rgw_rados.cc

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4724,6 +4724,10 @@ int RGWRados::copy_obj(RGWObjectCtx& obj_ctx,
47244724
src_attrs.erase(RGW_ATTR_OLH_VER);
47254725
}
47264726

4727+
src_attrs.erase(RGW_ATTR_OBJ_REPLICATION_TRACE);
4728+
src_attrs.erase(RGW_ATTR_OBJ_REPLICATION_TIMESTAMP);
4729+
src_attrs.erase(RGW_ATTR_OBJ_REPLICATION_STATUS);
4730+
47274731
set_copy_attrs(src_attrs, attrs, attrs_mod);
47284732
attrs.erase(RGW_ATTR_ID_TAG);
47294733
attrs.erase(RGW_ATTR_PG_VER);

src/test/rgw/rgw_multi/tests.py

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3565,3 +3565,73 @@ def test_account_metadata_sync():
35653565
check_users_eq(source_conn, target_conn)
35663566
check_groups_eq(source_conn, target_conn)
35673567
check_oidc_providers_eq(source_conn, target_conn)
3568+
3569+
3570+
@attr('copy_object')
3571+
def test_copy_object_same_bucket():
3572+
zonegroup = realm.master_zonegroup()
3573+
zonegroup_conns = ZonegroupConns(zonegroup)
3574+
primary = zonegroup_conns.rw_zones[0]
3575+
secondary = zonegroup_conns.rw_zones[1]
3576+
3577+
bucket = primary.create_bucket(gen_bucket_name())
3578+
log.debug('created bucket=%s', bucket.name)
3579+
3580+
objname = 'dummy'
3581+
3582+
# upload a dummy object and wait for sync.
3583+
k = new_key(primary, bucket, objname)
3584+
k.set_contents_from_string('foo')
3585+
zonegroup_meta_checkpoint(zonegroup)
3586+
3587+
zonegroup_data_checkpoint(zonegroup_conns)
3588+
log.debug('created object=%s', objname)
3589+
3590+
zonegroup_bucket_checkpoint(zonegroup_conns, bucket.name)
3591+
3592+
# copy object on primary zone
3593+
primary.s3_client.copy_object(Bucket=bucket.name,
3594+
CopySource=bucket.name + '/'+ objname,
3595+
Key= objname + '-copy1')
3596+
3597+
zonegroup_bucket_checkpoint(zonegroup_conns, bucket.name)
3598+
3599+
# copy object on secondary zone
3600+
secondary.s3_client.copy_object(Bucket=bucket.name,
3601+
Key= objname + '-copy2',
3602+
CopySource=bucket.name + '/'+ objname)
3603+
3604+
zonegroup_bucket_checkpoint(zonegroup_conns, bucket.name)
3605+
3606+
@attr('copy_object')
3607+
def test_copy_object_different_bucket():
3608+
zonegroup = realm.master_zonegroup()
3609+
zonegroup_conns = ZonegroupConns(zonegroup)
3610+
primary = zonegroup_conns.rw_zones[0]
3611+
secondary = zonegroup_conns.rw_zones[1]
3612+
3613+
source_bucket = primary.create_bucket(gen_bucket_name())
3614+
log.debug('created bucket=%s', source_bucket.name)
3615+
3616+
objname = 'dummy'
3617+
3618+
# upload a dummy object and wait for sync.
3619+
k = new_key(primary, source_bucket, objname)
3620+
k.set_contents_from_string('foo')
3621+
zonegroup_meta_checkpoint(zonegroup)
3622+
3623+
zonegroup_bucket_checkpoint(zonegroup_conns, source_bucket.name)
3624+
3625+
# create destination bucket
3626+
dest_bucket = primary.create_bucket(gen_bucket_name())
3627+
log.debug('created bucket=%s', dest_bucket.name)
3628+
3629+
zonegroup_meta_checkpoint(zonegroup)
3630+
3631+
# copy object on primary zone
3632+
primary.s3_client.copy_object(Bucket = dest_bucket.name,
3633+
Key = objname + '-copy',
3634+
CopySource = source_bucket.name + '/' + objname)
3635+
3636+
zonegroup_bucket_checkpoint(zonegroup_conns, dest_bucket.name)
3637+

0 commit comments

Comments
 (0)