]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
Zipper - Remove duplicate remove_bucket() code
authorDaniel Gryniewicz <dang@redhat.com>
Tue, 28 Jul 2020 18:22:51 +0000 (14:22 -0400)
committerDaniel Gryniewicz <dang@redhat.com>
Mon, 17 Aug 2020 16:30:58 +0000 (12:30 -0400)
Signed-off-by: Daniel Gryniewicz <dang@redhat.com>
src/rgw/rgw_bucket.cc
src/rgw/rgw_bucket.h
src/rgw/rgw_rest_bucket.cc

index 1d59d1e3f4fef3ef36e19105a6622ced65907ac9..a59b2039382e86bcfc8156554c8461c6ac64ea34 100644 (file)
@@ -334,86 +334,6 @@ int rgw_remove_object(rgw::sal::RGWRadosStore *store, const RGWBucketInfo& bucke
   return store->getRados()->delete_obj(rctx, bucket_info, obj, bucket_info.versioning_status());
 }
 
-/* xxx dang */
-static int rgw_remove_bucket(rgw::sal::RGWRadosStore *store, rgw_bucket& bucket, bool delete_children, optional_yield y)
-{
-  int ret;
-  map<RGWObjCategory, RGWStorageStats> stats;
-  std::vector<rgw_bucket_dir_entry> objs;
-  map<string, bool> common_prefixes;
-  RGWBucketInfo info;
-
-  string bucket_ver, master_ver;
-
-  ret = store->getRados()->get_bucket_info(store->svc(), bucket.tenant, bucket.name, info, NULL, null_yield);
-  if (ret < 0)
-    return ret;
-
-  ret = store->getRados()->get_bucket_stats(info, RGW_NO_SHARD, &bucket_ver, &master_ver, stats, NULL);
-  if (ret < 0)
-    return ret;
-
-  RGWRados::Bucket target(store->getRados(), info);
-  RGWRados::Bucket::List list_op(&target);
-  CephContext *cct = store->ctx();
-
-  list_op.params.list_versions = true;
-  list_op.params.allow_unordered = true;
-
-  bool is_truncated = false;
-  do {
-    objs.clear();
-
-    ret = list_op.list_objects(listing_max_entries, &objs, &common_prefixes,
-                              &is_truncated, null_yield);
-    if (ret < 0)
-      return ret;
-
-    if (!objs.empty() && !delete_children) {
-      lderr(store->ctx()) << "ERROR: could not remove non-empty bucket " << bucket.name << dendl;
-      return -ENOTEMPTY;
-    }
-
-    for (const auto& obj : objs) {
-      rgw_obj_key key(obj.key);
-      ret = rgw_remove_object(store, info, bucket, key);
-      if (ret < 0 && ret != -ENOENT) {
-        return ret;
-      }
-    }
-  } while(is_truncated);
-
-  string prefix, delimiter;
-
-  ret = abort_bucket_multiparts(store, cct, info, prefix, delimiter);
-  if (ret < 0) {
-    return ret;
-  }
-
-  ret = store->ctl()->bucket->sync_user_stats(info.owner, info);
-  if ( ret < 0) {
-     dout(1) << "WARNING: failed sync user stats before bucket delete. ret=" <<  ret << dendl;
-  }
-
-  RGWObjVersionTracker objv_tracker;
-
-  // if we deleted children above we will force delete, as any that
-  // remain is detrius from a prior bug
-  ret = store->getRados()->delete_bucket(info, objv_tracker, null_yield, !delete_children);
-  if (ret < 0) {
-    lderr(store->ctx()) << "ERROR: could not remove bucket " <<
-      bucket.name << dendl;
-    return ret;
-  }
-
-  ret = store->ctl()->bucket->unlink_bucket(info.owner, bucket, null_yield, false);
-  if (ret < 0) {
-    lderr(store->ctx()) << "ERROR: unable to remove user bucket information" << dendl;
-  }
-
-  return ret;
-}
-
 static int aio_wait(librados::AioCompletion *handle)
 {
   librados::AioCompletion *c = (librados::AioCompletion *)handle;
@@ -851,32 +771,6 @@ int RGWBucket::set_quota(RGWBucketAdminOpState& op_state, std::string *err_msg)
   return r;
 }
 
