Ack from me. Not tested. Best regards, Zoran
-----Original Message----- From: reddy.neelaka...@oracle.com [mailto:reddy.neelaka...@oracle.com] Sent: Wednesday, July 01, 2015 4:16 PM To: Anders Björnerstedt; Zoran Milinkovic; mahesh.va...@oracle.com Cc: opensaf-devel@lists.sourceforge.net Subject: [PATCH 1 of 1] imm:checkpoint only FEVS header for sync messages [#952] v2 osaf/services/saf/immsv/immd/immd_evt.c | 15 ++++++++++++--- osaf/services/saf/immsv/immnd/immnd_evt.c | 9 ++++++++- 2 files changed, 20 insertions(+), 4 deletions(-) At the time of sync, when check-pointing to standby IMMD for IMMND_EVT_D2ND_GLOB_FEVS_REQ_2, the fevs message buffer will be set to NULL and message size will be set to 0. so, that the MBCSV check-pointing happens only for header. diff --git a/osaf/services/saf/immsv/immd/immd_evt.c b/osaf/services/saf/immsv/immd/immd_evt.c --- a/osaf/services/saf/immsv/immd/immd_evt.c +++ b/osaf/services/saf/immsv/immd/immd_evt.c @@ -251,7 +251,7 @@ uint32_t immd_evt_proc_fevs_req(IMMD_CB /* Populate & Send the FEVS Event to IMMND */ memset(&send_evt, 0, sizeof(IMMSV_EVT)); send_evt.type = IMMSV_EVT_TYPE_IMMND; - send_evt.info.immnd.type = (evt->type == IMMD_EVT_ND2D_FEVS_REQ_2)? + send_evt.info.immnd.type = ((evt->type == IMMD_EVT_ND2D_FEVS_REQ_2)||(evt->type == 0))? IMMND_EVT_D2ND_GLOB_FEVS_REQ_2: IMMND_EVT_D2ND_GLOB_FEVS_REQ; if ((evt->type == 0) && (fevs_req->sender_count > 0)) { @@ -266,8 +266,8 @@ uint32_t immd_evt_proc_fevs_req(IMMD_CB send_evt.info.immnd.info.fevsReq.msg.size = fevs_req->msg.size; /*Borrow the buffer from the input message instead of copying */ send_evt.info.immnd.info.fevsReq.msg.buf = fevs_req->msg.buf; - send_evt.info.immnd.info.fevsReq.isObjSync = (evt->type == IMMD_EVT_ND2D_FEVS_REQ_2)? - (fevs_req->isObjSync):0x0; + send_evt.info.immnd.info.fevsReq.isObjSync = ((evt->type == IMMD_EVT_ND2D_FEVS_REQ_2) || + (evt->type == 0 ))? (fevs_req->isObjSync):0x0; TRACE_5("immd_evt_proc_fevs_req send_count:%llu size:%u", send_evt.info.immnd.info.fevsReq.sender_count, send_evt.info.immnd.info.fevsReq.msg.size); @@ -280,6 +280,15 @@ uint32_t immd_evt_proc_fevs_req(IMMD_CB mbcp_msg.type = IMMD_A2S_MSG_FEVS; mbcp_msg.info.fevsReq = send_evt.info.immnd.info.fevsReq; + /* FEVS_REQ_2 messages are object sync messages. since this is mbcsv checkpointing + to standby, at the time of sync checkpointing complete fevs event is not required. + Checkpointing the header is sufficient to have the standby SC in +sync with the fevs count.*/ + + if(evt->type == IMMD_EVT_ND2D_FEVS_REQ_2){ + mbcp_msg.info.fevsReq.msg.size = 0; + mbcp_msg.info.fevsReq.msg.buf = NULL; + mbcp_msg.info.fevsReq.isObjSync = 0x0; + } /*Checkpoint the message to standby director. Syncronous call=>wait for ack */ proc_rc = immd_mbcsv_sync_update(cb, &mbcp_msg); diff --git a/osaf/services/saf/immsv/immnd/immnd_evt.c b/osaf/services/saf/immsv/immnd/immnd_evt.c --- a/osaf/services/saf/immsv/immnd/immnd_evt.c +++ b/osaf/services/saf/immsv/immnd/immnd_evt.c @@ -8702,7 +8702,7 @@ static uint32_t immnd_evt_proc_fevs_rcv( SaBoolT originatedAtThisNd = (m_IMMSV_UNPACK_HANDLE_LOW(clnt_hdl) == cb->node_id); if (originatedAtThisNd) { - osafassert(!reply_dest || (reply_dest == cb->immnd_mdest_id)); + osafassert(!reply_dest || (reply_dest == cb->immnd_mdest_id) || +isObjSync ); if (cb->fevs_replies_pending) { --(cb->fevs_replies_pending); /*flow control towards IMMD */ } @@ -8731,6 +8731,12 @@ static uint32_t immnd_evt_proc_fevs_rcv( } } + if ((evt->type == IMMND_EVT_D2ND_GLOB_FEVS_REQ_2) && (msg->size == 0) && (msg->buf == NULL)){ + // This is sync message Re-broadcasted by IMMD standby because of failover + TRACE("Re-broadcasted FEVS at the time of sync"); + goto done; + } + /*NORMAL CASE: Received the expected in-order message. */ SaAisErrorT err = SA_AIS_OK; @@ -8749,6 +8755,7 @@ static uint32_t immnd_evt_proc_fevs_rcv( } } + done: cb->highestProcessed++; dequeue_outgoing(cb); TRACE_LEAVE(); ------------------------------------------------------------------------------ _______________________________________________ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel