I tested as below:
1. SU lock/shutdown/unlock.
2. SI lock/shutdown/unlock.

During above steps:
a. Called saAmfHAStateGet before and after calling saAmfCSIQuiescingComplete in 
amf_csi_set_callback.
b. Called saAmfHAStateGet before and after calling saAmfCSIQuiescingComplete in 
amf_csi_remove_callback.

Got expected results.

Ack.

Thanks
-Nagu
> -----Original Message-----
> From: Minh Hon Chau [mailto:[email protected]]
> Sent: 16 September 2015 10:57
> To: [email protected]; Nagendra Kumar; Praveen Malviya;
> [email protected]
> Cc: [email protected]
> Subject: [PATCH 3 of 3] amfnd: Correct ha_state before returns to comp for
> saAmfHAStateGet [#1444]
> 
>  osaf/services/saf/amf/amfnd/comp.cc |  14 +++++++++++++-
>  1 files changed, 13 insertions(+), 1 deletions(-)
> 
> 
> Currently amfnd always returns SA_AMF_HA_QUIESCING to component even
> if
> component succeeds with saAmfCSIQuiescingComplete()
> 
> amfnd should return SA_AMF_HA_QUIESCED to component as amfnd had
> already
> reported SA_AMF_HA_QUIESCED to amfd. A potential problem is that
> component
> could get stuck in waiting for its service being moved to QUIESCED
> completely before it terminates its own service.
> 
> Patch figures the actual ha state based on current assign state of csi and
> ha state of si in the flow of saAmfHAStateGet.
> 
> diff --git a/osaf/services/saf/amf/amfnd/comp.cc
> b/osaf/services/saf/amf/amfnd/comp.cc
> --- a/osaf/services/saf/amf/amfnd/comp.cc
> +++ b/osaf/services/saf/amf/amfnd/comp.cc
> @@ -294,6 +294,7 @@ uint32_t avnd_evt_ava_ha_get_evh(AVND_CB
>       AVND_COMP_CSI_REC *csi_rec = 0;
>       uint32_t rc = NCSCC_RC_SUCCESS;
>       SaAisErrorT amf_rc = SA_AIS_OK;
> +     SaAmfHAStateT *ha_rc = &ha_get->ha;
>       bool msg_from_avnd = false, int_ext_comp = false;
> 
>       TRACE_ENTER();
> @@ -325,9 +326,20 @@ uint32_t avnd_evt_ava_ha_get_evh(AVND_CB
>       if ((comp && !m_AVND_COMP_IS_REG(comp)) || !csi_rec)
>               amf_rc = SA_AIS_ERR_NOT_EXIST;
> 
> +     // get the actual ha_state of csi
> +     if (!csi_rec) {
> +             *ha_rc = (SaAmfHAStateT)0;
> +     } else {
> +             *ha_rc = csi_rec->si->curr_state;
> +             if (csi_rec->si->curr_state == SA_AMF_HA_QUIESCING && (
> +                     csi_rec->curr_assign_state ==
> AVND_COMP_CSI_ASSIGN_STATE_ASSIGNED ||
> +                     csi_rec->curr_assign_state ==
> AVND_COMP_CSI_ASSIGN_STATE_REMOVING)) {
> +                     *ha_rc = SA_AMF_HA_QUIESCED;
> +             }
> +     }
>       /* send the response back to AvA */
>       rc = avnd_amf_resp_send(cb, AVSV_AMF_HA_STATE_GET, amf_rc,
> -                             (uint8_t *)((csi_rec) ? &csi_rec->si-
> >curr_state : 0),
> +                             (uint8_t*)ha_rc,
>                               &api_info->dest, &evt->mds_ctxt, comp,
> msg_from_avnd);
> 
>   done:

------------------------------------------------------------------------------
Monitor Your Dynamic Infrastructure at Any Scale With Datadog!
Get real-time metrics from all of your servers, apps and tools
in one place.
SourceForge users - Click here to start your Free Trial of Datadog now!
http://pubads.g.doubleclick.net/gampad/clk?id=241902991&iu=/4140
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to