From a635a9cbb83e46f8f270278a26c9428cafbeb70b Mon Sep 17 00:00:00 2001 From: Yehuda Sadeh Date: Fri, 3 Jun 2011 15:13:37 -0700 Subject: [PATCH] rgw: multipart complete upload --- src/rgw/rgw_op.cc | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/src/rgw/rgw_op.cc b/src/rgw/rgw_op.cc index 804d0ee0c4ad6..754762f30e707 100644 --- a/src/rgw/rgw_op.cc +++ b/src/rgw/rgw_op.cc @@ -874,7 +874,7 @@ done: } static int get_multiparts_info(struct req_state *s, string& obj, map& parts, - RGWAccessControlPolicy& policy) + RGWAccessControlPolicy& policy, map& new_attrs) { void *handle; map attrs; @@ -893,10 +893,13 @@ static int get_multiparts_info(struct req_state *s, string& obj, mapsecond; bufferlist::iterator bli = bl.begin(); ::decode(policy, bli); + new_attrs[RGW_ATTR_ACL] = bl; continue; } - if (name.compare(0, 5, "part.") != 0) + if (name.compare(0, 5, "part.") != 0) { + new_attrs[iter->first] = iter->second; continue; + } bufferlist& bl = iter->second; bufferlist::iterator bli = bl.begin(); @@ -916,6 +919,7 @@ void RGWCompleteMultipart::execute() map obj_parts; map::iterator obj_iter; RGWAccessControlPolicy policy; + map attrs; off_t ofs = 0; string prefix; @@ -945,10 +949,11 @@ void RGWCompleteMultipart::execute() } obj.append("."); - prefix = obj; obj.append(upload_id); + prefix = obj; + prefix.append("."); - ret = get_multiparts_info(s, obj, obj_parts, policy); + ret = get_multiparts_info(s, obj, obj_parts, policy, attrs); if (ret == -ENOENT) ret = -ERR_NO_SUCH_UPLOAD; if (ret < 0) @@ -969,12 +974,17 @@ void RGWCompleteMultipart::execute() } } + ret = rgwstore->put_obj_meta(s->user.user_id, s->bucket_str, s->object_str, s->object_str, NULL, attrs, false); + if (ret < 0) + goto done; + for (obj_iter = obj_parts.begin(); obj_iter != obj_parts.end(); ++obj_iter) { obj = prefix; char buf[16]; snprintf(buf, 16, "%d", obj_iter->second.num); obj.append(buf); rgwstore->clone_range(s->bucket_str, s->object_str, ofs, obj, 0, obj_iter->second.size, s->object_str); + ofs += obj_iter->second.size; } done: @@ -983,6 +993,7 @@ done: void RGWListMultipart::execute() { + map xattrs; string obj = s->object_str; ret = get_params(); @@ -991,7 +1002,7 @@ void RGWListMultipart::execute() obj.append("."); obj.append(upload_id); - ret = get_multiparts_info(s, obj, parts, policy); + ret = get_multiparts_info(s, obj, parts, policy, xattrs); done: send_response(); -- 2.39.5