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

index 03c8b9eef3053be88877ae9d166c9c09591b1834..7c615c3ccce8708da9c58ec09cfdf3e4f91f61cc 100644 (file)
@@ -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;