From: Yehuda Sadeh Date: Thu, 18 Jul 2013 18:16:15 +0000 (-0700) Subject: rgw: forward delete bucket request to master after removal X-Git-Tag: v0.67-rc1~16^2~7 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=85f3f09b0a064f02c09ce7e014bddfe2b6217cbd;p=ceph.git 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 --- 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()