]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: bucket entry point contains owner, other fix
authorYehuda Sadeh <yehuda@inktank.com>
Tue, 25 Jun 2013 00:27:34 +0000 (17:27 -0700)
committerYehuda Sadeh <yehuda@inktank.com>
Tue, 25 Jun 2013 00:27:34 +0000 (17:27 -0700)
We now keep the owner at the bucket entry point. Also, reading
bucket info at RGWCreateBucket::execute(), because previous changes
has made it so that we didn't have the required bucket info
initialized there.

Signed-off-by: Yehuda Sadeh <yehuda@inktank.com>
src/rgw/rgw_common.h
src/rgw/rgw_op.cc
src/rgw/rgw_rados.cc

index 847b3f07ec0ca9714a373024d42bc6603324f8ac..179c4fe70c6f195672216611bac1fe05e5abcad4 100644 (file)
@@ -683,6 +683,7 @@ WRITE_CLASS_ENCODER(RGWBucketInfo)
 struct RGWBucketEntryPoint
 {
   rgw_bucket bucket;
+  string owner;
 
   bool has_bucket_info;
   RGWBucketInfo old_bucket_info;
@@ -692,6 +693,7 @@ struct RGWBucketEntryPoint
   void encode(bufferlist& bl) const {
     ENCODE_START(8, 8, bl);
     ::encode(bucket, bl);
+    ::encode(owner, bl);
     ENCODE_FINISH(bl);
   }
   void decode(bufferlist::iterator& bl) {
@@ -705,6 +707,7 @@ struct RGWBucketEntryPoint
     }
     has_bucket_info = false;
     ::decode(bucket, bl);
+    ::decode(owner, bl);
     DECODE_FINISH(bl);
   }
 
index 01a2cfeee22c4b2891412798af74d6fc805b5640..d4eaeccdbebb25f9bfff1079653917382276ce5d 100644 (file)
@@ -182,7 +182,6 @@ static int get_bucket_policy_from_attr(CephContext *cct, RGWRados *store, void *
                                        RGWObjVersionTracker *objv_tracker)
 {
   int ret;
-
   map<string, bufferlist>::iterator aiter = bucket_attrs.find(RGW_ATTR_ACL);
 
   if (aiter != bucket_attrs.end()) {
@@ -951,6 +950,12 @@ void RGWCreateBucket::execute()
     return;
   }
 
+  /* we need to make sure we read bucket info, it's not read before for this specific request */
+  ret = store->get_bucket_info(s->obj_ctx, s->bucket_name_str, s->bucket_info, NULL, &s->bucket_attrs);
+  if (ret < 0 && ret != -ENOENT)
+    return;
+  s->bucket_exists = (ret != -ENOENT);
+
   s->bucket_owner.set_id(s->user.user_id);
   s->bucket_owner.set_name(s->user.display_name);
   if (s->bucket_exists) {
index c8cb53d14337fcdf990c7c524a31db7717e0464b..e5cb6c8ecd47b610401022fc729e7c19f7831d3b 100644 (file)
@@ -1812,9 +1812,9 @@ int RGWRados::create_bucket(RGWUserInfo& owner, rgw_bucket& bucket,
       if (r < 0)
         return r;
 
+      /* we need to reread the info and return it, caller will have a use for it */
       index_ctx.remove(dir_oid);
-      RGWBucketInfo actual_info;
-      r = get_bucket_info(NULL, bucket.name, actual_info, NULL);
+      r = get_bucket_info(NULL, bucket.name, info, NULL, NULL);
       if (r < 0) {
         if (r == -ENOENT) {
           continue;
@@ -1822,6 +1822,7 @@ int RGWRados::create_bucket(RGWUserInfo& owner, rgw_bucket& bucket,
         ldout(cct, 0) << "get_bucket_info returned " << r << dendl;
         return r;
       }
+      /* ret == -ENOENT here */
     }
     return ret;
   }
@@ -4596,6 +4597,7 @@ int RGWRados::put_bucket_info(string& bucket_name, RGWBucketInfo& info, bool exc
 
   RGWBucketEntryPoint entry_point;
   entry_point.bucket = info.bucket;
+  entry_point.owner = info.owner;
   ret = put_bucket_entrypoint_info(info.bucket.name, entry_point, exclusive, mtime); 
   if (exclusive && ret == -EEXIST) {
     string oid;