-int RGWBucket::remove(RGWBucketAdminOpState& op_state, optional_yield y, bool bypass_gc,
-                      bool keep_index_consistent, std::string *err_msg)
-{
-  bool delete_children = op_state.will_delete_children();
-  rgw_bucket bucket = op_state.get_bucket();
-  int ret;
-
-  if (bypass_gc) {
-    if (delete_children) {
-      ret = rgw_remove_bucket_bypass_gc(store, bucket, op_state.get_max_aio(), keep_index_consistent, y);
-    } else {
-      set_err_msg(err_msg, "purge objects should be set for gc to be bypassed");
-      return -EINVAL;
-    }
-  } else {
-    ret = rgw_remove_bucket(store, bucket, delete_children, y);
-  }
-
-  if (ret < 0) {
-    set_err_msg(err_msg, "unable to remove bucket" + cpp_strerror(-ret));
-    return ret;
-  }
-
-  return 0;
-}
-
 int RGWBucket::remove_object(RGWBucketAdminOpState& op_state, std::string *err_msg)
 {
   rgw_bucket bucket = op_state.get_bucket();
@@ -1361,19 +1255,22 @@ int RGWBucketAdminOp::check_index(rgw::sal::RGWRadosStore *store, RGWBucketAdmin
 }
 
 int RGWBucketAdminOp::remove_bucket(rgw::sal::RGWRadosStore *store, RGWBucketAdminOpState& op_state,
-                                    optional_yield y, bool bypass_gc, bool keep_index_consistent)
+                                   optional_yield y, bool bypass_gc, bool keep_index_consistent)
 {
-  RGWBucket bucket;
+  std::unique_ptr<rgw::sal::RGWBucket> bucket;
+  std::unique_ptr<rgw::sal::RGWUser> user = store->get_user(op_state.get_user_id());
 
-  int ret = bucket.init(store, op_state, y);
+  int ret = store->get_bucket(user.get(), user->get_tenant(), op_state.get_bucket_name(),
+                             &bucket);
   if (ret < 0)
     return ret;
 
-  std::string err_msg;
-  ret = bucket.remove(op_state, y, bypass_gc, keep_index_consistent, &err_msg);
-  if (!err_msg.empty()) {
-    lderr(store->ctx()) << "ERROR: " << err_msg << dendl;
-  }
+  if (bypass_gc)
+    ret = rgw_remove_bucket_bypass_gc(store, bucket->get_key(), op_state.get_max_aio(), keep_index_consistent, y);
+  else
+    ret = bucket->remove_bucket(op_state.will_delete_children(), string(), string(),
+                               false, nullptr, y);
+
   return ret;
 }
 
index 797a46cdb171b3e3cdf37ef1a07d638522acdaa5..76e4369fd5edf07606cdb6d18a43d3ad58891515 100644 (file)
@@ -353,7 +353,6 @@ public:
           map<RGWObjCategory, RGWStorageStats>& calculated_stats,
           std::string *err_msg = NULL);
 
-  int remove(RGWBucketAdminOpState& op_state, optional_yield y, bool bypass_gc = false, bool keep_index_consistent = true, std::string *err_msg = NULL);
   int link(RGWBucketAdminOpState& op_state, optional_yield y,
            map<string, bufferlist>& attrs, std::string *err_msg = NULL);
   int chown(RGWBucketAdminOpState& op_state, const string& marker,
index 2cd1f980a4f8d618502fef4a8aad1c5f204f105b..06b793c814b7464f19862f14c8d8840ce9a22bed 100644 (file)
@@ -211,24 +211,25 @@ public:
 
 void RGWOp_Bucket_Remove::execute()
 {
-  std::string bucket;
+  std::string bucket_name;
   bool delete_children;
+  std::unique_ptr<rgw::sal::RGWBucket> bucket;
 
-  RGWBucketAdminOpState op_state;
-
-  RESTArgs::get_string(s, "bucket", bucket, &bucket);
+  RESTArgs::get_string(s, "bucket", bucket_name, &bucket_name);
   RESTArgs::get_bool(s, "purge-objects", false, &delete_children);
 
-  op_state.set_bucket_name(bucket);
-  op_state.set_delete_children(delete_children);
+  op_ret = store->get_bucket(nullptr, string(), bucket_name, &bucket);
+  if (op_ret < 0) {
+    ldpp_dout(this, 0) << "get_bucket returned ret=" << op_ret << dendl;
+    return;
+  }
 
-  bufferlist data;
-  op_ret = store->forward_request_to_master(s->user, nullptr, data, nullptr, s->info);
+  op_ret = bucket->remove_bucket(delete_children, string(), string(), true, &s->info, s->yield);
   if (op_ret < 0) {
-    ldpp_dout(this, 0) << "forward_request_to_master returned ret=" << op_ret << dendl;
+    ldpp_dout(this, 0) << "remove_bucket returned ret=" << op_ret << dendl;
     return;
   }
-  http_ret = RGWBucketAdminOp::remove_bucket(store, op_state, s->yield);
+  http_ret = op_ret;
 }
 
 class RGWOp_Set_Bucket_Quota : public RGWRESTOp {