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; }
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);
return ret;
}
- bufferlist::iterator iter = bl.begin();
- ::decode(header, iter);
- ::decode(m, iter);
-
if (!m.size()) {
return generate_pool(bucket_name, bucket);
}
goto done_err;
bl.clear();
- map<string, bufferlist> meta_attrs;
RGWUploadPartInfo info;
string p = "part.";
p.append(part_num);
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:
}
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);
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;
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;
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;
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;
}
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);