> -----Original Message-----
> From: Hans Feldt [mailto:[email protected]]
> Sent: Tuesday, June 25, 2013 3:01 PM
> To: Mathivanan Naickan Palanivelu
> Cc: Praveen Malviya; Nagendra Kumar; [email protected]
> Subject: Re: [PATCH 6 of 6] amf: handle sufailover in SU FSM and Comp FSM
> at amfnd [#98]
> 
> 
> On 06/24/2013 04:39 PM, Mathivanan Naickan Palanivelu wrote:
> > Hi Praveen,
> >
> > Thanks for the clarification.
> > Please find some other comments below:
> >
> > - I'm sure you would have had a reason to do it this way, but I thought
> alternatively performing the repair at the AMFND itself(instead of notifying
> to AMFD) is one viable option!
> 
> Guess not it interferes with a potential auto adjust feature right?

I meant that we could avoid the 'extra step' of informing AMFD.
May be, we could reduce the latency (in repairing) if avoid going through AMFD.
Well, AMFND could be made aware of autoadjust attributes, isn't it!

> 
> > Some other comments I had in mind are:
> > - is si-si dependencies automatically taken care by these changes?
> > - are we honouring 'order' of termination of components based on the
> 'instantiationlevel'(in reverse)?
> 
> 3.11.1.3.2 SU failover:
> 
> "If the service unit is configured to fail over as a single entity
> (saAmfSUFailover set to SA_TRUE), all other components of the service unit
> are abruptly terminated"
> 
> Does not say anything about ordering. Should we add some defined ordering
> semantics on top of that you mean?
> 
> 
I meant the below. Also, SU failover 'effectively' involves restart of the 
failed SU!

> FYI just realized ordering and semantics of "SU restart" is wrong. Will
> write a defect.

I suspected this problem could exist.

Thanks,
Mathi.

> 
> Thanks,
> Hans
> 
> >
> > Thanks,
> > Mathi.
> >
> >
> >> -----Original Message-----
> >> From: praveen malviya
> >> Sent: Friday, June 21, 2013 6:20 PM
> >> To: Mathivanan Naickan Palanivelu
> >> Cc: [email protected]; Nagendra Kumar; opensaf-
> >> [email protected]
> >> Subject: Re: [PATCH 6 of 6] amf: handle sufailover in SU FSM and Comp
> FSM
> >> at amfnd [#98]
> >>
> >>>> 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