]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: RGWBulkDelete calls forward_to_master before remove_bucket()
authorCasey Bodley <cbodley@redhat.com>
Tue, 26 Jul 2022 16:29:08 +0000 (12:29 -0400)
committerCasey Bodley <cbodley@redhat.com>
Mon, 6 Nov 2023 16:07:23 +0000 (11:07 -0500)
fix the path of the forwarded request the same way that RGWBulkUpload
does, and call forward_request_to_master() before remove_bucket()

Signed-off-by: Casey Bodley <cbodley@redhat.com>
src/rgw/rgw_op.cc

index 8d2f564b8e34b2a469e7a402c34ecc5337afa355..3241645721354ed81eebcf276256927650984640 100644 (file)
@@ -7322,7 +7322,7 @@ bool RGWBulkDelete::Deleter::delete_single(const acct_path_t& path, optional_yie
     goto auth_fail;
   }
 
-  if (!path.obj_key.empty()) {
+  if (!path.obj_key.empty()) { // object deletion
     ACLOwner bucket_owner;
 
     bucket_owner.set_id(bucket->get_info().owner);
@@ -7338,8 +7338,20 @@ bool RGWBulkDelete::Deleter::delete_single(const acct_path_t& path, optional_yie
     if (ret < 0) {
       goto delop_fail;
     }
-  } else {
-    ret = bucket->remove_bucket(dpp, false, true, &s->info, s->yield);
+  } else { // bucket deletion
+    if (!driver->is_meta_master()) {
+      // apply bucket deletion on the master zone first
+      req_info req = s->info;
+      forward_req_info(dpp, s->cct, req, path.bucket_name);
+
+      bufferlist data;
+      ret = driver->forward_request_to_master(dpp, s->user.get(), nullptr,
+                                              data, nullptr, req, y);
+      if (ret < 0) {
+        goto delop_fail;
+      }
+    }
+    ret = bucket->remove_bucket(dpp, false, false, nullptr, s->yield);
     if (ret < 0) {
       goto delop_fail;
     }