osaf/services/saf/amf/amfd/role.cc | 10 ++++---- osaf/services/saf/amf/amfd/sgproc.cc | 2 +- osaf/services/saf/amf/amfd/siass.cc | 4 ++- osaf/services/saf/amf/amfnd/err.cc | 37 ++++++++++------------------------- osaf/services/saf/amf/amfnd/susm.cc | 20 ++++++++++++++++-- 5 files changed, 37 insertions(+), 36 deletions(-)
diff --git a/osaf/services/saf/amf/amfd/role.cc b/osaf/services/saf/amf/amfd/role.cc --- a/osaf/services/saf/amf/amfd/role.cc +++ b/osaf/services/saf/amf/amfd/role.cc @@ -180,6 +180,11 @@ uint32_t avd_active_role_initialization( goto done; } + if (avd_imm_impl_set() != SA_AIS_OK) { + LOG_ER("avd_imm_impl_set FAILED"); + goto done; + } + if (avd_imm_config_get() != NCSCC_RC_SUCCESS) { LOG_ER("avd_imm_config_get FAILED"); goto done; @@ -187,11 +192,6 @@ uint32_t avd_active_role_initialization( cb->init_state = AVD_CFG_DONE; - if (avd_imm_impl_set() != SA_AIS_OK) { - LOG_ER("avd_imm_impl_set FAILED"); - goto done; - } - avd_imm_update_runtime_attrs(); status = NCSCC_RC_SUCCESS; diff --git a/osaf/services/saf/amf/amfd/sgproc.cc b/osaf/services/saf/amf/amfd/sgproc.cc --- a/osaf/services/saf/amf/amfd/sgproc.cc +++ b/osaf/services/saf/amf/amfd/sgproc.cc @@ -282,7 +282,7 @@ void su_try_repair(const AVD_SU *su) { TRACE_ENTER2("Repair for SU:'%s'", su->name.value); - if ((su->sg_of_su->saAmfSGAutoRepair) && (su->saAmfSUFailover) && + if ((su->sg_of_su->saAmfSGAutoRepair) && (su->saAmfSUOperState == SA_AMF_OPERATIONAL_DISABLED) && (su->saAmfSUPresenceState != SA_AMF_PRESENCE_INSTANTIATION_FAILED) && (su->saAmfSUPresenceState != SA_AMF_PRESENCE_TERMINATION_FAILED)) { diff --git a/osaf/services/saf/amf/amfd/siass.cc b/osaf/services/saf/amf/amfd/siass.cc --- a/osaf/services/saf/amf/amfd/siass.cc +++ b/osaf/services/saf/amf/amfd/siass.cc @@ -888,7 +888,9 @@ SaAisErrorT avd_susi_recreate(AVSV_N2D_N susi->su->inc_curr_act_si(); susi->si->inc_curr_act_ass(); } - + su->saAmfSUHostedByNode = node->name; + avd_saImmOiRtObjectUpdate(&su->name, "saAmfSUHostedByNode", + SA_IMM_ATTR_SANAMET, &su->saAmfSUHostedByNode); m_AVSV_SEND_CKPT_UPDT_ASYNC_ADD(avd_cb, susi, AVSV_CKPT_AVD_SI_ASS); } diff --git a/osaf/services/saf/amf/amfnd/err.cc b/osaf/services/saf/amf/amfnd/err.cc --- a/osaf/services/saf/amf/amfnd/err.cc +++ b/osaf/services/saf/amf/amfnd/err.cc @@ -773,28 +773,6 @@ uint32_t avnd_err_rcvr_comp_failover(AVN LOG_ER("cleanup of '%s' failed", failed_comp->name.value); goto done; } - - // if headless, remove all assignments from this SU - if (cb->is_avd_down == true) { - AVND_SU_SI_REC *si = 0; - AVND_SU_SI_REC *next_si = 0; - uint32_t rc = NCSCC_RC_SUCCESS; - TRACE("Removing assignments from '%s'", su->name.value); - - m_AVND_SU_ASSIGN_PEND_SET(su); - - /* scan the su-si list & remove the sis */ - for (si = (AVND_SU_SI_REC *)m_NCS_DBLIST_FIND_FIRST(&su->si_list); si;) { - next_si = (AVND_SU_SI_REC *)m_NCS_DBLIST_FIND_NEXT(&si->su_dll_node); - rc = avnd_su_si_remove(cb, su, si); - if (NCSCC_RC_SUCCESS != rc) { - LOG_ER("failed to remove SI assignment from '%s'", - su->name.value); - break; - } - si = next_si; - } - } } else { /* request director to orchestrate component failover */ rc = avnd_di_oper_send(cb, failed_comp->su, AVSV_ERR_RCVR_SU_FAILOVER); @@ -1382,10 +1360,13 @@ uint32_t avnd_err_restart_esc_level_2(AV TRACE_ENTER(); /* first time in this level */ - if (su->sufailover) + if (su->sufailover) { *esc_rcvr = AVSV_ERR_RCVR_SU_FAILOVER; - else + } else if (su->sufailover == false && su->is_ncs == false && cb->is_avd_down == true) { + *esc_rcvr = AVSV_ERR_RCVR_SU_FAILOVER; + } else { *esc_rcvr = static_cast<AVSV_ERR_RCVR>(SA_AMF_COMPONENT_FAILOVER); + } /* External components are not supposed to escalate SU Failover of cluster components. For Ext component, SU Failover will be limited to @@ -1450,10 +1431,14 @@ AVSV_ERR_RCVR avnd_err_esc_su_failover(A TRACE_ENTER(); /* initialize */ - if (su->sufailover) + if (su->sufailover) { *esc_rcvr = AVSV_ERR_RCVR_SU_FAILOVER; - else + } else if (su->sufailover == false && su->is_ncs == false && cb->is_avd_down == true) { + LOG_NO("Director is down. Escalate to SU failover for '%s'",su->name.value); + *esc_rcvr = AVSV_ERR_RCVR_SU_FAILOVER; + } else { *esc_rcvr = static_cast<AVSV_ERR_RCVR>(SA_AMF_COMPONENT_FAILOVER); + } if (true == su->su_is_external) { /* External component should not contribute to NODE FAILOVER of cluster diff --git a/osaf/services/saf/amf/amfnd/susm.cc b/osaf/services/saf/amf/amfnd/susm.cc --- a/osaf/services/saf/amf/amfnd/susm.cc +++ b/osaf/services/saf/amf/amfnd/susm.cc @@ -738,8 +738,13 @@ uint32_t avnd_su_si_remove(AVND_CB *cb, /* if no si is specified, the action is aimed at all the sis... pick up any si */ curr_si = (si) ? si : (AVND_SU_SI_REC *)m_NCS_DBLIST_FIND_FIRST(&su->si_list); - if (!curr_si) + if (!curr_si) { + // after headless, we may have a buffered susi remove msg + // if the susi can't be found (already removed), reset flag + LOG_NO("no SI found in '%s'", su->name.value); + m_AVND_SU_ALL_SI_RESET(su); goto done; + } /* initiate the si removal for pi su */ if (m_AVND_SU_IS_PREINSTANTIABLE(su)) { @@ -3474,10 +3479,19 @@ uint32_t avnd_su_pres_instfailed_compuni */ bool sufailover_in_progress(const AVND_SU *su) { + TRACE_ENTER2("%s", su->name.value); if (m_AVND_SU_IS_FAILED(su) && (su->sufailover) && (!m_AVND_SU_IS_RESTART(su)) && - (avnd_cb->oper_state != SA_AMF_OPERATIONAL_DISABLED) && (!su->is_ncs)) + (avnd_cb->oper_state != SA_AMF_OPERATIONAL_DISABLED) && (!su->is_ncs)) { + TRACE_LEAVE(); return true; - return false; + } else if (m_AVND_SU_IS_FAILED(su) && (su->sufailover == false) && (!m_AVND_SU_IS_RESTART(su)) && + (avnd_cb->oper_state != SA_AMF_OPERATIONAL_DISABLED) && (!su->is_ncs) && avnd_cb->is_avd_down == true) { + TRACE_LEAVE(); + return true; + } else { + TRACE_LEAVE(); + return false; + } } /** ------------------------------------------------------------------------------ Site24x7 APM Insight: Get Deep Visibility into Application Performance APM + Mobile APM + RUM: Monitor 3 App instances at just $35/Month Monitor end-to-end web transactions and take corrective actions now Troubleshoot faster and improve end-user experience. Signup Now! http://pubads.g.doubleclick.net/gampad/clk?id=272487151&iu=/4140 _______________________________________________ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel