]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: recover from partial bucket creates
authorSage Weil <sage.weil@dreamhost.com>
Thu, 31 Mar 2011 18:39:35 +0000 (11:39 -0700)
committerSage Weil <sage.weil@dreamhost.com>
Thu, 31 Mar 2011 18:39:35 +0000 (11:39 -0700)
Signed-off-by: Sage Weil <sage.weil@dreamhost.com>
src/rgw/rgw_op.cc

index a24a6a8b4f877914178890f6c4ffb027135eb8d4..8a1fa2eaed81928ee9c253ba476a4fa0c6f40b71 100644 (file)
@@ -314,12 +314,14 @@ void RGWCreateBucket::execute()
   attrs[RGW_ATTR_ACL] = aclbl;
 
   ret = rgw_add_bucket(s->user.user_id, s->bucket_str);
-  if (ret)
+  /* continue if EEXIST and create_bucket will fail below.  this way we can recover
+   * from a partial create by retrying it. */
+  if (ret && ret != -EEXIST)   
     goto done;
 
   ret = rgwstore->create_bucket(s->user.user_id, s->bucket_str, attrs,
                                s->user.auid);
-  if (ret)
+  if (ret && ret != -EEXIST)   /* if it exists, don't remove it! */
     rgw_remove_bucket(s->user.user_id, s->bucket_str);
 
 done: