]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw/multisite: check the local bucket's versioning status when replicating deletion... 66168/head
authorJane Zhu <jzhu116@bloomberg.net>
Tue, 14 Oct 2025 21:57:08 +0000 (21:57 +0000)
committerJane Zhu <jzhu116@bloomberg.net>
Fri, 7 Nov 2025 16:31:52 +0000 (16:31 +0000)
Signed-off-by: Jane Zhu <jzhu116@bloomberg.net>
(cherry picked from commit 7e3d493dc3240fc7c8b2976e0de09cf2ecaebd99)

src/rgw/driver/rados/rgw_cr_rados.cc
src/test/rgw/rgw_multi/tests.py

index 69465ccd9b7a37bdede79a4701a62b764ff903e6..89ae78b8cf41055f213b37fa801ef1874d8fb1bc 100644 (file)
@@ -995,7 +995,7 @@ int RGWAsyncRemoveObj::_send_request(const DoutPrefixProvider *dpp)
     del_op->params.unmod_since = timestamp;
   }
   if (versioned) {
-    del_op->params.versioning_status = BUCKET_VERSIONED;
+    del_op->params.versioning_status = BUCKET_VERSIONED | bucket->get_info().versioning_status();
   }
 
   del_op->params.olh_epoch = versioned_epoch;
index b90e925e0b957d8856bb6f32fd2cfa956c9e6901..050dc8d54f2b4381bace07405abe96c28682681d 100644 (file)
@@ -1171,6 +1171,32 @@ def test_concurrent_delete_markers_incremental_sync():
 
     zonegroup_bucket_checkpoint(zonegroup_conns, bucket.name)
 
+def test_suspended_delete_marker_incremental_sync():
+    zonegroup = realm.master_zonegroup()
+    zonegroup_conns = ZonegroupConns(zonegroup)
+    zone = zonegroup_conns.rw_zones[0]
+
+    # create a versioned bucket
+    bucket = zone.create_bucket(gen_bucket_name())
+    log.debug('created bucket=%s', bucket.name)
+    bucket.configure_versioning(True)
+    bucket.configure_versioning(False)
+
+    zonegroup_meta_checkpoint(zonegroup)
+
+    obj = 'obj'
+
+    # upload a dummy object and wait for sync. this forces each zone to finish
+    # a full sync and switch to incremental
+    new_key(zone, bucket, obj).set_contents_from_string('')
+    zonegroup_bucket_checkpoint(zonegroup_conns, bucket.name)
+
+    # create several a delete marker on source zone and let it sync
+    key = new_key(zone, bucket, obj)
+    key.delete()
+
+    zonegroup_bucket_checkpoint(zonegroup_conns, bucket.name)
+
 def test_bucket_versioning():
     buckets, zone_bucket = create_bucket_per_zone_in_realm()
     for _, bucket in zone_bucket: