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