From 90b56a2903db892bcd736d9f9eeca3a8847b353b Mon Sep 17 00:00:00 2001 From: Aleksei Gutikov Date: Tue, 14 Nov 2017 15:45:39 +0300 Subject: [PATCH] rgw: fix radosgw-admin bucket rm with --purge-objects and --bypass-gc Call RGWRados::delete_bucket() from rgw_remove_bucket_bypass_gc() instead of partial copy of code of RGWRados::delete_bucket(). Fix updating user stats after radosgw-admin bucket rm --purge-objects and --bypass-gc Due to rgw_user(const std::string& s) was called incorrect version of rgw_bucket_sync_user_stats(). Fixes: http://tracker.ceph.com/issues/22122 Fixes: http://tracker.ceph.com/issues/19959 Signed-off-by: Aleksei Gutikov (cherry picked from commit db42e385d26ee4d1ef94b900102b705d6a794029) --- src/rgw/rgw_bucket.cc | 18 ++++-------------- 1 file changed, 4 insertions(+), 14 deletions(-) diff --git a/src/rgw/rgw_bucket.cc b/src/rgw/rgw_bucket.cc index 2a38733aa296..904ebc0eab6c 100644 --- a/src/rgw/rgw_bucket.cc +++ b/src/rgw/rgw_bucket.cc @@ -567,7 +567,7 @@ int rgw_remove_bucket(RGWRados *store, rgw_bucket& bucket, bool delete_children) return ret; } - ret = rgw_bucket_sync_user_stats(store, bucket.tenant, info); + ret = rgw_bucket_sync_user_stats(store, info.owner, info); if ( ret < 0) { dout(1) << "WARNING: failed sync user stats before bucket delete. ret=" << ret << dendl; } @@ -728,29 +728,19 @@ int rgw_remove_bucket_bypass_gc(RGWRados *store, rgw_bucket& bucket, return ret; } - ret = rgw_bucket_sync_user_stats(store, bucket.tenant, info); + ret = rgw_bucket_sync_user_stats(store, info.owner, info); if (ret < 0) { dout(1) << "WARNING: failed sync user stats before bucket delete. ret=" << ret << dendl; } RGWObjVersionTracker objv_tracker; - ret = rgw_bucket_delete_bucket_obj(store, bucket.tenant, bucket.name, objv_tracker); + ret = store->delete_bucket(info, objv_tracker); if (ret < 0) { - lderr(store->ctx()) << "ERROR: could not remove bucket " << bucket.name << "with ret as " << ret << dendl; + lderr(store->ctx()) << "ERROR: could not remove bucket " << bucket.name << dendl; return ret; } - if (!store->is_syncing_bucket_meta(bucket)) { - RGWObjVersionTracker objv_tracker; - string entry = bucket.get_key(); - ret = rgw_bucket_instance_remove_entry(store, entry, &objv_tracker); - if (ret < 0) { - lderr(store->ctx()) << "ERROR: could not remove bucket instance entry" << bucket.name << "with ret as " << ret << dendl; - return ret; - } - } - ret = rgw_unlink_bucket(store, info.owner, bucket.tenant, bucket.name, false); if (ret < 0) { lderr(store->ctx()) << "ERROR: unable to remove user bucket information" << dendl; -- 2.47.3