Hi Minh, Ack, reviewed and tested
Regards, Ravi -----Original Message----- From: Minh Chau [mailto:[email protected]] Sent: Thursday, December 21, 2017 6:35 AM To: [email protected]; [email protected]; [email protected] Cc: [email protected]; Minh Chau <[email protected]> Subject: [PATCH 1/1] amfnd: Check UNASSIGNED CSI in csi assigment removal [#2741] A csi can be marked as UNASSIGNED from a su restart or this csi is newly added from scaling out. This unassigned csi currently makes the csi assignment removal sequence running non-stop, since the removal sequence is not checking UNASSIGNED state. Patch considers UNASSIGNED state of csi to be ignored so the removal sequence can move on --- src/amf/amfnd/avnd_su.h | 2 +- src/amf/amfnd/comp.cc | 25 +++++++++---------------- src/amf/amfnd/susm.cc | 2 +- 3 files changed, 11 insertions(+), 18 deletions(-) diff --git a/src/amf/amfnd/avnd_su.h b/src/amf/amfnd/avnd_su.h index 69124ed..c1df8f8 100644 --- a/src/amf/amfnd/avnd_su.h +++ b/src/amf/amfnd/avnd_su.h @@ -428,7 +428,7 @@ extern struct avnd_su_si_rec *avnd_silist_getprev( extern struct avnd_su_si_rec *avnd_silist_getlast(void); extern bool sufailover_in_progress(const AVND_SU *su); extern bool sufailover_during_nodeswitchover(const AVND_SU *su); -extern bool all_csis_in_removed_state(const AVND_SU *su); +extern bool all_csis_removable_from_su(const AVND_SU *su); extern void su_reset_restart_count_in_comps(const struct avnd_cb_tag *cb, const AVND_SU *su); extern bool all_comps_terminated_in_su(const AVND_SU *su, diff --git a/src/amf/amfnd/comp.cc b/src/amf/amfnd/comp.cc index 3d712fa..fdaa342 100644 --- a/src/amf/amfnd/comp.cc +++ b/src/amf/amfnd/comp.cc @@ -1703,11 +1703,12 @@ done: return rc; } -static bool all_csis_in_si_removed(const AVND_SU_SI_REC *si) { +static bool all_csis_removable_from_si(const AVND_SU_SI_REC *si) { AVND_COMP_CSI_REC *csi; for (csi = (AVND_COMP_CSI_REC *)m_NCS_DBLIST_FIND_FIRST(&si->csi_list); csi; csi = (AVND_COMP_CSI_REC *)m_NCS_DBLIST_FIND_NEXT(&csi->si_dll_node)) { - if (csi->curr_assign_state != AVND_COMP_CSI_ASSIGN_STATE_REMOVED) + if (csi->curr_assign_state != AVND_COMP_CSI_ASSIGN_STATE_REMOVED && + csi->curr_assign_state != + AVND_COMP_CSI_ASSIGN_STATE_UNASSIGNED) return false; } return true; @@ -1720,8 +1721,7 @@ static bool all_csis_in_si_removed(const AVND_SU_SI_REC *si) { * * @returns true/false **/ -bool all_csis_in_removed_state(const AVND_SU *su) { - AVND_COMP_CSI_REC *curr_csi; +bool all_csis_removable_from_su(const AVND_SU *su) { AVND_SU_SI_REC *curr_si; bool all_csi_removed = true; TRACE_ENTER2("'%s'", su->name.c_str()); @@ -1730,15 +1730,7 @@ bool all_csis_in_removed_state(const AVND_SU *su) { curr_si && all_csi_removed; curr_si = (AVND_SU_SI_REC *)m_NCS_DBLIST_FIND_NEXT(&curr_si->su_dll_node)) { - for (curr_csi = - (AVND_COMP_CSI_REC *)m_NCS_DBLIST_FIND_FIRST(&curr_si->csi_list); - curr_csi; curr_csi = (AVND_COMP_CSI_REC *)m_NCS_DBLIST_FIND_NEXT( - &curr_csi->si_dll_node)) { - if (!m_AVND_COMP_CSI_CURR_ASSIGN_STATE_IS_REMOVED(curr_csi)) { - all_csi_removed = false; - break; - } - } + all_csi_removed = all_csis_removable_from_si(curr_si); } TRACE_LEAVE2("%u", all_csi_removed); return all_csi_removed; @@ -1822,7 +1814,8 @@ uint32_t avnd_comp_csi_remove_done(AVND_CB *cb, AVND_COMP *comp, (AVND_COMP_CSI_REC *)m_NCS_DBLIST_FIND_LAST(&csi->si->csi_list); curr_csi; curr_csi = (AVND_COMP_CSI_REC *)m_NCS_DBLIST_FIND_PREV( &curr_csi->si_dll_node)) { - if (m_AVND_COMP_CSI_CURR_ASSIGN_STATE_IS_REMOVED(curr_csi)) + if (m_AVND_COMP_CSI_CURR_ASSIGN_STATE_IS_REMOVED(curr_csi) || + m_AVND_COMP_CSI_CURR_ASSIGN_STATE_IS_UNASSIGNED(curr_csi)) continue; else if (m_AVND_COMP_CSI_CURR_ASSIGN_STATE_IS_REMOVING(curr_csi)) break; @@ -1838,7 +1831,7 @@ uint32_t avnd_comp_csi_remove_done(AVND_CB *cb, AVND_COMP *comp, } /* all csis belonging to the si are removed */ - if ((all_csis_in_si_removed(csi->si) == true) && + if ((all_csis_removable_from_si(csi->si) == true) && (m_AVND_SU_SI_CURR_ASSIGN_STATE_IS_REMOVING(csi->si))) rc = avnd_su_si_oper_done( cb, comp->su, m_AVND_SU_IS_ALL_SI(comp->su) ? nullptr : csi->si); @@ -1873,7 +1866,7 @@ uint32_t avnd_comp_csi_remove_done(AVND_CB *cb, AVND_COMP *comp, /* This is removal with TARGET_ALL. So if all CSIs in all SIs of SU are moved to removed state, mark all SIs removed and inform AMF director.*/ - if (all_csis_in_removed_state(comp->su) && m_AVND_SU_IS_ALL_SI(comp->su)) { + if (all_csis_removable_from_su(comp->su) && + m_AVND_SU_IS_ALL_SI(comp->su)) { rc = avnd_su_si_oper_done(cb, comp->su, 0); } } diff --git a/src/amf/amfnd/susm.cc b/src/amf/amfnd/susm.cc index 8c2c6f1..c5f8240 100644 --- a/src/amf/amfnd/susm.cc +++ b/src/amf/amfnd/susm.cc @@ -3208,7 +3208,7 @@ uint32_t avnd_su_pres_terming_compuninst_hdler(AVND_CB *cb, AVND_SU *su, if (NCSCC_RC_SUCCESS != rc) goto done; } - if (all_csis_in_assigned_state(su) || all_csis_in_removed_state(su)) { + if (all_csis_in_assigned_state(su) || + all_csis_removable_from_su(su)) { TRACE("SI Assignment done"); avnd_su_pres_state_set(cb, su, SA_AMF_PRESENCE_UNINSTANTIATED); goto done; -- 2.7.4 ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot _______________________________________________ Opensaf-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/opensaf-devel
