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.cc16
1 files changed, 12 insertions, 4 deletions
diff --git a/src/rgw/rgw_op.cc b/src/rgw/rgw_op.cc
index 803ca3c21ab..38260ef0efa 100644
--- a/src/rgw/rgw_op.cc
+++ b/src/rgw/rgw_op.cc
@@ -979,11 +979,11 @@ class RGWPutObjProcessor_Aio : public RGWPutObjProcessor
struct put_obj_aio_info pop_pending();
int wait_pending_front();
bool pending_has_completed();
- int drain_pending();
protected:
uint64_t obj_len;
+ int drain_pending();
int handle_obj_data(rgw_obj& obj, bufferlist& bl, off_t ofs, off_t abs_ofs, void **phandle);
int throttle_data(void *handle);
@@ -1174,8 +1174,12 @@ int RGWPutObjProcessor_Atomic::do_complete(string& etag, map<string, bufferlist>
store->set_atomic(s->obj_ctx, head_obj);
- int r = store->put_obj_meta(s->obj_ctx, head_obj, obj_len, NULL, attrs,
- RGW_OBJ_CATEGORY_MAIN, PUT_OBJ_CREATE, NULL, &first_chunk, &manifest, NULL, NULL);
+ int r = drain_pending();
+ if (r < 0)
+ return r;
+
+ r = store->put_obj_meta(s->obj_ctx, head_obj, obj_len, NULL, attrs,
+ RGW_OBJ_CATEGORY_MAIN, PUT_OBJ_CREATE, NULL, &first_chunk, &manifest, NULL, NULL);
return r;
}
@@ -1220,7 +1224,11 @@ int RGWPutObjProcessor_Multipart::do_complete(string& etag, map<string, bufferli
{
complete_parts();
- int r = store->put_obj_meta(s->obj_ctx, head_obj, s->obj_size, NULL, attrs, RGW_OBJ_CATEGORY_MAIN, 0, NULL, NULL, NULL, NULL, NULL);
+ int r = drain_pending();
+ if (r < 0)
+ return r;
+
+ r = store->put_obj_meta(s->obj_ctx, head_obj, s->obj_size, NULL, attrs, RGW_OBJ_CATEGORY_MAIN, 0, NULL, NULL, NULL, NULL, NULL);
if (r < 0)
return r;