]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: forward delete bucket request to master after removal
authorYehuda Sadeh <yehuda@inktank.com>
Thu, 18 Jul 2013 18:16:15 +0000 (11:16 -0700)
committerGreg Farnum <greg@inktank.com>
Fri, 19 Jul 2013 20:21:49 +0000 (13:21 -0700)
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>
src/rgw/rgw_op.cc

index f0c57e78cabe71e0715aec5fe11419ccf617c36f..94ce60c4876e6617ae6654fc7454eba8248fd255 100644 (file)
@@ -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()