summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYehuda Sadeh <yehuda@inktank.com>2013-07-18 11:16:15 -0700
committerGreg Farnum <greg@inktank.com>2013-07-19 13:21:49 -0700
commit85f3f09b0a064f02c09ce7e014bddfe2b6217cbd (patch)
treee6ba9e8bb90a4e432862bcd2e95e67094cd26959
parent989a4d93d88d5342c8369c7f9c22af66601bfdbf (diff)
downloadceph-85f3f09b0a064f02c09ce7e014bddfe2b6217cbd.tar.gz
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 <yehuda@inktank.com>
-rw-r--r--src/rgw/rgw_op.cc21
1 files changed, 13 insertions, 8 deletions
diff --git a/src/rgw/rgw_op.cc b/src/rgw/rgw_op.cc
index f0c57e78cab..94ce60c4876 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()