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
