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());
{
std::lock_guard locker{m_lock};
- if (restart) {
- m_restart_requested = true;
- }
-
if (!is_running_()) {
running = false;
if (!restart && m_restart_requested) {
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;
}
}
if (shut_down_replay) {
on_stop_journal_replay();
- } else if (on_finish != nullptr) {
- on_finish->complete(0);
}
}
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();