summaryrefslogtreecommitdiff
path: root/src/rgw
diff options
context:
space:
mode:
authorYehuda Sadeh <yehuda@hq.newdream.net>2011-09-01 13:37:17 -0700
committerYehuda Sadeh <yehuda@hq.newdream.net>2011-09-01 13:38:19 -0700
commit2aad7c2028e1085e0a49dacc6191913db4006a5d (patch)
tree5ddadbd022afc3b62271b6b09c019f3b800942f6 /src/rgw
parente09d4a96025f58f370f30b0aa61d88b2173074e4 (diff)
downloadceph-2aad7c2028e1085e0a49dacc6191913db4006a5d.tar.gz
rgw: multipart meta object uses tmap
Diffstat (limited to 'src/rgw')
-rw-r--r--src/rgw/rgw_access.h2
-rw-r--r--src/rgw/rgw_bucket.cc7
-rw-r--r--src/rgw/rgw_op.cc25
-rw-r--r--src/rgw/rgw_rados.cc11
-rw-r--r--src/rgw/rgw_rados.h2
5 files changed, 24 insertions, 23 deletions
diff --git a/src/rgw/rgw_access.h b/src/rgw/rgw_access.h
index 63e199df168..9a7a19623a7 100644
--- a/src/rgw/rgw_access.h
+++ b/src/rgw/rgw_access.h
@@ -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; }
diff --git a/src/rgw/rgw_bucket.cc b/src/rgw/rgw_bucket.cc
index a1c440fee3b..c8ceccde9b0 100644
--- a/src/rgw/rgw_bucket.cc
+++ b/src/rgw/rgw_bucket.cc
@@ -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);
}
diff --git a/src/rgw/rgw_op.cc b/src/rgw/rgw_op.cc
index b357fb2683a..2de13f89fd8 100644
--- a/src/rgw/rgw_op.cc
+++ b/src/rgw/rgw_op.cc
@@ -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);
@@ -1206,20 +1203,22 @@ static int get_multiparts_info(struct req_state *s, string& meta_oid, map<uint32
if (ret < 0)
return ret;
+ ret = rgwstore->tmap_get(obj, header, parts_map);
+ if (ret < 0)
+ return ret;
+
for (iter = attrs.begin(); iter != attrs.end(); ++iter) {
string name = iter->first;
if (name.compare(RGW_ATTR_ACL) == 0) {
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;
diff --git a/src/rgw/rgw_rados.cc b/src/rgw/rgw_rados.cc
index f9bc8e6c5a2..ddc59b7e172 100644
--- a/src/rgw/rgw_rados.cc
+++ b/src/rgw/rgw_rados.cc
@@ -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;
}
diff --git a/src/rgw/rgw_rados.h b/src/rgw/rgw_rados.h
index a78ff5a5d9a..2cbaaa70340 100644
--- a/src/rgw/rgw_rados.h
+++ b/src/rgw/rgw_rados.h
@@ -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);