Hi Hung,

Ok, then the patch should be sleep for 3 seconds after immd_initialize.
Sleeping for 3 seconds, is more and increase the priority of posting to 
local mail box may not be required.
Please, republish the patch.

Thanks,
Neel.


On Monday 21 March 2016 02:02 PM, Hung Nguyen wrote:
> Hi Neel,
>
> I think that sleep should be after MDS initialization.
> The log says that wait for mds attachements, how can we wait without 
> MDS initialized.
>
>
> BR,
>
> Hung Nguyen - DEK Technologies
>
>
> --------------------------------------------------------------------------------
>  
>
> From: Neelakanta Reddy [email protected]
> Sent: Monday, March 21, 2016 3:23PM
> 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,
>
> 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