From 681cddfa420a0f5f4335564843cdfdb1a4f2371d Mon Sep 17 00:00:00 2001 From: "Yan, Zheng" Date: Wed, 27 Sep 2017 18:49:55 +0800 Subject: [PATCH] mds: always re-probe mds log when standby replay done Signed-off-by: "Yan, Zheng" (cherry picked from commit 82c1f5fcfd151aa1e8c39c7f198abec9bf807b65) --- src/mds/MDSRank.cc | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/src/mds/MDSRank.cc b/src/mds/MDSRank.cc index 77f1819788f..ea90712eeef 100644 --- a/src/mds/MDSRank.cc +++ b/src/mds/MDSRank.cc @@ -1214,7 +1214,16 @@ void MDSRank::_standby_replay_restart_finish(int r, uint64_t old_read_pos) } } -inline void MDSRank::standby_replay_restart() +class MDSRank::C_MDS_StandbyReplayRestart : public MDSInternalContext { +public: + explicit C_MDS_StandbyReplayRestart(MDSRank *m) : MDSInternalContext(m) {} + void finish(int r) override { + assert(!r); + mds->standby_replay_restart(); + } +}; + +void MDSRank::standby_replay_restart() { if (standby_replaying) { /* Go around for another pass of replaying in standby */ @@ -1227,9 +1236,8 @@ inline void MDSRank::standby_replay_restart() /* We are transitioning out of standby: wait for OSD map update before making final pass */ dout(1) << "standby_replay_restart (final takeover pass)" << dendl; - Context *fin = new C_IO_Wrapper(this, new C_MDS_BootStart(this, MDS_BOOT_PREPARE_LOG)); - bool const ready = - objecter->wait_for_map(mdsmap->get_last_failure_osd_epoch(), fin); + Context *fin = new C_IO_Wrapper(this, new C_MDS_StandbyReplayRestart(this)); + bool ready = objecter->wait_for_map(mdsmap->get_last_failure_osd_epoch(), fin); if (ready) { delete fin; mdlog->get_journaler()->reread_head_and_probe( @@ -1243,15 +1251,6 @@ inline void MDSRank::standby_replay_restart() } } -class MDSRank::C_MDS_StandbyReplayRestart : public MDSInternalContext { -public: - explicit C_MDS_StandbyReplayRestart(MDSRank *m) : MDSInternalContext(m) {} - void finish(int r) override { - assert(!r); - mds->standby_replay_restart(); - } -}; - void MDSRank::replay_done() { dout(1) << "replay_done" << (standby_replaying ? " (as standby)" : "") << dendl; -- 2.47.3