]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: data sync accepts ERR_PRECONDITION_FAILED on remove_object() 25506/head
authorCasey Bodley <cbodley@redhat.com>
Wed, 28 Nov 2018 18:45:54 +0000 (13:45 -0500)
committerNathan Cutler <ncutler@suse.com>
Wed, 12 Dec 2018 13:50:30 +0000 (14:50 +0100)
sync of deletes uses an If-UnModified-Since precondition, but does not
handle the corresponding ERR_PRECONDITION_FAILED error. treating this as
a failure means that we'll keep retrying the delete which will never
succeed. break this loop by treating ERR_PRECONDITION_FAILED as a
success

Fixes: http://tracker.ceph.com/issues/37448
Signed-off-by: Casey Bodley <cbodley@redhat.com>
(cherry picked from commit f9d0ccf0069cb1a50621bdf8522038ab371f2a51)

src/rgw/rgw_data_sync.cc

index dca9ea9196e1b3f71eb3fbdd8761d75d4ea6db55..ad43157824e592692b67a64680b8eebaee65febe 100644 (file)
@@ -2546,6 +2546,10 @@ public:
             }
             logger.log("remove");
             call(data_sync_module->remove_object(sync_env, *bucket_info, key, timestamp, versioned, versioned_epoch.value_or(0), &zones_trace));
+            // our copy of the object is more recent, continue as if it succeeded
+            if (retcode == -ERR_PRECONDITION_FAILED) {
+              retcode = 0;
+            }
           } else if (op == CLS_RGW_OP_LINK_OLH_DM) {
             logger.log("creating delete marker");
             set_status("creating delete marker");