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

Reply via email to