]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: multipart meta object uses tmap
authorYehuda Sadeh <yehuda@hq.newdream.net>
Thu, 1 Sep 2011 20:37:17 +0000 (13:37 -0700)
committerYehuda Sadeh <yehuda@hq.newdream.net>
Thu, 1 Sep 2011 20:38:19 +0000 (13:38 -0700)
src/rgw/rgw_access.h
src/rgw/rgw_bucket.cc
src/rgw/rgw_op.cc
src/rgw/rgw_rados.cc
src/rgw/rgw_rados.h

index 63e199df168a70a23a2f357c79841edbdcdd7ef9..9a7a19623a77005c0fee17925b82b74dee9a2d4b 100644 (file)
@@ -232,7 +232,7 @@ public:
 
   virtual bool supports_tmap() { return false; }
 
-  virtual int tmap_get(rgw_obj& obj, bufferlist& bl) { return -ENOTSUP; }
+  virtual int tmap_get(rgw_obj& obj, bufferlist& header, std::map<string, bufferlist>& m) { return -ENOTSUP; }
   virtual int tmap_set(rgw_obj& obj, std::string& key, bufferlist& bl) { return -ENOTSUP; }
   virtual int tmap_set(rgw_obj& obj, map<std::string, bufferlist>& m) { return -ENOTSUP; }
   virtual int tmap_create(rgw_obj& obj, std::string& key, bufferlist& bl) { return -ENOTSUP; }
index a1c440fee3b902f0230aa1908ffa045745bffa88..c8ceccde9b07261a12614223cc2ace298705ee3b 100644 (file)
@@ -145,13 +145,12 @@ static int withdraw_pool(string& pool_name)
 
 int rgw_bucket_allocate_pool(string& bucket_name, rgw_bucket& bucket)
 {
-  bufferlist bl;
   bufferlist header;
   map<string, bufferlist> m;
   string pool_name;
 
   rgw_obj obj(pi_buckets, avail_pools);
-  int ret = rgwstore->tmap_get(obj, bl);
+  int ret = rgwstore->tmap_get(obj, header, m);
   if (ret < 0) {
     if (ret == -ENOENT) {
       return generate_pool(bucket_name, bucket);
@@ -159,10 +158,6 @@ int rgw_bucket_allocate_pool(string& bucket_name, rgw_bucket& bucket)
     return ret;
   }
 
-  bufferlist::iterator iter = bl.begin();
-  ::decode(header, iter);
-  ::decode(m, iter);
-
   if (!m.size()) {
     return generate_pool(bucket_name, bucket);
   }
index b357fb2683ae7e7936487f9c1205904b1221f91c..2de13f89fd880377e90e3901bfe31726d72d4d95 100644 (file)
@@ -749,7 +749,6 @@ void RGWPutObj::execute()
         goto done_err;
 
       bl.clear();
-      map<string, bufferlist> meta_attrs;
       RGWUploadPartInfo info;
       string p = "part.";
       p.append(part_num);
@@ -758,13 +757,10 @@ void RGWPutObj::execute()
       info.size = s->obj_size;
       info.modified = ceph_clock_now(g_ceph_context);
       ::encode(info, bl);
-      meta_attrs[p] = bl;
 
       rgw_obj meta_obj(s->bucket, multipart_meta_obj, s->object_str, mp_ns);
 
-      // we don't set a category, since by now a category should have already been assigned
-      string nocategory;
-      ret = rgwstore->put_obj_meta(s->obj_ctx, s->user.user_id, meta_obj, NULL, meta_attrs, nocategory, false);
+      ret = rgwstore->tmap_set(meta_obj, p, bl);
     }
   }
 done:
@@ -1191,11 +1187,12 @@ done:
 }
 
 static int get_multiparts_info(struct req_state *s, string& meta_oid, map<uint32_t, RGWUploadPartInfo>& parts,
-                               RGWAccessControlPolicy& policy, map<string, bufferlist>& new_attrs)
+                               RGWAccessControlPolicy& policy, map<string, bufferlist>& attrs)
 {
   void *handle;
-  map<string, bufferlist> attrs;
+  map<string, bufferlist> parts_map;
   map<string, bufferlist>::iterator iter;
+  bufferlist header;
 
   rgw_obj obj(s->bucket, meta_oid, s->object_str, mp_ns);
 
@@ -1203,6 +1200,10 @@ static int get_multiparts_info(struct req_state *s, string& meta_oid, map<uint32
                                       NULL, NULL, NULL, NULL, NULL, NULL, &handle, &s->err);
   rgwstore->finish_get_obj(&handle);
 
+  if (ret < 0)
+    return ret;
+
+  ret = rgwstore->tmap_get(obj, header, parts_map);
   if (ret < 0)
     return ret;
 
@@ -1212,14 +1213,12 @@ static int get_multiparts_info(struct req_state *s, string& meta_oid, map<uint32
       bufferlist& bl = iter->second;
       bufferlist::iterator bli = bl.begin();
       ::decode(policy, bli);
-      new_attrs[RGW_ATTR_ACL] = bl;
-      continue;
-    }
-    if (name.compare(0, 5, "part.") != 0) {
-      new_attrs[iter->first] = iter->second;
-      continue;
+      break;
     }
+  }
+
 
+  for (iter = parts_map.begin(); iter != parts_map.end(); ++iter) {
     bufferlist& bl = iter->second;
     bufferlist::iterator bli = bl.begin();
     RGWUploadPartInfo info;
index f9bc8e6c5a2895fbfa18c15942acb5eb74b22576..ddc59b7e1720ce6429d758f90ef2eb01185590bd 100644 (file)
@@ -1473,8 +1473,9 @@ int RGWRados::get_bucket_stats(rgw_bucket& bucket, map<string, RGWBucketStats>&
   return 0;
 }
 
-int RGWRados::tmap_get(rgw_obj& obj, bufferlist& bl)
+int RGWRados::tmap_get(rgw_obj& obj, bufferlist& header, std::map<string, bufferlist>& m)
 {
+  bufferlist bl;
   librados::IoCtx io_ctx;
   rgw_bucket& bucket = obj.bucket;
   std::string& oid = obj.object;
@@ -1485,8 +1486,14 @@ int RGWRados::tmap_get(rgw_obj& obj, bufferlist& bl)
   io_ctx.locator_set_key(obj.key);
 
   r = io_ctx.tmap_get(oid, bl);
+  if (r < 0)
+    return r;
 
-  return r;
+  bufferlist::iterator iter = bl.begin();
+  ::decode(header, iter);
+  ::decode(m, iter);
+
+  return 0;
  
 }
 
index a78ff5a5d9af754473356a4ef95088033dff09f9..2cbaaa703407df362f3d50acb31d38a804ac520d 100644 (file)
@@ -228,7 +228,7 @@ public:
   virtual int get_bucket_id(rgw_bucket& bucket, uint64_t *bucket_id);
 
   virtual bool supports_tmap() { return true; }
-  virtual int tmap_get(rgw_obj& obj, bufferlist& bl);
+  virtual int tmap_get(rgw_obj& obj, bufferlist& header, std::map<string, bufferlist>& m);
   virtual int tmap_set(rgw_obj& obj, std::string& key, bufferlist& bl);
   virtual int tmap_set(rgw_obj& obj, map<std::string, bufferlist>& m);
   virtual int tmap_create(rgw_obj& obj, std::string& key, bufferlist& bl);