From: Adam C. Emerson Date: Fri, 17 Nov 2017 21:15:04 +0000 (-0500) Subject: rgw: Handle stale bucket info in RGWPutBucketPolicy X-Git-Tag: v12.2.3~205^2~5 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=08bf9c07e012a365d40901088feede4c4c200f84;p=ceph.git rgw: Handle stale bucket info in RGWPutBucketPolicy Signed-off-by: Adam C. Emerson (cherry picked from commit 1738b4f6b726b462abb436f78026c1577b55f05e) Fixes: http://tracker.ceph.com/issues/22517 --- diff --git a/src/rgw/rgw_op.cc b/src/rgw/rgw_op.cc index 03c8b9eef305..7c615c3ccce8 100644 --- a/src/rgw/rgw_op.cc +++ b/src/rgw/rgw_op.cc @@ -6924,15 +6924,15 @@ void RGWPutBucketPolicy::execute() } try { - Policy p(s->cct, s->bucket_tenant, in_data); - auto attrs = s->bucket_attrs; - attrs[RGW_ATTR_IAM_POLICY].clear(); - attrs[RGW_ATTR_IAM_POLICY].append(p.text); - op_ret = rgw_bucket_set_attrs(store, s->bucket_info, attrs, - &s->bucket_info.objv_tracker); - if (op_ret == -ECANCELED) { - op_ret = 0; /* lost a race, but it's ok because policies are immutable */ - } + const Policy p(s->cct, s->bucket_tenant, in_data); + op_ret = retry_raced_bucket_write(store, s, [&p, this] { + auto attrs = s->bucket_attrs; + attrs[RGW_ATTR_IAM_POLICY].clear(); + attrs[RGW_ATTR_IAM_POLICY].append(p.text); + op_ret = rgw_bucket_set_attrs(store, s->bucket_info, attrs, + &s->bucket_info.objv_tracker); + return op_ret; + }); } catch (rgw::IAM::PolicyParseException& e) { ldout(s->cct, 20) << "failed to parse policy: " << e.what() << dendl; op_ret = -EINVAL;