summaryrefslogtreecommitdiff
path: root/src/rgw/rgw_op.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/rgw/rgw_op.cc')
-rw-r--r--src/rgw/rgw_op.cc15
1 files changed, 13 insertions, 2 deletions
diff --git a/src/rgw/rgw_op.cc b/src/rgw/rgw_op.cc
index 40e496acc72..652d0fd9ccb 100644
--- a/src/rgw/rgw_op.cc
+++ b/src/rgw/rgw_op.cc
@@ -1515,6 +1515,8 @@ void RGWCompleteMultipart::execute()
rgw_obj target_obj;
RGWMPObj mp;
RGWObjManifest manifest;
+ list<string> unlink_parts;
+ int r;
ret = get_params();
if (ret < 0)
@@ -1583,12 +1585,14 @@ void RGWCompleteMultipart::execute()
attrs[RGW_ATTR_ETAG] = etag_bl;
target_obj.init(s->bucket, s->object_str);
-
+
for (obj_iter = obj_parts.begin(); obj_iter != obj_parts.end(); ++obj_iter) {
string oid = mp.get_part(obj_iter->second.num);
rgw_obj src_obj;
src_obj.init_ns(s->bucket, oid, mp_ns);
+ unlink_parts.push_back(src_obj.object);
+
RGWObjManifestPart& part = manifest.objs[ofs];
part.loc = src_obj;
@@ -1609,7 +1613,14 @@ void RGWCompleteMultipart::execute()
// remove the upload obj
meta_obj.init_ns(s->bucket, meta_oid, mp_ns);
- rgwstore->delete_obj(s->obj_ctx, meta_obj);
+ r = rgwstore->remove_objs_from_index(s->bucket, unlink_parts);
+ if (r < 0) {
+ ldout(s->cct, 0) << "WARNING: remove_objs_from_index() failed r=" << r << dendl;
+ }
+ r = rgwstore->delete_obj(s->obj_ctx, meta_obj);
+ if (r < 0) {
+ ldout(s->cct, 0) << "WARNING: failed to remove object r=" << r << dendl;
+ }
done:
send_response();