From: Ilya Dryomov Date: Sat, 19 Feb 2022 15:43:04 +0000 (+0100) Subject: rbd-mirror: straighten ImageReplayer::stop() a bit X-Git-Tag: v15.2.17~65^2~4 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=862065ded9e80f9474628f097976a4ede7c2517f;p=ceph.git rbd-mirror: straighten ImageReplayer::stop() a bit - don't default on_finish parameter - m_restart_requested is set in ImageReplayer::restart() which is the only restart=true call site, so setting m_restart_requested here is redundant - is_stopped_() can't be true in is_running_() branch - on_finish->complete(0) in the end is unreachable Signed-off-by: Ilya Dryomov (cherry picked from commit 219c500977bbfbcfe4ccd24beb294edbe0562d35) --- diff --git a/src/test/rbd_mirror/test_mock_ImageReplayer.cc b/src/test/rbd_mirror/test_mock_ImageReplayer.cc index e75fa0ac4907c..9f40797dd4f4c 100644 --- a/src/test/rbd_mirror/test_mock_ImageReplayer.cc +++ b/src/test/rbd_mirror/test_mock_ImageReplayer.cc @@ -608,7 +608,7 @@ TEST_F(TestMockImageReplayer, BootstrapCancel) { MockStateBuilder mock_state_builder; EXPECT_CALL(mock_bootstrap_request, send()) .WillOnce(Invoke([this, &mock_bootstrap_request]() { - m_image_replayer->stop(); + m_image_replayer->stop(nullptr); mock_bootstrap_request.on_finish->complete(-ECANCELED); })); EXPECT_CALL(mock_bootstrap_request, cancel()); diff --git a/src/tools/rbd_mirror/ImageReplayer.cc b/src/tools/rbd_mirror/ImageReplayer.cc index afc980bd809ef..3a2fd2357169e 100644 --- a/src/tools/rbd_mirror/ImageReplayer.cc +++ b/src/tools/rbd_mirror/ImageReplayer.cc @@ -526,10 +526,6 @@ void ImageReplayer::stop(Context *on_finish, bool manual, bool restart) { std::lock_guard locker{m_lock}; - if (restart) { - m_restart_requested = true; - } - if (!is_running_()) { running = false; if (!restart && m_restart_requested) { @@ -537,23 +533,21 @@ void ImageReplayer::stop(Context *on_finish, bool manual, bool restart) m_restart_requested = false; } } else { - if (!is_stopped_()) { - if (m_state == STATE_STARTING) { - dout(10) << "canceling start" << dendl; - if (m_bootstrap_request != nullptr) { - bootstrap_request = m_bootstrap_request; - bootstrap_request->get(); - } - } else { - dout(10) << "interrupting replay" << dendl; - shut_down_replay = true; - } - - ceph_assert(m_on_stop_finish == nullptr); - std::swap(m_on_stop_finish, on_finish); - m_stop_requested = true; - m_manual_stop = manual; + if (m_state == STATE_STARTING) { + dout(10) << "canceling start" << dendl; + if (m_bootstrap_request != nullptr) { + bootstrap_request = m_bootstrap_request; + bootstrap_request->get(); + } + } else { + dout(10) << "interrupting replay" << dendl; + shut_down_replay = true; } + + ceph_assert(m_on_stop_finish == nullptr); + std::swap(m_on_stop_finish, on_finish); + m_stop_requested = true; + m_manual_stop = manual; } } @@ -574,8 +568,6 @@ void ImageReplayer::stop(Context *on_finish, bool manual, bool restart) if (shut_down_replay) { on_stop_journal_replay(); - } else if (on_finish != nullptr) { - on_finish->complete(0); } } diff --git a/src/tools/rbd_mirror/ImageReplayer.h b/src/tools/rbd_mirror/ImageReplayer.h index 1fbf8db94d3dd..027a62ac63cbb 100644 --- a/src/tools/rbd_mirror/ImageReplayer.h +++ b/src/tools/rbd_mirror/ImageReplayer.h @@ -101,10 +101,8 @@ public: return m_global_image_id; } - void start(Context *on_finish = nullptr, bool manual = false, - bool restart = false); - void stop(Context *on_finish = nullptr, bool manual = false, - bool restart = false); + void start(Context *on_finish, bool manual = false, bool restart = false); + void stop(Context *on_finish, bool manual = false, bool restart = false); void restart(Context *on_finish = nullptr); void flush();