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

**autorepiar is one of the attributes of SG (saAmfSGAutoRepair). During 
sufailover AMF will perform recovery first.
If saAmfSGAutoRepair is true for the SG of faulted SU then AMF will perform 
auto-repair by enabling the SU.

Thanks
Praveen

On 21-Jun-13 5:39 PM, Mathivanan Naickan Palanivelu wrote:
> 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