Hi Hung,

There is no much  significance of sleeping before immd_initialize

LOG_NO("Waiting 3 seconds to allow IMMND MDS attachments to get 
processed.");
                 sleep(3);

The above  sleep should be after immd_initialize?

Regards,
Neel.

On Monday 21 March 2016 01:09 PM, Hung Nguyen wrote:
> Hi Neel,
>
> The current code has 3 second sleep before initializing MDS.
> The change the patch makes is to wait (not sleep) for veteran PL after 
> initializing MDS.
>
> The priority is to make sure that IMMD will process intro message from 
> veteran PL before intro message from newly-joined nodes.
> Otherwise IMMND on newly-joined node will crash, please see ticket 
> description for details.
>
> BR,
>
> Hung Nguyen - DEK Technologies
>
>
> --------------------------------------------------------------------------------
>  
>
> From: Neelakanta Reddy [email protected]
> Sent: Monday, March 21, 2016 2:03PM
> To: Hung Nguyen, Zoran Milinkovic
>     [email protected], [email protected]
> Cc: Opensaf-devel
>     [email protected]
> Subject: Re: [PATCH 1 of 1] imm: Wait for veterans when IMMD starts 
> [#1698]
>
>
> Hi Hung,
>
> The present code already has 3seconds delay.
> Published patch, also sleeps for same 3 seconds.
> If the veteran IMMD can not send the INTRO event for 3 seconds , then 
> there is some problem with the system.
> waiting for 3 seconds is a long wait to send intro.  the priority part 
> also may not be required.
>
> Thanks,
> Neel.
>
> On Thursday 10 March 2016 12:56 PM, Hung Nguyen wrote:
>>   osaf/services/saf/immsv/immd/immd_cb.h |   3 ++
>>   osaf/services/saf/immsv/immd/immd_main.c |  36 
>> ++++++++++++++++++++++++++++---
>>   osaf/services/saf/immsv/immd/immd_mds.c  |  20 ++++++++++++++++-
>>   3 files changed, 53 insertions(+), 6 deletions(-)
>>
>>
>> IMMD will wait for intro message from veterans and give up after 3 
>> seconds if can't find any veteran.
>>
>> This patch also improves the startup time of IMMD.
>> IMMD will not always 'sleep' for 3 seconds. It will just wait until a 
>> veteran attaches.
>> Also the standby IMMD will not have any delay in startup process.
>>
>> diff --git a/osaf/services/saf/immsv/immd/immd_cb.h 
>> b/osaf/services/saf/immsv/immd/immd_cb.h
>> --- a/osaf/services/saf/immsv/immd/immd_cb.h
>> +++ b/osaf/services/saf/immsv/immd/immd_cb.h
>> @@ -141,6 +141,9 @@ typedef struct immd_cb_tag {
>>       SaUint16T mScAbsenceAllowed; /* Non zero if SC absence is 
>> allowed (loss of both IMMDs/SCs).
>>                          Value is number of seconds of SC absence 
>> tolerated. */
>>       MDS_DEST payload_coord_dest; /* IMMND coord may be at payload 
>> if mScAbsenceAllowed is nonzero */
>> +
>> +    NCS_LOCK veteran_sync_lock;   /* Sync up with veteran payload 
>> after headless */
>> +    NCS_SEL_OBJ veteran_sync_sel; /* Sync up with veteran payload 
>> after headless */
>>   } IMMD_CB;
>>     uint32_t immd_immnd_info_tree_init(IMMD_CB *cb);
>> diff --git a/osaf/services/saf/immsv/immd/immd_main.c 
>> b/osaf/services/saf/immsv/immd/immd_main.c
>> --- a/osaf/services/saf/immsv/immd/immd_main.c
>> +++ b/osaf/services/saf/immsv/immd/immd_main.c
>> @@ -33,6 +33,7 @@
>>   #include <rda_papi.h>
>>   #include <daemon.h>
>>   #include <nid_api.h>
>> +#include "osaf_poll.h"
>>     #include "immd.h"
>>   #include <immd_proc.h>
>> @@ -257,10 +258,16 @@ int main(int argc, char *argv[])
>>       }
>>         if(scAbsenceAllowed) {
>> -        LOG_NO("******* SC_ABSENCE_ALLOWED (Headless Hydra) is 
>> configured: %u ***********",
>> -            scAbsenceAllowed);
>> -        LOG_NO("Waiting 3 seconds to allow IMMND MDS attachments to 
>> get processed.");
>> -        sleep(3);
>> +        /* Create the sel-obj before initializing MDS.
>> +         * This way, we can avoid an extra 'veteran_sync_awaited' 
>> variable in IMMD_CB */
>> +        if (m_NCS_LOCK_INIT(&immd_cb->veteran_sync_lock) != 
>> NCSCC_RC_SUCCESS) {
>> +            LOG_ER("Failed to get veteran_sync_lock lock");
>> +            goto done;
>> +        }
>> +        if (m_NCS_SEL_OBJ_CREATE(&immd_cb->veteran_sync_sel)!= 
>> NCSCC_RC_SUCCESS) {
>> +            LOG_ER("Failed to create veteran_sync_sel sel_obj");
>> +            goto done;
>> +        }
>>       }
>>         immd_cb->mScAbsenceAllowed = scAbsenceAllowed;
>> @@ -270,6 +277,27 @@ int main(int argc, char *argv[])
>>           goto done;
>>       }
>>   +    if(scAbsenceAllowed) {
>> +        LOG_NO("******* SC_ABSENCE_ALLOWED (Headless Hydra) is 
>> configured: %u ***********",
>> +            scAbsenceAllowed);
>> +
>> +        /* If this IMMD has active role, wait for veteran payloads.
>> +         * Give up after 3 seconds if there's no veteran payload. */
>> +        if (immd_cb->ha_state == SA_AMF_HA_ACTIVE) {
>> +            LOG_NO("Waiting 3 seconds to allow IMMND MDS attachments 
>> to get processed.");
>> +
>> +            if 
>> (osaf_poll_one_fd(m_GET_FD_FROM_SEL_OBJ(immd_cb->veteran_sync_sel), 
>> 3000) != 1) {
>> +                TRACE("osaf_poll_one_fd on veteran_sync_sel failed 
>> or timed out");
>> +            } else {
>> +                TRACE("osaf_poll_one_fd on veteran_sync_sel 
>> succeeded");
>> +            }
>> +        }
>> +
>> + m_NCS_LOCK(&immd_cb->veteran_sync_lock,NCS_LOCK_WRITE);
>> + m_NCS_SEL_OBJ_DESTROY(&immd_cb->veteran_sync_sel);
>> + m_NCS_UNLOCK(&immd_cb->veteran_sync_lock,NCS_LOCK_WRITE);
>> +    }
>> +
>>       daemon_sigterm_install(&term_fd);
>>         /* Get file descriptor for mailbox */
>> diff --git a/osaf/services/saf/immsv/immd/immd_mds.c 
>> b/osaf/services/saf/immsv/immd/immd_mds.c
>> --- a/osaf/services/saf/immsv/immd/immd_mds.c
>> +++ b/osaf/services/saf/immsv/immd/immd_mds.c
>> @@ -489,6 +489,7 @@ static uint32_t immd_mds_rcv(IMMD_CB *cb
>>   {
>>       uint32_t rc = NCSCC_RC_SUCCESS;
>>       IMMSV_EVT *pEvt = (IMMSV_EVT *)rcv_info->i_msg;
>> +    NCS_IPC_PRIORITY prio = NCS_IPC_PRIORITY_NORMAL;
>>         pEvt->sinfo.ctxt = rcv_info->i_msg_ctxt;
>>       pEvt->sinfo.dest = rcv_info->i_fr_dest;
>> @@ -497,8 +498,23 @@ static uint32_t immd_mds_rcv(IMMD_CB *cb
>>           pEvt->sinfo.stype = MDS_SENDTYPE_RSP;
>>       }
>>   +    /* Set priority of intro messages from veteran payloads to 
>> PRIORITY_HIGH.
>> +     * IMMD will process them before the intro messages from other 
>> IMMNDs. */
>> +    if (cb->mScAbsenceAllowed &&
>> +            pEvt->info.immd.type == IMMD_EVT_ND2D_INTRO &&
>> +            pEvt->info.immd.info.ctrl_msg.refresh == 2) {
>> +
>> +        prio = NCS_IPC_PRIORITY_HIGH;
>> +
>> + m_NCS_LOCK(&immd_cb->veteran_sync_lock,NCS_LOCK_WRITE);
>> +        if (cb->veteran_sync_sel.raise_obj != -1) { /* Check if the 
>> sel_obj is not destroyed */
>> +            m_NCS_SEL_OBJ_IND(&cb->veteran_sync_sel);
>> +        }
>> + m_NCS_UNLOCK(&immd_cb->veteran_sync_lock,NCS_LOCK_WRITE);
>> +    }
>> +
>>       /* Put it in IMMD's Event Queue */
>> -    rc = m_NCS_IPC_SEND(&cb->mbx, (NCSCONTEXT)pEvt, 
>> NCS_IPC_PRIORITY_NORMAL);
>> +    rc = m_NCS_IPC_SEND(&cb->mbx, (NCSCONTEXT)pEvt, prio);
>>       if (NCSCC_RC_SUCCESS != rc) {
>>           LOG_WA("IMMD - IPC SEND FAILED");
>>       }
>> @@ -542,7 +558,7 @@ static uint32_t immd_mds_svc_evt(IMMD_CB
>>       evt->info.immd.info.mds_info.node_id = svc_evt->i_node_id;
>>         /* Put it in IMMD's Event Queue */
>> -    rc = m_NCS_IPC_SEND(&cb->mbx, (NCSCONTEXT)evt, 
>> NCS_IPC_PRIORITY_HIGH);
>> +    rc = m_NCS_IPC_SEND(&cb->mbx, (NCSCONTEXT)evt, 
>> NCS_IPC_PRIORITY_VERY_HIGH);
>>       if (NCSCC_RC_SUCCESS != rc) {
>>           LOG_WA("IMMD - IPC SEND FAILED");
>>           free(evt);
>
>


------------------------------------------------------------------------------
Transform Data into Opportunity.
Accelerate data analysis in your applications with
Intel Data Analytics Acceleration Library.
Click to learn more.
http://pubads.g.doubleclick.net/gampad/clk?id=278785351&iu=/4140
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to