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

index 7c615c3ccce8708da9c58ec09cfdf3e4f91f61cc..89aa1ec30187dae3e76c56a7216e8ef9c1a6bc72 100644 (file)
@@ -7000,11 +7000,11 @@ int RGWDeleteBucketPolicy::verify_permission()
 
 void RGWDeleteBucketPolicy::execute()
 {
-  auto attrs = s->bucket_attrs;
-  attrs.erase(RGW_ATTR_IAM_POLICY);
-  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 */
-  }
+  op_ret = retry_raced_bucket_write(store, s, [this] {
+      auto attrs = s->bucket_attrs;
+      attrs.erase(RGW_ATTR_IAM_POLICY);
+      op_ret = rgw_bucket_set_attrs(store, s->bucket_info, attrs,
+                                   &s->bucket_info.objv_tracker);
+      return op_ret;
+    });
 }