]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: read / write bucket attributes from bucket instance
authorYehuda Sadeh <yehuda@inktank.com>
Fri, 26 Jul 2013 23:35:24 +0000 (16:35 -0700)
committerGreg Farnum <greg@inktank.com>
Mon, 29 Jul 2013 22:06:56 +0000 (15:06 -0700)
and not from bucket entry point.

Fixes: #5770
Signed-off-by: Yehuda Sadeh <yehuda@inktank.com>
Reviewed-by: Greg Farnum <greg@inktank.com>
src/rgw/rgw_op.cc
src/rgw/rgw_rados.cc
src/rgw/rgw_rados.h

index 7760a2f5c5270651fdece380df97279b5c4090fa..e672de154ab698837a79f2bf5bcdbfb78ac12cdd 100644 (file)
@@ -241,8 +241,10 @@ static int get_policy_from_attr(CephContext *cct, RGWRados *store, void *ctx,
   }
 
   if (obj.object.empty()) {
+    rgw_obj instance_obj;
+    store->get_bucket_instance_obj(bucket_info.bucket, instance_obj);
     return get_bucket_policy_from_attr(cct, store, ctx, bucket_info, bucket_attrs,
-                                       policy, obj);
+                                       policy, instance_obj);
   }
   return get_obj_policy_from_attr(cct, store, ctx, bucket_info, bucket_attrs,
                                   policy, obj);
@@ -1898,9 +1900,8 @@ void RGWPutCORS::execute()
 
   RGWObjVersionTracker *ptracker = (s->object ? NULL : &s->bucket_info.objv_tracker);
 
-  string no_obj;
   cors_config->encode(bl);
-  obj.init(s->bucket, no_obj);
+  store->get_bucket_instance_obj(s->bucket, obj);
   store->set_atomic(s->obj_ctx, obj);
   ret = store->set_attr(s->obj_ctx, obj, RGW_ATTR_CORS, bl, ptracker);
 }
@@ -1917,13 +1918,12 @@ void RGWDeleteCORS::execute()
 {
   bufferlist bl;
   rgw_obj obj;
-  string no_obj;
   if (!s->bucket_cors) {
     dout(2) << "No CORS configuration set yet for this bucket" << dendl;
     ret = -ENOENT;
     return;
   }
-  obj.init(s->bucket, no_obj);
+  store->get_bucket_instance_obj(s->bucket, obj);
   store->set_atomic(s->obj_ctx, obj);
   map<string, bufferlist> orig_attrs, attrs, rmattrs;
   map<string, bufferlist>::iterator iter;
@@ -2516,10 +2516,10 @@ int RGWHandler::read_cors_config(void)
   bufferlist bl;
  
   dout(10) << "Going to read cors from attrs" << dendl;
-  string no_object;
-  rgw_obj no_obj(s->bucket, no_object);
-  if (no_obj.bucket.name.size()) {
-    ret = store->get_attr(s->obj_ctx, no_obj, RGW_ATTR_CORS, bl);
+  rgw_obj obj;
+  store->get_bucket_instance_obj(s->bucket, obj);
+  if (obj.bucket.name.size()) {
+    ret = store->get_attr(s->obj_ctx, obj, RGW_ATTR_CORS, bl);
     if (ret >= 0) {
       bufferlist::iterator iter = bl.begin();
       s->bucket_cors = new RGWCORSConfiguration();
index 8af03b03a8fd08448c602cb935962660928a92f3..22c93f33ad58d579a7cddbdd5013f26b6dd3227b 100644 (file)
@@ -4546,6 +4546,13 @@ void RGWRados::get_bucket_meta_oid(rgw_bucket& bucket, string& oid)
   oid = RGW_BUCKET_INSTANCE_MD_PREFIX + entry;
 }
 
+void RGWRados::get_bucket_instance_obj(rgw_bucket& bucket, rgw_obj& obj)
+{
+  string oid;
+  get_bucket_meta_oid(bucket, oid);
+  obj.init(zone.domain_root, oid);
+}
+
 int RGWRados::get_bucket_instance_info(void *ctx, const string& meta_key, RGWBucketInfo& info,
                                        time_t *pmtime, map<string, bufferlist> *pattrs)
 {
index bcc409002994f225ab5ac3ea19d5a0538aa8f627..099a7112514d39ec4839fe5116538ad4faccc4ed 100644 (file)
@@ -1285,6 +1285,7 @@ public:
   int decode_policy(bufferlist& bl, ACLOwner *owner);
   int get_bucket_stats(rgw_bucket& bucket, uint64_t *bucket_ver, uint64_t *master_ver, map<RGWObjCategory, RGWBucketStats>& stats,
                        string *max_marker);
+  void get_bucket_instance_obj(rgw_bucket& bucket, rgw_obj& obj);
   void get_bucket_instance_entry(rgw_bucket& bucket, string& entry);
   void get_bucket_meta_oid(rgw_bucket& bucket, string& oid);