From: Jason Dillaman Date: Fri, 20 Mar 2020 14:54:43 +0000 (-0400) Subject: rbd-mirror: snapshot sync request needs to check for interruption X-Git-Tag: v15.2.0~6^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=336a16bcaf0f23bd63dbac4d6797c801a6a0773d;p=ceph.git rbd-mirror: snapshot sync request needs to check for interruption If the sync request was locally canceled, we need to resume the paused shut down logic instead of just notifying the image replayer state machine of the change -- since it had already requested a shut down and will not re-request it. Signed-off-by: Jason Dillaman --- diff --git a/src/tools/rbd_mirror/image_replayer/snapshot/Replayer.cc b/src/tools/rbd_mirror/image_replayer/snapshot/Replayer.cc index 4cc2d1b78f9d..69fb3d93af4d 100644 --- a/src/tools/rbd_mirror/image_replayer/snapshot/Replayer.cc +++ b/src/tools/rbd_mirror/image_replayer/snapshot/Replayer.cc @@ -763,17 +763,21 @@ template void Replayer::handle_request_sync(int r) { dout(10) << "r=" << r << dendl; - if (r == -ECANCELED) { + std::unique_lock locker{m_lock}; + if (is_replay_interrupted(&locker)) { + return; + } else if (r == -ECANCELED) { dout(5) << "image-sync canceled" << dendl; - handle_replay_complete(r, "image-sync canceled"); + handle_replay_complete(&locker, r, "image-sync canceled"); return; } else if (r < 0) { derr << "failed to request image-sync: " << cpp_strerror(r) << dendl; - handle_replay_complete(r, "failed to request image-sync"); + handle_replay_complete(&locker, r, "failed to request image-sync"); return; } m_sync_in_progress = true; + locker.unlock(); copy_image(); }