From a0a1e7c2ef992b8758bcfb20d893730c1b202475 Mon Sep 17 00:00:00 2001 From: "Adam C. Emerson" Date: Fri, 17 Nov 2017 15:59:44 -0500 Subject: [PATCH] rgw: Handle stale bucket info in RGWSetBucketVersioning Signed-off-by: Adam C. Emerson --- src/rgw/rgw_op.cc | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/src/rgw/rgw_op.cc b/src/rgw/rgw_op.cc index 42f6d121b2fe2..1761c5700724c 100644 --- a/src/rgw/rgw_op.cc +++ b/src/rgw/rgw_op.cc @@ -2090,17 +2090,20 @@ void RGWSetBucketVersioning::execute() } } - if (versioning_status == VersioningEnabled) { - s->bucket_info.flags |= BUCKET_VERSIONED; - s->bucket_info.flags &= ~BUCKET_VERSIONS_SUSPENDED; - } else if (versioning_status == VersioningSuspended) { - s->bucket_info.flags |= (BUCKET_VERSIONED | BUCKET_VERSIONS_SUSPENDED); - } else { - return; - } + op_ret = retry_raced_bucket_write(store, s, [this] { + if (versioning_status == VersioningEnabled) { + s->bucket_info.flags |= BUCKET_VERSIONED; + s->bucket_info.flags &= ~BUCKET_VERSIONS_SUSPENDED; + } else if (versioning_status == VersioningSuspended) { + s->bucket_info.flags |= (BUCKET_VERSIONED | BUCKET_VERSIONS_SUSPENDED); + } else { + return op_ret; + } + 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; -- 2.39.5