After split-brain, the assignments can go over the preferred number. Reboot the node once at time until the current active assignments is equal to preferred number. --- src/amf/amfd/sg_nwayact_fsm.cc | 20 +++++++++++++++++--- src/amf/amfd/siass.cc | 5 ++++- 2 files changed, 21 insertions(+), 4 deletions(-)
diff --git a/src/amf/amfd/sg_nwayact_fsm.cc b/src/amf/amfd/sg_nwayact_fsm.cc index 68b76f1..f339026 100644 --- a/src/amf/amfd/sg_nwayact_fsm.cc +++ b/src/amf/amfd/sg_nwayact_fsm.cc @@ -70,13 +70,27 @@ AVD_SU *avd_sg_nacvred_su_chose_asgn(AVD_CL_CB *cb, AVD_SG *sg) { if (l_flag == false) { break; } - /* verify that the SI is ready and needs come more assignments. */ if ((i_si->saAmfSIAdminState != SA_AMF_ADMIN_UNLOCKED) || (i_si->list_of_csi == nullptr) || - (i_si->pref_active_assignments() <= i_si->curr_active_assignments())) { + (i_si->pref_active_assignments() == i_si->curr_active_assignments())) { continue; } + /* After split-brain, the assignments can go over the preferred number. + * Reboot the node once at time until the current active assignments + * is equal to preferred number + */ + if (i_si->pref_active_assignments() < i_si->curr_active_assignments()) { + AVD_SU* over_assigned_su = i_si->list_of_sisu->su; + if (over_assigned_su) { + LOG_ER("SU '%s' has been over-assigned", + over_assigned_su->name.c_str()); + LOG_EM("Sending node reboot order to '%s'", + over_assigned_su->su_on_node->name.c_str()); + avd_d2n_reboot_snd(over_assigned_su->su_on_node); + } + goto done; + } /* Cannot be assigned, as sponsors SIs are not in enabled state for this SI */ @@ -259,7 +273,7 @@ AVD_SU *avd_sg_nacvred_su_chose_asgn(AVD_CL_CB *cb, AVD_SG *sg) { } TRACE_LEAVE(); - +done: if (sg->su_oper_list.empty() == true) { return nullptr; } else { diff --git a/src/amf/amfd/siass.cc b/src/amf/amfd/siass.cc index 267c55c..5844b9a 100644 --- a/src/amf/amfd/siass.cc +++ b/src/amf/amfd/siass.cc @@ -258,7 +258,10 @@ void avd_susi_read_headless_cached_rta(AVD_CL_CB *cb) { // the last fsm state when AMFD was before headless. This needs // AMFND to resend susi_resp message if CSI completes during // headless period. - susi->fsm = imm_susi_fsm; + if (imm_susi_fsm != AVD_SU_SI_STATE_BASE && + imm_susi_fsm != AVD_SU_SI_STATE_ABSENT) { + susi->fsm = imm_susi_fsm; + } #endif // Checkpoint to add this SUSI m_AVSV_SEND_CKPT_UPDT_ASYNC_ADD(avd_cb, susi, AVSV_CKPT_AVD_SI_ASS); -- 2.7.4 _______________________________________________ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel