Ack with comments: 1. Header of su_evaluate_restarting_state is missing. 2. npi_su_restarting_to_instantiated can return SUCCESS without using rc.
Thanks -Nagu > -----Original Message----- > From: Praveen Malviya > Sent: 16 July 2014 12:55 > To: [email protected]; [email protected]; Nagendra Kumar > Cc: [email protected] > Subject: [PATCH 1 of 1] amfnd : mark single comp SU RESTARTING during > component restart [#358] > > osaf/services/saf/amf/amfnd/susm.cc | 123 ++++++++++++++++++++++++---- > ------- > 1 files changed, 85 insertions(+), 38 deletions(-) > > > If a SU has only one component and component enters into restarting state due > to > component restart recovery, RESTARTING state of SU is not observed. > > In the mentioned case, SU remain in INSTANTIATED state while its only > component is restarting. Thus a user application will not get state > change notification for SU. At present only in surestart escalation > a SU is marked RESTARTING. > > Patch marks presence state of SU RESTARTING when its single component is > in RESTARTING state during component restart recovery. > > 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 > @@ -1459,6 +1459,62 @@ uint32_t avnd_su_pres_fsm_run(AVND_CB *c > return rc; > } > > + > + > +/** > + * @brief Reset flags when a NPI SU moves from RESTARTING to > INSTANTIATED state. > + * @param su > + * @return NCSCC_RC_SUCCESS/NCSCC_RC_FAILURE > + */ > + > +static uint32_t npi_su_restarting_to_instantiated(AVND_SU *su) > +{ > + uint32_t rc = NCSCC_RC_SUCCESS; > + > + if (m_AVND_SU_IS_RESTART(su)) { > + m_AVND_SU_FAILED_RESET(su); > + m_AVND_SU_RESTART_RESET(su); > + m_AVND_SEND_CKPT_UPDT_ASYNC_UPDT(avnd_cb, su, > AVND_CKPT_SU_FLAG_CHANGE); > + } > + > + return rc; > +} > + > + > +/** > + * @brief Reset flags when a PI SU moves from RESTARTING to INSTANTIATED > state. > + * @param su > + * @return NCSCC_RC_SUCCESS/NCSCC_RC_FAILURE > + */ > +static uint32_t pi_su_restarting_to_instantiated(AVND_SU *su) > +{ > + uint32_t rc = NCSCC_RC_SUCCESS; > + > + /* A SU can be restarted because all components faulted with > component > + restart recovery policy or because of surestart escalation. */ > + if (m_AVND_SU_IS_RESTART(su)) { > + /* reset the su failed flag & set the oper state to enabled */ > + if (m_AVND_SU_IS_FAILED(su)) { > + m_AVND_SU_FAILED_RESET(su); > + m_AVND_SEND_CKPT_UPDT_ASYNC_UPDT(avnd_cb, > su, AVND_CKPT_SU_FLAG_CHANGE); > + m_AVND_SU_OPER_STATE_SET(su, > SA_AMF_OPERATIONAL_ENABLED); > + m_AVND_SEND_CKPT_UPDT_ASYNC_UPDT(avnd_cb, > su, AVND_CKPT_SU_OPER_STATE); > + TRACE("Setting the Oper state to Enabled"); > + } > + > + /* > + * reassign all the sis... > + * it's possible that the si was never assigned. send su-oper > + * enable msg instead. > + */ > + if (su->si_list.n_nodes) > + rc = avnd_su_si_reassign(avnd_cb, su); > + else > + rc = avnd_di_oper_send(avnd_cb, su, 0); > + } > + > + return rc; > +} > > /************************************************************ > **************** > Name : avnd_su_pres_st_chng_prc > > @@ -1479,7 +1535,8 @@ uint32_t avnd_su_pres_st_chng_prc(AVND_C > AVND_SU_SI_REC *si = 0; > bool is_en; > uint32_t rc = NCSCC_RC_SUCCESS; > - TRACE_ENTER2("'%s'", su->name.value); > + > + TRACE_ENTER2("'%s' %s => %s",su->name.value, > presence_state[prv_st],presence_state[final_st]); > > /* pi su */ > if (m_AVND_SU_IS_PREINSTANTIABLE(su)) { > @@ -1508,32 +1565,9 @@ uint32_t avnd_su_pres_st_chng_prc(AVND_C > } > > /* restarting -> instantiated */ > - if ((SA_AMF_PRESENCE_RESTARTING == prv_st) && > (SA_AMF_PRESENCE_INSTANTIATED == final_st)) { > - TRACE("SU Restarting -> Instantiated"); > - /* reset the su failed flag & set the oper state to > enabled */ > - if (m_AVND_SU_IS_FAILED(su)) { > - m_AVND_SU_FAILED_RESET(su); > - > m_AVND_SEND_CKPT_UPDT_ASYNC_UPDT(cb, su, > AVND_CKPT_SU_FLAG_CHANGE); > - m_AVND_SU_OPER_STATE_SET(su, > SA_AMF_OPERATIONAL_ENABLED); > - > m_AVND_SEND_CKPT_UPDT_ASYNC_UPDT(cb, su, > AVND_CKPT_SU_OPER_STATE); > - TRACE("Setting the Oper state to Enabled"); > - } > - > - /* > - * reassign all the sis... > - * it's possible that the si was never assigned. send > su- > oper > - * enable msg instead. > - */ > - if (su->si_list.n_nodes) { > - TRACE("Reassigning the SIs"); > - rc = avnd_su_si_reassign(cb, su); > - } > - else > - rc = avnd_di_oper_send(cb, su, 0); > - if (NCSCC_RC_SUCCESS != rc) > - goto done; > - > - } > + if ((SA_AMF_PRESENCE_RESTARTING == prv_st) && > (SA_AMF_PRESENCE_INSTANTIATED == final_st)) > + rc = pi_su_restarting_to_instantiated(su); > + > > /* terminating -> instantiated */ > if ((SA_AMF_PRESENCE_TERMINATING == prv_st) && > (SA_AMF_PRESENCE_INSTANTIATED == final_st)) { > @@ -1682,14 +1716,8 @@ uint32_t avnd_su_pres_st_chng_prc(AVND_C > > } > > - /* restarting -> instantiated */ > - if ((SA_AMF_PRESENCE_RESTARTING == prv_st) && > (SA_AMF_PRESENCE_INSTANTIATED == final_st)) { > - TRACE("Restarting -> Instantiated"); > - /* reset the failed & restart flag */ > - m_AVND_SU_FAILED_RESET(su); > - m_AVND_SU_RESTART_RESET(su); > - m_AVND_SEND_CKPT_UPDT_ASYNC_UPDT(cb, su, > AVND_CKPT_SU_FLAG_CHANGE); > - } > + if ((SA_AMF_PRESENCE_RESTARTING == prv_st) && > (SA_AMF_PRESENCE_INSTANTIATED == final_st)) > + rc = npi_su_restarting_to_instantiated(su); > > /* terminating -> uninstantiated */ > if ((SA_AMF_PRESENCE_TERMINATING == prv_st) && > (SA_AMF_PRESENCE_UNINSTANTIATED == final_st)) { > @@ -2230,6 +2258,19 @@ uint32_t avnd_su_pres_inst_surestart_hdl > return rc; > } > > +static bool su_evaluate_restarting_state(AVND_SU *su) > +{ > + for (AVND_COMP *comp = > m_AVND_COMP_FROM_SU_DLL_NODE_GET(m_NCS_DBLIST_FIND_FIRST(&s > u->comp_list)); > + comp; > + comp = > m_AVND_COMP_FROM_SU_DLL_NODE_GET(m_NCS_DBLIST_FIND_NEXT(&c > omp->su_dll_node))) { > + if (comp->pres !=SA_AMF_PRESENCE_RESTARTING) { > + return false; > + } > + } > + > + return true; > +} > + > > /************************************************************ > **************** > Name : avnd_su_pres_inst_comprestart_hdler > > @@ -2248,8 +2289,12 @@ uint32_t avnd_su_pres_inst_comprestart_h > { /* TBD */ > uint32_t rc = NCSCC_RC_SUCCESS; > const char *compname = comp ? (char*)comp->name.value : "none"; > - TRACE_1("Component restart event in the Instantiated state, returning > success:'%s' : '%s'", > + TRACE_1("Component restart event in the Instantiated state, '%s' : > '%s'", > su->name.value, compname); > + > + if (su_evaluate_restarting_state(su) == true) > + avnd_su_pres_state_set(su, > SA_AMF_PRESENCE_RESTARTING); > + > return rc; > } > > @@ -2662,7 +2707,8 @@ uint32_t avnd_su_pres_restart_compinst_h > curr_comp = > m_AVND_COMP_FROM_SU_DLL_NODE_GET(m_NCS_DBLIST_FIND_NEXT(&c > urr_comp->su_dll_node))) { > TRACE("PI SU:'%s'", su->name.value); > /* restart the pi comp */ > - if > (m_AVND_COMP_TYPE_IS_PREINSTANTIABLE(curr_comp)) { > + if > (m_AVND_COMP_TYPE_IS_PREINSTANTIABLE(curr_comp) && > + (m_AVND_SU_IS_RESTART(su))) { > rc = avnd_comp_clc_fsm_run(cb, curr_comp, > AVND_COMP_CLC_PRES_FSM_EV_RESTART); > if (NCSCC_RC_SUCCESS != rc) > goto done; > @@ -2708,7 +2754,8 @@ uint32_t avnd_su_pres_restart_compinst_h > */ > if ((curr_csi != NULL) && > > (m_AVND_COMP_CSI_CURR_ASSIGN_STATE_IS_UNASSIGNED(curr_cs > i) == true) && > - (curr_csi->comp->pres != > SA_AMF_PRESENCE_RESTARTING)) { > + (curr_csi->comp->pres != > SA_AMF_PRESENCE_RESTARTING) && > + (m_AVND_SU_IS_RESTART(su))) { > /* we have another csi. trigger the comp fsm with > RestartEv */ > rc = avnd_comp_clc_fsm_trigger(cb, curr_csi->comp, > > AVND_COMP_CLC_PRES_FSM_EV_RESTART); ------------------------------------------------------------------------------ _______________________________________________ Opensaf-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/opensaf-devel
