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<librbd::MockTestImageCtx>* GroupReplayer<librbd::MockTestImageCtx>::s_instance = nullptr;
void GroupReplayer<I>::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;
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()) {
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