From: Adam C. Emerson Date: Fri, 17 Nov 2017 20:59:44 +0000 (-0500) Subject: rgw: Handle stale bucket info in RGWSetBucketVersioning X-Git-Tag: v10.2.11~170^2~6 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=04dbb5798372b31ff19dfc9fb22c2b12c8a5a2ea;p=ceph.git rgw: Handle stale bucket info in RGWSetBucketVersioning Fixes: http://tracker.ceph.com/issues/22517 Signed-off-by: Adam C. Emerson (cherry picked from commit a0a1e7c2ef992b8758bcfb20d893730c1b202475) Signed-off-by: Matt Benjamin --- diff --git a/src/rgw/rgw_op.cc b/src/rgw/rgw_op.cc index c2293326ff94..0f13d17bc7d3 100644 --- a/src/rgw/rgw_op.cc +++ b/src/rgw/rgw_op.cc @@ -1642,15 +1642,19 @@ void RGWSetBucketVersioning::execute() } } - if (enable_versioning) { - s->bucket_info.flags |= BUCKET_VERSIONED; - s->bucket_info.flags &= ~BUCKET_VERSIONS_SUSPENDED; - } else { - s->bucket_info.flags |= (BUCKET_VERSIONED | BUCKET_VERSIONS_SUSPENDED); - } + op_ret = retry_raced_bucket_write(store, s, [this] { + if (enable_versioning) { + s->bucket_info.flags |= BUCKET_VERSIONED; + s->bucket_info.flags &= ~BUCKET_VERSIONS_SUSPENDED; + } else { + s->bucket_info.flags |= (BUCKET_VERSIONED | BUCKET_VERSIONS_SUSPENDED); + } + op_ret = store->put_bucket_instance_info(s->bucket_info, false, + real_time(), + &s->bucket_attrs); + return op_ret; + }); - op_ret = store->put_bucket_instance_info(s->bucket_info, false, real_time(), - &s->bucket_attrs); if (op_ret < 0) { ldout(s->cct, 0) << "NOTICE: put_bucket_info on bucket=" << s->bucket.name << " returned err=" << op_ret << dendl;