when issued against a secondary zone in multisite, the CreateRole
request is first forwarded to the metadata master zone and created there
once that forwarded request succeeds, the secondary zone creates the
same role. between these two events, metadata sync may race to replicate
that role from the master. this causes the local role creation to fail
with EEXIST
ignore EEXIST errors from local role creation if we know that our
forwarded request succeeded
Fixes: https://tracker.ceph.com/issues/67012
Signed-off-by: Casey Bodley <cbodley@redhat.com>
op_ret = role->create(s, true, role_id, y);
if (op_ret == -EEXIST) {
- op_ret = -ERR_ROLE_EXISTS;
- return;
+ if (site.is_meta_master()) {
+ op_ret = -ERR_ROLE_EXISTS;
+ return;
+ }
+ // the forwarded request succeeded on the metadata master. if we get
+ // EEXIST now, it's probably because metadata sync raced to replicate
+ // this first
+ op_ret = 0;
}
if (op_ret == 0) {