]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: Handle stale bucket info in RGWSetBucketVersioning
authorAdam C. Emerson <aemerson@redhat.com>
Fri, 17 Nov 2017 20:59:44 +0000 (15:59 -0500)
committerAdam C. Emerson <aemerson@redhat.com>
Thu, 4 Jan 2018 22:36:13 +0000 (17:36 -0500)
Signed-off-by: Adam C. Emerson <aemerson@redhat.com>
(cherry picked from commit a0a1e7c2ef992b8758bcfb20d893730c1b202475)
Fixes: http://tracker.ceph.com/issues/22517
src/rgw/rgw_op.cc

index 213ce5ab7913eca76ea329c55c1a43f3a8938559..5f9295c236d0586b35fb5c0b253283cda522fbde 100644 (file)
@@ -2111,15 +2111,18 @@ 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);
+      }
+
+      return store->put_bucket_instance_info(s->bucket_info, false, real_time(),
+                                            &s->bucket_attrs);
+    });
 
-  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;