From bff7e61ca5a66b301ec49c1cf9054d1b74535832 Mon Sep 17 00:00:00 2001 From: "Adam C. Emerson" Date: Tue, 19 Dec 2017 12:53:05 -0500 Subject: [PATCH] rgw: retry CORS put/delete operations on ECANCELLED Fixes: http://tracker.ceph.com/issues/22517 Signed-off-by: Adam C. Emerson --- src/rgw/rgw_op.cc | 56 +++++++++++++++++++++++++---------------------- 1 file changed, 30 insertions(+), 26 deletions(-) diff --git a/src/rgw/rgw_op.cc b/src/rgw/rgw_op.cc index 636aa5e7541b0..33ac274962af3 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) { -- 2.39.5