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

Reply via email to