From: Adam C. Emerson Date: Tue, 19 Dec 2017 17:53:05 +0000 (-0500) Subject: rgw: retry CORS put/delete operations on ECANCELLED X-Git-Tag: v13.0.2~716^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=refs%2Fpull%2F19601%2Fhead;p=ceph.git rgw: retry CORS put/delete operations on ECANCELLED Fixes: http://tracker.ceph.com/issues/22517 Signed-off-by: Adam C. Emerson --- diff --git a/src/rgw/rgw_op.cc b/src/rgw/rgw_op.cc index 636aa5e7541b..33ac274962af 100644 --- a/src/rgw/rgw_op.cc +++ b/src/rgw/rgw_op.cc @@ -5023,9 +5023,11 @@ void RGWPutCORS::execute() } } - map attrs = s->bucket_attrs; - attrs[RGW_ATTR_CORS] = cors_bl; - op_ret = rgw_bucket_set_attrs(store, s->bucket_info, attrs, &s->bucket_info.objv_tracker); + op_ret = retry_raced_bucket_write(store, s, [this] { + map attrs = s->bucket_attrs; + attrs[RGW_ATTR_CORS] = cors_bl; + return rgw_bucket_set_attrs(store, s->bucket_info, attrs, &s->bucket_info.objv_tracker); + }); } int RGWDeleteCORS::verify_permission() @@ -5036,33 +5038,35 @@ int RGWDeleteCORS::verify_permission() void RGWDeleteCORS::execute() { - op_ret = read_bucket_cors(); - if (op_ret < 0) - return; + op_ret = retry_raced_bucket_write(store, s, [this] { + op_ret = read_bucket_cors(); + if (op_ret < 0) + return op_ret; - rgw_raw_obj obj; - if (!cors_exist) { - dout(2) << "No CORS configuration set yet for this bucket" << dendl; - op_ret = -ENOENT; - return; - } - store->get_bucket_instance_obj(s->bucket, obj); - store->set_prefetch_data(s->obj_ctx, obj); - map attrs; - map::iterator iter; + rgw_raw_obj obj; + if (!cors_exist) { + dout(2) << "No CORS configuration set yet for this bucket" << dendl; + op_ret = -ENOENT; + return op_ret; + } + store->get_bucket_instance_obj(s->bucket, obj); + store->set_prefetch_data(s->obj_ctx, obj); + map attrs; + map::iterator iter; - op_ret = get_system_obj_attrs(store, s, obj, attrs, NULL, &s->bucket_info.objv_tracker); - if (op_ret < 0) - return; + op_ret = get_system_obj_attrs(store, s, obj, attrs, NULL, &s->bucket_info.objv_tracker); + if (op_ret < 0) + return op_ret; - attrs.erase(RGW_ATTR_CORS); - op_ret = rgw_bucket_set_attrs(store, s->bucket_info, attrs, + attrs.erase(RGW_ATTR_CORS); + op_ret = rgw_bucket_set_attrs(store, s->bucket_info, attrs, &s->bucket_info.objv_tracker); - if (op_ret < 0) { - ldout(s->cct, 0) << "RGWLC::RGWDeleteCORS() failed to set attrs on bucket=" << s->bucket.name - << " returned err=" << op_ret << dendl; - return; - } + if (op_ret < 0) { + ldout(s->cct, 0) << "RGWLC::RGWDeleteCORS() failed to set attrs on bucket=" << s->bucket.name + << " returned err=" << op_ret << dendl; + } + return op_ret; + }); } void RGWOptionsCORS::get_response_params(string& hdrs, string& exp_hdrs, unsigned *max_age) {