From: Mykola Golub Date: Thu, 4 Jun 2020 10:57:01 +0000 (+0300) Subject: Merge pull request #35348 from dillaman/wip-45714 X-Git-Tag: v16.1.0~2141 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=101855d4676b61c083af145f3c8b1219aef28fda;p=ceph.git Merge pull request #35348 from dillaman/wip-45714 rbd-mirror: stop local journal replayer first during shut down Reviewed-by: Mykola Golub --- 101855d4676b61c083af145f3c8b1219aef28fda diff --cc src/tools/rbd_mirror/image_replayer/journal/Replayer.cc index 616ac4d1dcbc,3af886fdf3ab..60b9a7e59319 --- a/src/tools/rbd_mirror/image_replayer/journal/Replayer.cc +++ b/src/tools/rbd_mirror/image_replayer/journal/Replayer.cc @@@ -869,14 -854,15 +893,16 @@@ void Replayer::handle_replay_flush_s template void Replayer::handle_replay_flush(int r) { + std::unique_lock locker{m_lock}; dout(10) << "r=" << r << dendl; + m_flush_tracker.finish_op(); + if (r < 0) { derr << "replay flush encountered an error: " << cpp_strerror(r) << dendl; - handle_replay_complete(r, "replay flush encountered an error"); + handle_replay_complete(locker, r, "replay flush encountered an error"); m_event_replay_tracker.finish_op(); return; - } else if (is_replay_complete()) { + } else if (is_replay_complete(locker)) { m_event_replay_tracker.finish_op(); return; } diff --cc src/tools/rbd_mirror/image_replayer/journal/Replayer.h index f650b48b0ab1,b279aa9a297e..6b1f36d9c7fe --- a/src/tools/rbd_mirror/image_replayer/journal/Replayer.h +++ b/src/tools/rbd_mirror/image_replayer/journal/Replayer.h @@@ -235,13 -240,14 +240,16 @@@ private void init_remote_journaler(); void handle_init_remote_journaler(int r); - void start_external_replay(); + void start_external_replay(std::unique_lock& locker); void handle_start_external_replay(int r); + bool add_local_journal_listener(std::unique_lock& locker); + bool notify_init_complete(std::unique_lock& locker); + void wait_for_flush(); + void handle_wait_for_flush(int r); + void shut_down_local_journal_replay(); void handle_shut_down_local_journal_replay(int r);