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
