AMFD recovery after headless should check if any SI sponsor under failover to decide SG stable or not. --- src/amf/amfd/sg.cc | 3 ++- src/amf/amfd/sgproc.cc | 3 +-- src/amf/amfd/su.cc | 19 +++++++++++++++++++ src/amf/amfd/su.h | 1 + 4 files changed, 23 insertions(+), 3 deletions(-)
diff --git a/src/amf/amfd/sg.cc b/src/amf/amfd/sg.cc index e2c2528c8..6ed585c49 100644 --- a/src/amf/amfd/sg.cc +++ b/src/amf/amfd/sg.cc @@ -2405,7 +2405,8 @@ bool AVD_SG::any_assignment_in_progress() { for (const auto &su : list_of_su) { if (su->any_susi_fsm_in(AVD_SU_SI_STATE_ASGN) || su->any_susi_fsm_in(AVD_SU_SI_STATE_UNASGN) || - su->any_susi_fsm_in(AVD_SU_SI_STATE_MODIFY)) { + su->any_susi_fsm_in(AVD_SU_SI_STATE_MODIFY) || + su->any_sponsor_si_under_failover()) { pending = true; break; } diff --git a/src/amf/amfd/sgproc.cc b/src/amf/amfd/sgproc.cc index 405e2c45d..7de64f4a8 100644 --- a/src/amf/amfd/sgproc.cc +++ b/src/amf/amfd/sgproc.cc @@ -2480,9 +2480,7 @@ uint32_t avd_sg_su_oper_list_add(AVD_CL_CB *cb, AVD_SU *su, bool ckpt, } TRACE("added %s to %s", su->name.c_str(), su->sg_of_su->name.c_str()); - su_oper_list.push_back(su); - if (!ckpt) { // Update to IMM if headless is enabled if (cb->scs_absence_max_duration > 0 && wrt_to_imm) { @@ -2539,6 +2537,7 @@ uint32_t avd_sg_su_oper_list_del(AVD_CL_CB *cb, AVD_SU *su, bool ckpt, goto done; } + TRACE("erased %s to %s", su->name.c_str(), su->sg_of_su->name.c_str()); su_oper_list.erase(elem); if (!ckpt) { // Update to IMM if headless is enabled diff --git a/src/amf/amfd/su.cc b/src/amf/amfd/su.cc index 5a6c69c33..1fe92c16b 100644 --- a/src/amf/amfd/su.cc +++ b/src/amf/amfd/su.cc @@ -2692,6 +2692,25 @@ bool AVD_SU::any_susi_fsm_in(uint32_t check_fsm) { TRACE_LEAVE(); return rc; } +/** + * @brief Checks if sponsor SI under failover + * @result true/false + */ +bool AVD_SU::any_sponsor_si_under_failover() { + TRACE_ENTER2("SU:'%s'", name.c_str()); + bool rc = false; + for (AVD_SU_SI_REL *susi = list_of_susi; susi && rc == false; + susi = susi->su_next) { + TRACE("SUSI:'%s,%s', si_dep_state:'%d'", susi->su->name.c_str(), + susi->si->name.c_str(), susi->si->si_dep_state); + if (susi->si->si_dep_state == AVD_SI_FAILOVER_UNDER_PROGRESS) { + rc = true; + TRACE("Found"); + } + } + TRACE_LEAVE(); + return rc; +} /** * @brief Verify if SU is stable for admin operation on any higher level enity like SG, Node and Nodegroup etc. diff --git a/src/amf/amfd/su.h b/src/amf/amfd/su.h index f32f3138a..3a6266c7c 100644 --- a/src/amf/amfd/su.h +++ b/src/amf/amfd/su.h @@ -146,6 +146,7 @@ class AVD_SU { void lock(SaImmOiHandleT immoi_handle, SaInvocationT invocation, SaAmfAdminStateT adm_state); bool any_susi_fsm_in(uint32_t check_fsm); + bool any_sponsor_si_under_failover(); SaAisErrorT check_su_stability(); uint32_t curr_num_standby_sis(); uint32_t curr_num_active_sis(); -- 2.17.1 _______________________________________________ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel