Commit message in present tense please:
"smfd: invoke saAmfResponse after quiesced_ack is received [#735]"
/Hans
On 01/21/2014 01:09 PM, Ingvar Bergstrom wrote:
> osaf/libs/common/smfsv/include/smfsv_evt.h | 1 +
> osaf/services/saf/smfsv/smfd/smfd_amf.c | 36
> +++++++++++++++++-----------
> osaf/services/saf/smfsv/smfd/smfd_cb.h | 2 +-
> osaf/services/saf/smfsv/smfd/smfd_evt.c | 37
> ++++++++++++++++++++++++++++++
> osaf/services/saf/smfsv/smfd/smfd_mds.c | 16 ++++++++----
> 5 files changed, 72 insertions(+), 20 deletions(-)
>
>
> diff --git a/osaf/libs/common/smfsv/include/smfsv_evt.h
> b/osaf/libs/common/smfsv/include/smfsv_evt.h
> --- a/osaf/libs/common/smfsv/include/smfsv_evt.h
> +++ b/osaf/libs/common/smfsv/include/smfsv_evt.h
> @@ -42,6 +42,7 @@ typedef enum {
> SMFD_EVT_MDS_INFO = 1,
> SMFD_EVT_CMD_RSP = 2,
> SMFD_EVT_CBK_RSP = 3,
> + SMFD_EVT_QUIESCED_ACK = 4,
> SMFD_EVT_MAX
> } SMFD_EVT_TYPE;
>
> diff --git a/osaf/services/saf/smfsv/smfd/smfd_amf.c
> b/osaf/services/saf/smfsv/smfd/smfd_amf.c
> --- a/osaf/services/saf/smfsv/smfd/smfd_amf.c
> +++ b/osaf/services/saf/smfsv/smfd/smfd_amf.c
> @@ -124,26 +124,33 @@ static SaAisErrorT amf_quiescing_state_h
> static SaAisErrorT amf_quiesced_state_handler(smfd_cb_t * cb,
> SaInvocationT invocation)
> {
> - TRACE_ENTER2("HA AMF QUIESCED STATE request");
> + TRACE_ENTER();
> + V_DEST_RL mds_role;
> + SaAisErrorT rc = SA_AIS_OK;
> +
> + /* Give up our IMM OI implementer role */
> + if (campaign_oi_deactivate(cb) != NCSCC_RC_SUCCESS) {
> + LOG_ER("amf_quiesced_state_handler oi deactivate FAILED");
> + }
>
> /*
> ** Change the MDS VDSET role to Quiesced. Wait for MDS callback with
> type
> ** MDS_CALLBACK_QUIESCED_ACK. Don't change cb->ha_state now.
> */
> -
> - if (campaign_oi_deactivate(cb) != NCSCC_RC_SUCCESS) {
> - LOG_ER("amf_quiesced_state_handler oi deactivate FAILED");
> - }
> -
> + mds_role = cb->mds_role;
> cb->mds_role = V_DEST_RL_QUIESCED;
> -
> - if (smfd_mds_change_role(cb) != NCSCC_RC_SUCCESS) {
> - TRACE("smfd_mds_change_role FAILED");
> + if ((rc = smfd_mds_change_role(cb)) != NCSCC_RC_SUCCESS) {
> + LOG_ER("smfd_mds_change_role [V_DEST_RL_QUIESCED] FAILED");
> + rc = SA_AIS_ERR_FAILED_OPERATION;
> + cb->mds_role = mds_role;
> + goto done;
> }
>
> cb->amf_invocation_id = invocation;
> - cb->is_quisced_set = true;
> - return SA_AIS_OK;
> + cb->is_quiesced_set = true;
> +done:
> + TRACE_LEAVE();
> + return rc;
> }
>
>
> /****************************************************************************
> @@ -233,7 +240,7 @@ static void amf_csi_set_callback(SaInvoc
> }
>
> if (result != SA_AIS_OK)
> - goto done;
> + goto response;
>
> if (new_haState == SA_AMF_HA_QUIESCED)
> /* AMF response will be done later when MDS quiesced ack has
> been received */
> @@ -254,11 +261,12 @@ static void amf_csi_set_callback(SaInvoc
> if ((rc = smfd_mds_change_role(smfd_cb)) != NCSCC_RC_SUCCESS) {
> TRACE("smfd_mds_change_role FAILED");
> result = SA_AIS_ERR_FAILED_OPERATION;
> + goto response;
> }
> }
> -
> + response:
> + saAmfResponse(smfd_cb->amf_hdl, invocation, result);
> done:
> - saAmfResponse(smfd_cb->amf_hdl, invocation, result);
> TRACE_LEAVE();
> }
>
> diff --git a/osaf/services/saf/smfsv/smfd/smfd_cb.h
> b/osaf/services/saf/smfsv/smfd/smfd_cb.h
> --- a/osaf/services/saf/smfsv/smfd/smfd_cb.h
> +++ b/osaf/services/saf/smfsv/smfd/smfd_cb.h
> @@ -36,7 +36,7 @@ typedef struct smfd_cb {
> SaNameT comp_name; /* Components's name SMFD
> */
> SaAmfHandleT amf_hdl; /* AMF handle, obtained
> thru AMF init */
> SaInvocationT amf_invocation_id; /* AMF InvocationID -
> needed to handle Quiesed state */
> - bool is_quisced_set;
> + bool is_quiesced_set;
> SaSelectionObjectT amfSelectionObject; /* Selection Object to wait
> for amf events */
> SaImmOiHandleT campaignOiHandle; /* IMM Campaign OI handle
> */
> SaSelectionObjectT campaignSelectionObject; /* Selection Object to wait
> for campaign IMM events */
> diff --git a/osaf/services/saf/smfsv/smfd/smfd_evt.c
> b/osaf/services/saf/smfsv/smfd/smfd_evt.c
> --- a/osaf/services/saf/smfsv/smfd/smfd_evt.c
> +++ b/osaf/services/saf/smfsv/smfd/smfd_evt.c
> @@ -30,6 +30,7 @@
> #include "smfsv_evt.h"
>
> void proc_callback_rsp(smfd_cb_t *, SMFSV_EVT *);
> +void proc_quiesced_ack(smfd_cb_t *, SMFSV_EVT *);
>
>
> /****************************************************************************
> * Name : proc_mds_info
> @@ -125,6 +126,11 @@ void smfd_process_mbx(SYSF_MBX * mbx)
> proc_callback_rsp(smfd_cb, evt);
> break;
> }
> + case SMFD_EVT_QUIESCED_ACK:
> + {
> + proc_quiesced_ack(smfd_cb, evt);
> + break;
> + }
> default:
> {
> LOG_ER("SMFND received unknown event %d",
> @@ -202,3 +208,34 @@ void proc_callback_rsp(smfd_cb_t *cb, SM
> TRACE_LEAVE();
> return;
> }
> +
> +/****************************************************************************
> + * Name : proc_quiesced_ack
> + *
> + * Description : This is the function which is called when smfd receives an
> + * quiesced ack event from MDS
> + *
> + * Arguments : evt - Message that was posted to the SMFSV Mail box.
> + *
> + * Return Values : None
> + *
> + * Notes : None.
> +
> *****************************************************************************/
> +void proc_quiesced_ack(smfd_cb_t *cb, SMFSV_EVT *evt)
> +{
> + TRACE_ENTER();
> +
> + if (cb->is_quiesced_set == true) {
> + /* Update control block */
> + cb->is_quiesced_set = false;
> + cb->ha_state = SA_AMF_HA_QUIESCED;
> +
> + /* Respond to AMF */
> + if (saAmfResponse(cb->amf_hdl, cb->amf_invocation_id,
> SA_AIS_OK) != SA_AIS_OK) {
> + LOG_ER("saAmfResponse failed");
> + }
> + } else
> + LOG_ER("Received SMFD_EVT_QUIESCED_ACK message but
> is_quiesced_set==false");
> +
> + TRACE_LEAVE();
> +}
> diff --git a/osaf/services/saf/smfsv/smfd/smfd_mds.c
> b/osaf/services/saf/smfsv/smfd/smfd_mds.c
> --- a/osaf/services/saf/smfsv/smfd/smfd_mds.c
> +++ b/osaf/services/saf/smfsv/smfd/smfd_mds.c
> @@ -213,16 +213,22 @@ static uint32_t mds_rcv(struct ncsmds_ca
>
> static uint32_t mds_quiesced_ack(struct ncsmds_callback_info *mds_info)
> {
> - SMFSV_EVT *smfsv_evt;
> + SMFSV_EVT *smfsv_evt;
>
> - /** allocate an SMFSV_EVT now **/
> + /** allocate an SMFSV_EVT now **/
> if (NULL == (smfsv_evt = calloc(1, sizeof(SMFSV_EVT)))) {
> - LOG_WA("calloc FAILED");
> + LOG_NO("calloc FAILED");
> goto err;
> }
>
> - if (smfd_cb->is_quisced_set == true) {
> - {
> + if (smfd_cb->is_quiesced_set == true) {
> + /** Initialize the Event here **/
> + smfsv_evt->type = SMFSV_EVT_TYPE_SMFD;
> + smfsv_evt->info.smfd.type = SMFD_EVT_QUIESCED_ACK;
> + smfsv_evt->cb_hdl = (uint32_t)mds_info->i_yr_svc_hdl;
> +
> + /* Push the event and we are done */
> + if (NCSCC_RC_FAILURE == m_NCS_IPC_SEND(&smfd_cb->mbx,
> smfsv_evt, NCS_IPC_PRIORITY_VERY_HIGH)) {
> TRACE("ipc send failed");
> smfsv_evt_destroy(smfsv_evt);
> goto err;
>
> ------------------------------------------------------------------------------
> CenturyLink Cloud: The Leader in Enterprise Cloud Services.
> Learn Why More Businesses Are Choosing CenturyLink Cloud For
> Critical Workloads, Development Environments & Everything In Between.
> Get a Quote or Start a Free Trial Today.
> http://pubads.g.doubleclick.net/gampad/clk?id=119420431&iu=/4140/ostg.clktrk
> _______________________________________________
> Opensaf-devel mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/opensaf-devel
>
>
------------------------------------------------------------------------------
CenturyLink Cloud: The Leader in Enterprise Cloud Services.
Learn Why More Businesses Are Choosing CenturyLink Cloud For
Critical Workloads, Development Environments & Everything In Between.
Get a Quote or Start a Free Trial Today.
http://pubads.g.doubleclick.net/gampad/clk?id=119420431&iu=/4140/ostg.clktrk
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel