From: Jason Dillaman Date: Thu, 30 Jan 2020 19:49:46 +0000 (-0500) Subject: librbd: relax snapshot mirror promotion state determination X-Git-Tag: v15.1.1~472^2~4 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=21c51c232ba7a06f8dd78be3af7331bca8da7c6b;p=ceph.git librbd: relax snapshot mirror promotion state determination If no mirroring-related snapshots exist on the image, it cannot be determined if the image is primary/non-primary. In the case of rbd-mirror, this will be the case after a new mirrored image is created locally but before it can be synced. Signed-off-by: Jason Dillaman --- diff --git a/src/librbd/mirror/DisableRequest.cc b/src/librbd/mirror/DisableRequest.cc index a436e7ebe46f..500cebded8e6 100644 --- a/src/librbd/mirror/DisableRequest.cc +++ b/src/librbd/mirror/DisableRequest.cc @@ -70,7 +70,8 @@ Context *DisableRequest::handle_get_mirror_info(int *result) { return m_on_finish; } - m_is_primary = (m_promotion_state == PROMOTION_STATE_PRIMARY); + m_is_primary = (m_promotion_state == PROMOTION_STATE_PRIMARY || + m_promotion_state == PROMOTION_STATE_UNKNOWN); if (!m_is_primary && !m_force) { lderr(cct) << "mirrored image is not primary, " diff --git a/src/librbd/mirror/GetInfoRequest.cc b/src/librbd/mirror/GetInfoRequest.cc index e8f2134ff907..6ceb56f155bf 100644 --- a/src/librbd/mirror/GetInfoRequest.cc +++ b/src/librbd/mirror/GetInfoRequest.cc @@ -246,7 +246,7 @@ void GetInfoRequest::finish(int r) { template void GetInfoRequest::calc_promotion_state( const std::map &snap_info) { - *m_promotion_state = PROMOTION_STATE_PRIMARY; + *m_promotion_state = PROMOTION_STATE_UNKNOWN; *m_primary_mirror_uuid = ""; for (auto it = snap_info.rbegin(); it != snap_info.rend(); it++) { @@ -255,6 +255,8 @@ void GetInfoRequest::calc_promotion_state( if (primary != nullptr) { if (primary->demoted) { *m_promotion_state = PROMOTION_STATE_ORPHAN; + } else { + *m_promotion_state = PROMOTION_STATE_PRIMARY; } break; } diff --git a/src/librbd/mirror/Types.h b/src/librbd/mirror/Types.h index 38511bdb7c15..2388b74ef2e5 100644 --- a/src/librbd/mirror/Types.h +++ b/src/librbd/mirror/Types.h @@ -8,6 +8,7 @@ namespace librbd { namespace mirror { enum PromotionState { + PROMOTION_STATE_UNKNOWN, PROMOTION_STATE_PRIMARY, PROMOTION_STATE_NON_PRIMARY, PROMOTION_STATE_ORPHAN