]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: remove rgw_create_bucket.
authorGreg Farnum <gregory.farnum@dreamhost.com>
Tue, 4 Oct 2011 17:52:22 +0000 (10:52 -0700)
committerGreg Farnum <gregory.farnum@dreamhost.com>
Wed, 5 Oct 2011 16:25:55 +0000 (09:25 -0700)
Push all its extra functionality down into RGWRados::create_bucket. Convert
callers to the different interface (there's no reason to pass in the
bucket name apart from the bucket, and all callers know if they're
using a system bucket or not).

Signed-off-by: Greg Farnum <gregory.farnum@dreamhost.com>
src/rgw/rgw_bucket.cc
src/rgw/rgw_log.cc
src/rgw/rgw_op.cc
src/rgw/rgw_rados.cc
src/rgw/rgw_tools.cc

index 2dd069e7c22522b79e1db954a1661053a1e354ee..03a8bd0357f1d7305a68fa0667149f484a53d556 100644 (file)
@@ -68,35 +68,3 @@ int rgw_get_bucket_info_id(uint64_t bucket_id, RGWBucketInfo& info)
 
   return rgw_get_bucket_info(bucket_string, info);
 }
-
-int rgw_create_bucket(std::string& id, string& bucket_name, rgw_bucket& bucket,
-                      map<std::string, bufferlist>& attrs, bool exclusive, uint64_t auid)
-{
-  /* system bucket name? */
-  if (bucket_name[0] == '.') {
-    bucket.name = bucket_name;
-    bucket.pool = bucket_name;
-    return rgwstore->create_bucket(id, bucket, attrs, true, exclusive, auid);
-  }
-
-  int ret = rgwstore->select_bucket_placement(bucket_name, bucket);
-  if (ret < 0)
-     return ret;
-
-  ret = rgwstore->create_bucket(id, bucket, attrs, false, exclusive, auid);
-
-  if (ret < 0)
-    return ret;
-
-  RGWBucketInfo info;
-  info.bucket = bucket;
-  info.owner = id;
-  ret = rgw_store_bucket_info(info);
-  if (ret < 0) {
-    RGW_LOG(0) << "failed to store bucket info, removing bucket" << dendl;
-    rgwstore->delete_bucket(id, bucket, true);
-    return ret;
-  }
-
-  return 0; 
-}
index 8702733f2e0efe8aeabf04606e49249554a8c6fd..be03794ef3c3f7ad66ec358b6a0a9a12f28d4e84 100644 (file)
@@ -93,7 +93,7 @@ int rgw_log_op(struct req_state *s)
   if (ret == -ENOENT) {
     string id;
     map<std::string, bufferlist> attrs;
-    ret = rgw_create_bucket(id, log_bucket.name, log_bucket, attrs);
+    ret = rgwstore->create_bucket(id, log_bucket, attrs, true);
     if (ret < 0)
       goto done;
     // retry
@@ -132,7 +132,7 @@ int rgw_log_intent(struct req_state *s, rgw_obj& obj, RGWIntentEvent intent)
   if (ret == -ENOENT) {
     string id;
     map<std::string, bufferlist> attrs;
-    ret = rgw_create_bucket(id, intent_log_bucket.name, intent_log_bucket, attrs);
+    ret = rgwstore->create_bucket(id, intent_log_bucket, attrs, true);
     if (ret < 0)
       goto done;
     ret = rgwstore->append_async(log_obj, bl.length(), bl);
index ea50048eee962da5e6cab5c9ba63390f23c933e1..0edd2fc389c46a7b3782b312ef2a65658bc12201 100644 (file)
@@ -466,12 +466,9 @@ void RGWCreateBucket::execute()
 
   attrs[RGW_ATTR_ACL] = aclbl;
 
-  ret = rgwstore->select_bucket_placement(s->bucket_name_str, s->bucket);
-  if (ret < 0)
-    goto done;
-
-  ret = rgw_create_bucket(s->user.user_id, s->bucket_name_str, s->bucket, attrs, true,
-                         s->user.auid);
+  s->bucket.name = s->bucket_name_str;
+  ret = rgwstore->create_bucket(s->user.user_id, s->bucket, attrs, false,
+                                true, s->user.auid);
   /* continue if EEXIST and create_bucket will fail below.  this way we can recover
    * from a partial create by retrying it. */
   RGW_LOG(0) << "rgw_create_bucket returned ret=" << ret << " bucket=" << s->bucket << dendl;
index 2cc41bc0e31718cbda1f44f46f293d124a974f02..8daf13b35b37346fc5089d071b302741683dd8c4 100644 (file)
@@ -335,9 +335,15 @@ int RGWRados::create_bucket(std::string& id, rgw_bucket& bucket,
     ret = rados->pool_create(bucket.pool.c_str(), auid);
     if (ret == -EEXIST)
       ret = 0;
-    if (ret < 0)
+    if (ret < 0) {
       root_pool_ctx.remove(bucket.name.c_str());
+    } else {
+      bucket.pool = bucket.name;
+    }
   } else {
+    ret = select_bucket_placement(bucket.name, bucket);
+    if (ret < 0)
+      return ret;
     librados::IoCtx io_ctx; // context for new bucket
 
     int r = open_bucket_ctx(bucket, io_ctx);
@@ -375,6 +381,16 @@ int RGWRados::create_bucket(std::string& id, rgw_bucket& bucket,
       r = cls_rgw_init_index(bucket, dir_oid);
       if (r < 0)
         return r;
+
+      RGWBucketInfo info;
+      info.bucket = bucket;
+      info.owner = id;
+      ret = rgw_store_bucket_info(info);
+      if (ret < 0) {
+        RGW_LOG(0) << "failed to store bucket info, removing bucket" << dendl;
+        delete_bucket(id, bucket, true);
+        return ret;
+      }
     }
   }
 
index 639c0a9bf1ec5f7dd84f4c0d3362e19008c925e2..5092a36957c24dd744e1154a29b707f0bc3a3b3e 100644 (file)
@@ -20,7 +20,7 @@ int rgw_put_obj(string& uid, rgw_bucket& bucket, string& oid, const char *data,
   int ret = rgwstore->put_obj(NULL, uid, obj, data, size, NULL, attrs);
 
   if (ret == -ENOENT) {
-    ret = rgw_create_bucket(uid, bucket.name, bucket, attrs);
+    ret = rgwstore->create_bucket(uid, bucket, attrs, true); //all callers are using system buckets
     if (ret >= 0)
       ret = rgwstore->put_obj(NULL, uid, obj, data, size, NULL, attrs);
   }