From 08bf9c07e012a365d40901088feede4c4c200f84 Mon Sep 17 00:00:00 2001 From: "Adam C. Emerson" Date: Fri, 17 Nov 2017 16:15:04 -0500 Subject: [PATCH] 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 --- src/rgw/rgw_op.cc | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/rgw/rgw_op.cc b/src/rgw/rgw_op.cc index 03c8b9eef30..7c615c3ccce 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; -- 2.47.3