On 7 June 2013 08:39, <[email protected]> wrote: > osaf/services/saf/avsv/avnd/avnd_clc.c | 130 > ++++++++++++++++++++++--------- > osaf/services/saf/avsv/avnd/avnd_comp.c | 2 +- > osaf/services/saf/avsv/avnd/avnd_su.c | 1 + > osaf/services/saf/avsv/avnd/avnd_susm.c | 81 +++++++++++++------ > 4 files changed, 150 insertions(+), 64 deletions(-) > > > With this patch amfnd informs amfd for failover of assignments when all > components are terminated successfully during suFailover. If some component > faults and SU moves to > inst/term failed state, compFailover will be performed. > > diff --git a/osaf/services/saf/avsv/avnd/avnd_clc.c > b/osaf/services/saf/avsv/avnd/avnd_clc.c > --- a/osaf/services/saf/avsv/avnd/avnd_clc.c > +++ b/osaf/services/saf/avsv/avnd/avnd_clc.c > @@ -72,6 +72,7 @@ uint32_t avnd_comp_clc_st_chng_prc(AVND_ > > static uint32_t avnd_comp_clc_resp(NCS_OS_PROC_EXECUTE_TIMED_CB_INFO *); > static uint32_t avnd_instfail_su_failover(AVND_CB *, AVND_SU *, AVND_COMP *); > +static bool all_comps_terminated_in_su(AVND_SU *su); > > /*************************************************************************** > ** C O M P O N E N T C L C F S M M A T R I X D E F I N I T I O N ** > @@ -840,9 +841,29 @@ uint32_t avnd_comp_clc_fsm_run(AVND_CB * > break; > } > } > - > /* get the prv presence state */ > prv_st = comp->pres; > + > + if (avnd_sufailover_in_progress(comp->su) && > + ((ev == AVND_COMP_CLC_PRES_FSM_EV_CLEANUP_SUCC) || > + (ev == AVND_COMP_CLC_PRES_FSM_EV_CLEANUP_FAIL))) > + { > + TRACE("SU_FAILOVER is in progress, event '%s'", > pres_state_evt[ev]); > + if (ev == AVND_COMP_CLC_PRES_FSM_EV_CLEANUP_FAIL) > + avnd_comp_pres_state_set(comp, > SA_AMF_PRESENCE_TERMINATION_FAILED); > + else > + avnd_comp_pres_state_set(comp, > SA_AMF_PRESENCE_UNINSTANTIATED); > + /* If all components terminated, finish sufailover at amfnd. > */ > + if (all_comps_terminated_in_su(comp->su)) > + { > + LOG_NO("Terminated all components in '%s'", > comp->su->name.value); > + LOG_NO("Informing director of sufailover"); > + rc = avnd_di_oper_send(cb, comp->su, > AVSV_ERR_RCVR_SU_FAILOVER); > + osafassert(NCSCC_RC_SUCCESS == rc); > + avnd_su_si_del(cb, &comp->su->name); > + } > + } > +
I definitively think the above belongs to the SU presence state machine. I did the change and it works the same but gets less changes and much cleaner. all_comps_terminated_in_su() means the same as su->pres==UNINSTANTIATED Comments? Thanks, Hans ------------------------------------------------------------------------------ This SF.net email is sponsored by Windows: Build for Windows Store. http://p.sf.net/sfu/windows-dev2dev _______________________________________________ Opensaf-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/opensaf-devel
