Hi Praveen,

Good that you have sent them as patch series and thanks for working on this 
long awaited ticket. 
A quick question.

Can you briefly highlight during which scenario the **autorepair is taken into 
account by this patch.

Thanks,
Mathi.

> -----Original Message-----
> From: Praveen Malviya
> Sent: Friday, June 07, 2013 12:10 PM
> To: [email protected]; Mathivanan Naickan Palanivelu; Nagendra
> Kumar
> Cc: [email protected]
> Subject: [PATCH 6 of 6] amf: handle sufailover in SU FSM and Comp FSM at
> amfnd [#98]
> 
>  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);
> +             }
> +     }
> +
> 
>       /* if already enabled, stop PM & AM */
>       if (prv_st == SA_AMF_PRESENCE_INSTANTIATED &&
> @@ -1065,8 +1086,8 @@ uint32_t avnd_comp_clc_st_chng_prc(AVND_
>                       if (m_AVND_COMP_IS_FAILED(comp) && !comp-
> >csi_list.n_nodes &&
>                           !m_AVND_SU_IS_ADMN_TERM(comp->su) &&
>                           (cb->oper_state ==
> SA_AMF_OPERATIONAL_ENABLED)) {
> -                             /* No need to restart component during
> shutdown */
> -                             if (!m_AVND_IS_SHUTTING_DOWN(cb))
> +                             /* No need to restart component during
> shutdown and during sufailover*/
> +                             if (!m_AVND_IS_SHUTTING_DOWN(cb) &&
> !avnd_sufailover_in_progress(comp->su))
>                                       rc = avnd_comp_clc_fsm_trigger(cb,
> comp, AVND_COMP_CLC_PRES_FSM_EV_INST);
>                       } else if (m_AVND_COMP_IS_FAILED(comp) &&
> !comp->csi_list.n_nodes) {
>                               m_AVND_COMP_FAILED_RESET(comp);
>       /*if we moved from restart -> term
> @@ -1099,33 +1120,38 @@ uint32_t avnd_comp_clc_st_chng_prc(AVND_
>                               goto done;
>                       m_AVND_SEND_CKPT_UPDT_ASYNC_UPDT(cb,
> comp, AVND_CKPT_COMP_OPER_STATE);
> 
> -                     if (!m_AVND_COMP_IS_FAILED(comp)) {
> -                             /* csi-set / csi-rem succeeded.. generate csi-
> done indication */
> -                             csi =
> m_AVND_CSI_REC_FROM_COMP_DLL_NODE_GET(m_NCS_DBLIST_FIND_FI
> RST(&comp->csi_list));
> -                             osafassert(csi);
> -                             if
> (m_AVND_COMP_CSI_CURR_ASSIGN_STATE_IS_ASSIGNING(csi))
> -                                     rc = avnd_comp_csi_assign_done(cb,
> comp,
> -
> m_AVND_COMP_IS_ALL_CSI(comp) ? 0 : csi);
> -                             else if
> (m_AVND_COMP_CSI_CURR_ASSIGN_STATE_IS_REMOVING(csi))
> -                                     rc =
> avnd_comp_csi_remove_done(cb, comp,
> -
> m_AVND_COMP_IS_ALL_CSI(comp) ? 0 : csi);
> -                             if (NCSCC_RC_SUCCESS != rc)
> -                                     goto done;
> -                     } else {
> -                             /* failed su is ready to take on si assignment..
> inform avd */
> -                             if (!comp->csi_list.n_nodes) {
> -                                     m_AVND_SU_IS_ENABLED(comp-
> >su, is_en);
> -                                     if (true == is_en) {
> -
>       m_AVND_SU_OPER_STATE_SET(comp-
> >su,SA_AMF_OPERATIONAL_ENABLED);
> -
>       m_AVND_SEND_CKPT_UPDT_ASYNC_UPDT(cb, comp->su,
> AVND_CKPT_SU_OPER_STATE);
> -                                             rc = avnd_di_oper_send(cb,
> comp->su, 0);
> -                                             if (NCSCC_RC_SUCCESS != rc)
> -                                                     goto done;
> +                     if (avnd_sufailover_in_progress(comp->su)) {
> +                             /*Do not reset any flag, this will be done as a
> part of repair.*/
> +                     }
> +                     else {
> +                             if (!m_AVND_COMP_IS_FAILED(comp)) {
> +                                     /* csi-set / csi-rem succeeded..
> generate csi-done indication */
> +                                     csi =
> m_AVND_CSI_REC_FROM_COMP_DLL_NODE_GET(m_NCS_DBLIST_FIND_FI
> RST(&comp->csi_list));
> +                                     osafassert(csi);
> +                                     if
> (m_AVND_COMP_CSI_CURR_ASSIGN_STATE_IS_ASSIGNING(csi))
> +                                             rc =
> avnd_comp_csi_assign_done(cb, comp,
> +
>       m_AVND_COMP_IS_ALL_CSI(comp) ? 0 : csi);
> +                                     else if
> (m_AVND_COMP_CSI_CURR_ASSIGN_STATE_IS_REMOVING(csi))
> +                                             rc =
> avnd_comp_csi_remove_done(cb, comp,
> +
>       m_AVND_COMP_IS_ALL_CSI(comp) ? 0 : csi);
> +                                     if (NCSCC_RC_SUCCESS != rc)
> +                                             goto done;
> +                             } else {
> +                                     /* failed su is ready to take on si
> assignment.. inform avd */
> +                                     if (!comp->csi_list.n_nodes) {
> +
>       m_AVND_SU_IS_ENABLED(comp->su, is_en);
> +                                             if (true == is_en) {
> +
>       m_AVND_SU_OPER_STATE_SET(comp-
> >su,SA_AMF_OPERATIONAL_ENABLED);
> +
>       m_AVND_SEND_CKPT_UPDT_ASYNC_UPDT(cb, comp->su,
> AVND_CKPT_SU_OPER_STATE);
> +                                                     rc =
> avnd_di_oper_send(cb, comp->su, 0);
> +                                                     if
> (NCSCC_RC_SUCCESS != rc)
> +                                                             goto done;
> +                                             }
> +
>       m_AVND_COMP_FAILED_RESET(comp);
> +
>       m_AVND_SEND_CKPT_UPDT_ASYNC_UPDT(cb, comp,
> AVND_CKPT_COMP_FLAG_CHANGE);
>                                       }
> -
>       m_AVND_COMP_FAILED_RESET(comp);
> -
>       m_AVND_SEND_CKPT_UPDT_ASYNC_UPDT(cb, comp,
> AVND_CKPT_COMP_FLAG_CHANGE);
> +
>                               }
> -
>                       }
>               }
> 
> @@ -1190,12 +1216,17 @@ uint32_t avnd_comp_clc_st_chng_prc(AVND_
> 
>               /* terminating -> uninstantiated */
>               if ((SA_AMF_PRESENCE_TERMINATING == prv_st) &&
> (SA_AMF_PRESENCE_UNINSTANTIATED == final_st)) {
> -                     /* npi comps are enabled in uninstantiated state */
> -                     m_AVND_COMP_OPER_STATE_SET(comp,
> SA_AMF_OPERATIONAL_ENABLED);
> -                     m_AVND_COMP_OPER_STATE_AVD_SYNC(cb,
> comp, rc);
> -                     if (NCSCC_RC_SUCCESS != rc)
> -                             goto done;
> -                     m_AVND_SEND_CKPT_UPDT_ASYNC_UPDT(cb,
> comp, AVND_CKPT_COMP_OPER_STATE);
> +                     if (avnd_sufailover_in_progress(comp->su)) {
> +                             /*Do not reset any flag, this will be done as a
> part of repair.*/
> +                     }
> +                     else {
> +                             /* npi comps are enabled in uninstantiated
> state */
> +                             m_AVND_COMP_OPER_STATE_SET(comp,
> SA_AMF_OPERATIONAL_ENABLED);
> +
>       m_AVND_COMP_OPER_STATE_AVD_SYNC(cb, comp, rc);
> +                             if (NCSCC_RC_SUCCESS != rc)
> +                                     goto done;
> +
>       m_AVND_SEND_CKPT_UPDT_ASYNC_UPDT(cb, comp,
> AVND_CKPT_COMP_OPER_STATE);
> +                     }
>               }
> 
>               /* Instantiating -> Instantiationfailed */
> @@ -2763,7 +2794,7 @@ uint32_t avnd_comp_clc_cmd_execute(AVND_
>  uint32_t avnd_instfail_su_failover(AVND_CB *cb, AVND_SU *su,
> AVND_COMP *failed_comp)
>  {
>       uint32_t rc = NCSCC_RC_SUCCESS;
> -     TRACE_ENTER2("Executing SU Failover: Instantiation failed SU: '%s' :
> Failed component: '%s'",
> +     TRACE_ENTER2("Executing Component Failover: Instantiation failed
> SU: '%s' : Failed component: '%s'",
>                                                               su-
> >name.value, failed_comp->name.value);
> 
>       /* mark the comp failed */
> @@ -2812,14 +2843,39 @@ uint32_t avnd_instfail_su_failover(AVND_
>               m_AVND_SEND_CKPT_UPDT_ASYNC_UPDT(cb, su,
> AVND_CKPT_SU_OPER_STATE);
> 
>               /* inform AvD */
> -             rc = avnd_di_oper_send(cb, su,
> AVSV_ERR_RCVR_SU_FAILOVER);
> +             rc = avnd_di_oper_send(cb, su,
> SA_AMF_COMPONENT_FAILOVER);
>       }
> 
>   done:
>       if (rc == NCSCC_RC_SUCCESS)
> -             LOG_NO("SU Failover trigerred for '%s': Failed component:
> '%s'",
> +             LOG_NO("Component Failover trigerred for '%s': Failed
> component: '%s'",
>                       su->name.value, failed_comp->name.value);
>       TRACE_LEAVE2("%u", rc);
>       return rc;
>  }
> 
> +/**
> + * Check if all components have been terminated in the su.
> + * @param su
> + * @return bool
> + */
> +static bool all_comps_terminated_in_su(AVND_SU *su)
> +{
> +     AVND_COMP *comp;
> +
> +     for (comp =
> m_AVND_COMP_FROM_SU_DLL_NODE_GET(m_NCS_DBLIST_FIND_FIRST(
> &su->comp_list));
> +                     comp;
> +                     comp =
> m_AVND_COMP_FROM_SU_DLL_NODE_GET(m_NCS_DBLIST_FIND_NEXT(
> &comp->su_dll_node))) {
> +
> +             if ((comp->pres != SA_AMF_PRESENCE_UNINSTANTIATED)
> &&
> +                             (comp->pres !=
> SA_AMF_PRESENCE_INSTANTIATION_FAILED) &&
> +                             (comp->pres !=
> SA_AMF_PRESENCE_TERMINATION_FAILED)) {
> +
> +                     TRACE("'%s' not terminated, pres.st=%u", comp-
> >name.value, comp->pres);
> +                     return false;
> +             }
> +     }
> +
> +     return true;
> +}
> +
> diff --git a/osaf/services/saf/avsv/avnd/avnd_comp.c
> b/osaf/services/saf/avsv/avnd/avnd_comp.c
> --- a/osaf/services/saf/avsv/avnd/avnd_comp.c
> +++ b/osaf/services/saf/avsv/avnd/avnd_comp.c
> @@ -872,7 +872,7 @@ uint32_t avnd_comp_unreg_prc(AVND_CB *cb
>                       m_AVND_SEND_CKPT_UPDT_ASYNC_UPDT(cb,
> comp->su, AVND_CKPT_SU_OPER_STATE);
> 
>                       /* inform AvD */
> -                     rc = avnd_di_oper_send(cb, comp->su, 0);
> +                     rc = avnd_di_oper_send(cb, comp->su,
> SA_AMF_COMPONENT_FAILOVER);
>               }
>       }
> 
> diff --git a/osaf/services/saf/avsv/avnd/avnd_su.c
> b/osaf/services/saf/avsv/avnd/avnd_su.c
> --- a/osaf/services/saf/avsv/avnd/avnd_su.c
> +++ b/osaf/services/saf/avsv/avnd/avnd_su.c
> @@ -494,6 +494,7 @@ uint32_t avnd_evt_su_admin_op_req(AVND_C
>               m_AVND_SU_OPER_STATE_SET(su,
> SA_AMF_OPERATIONAL_ENABLED);
>               avnd_di_uns32_upd_send(AVSV_SA_AMF_SU,
> saAmfSUOperState_ID, &su->name, su->oper);
>               avnd_su_pres_state_set(su,
> SA_AMF_PRESENCE_UNINSTANTIATED);
> +             rc = avnd_di_oper_send(cb, su, 0);
> 
>               if (!comp_in_term_failed_state())
>                       avnd_failed_state_file_delete();
> diff --git a/osaf/services/saf/avsv/avnd/avnd_susm.c
> b/osaf/services/saf/avsv/avnd/avnd_susm.c
> --- a/osaf/services/saf/avsv/avnd/avnd_susm.c
> +++ b/osaf/services/saf/avsv/avnd/avnd_susm.c
> @@ -1411,17 +1411,24 @@ uint32_t avnd_su_pres_st_chng_prc(AVND_C
>               /* terminating -> uninstantiated */
>               if ((SA_AMF_PRESENCE_TERMINATING == prv_st) &&
> (SA_AMF_PRESENCE_UNINSTANTIATED == final_st)) {
>                       TRACE("SU Terminating -> Uninstantiated");
> -                     /* reset the su failed flag */
> -                     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);
> +                     if (avnd_sufailover_in_progress(su)) {
> +                             /*Do not reset any flag, this will be done as a
> part of repair.*/
>                       }
> +                     else
> +                     {
> +                             /* reset the su failed flag */
> +                             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);
> +                             }
> 
> -                     /* reset the su restart falg */
> -                     if (m_AVND_SU_IS_RESTART(su)) {
> -                             m_AVND_SU_RESTART_RESET(su);
> -
>       m_AVND_SEND_CKPT_UPDT_ASYNC_UPDT(cb, su,
> AVND_CKPT_SU_FLAG_CHANGE);
> +                             /* reset the su restart flag */
> +                             if (m_AVND_SU_IS_RESTART(su)) {
> +                                     m_AVND_SU_RESTART_RESET(su);
> +
>       m_AVND_SEND_CKPT_UPDT_ASYNC_UPDT(cb, su,
> AVND_CKPT_SU_FLAG_CHANGE);
> +                             }
>                       }
> +                     goto done;
>               }
> 
>               /* instantiating -> inst-failed */
> @@ -1430,7 +1437,7 @@ uint32_t avnd_su_pres_st_chng_prc(AVND_C
>                       /* send the su-oper state msg (to indicate that
> instantiation failed) */
>                       m_AVND_SU_OPER_STATE_SET(su,
> SA_AMF_OPERATIONAL_DISABLED);
>                       m_AVND_SEND_CKPT_UPDT_ASYNC_UPDT(cb, su,
> AVND_CKPT_SU_OPER_STATE);
> -                     rc = avnd_di_oper_send(cb, su,
> AVSV_ERR_RCVR_SU_FAILOVER);
> +                     rc = avnd_di_oper_send(cb, su,
> SA_AMF_COMPONENT_FAILOVER);
>                       if (NCSCC_RC_SUCCESS != rc)
>                               goto done;
>               }
> @@ -1445,7 +1452,7 @@ uint32_t avnd_su_pres_st_chng_prc(AVND_C
>                               TRACE("SU oper state is enabled");
>                               m_AVND_SU_OPER_STATE_SET(su,
> SA_AMF_OPERATIONAL_DISABLED);
> 
>       m_AVND_SEND_CKPT_UPDT_ASYNC_UPDT(cb, su,
> AVND_CKPT_SU_OPER_STATE);
> -                             rc = avnd_di_oper_send(cb, su,
> AVSV_ERR_RCVR_SU_FAILOVER);
> +                             rc = avnd_di_oper_send(cb, su,
> SA_AMF_COMPONENT_FAILOVER);
>                               if (NCSCC_RC_SUCCESS != rc)
>                                       goto done;
>                       }
> @@ -1459,7 +1466,7 @@ uint32_t avnd_su_pres_st_chng_prc(AVND_C
>                       m_AVND_SU_OPER_STATE_SET(su,
> SA_AMF_OPERATIONAL_DISABLED);
>                       m_AVND_SEND_CKPT_UPDT_ASYNC_UPDT(cb, su,
> AVND_CKPT_SU_OPER_STATE);
>                       /* inform AvD about oper state change */
> -                     rc = avnd_di_oper_send(cb, su, 0);
> +                     rc = avnd_di_oper_send(cb, su,
> SA_AMF_COMPONENT_FAILOVER);
>                       if (NCSCC_RC_SUCCESS != rc)
>                               goto done;
> 
> @@ -1503,7 +1510,7 @@ uint32_t avnd_su_pres_st_chng_prc(AVND_C
>                       m_AVND_SU_OPER_STATE_SET(su,
> SA_AMF_OPERATIONAL_DISABLED);
>                       m_AVND_SEND_CKPT_UPDT_ASYNC_UPDT(cb, su,
> AVND_CKPT_SU_OPER_STATE);
> 
> -                     rc = avnd_di_oper_send(cb, su,
> AVSV_ERR_RCVR_SU_FAILOVER);
> +                     rc = avnd_di_oper_send(cb, su,
> SA_AMF_COMPONENT_FAILOVER);
> 
>               }
> 
> @@ -1521,13 +1528,19 @@ uint32_t avnd_su_pres_st_chng_prc(AVND_C
>                       TRACE("Terminating -> UnInstantiated");
>                       /* si assignment/removal success.. generate si-oper
> done indication */
>                       rc = avnd_su_si_oper_done(cb, su,
> m_AVND_SU_IS_ALL_SI(su) ? 0 : si);
> -                     m_AVND_SU_ALL_SI_RESET(su);
> -                     m_AVND_SEND_CKPT_UPDT_ASYNC_UPDT(cb, su,
> AVND_CKPT_SU_FLAG_CHANGE);
> +                     if (avnd_sufailover_in_progress(su)) {
> +                             /*Do not reset any flag, this will be done as a
> part of repair.*/
> +                     }
> +                     else
> +                     {
> +                             m_AVND_SU_ALL_SI_RESET(su);
> +
>       m_AVND_SEND_CKPT_UPDT_ASYNC_UPDT(cb, su,
> AVND_CKPT_SU_FLAG_CHANGE);
> 
> -                     /* npi su is enabled in uninstantiated state */
> -                     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);
> -                     rc = avnd_di_oper_send(cb, su, 0);
> +                             /* npi su is enabled in uninstantiated state */
> +                             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);
> +                             rc = avnd_di_oper_send(cb, su, 0);
> +                     }
>               }
> 
>               /* terminating/instantiated/restarting -> term-failed */
> @@ -1538,7 +1551,7 @@ uint32_t avnd_su_pres_st_chng_prc(AVND_C
>                       m_AVND_SU_OPER_STATE_SET(su,
> SA_AMF_OPERATIONAL_DISABLED);
>                       m_AVND_SEND_CKPT_UPDT_ASYNC_UPDT(cb, su,
> AVND_CKPT_SU_OPER_STATE);
>                       /* inform AvD about oper state change */
> -                     rc = avnd_di_oper_send(cb, su, 0);
> +                     rc = avnd_di_oper_send(cb, su,
> SA_AMF_COMPONENT_FAILOVER);
> 
>                       /* si assignment/removal failed.. inform AvD */
>                       rc = avnd_di_susi_resp_send(cb, su,
> m_AVND_SU_IS_ALL_SI(su) ? 0 : si);
> @@ -2073,11 +2086,9 @@ uint32_t avnd_su_pres_inst_compterming_h
>       TRACE_ENTER2("CompTerminating event in the Instantiated
> state:'%s' : '%s'",
>                                su->name.value, compname);
> 
> -     if (m_AVND_SU_IS_PREINSTANTIABLE(su)) {
> -             if (m_AVND_SU_IS_FAILED(su)) {
> -                     /* transition to terminating state */
> -                     avnd_su_pres_state_set(su,
> SA_AMF_PRESENCE_TERMINATING);
> -             }
> +     if (m_AVND_SU_IS_FAILED(su)) {
> +             /* transition to terminating state */
> +             avnd_su_pres_state_set(su,
> SA_AMF_PRESENCE_TERMINATING);
>       }
> 
>       TRACE_LEAVE2("%u", rc);
> @@ -2246,7 +2257,9 @@ uint32_t avnd_su_pres_terming_compuninst
>                                su->name.value, compname);
> 
>       /* This case is for handling the case of admn su term while su is
> restarting */
> -     if (m_AVND_SU_IS_PREINSTANTIABLE(su) &&
> m_AVND_SU_IS_FAILED(su) && m_AVND_SU_IS_ADMN_TERM(su)) {
> +     if (m_AVND_SU_IS_PREINSTANTIABLE(su) &&
> m_AVND_SU_IS_FAILED(su) &&
> +                     (m_AVND_SU_IS_ADMN_TERM(su) ||
> avnd_sufailover_in_progress(su)))
> +     {
>               TRACE("PI SU");
>               for (curr_comp =
> m_AVND_COMP_FROM_SU_DLL_NODE_GET(m_NCS_DBLIST_FIND_FIRST(
> &su->comp_list));
>                    curr_comp;
> @@ -2262,6 +2275,7 @@ uint32_t avnd_su_pres_terming_compuninst
>               }
>       }
> 
> +
>       /*
>        * If pi su, pick the prv pi comp & trigger it's FSM with TermEv.
>        */
> @@ -2292,7 +2306,7 @@ uint32_t avnd_su_pres_terming_compuninst
>       /*
>        * If npi su, pick the prv csi & trigger it's comp fsm with TermEv.
>        */
> -     if (!m_AVND_SU_IS_PREINSTANTIABLE(su)) {
> +     if (!m_AVND_SU_IS_PREINSTANTIABLE(su) &&
> !m_AVND_SU_IS_FAILED(su)) {
>               TRACE("NPI SU");
>               /* get the only csi rec */
>               curr_csi =
> m_AVND_CSI_REC_FROM_COMP_DLL_NODE_GET(m_NCS_DBLIST_FIND_FI
> RST(&comp->csi_list));
> @@ -2718,3 +2732,18 @@ uint32_t avnd_su_pres_instfailed_compuni
>       return rc;
>  }
> 
> +/**
> + * This function checks if the sufailover is going on.
> + * @param su: ptr to the SU .
> + *
> + * @return true/false.
> + */
> +bool avnd_sufailover_in_progress(AVND_SU *su)
> +{
> +     if (m_AVND_SU_IS_FAILED(su) && (su->sufailover) &&
> +                     ((su->sg_redundancy_model ==
> SA_AMF_2N_REDUNDANCY_MODEL) ||
> +                      (su->sg_redundancy_model ==
> SA_AMF_NO_REDUNDANCY_MODEL)) &&
> +                      (avnd_cb->oper_state !=
> SA_AMF_OPERATIONAL_DISABLED) && (!su->is_ncs))
> +                             return true;
> +     return false;
> +}

------------------------------------------------------------------------------
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