Skip to content

Commit 7e3d493

Browse files
rgw/multisite: check the local bucket's versioning status when replicating deletion from remote
Signed-off-by: Jane Zhu <[email protected]>
1 parent be913b3 commit 7e3d493

File tree

2 files changed

+27
-1
lines changed

2 files changed

+27
-1
lines changed

src/rgw/driver/rados/rgw_cr_rados.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -995,7 +995,7 @@ int RGWAsyncRemoveObj::_send_request(const DoutPrefixProvider *dpp)
995995
del_op->params.unmod_since = timestamp;
996996
}
997997
if (versioned) {
998-
del_op->params.versioning_status = BUCKET_VERSIONED;
998+
del_op->params.versioning_status = BUCKET_VERSIONED | bucket->get_info().versioning_status();
999999
}
10001000

10011001
del_op->params.olh_epoch = versioned_epoch;

src/test/rgw/rgw_multi/tests.py

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1180,6 +1180,32 @@ def test_concurrent_delete_markers_incremental_sync():
11801180

11811181
zonegroup_bucket_checkpoint(zonegroup_conns, bucket.name)
11821182

1183+
def test_suspended_delete_marker_incremental_sync():
1184+
zonegroup = realm.master_zonegroup()
1185+
zonegroup_conns = ZonegroupConns(zonegroup)
1186+
zone = zonegroup_conns.rw_zones[0]
1187+
1188+
# create a versioned bucket
1189+
bucket = zone.create_bucket(gen_bucket_name())
1190+
log.debug('created bucket=%s', bucket.name)
1191+
bucket.configure_versioning(True)
1192+
bucket.configure_versioning(False)
1193+
1194+
zonegroup_meta_checkpoint(zonegroup)
1195+
1196+
obj = 'obj'
1197+
1198+
# upload a dummy object and wait for sync. this forces each zone to finish
1199+
# a full sync and switch to incremental
1200+
new_key(zone, bucket, obj).set_contents_from_string('')
1201+
zonegroup_bucket_checkpoint(zonegroup_conns, bucket.name)
1202+
1203+
# create several a delete marker on source zone and let it sync
1204+
key = new_key(zone, bucket, obj)
1205+
key.delete()
1206+
1207+
zonegroup_bucket_checkpoint(zonegroup_conns, bucket.name)
1208+
11831209
def test_bucket_versioning():
11841210
buckets, zone_bucket = create_bucket_per_zone_in_realm()
11851211
for _, bucket in zone_bucket:

0 commit comments

Comments
 (0)