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
