From 85f3f09b0a064f02c09ce7e014bddfe2b6217cbd Mon Sep 17 00:00:00 2001 From: Yehuda Sadeh Date: Thu, 18 Jul 2013 11:16:15 -0700 Subject: [PATCH] rgw: forward delete bucket request to master after removal We can only forward the bucket removal to the master if it was successfully removed locally. The master region has no knowledge about whether the bucket can be removed or not, e.g., there are still objects in the bucket. If we send it to the master first, then it'll happily remove it even though it might fail in the end. Signed-off-by: Yehuda Sadeh --- src/rgw/rgw_op.cc | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/src/rgw/rgw_op.cc b/src/rgw/rgw_op.cc index f0c57e78cabe..94ce60c4876e 100644 --- a/src/rgw/rgw_op.cc +++ b/src/rgw/rgw_op.cc @@ -1070,6 +1070,19 @@ void RGWDeleteBucket::execute() if (!s->bucket_name) return; + ret = store->delete_bucket(s->bucket, objv_tracker); + + if (ret == 0) { + ret = rgw_unlink_bucket(store, s->user.user_id, s->bucket.name, false); + if (ret < 0) { + ldout(s->cct, 0) << "WARNING: failed to unlink bucket: ret=" << ret << dendl; + } + } + + if (ret < 0) { + return; + } + if (!store->region.is_master) { bufferlist in_data; JSONParser jp; @@ -1085,14 +1098,6 @@ void RGWDeleteBucket::execute() JSONDecoder::decode_json("object_ver", objv_tracker.read_version, &jp); } - ret = store->delete_bucket(s->bucket, objv_tracker); - - if (ret == 0) { - ret = rgw_unlink_bucket(store, s->user.user_id, s->bucket.name, false); - if (ret < 0) { - ldout(s->cct, 0) << "WARNING: failed to remove bucket: ret=" << ret << dendl; - } - } } int RGWPutObj::verify_permission() -- 2.47.3