From: Jason Dillaman Date: Wed, 18 Mar 2020 18:47:50 +0000 (-0400) Subject: rbd-mirror: don't prematurely finish snapshot replay loop X-Git-Tag: v15.2.0~6^2~4 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=9970e49ab5ced79be0e460600405254d7c5a0e5b;p=ceph.git rbd-mirror: don't prematurely finish snapshot replay loop The unlink step was being incorrectly skipped if a state machine shut down was requested. 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 fc62e41611283..55083c610197d 100644 --- a/src/tools/rbd_mirror/image_replayer/snapshot/Replayer.cc +++ b/src/tools/rbd_mirror/image_replayer/snapshot/Replayer.cc @@ -900,22 +900,13 @@ void Replayer::handle_notify_image_update(int r) { derr << "failed to notify local image update: " << cpp_strerror(r) << dendl; } - if (is_replay_interrupted()) { - return; - } - unlink_peer(); } template void Replayer::unlink_peer() { if (m_remote_snap_id_start == 0) { - { - std::unique_lock locker{m_lock}; - notify_status_updated(); - } - - load_local_image_meta(); + finish_sync(); return; } @@ -942,11 +933,22 @@ void Replayer::handle_unlink_peer(int r) { return; } + finish_sync(); +} + +template +void Replayer::finish_sync() { + dout(10) << dendl; + { std::unique_lock locker{m_lock}; notify_status_updated(); } + if (is_replay_interrupted()) { + return; + } + load_local_image_meta(); } diff --git a/src/tools/rbd_mirror/image_replayer/snapshot/Replayer.h b/src/tools/rbd_mirror/image_replayer/snapshot/Replayer.h index fae097b1fcba0..f0b1fccd56be4 100644 --- a/src/tools/rbd_mirror/image_replayer/snapshot/Replayer.h +++ b/src/tools/rbd_mirror/image_replayer/snapshot/Replayer.h @@ -263,6 +263,8 @@ private: void unlink_peer(); void handle_unlink_peer(int r); + void finish_sync(); + void register_local_update_watcher(); void handle_register_local_update_watcher(int r);