From 15a0e1e426d1f7c7a4924d03860f508fdef7b656 Mon Sep 17 00:00:00 2001 From: Prasanna Kumar Kalever Date: Tue, 1 Apr 2025 18:47:21 +0530 Subject: [PATCH] rbd-mirror: fix issues around health state * move m_status_state & m_state_desc under lock * fix unit test build issue Signed-off-by: Prasanna Kumar Kalever --- src/test/rbd_mirror/test_mock_InstanceReplayer.cc | 2 +- src/tools/rbd_mirror/GroupReplayer.cc | 14 +++++++++----- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/test/rbd_mirror/test_mock_InstanceReplayer.cc b/src/test/rbd_mirror/test_mock_InstanceReplayer.cc index 57138c56942..2eb406cc35c 100644 --- a/src/test/rbd_mirror/test_mock_InstanceReplayer.cc +++ b/src/test/rbd_mirror/test_mock_InstanceReplayer.cc @@ -107,7 +107,7 @@ struct GroupReplayer { MOCK_CONST_METHOD0(is_finished, bool()); MOCK_METHOD1(set_finished, void(bool)); - MOCK_CONST_METHOD0(get_health_state, image_replayer::HealthState()); + MOCK_CONST_METHOD0(get_health_state, group_replayer::HealthState()); }; GroupReplayer* GroupReplayer::s_instance = nullptr; diff --git a/src/tools/rbd_mirror/GroupReplayer.cc b/src/tools/rbd_mirror/GroupReplayer.cc index fddc59fd8aa..d44987f40d4 100644 --- a/src/tools/rbd_mirror/GroupReplayer.cc +++ b/src/tools/rbd_mirror/GroupReplayer.cc @@ -828,12 +828,12 @@ template void GroupReplayer::finish_start_fail(int r, const std::string &desc) { dout(10) << "r=" << r << ", desc=" << desc << dendl; Context *ctx = new LambdaContext([this, r, desc](int _r) { - m_status_state = cls::rbd::MIRROR_GROUP_STATUS_STATE_STOPPED; - m_state_desc = desc; { std::lock_guard locker{m_lock}; ceph_assert(m_state == STATE_STARTING); m_state = STATE_STOPPING; + m_status_state = cls::rbd::MIRROR_GROUP_STATUS_STATE_STOPPED; + m_state_desc = desc; if (r < 0) { if (r == -ECANCELED) { dout(10) << "start canceled" << dendl; @@ -1080,7 +1080,7 @@ void GroupReplayer::set_mirror_group_status_update( auto remote_status = local_status; { - std::unique_lock locker{m_lock}; + std::lock_guard locker{m_lock}; for (auto &[_, ir] : m_image_replayers) { cls::rbd::MirrorImageSiteStatus mirror_image; if (ir->is_running()) { @@ -1130,8 +1130,12 @@ void GroupReplayer::set_mirror_group_status_update( m_remote_group_peer.mirror_status_updater->set_mirror_group_status( m_global_group_id, remote_status, true); } - m_status_state = local_status.state; - m_state_desc = local_status.description; + + { + std::lock_guard locker{m_lock}; + m_status_state = local_status.state; + m_state_desc = local_status.description; + } } } // namespace mirror -- 2.39.5