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();

------------------------------------------------------------------------------
Don't Limit Your Business. Reach for the Cloud.
GigeNET's Cloud Solutions provide you with the tools and support that
you need to offload your IT needs and focus on growing your business.
Configured For All Businesses. Start Your Cloud Today.
https://www.gigenetcloud.com/
_______________________________________________
Opensaf-devel mailing list
Opensaf-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to