osaf/services/saf/amf/amfnd/clc.cc | 20 ++++++++++++++++++++ 1 files changed, 20 insertions(+), 0 deletions(-)
May 2 15:22:11 linux osafamfnd[2990]: NO 'safSu=Management-SU1,safSg=Management-2N,safApp=ManagementApp' Presence State INSTANTIATED => TERMINATION_FAILED May 2 15:22:38 linux osafamfnd[2990]: ER AMF director unexpectedly crashed May 2 15:22:38 linux osafamfnd[2990]: Rebooting OpenSAF NodeId = 131343 EE Name = safEE=Linux_os_hosting_clm_node,safHE=Stirling_Blade_slot_1,safDomain=Q50chassis, Reason: local AVD down(Adest) or both AVD down(Vdest) received, OwnNodeId = 131343, SupervisionTime = 60 May 2 15:22:38 linux opensaf_reboot: Rebooting local node; timeout=60 On OpenSAF shutdown, amfnd doesn't wait for the proxied components of a proxy to terminate before terminating the proxy. It terminates the proxy via "CLC-CLI cleanup", and the proxied component via the SaAmfProxiedComponentCleanupCallbackT in the proxy. If the proxied component takes some time to terminate, amfnd doesn't wait and terminates the proxy. amfnd never gets the response from SaAmfProxiedComponentCleanupCallbackT (because the proxy has been terminated), and thinks that the termination of the proxied component timed out. amfnd needs to delay terminating the proxy until all the proxy's proxied components have terminated. diff --git a/osaf/services/saf/amf/amfnd/clc.cc b/osaf/services/saf/amf/amfnd/clc.cc --- a/osaf/services/saf/amf/amfnd/clc.cc +++ b/osaf/services/saf/amf/amfnd/clc.cc @@ -831,6 +831,23 @@ uint32_t avnd_comp_clc_fsm_run(AVND_CB * } } + /* can we clean up the proxy now? */ + if (m_AVND_COMP_TYPE_IS_PROXIED(comp) && + (AVND_TERM_STATE_OPENSAF_SHUTDOWN_STARTED == cb->term_state || + AVND_TERM_STATE_NODE_FAILOVER_TERMINATING == cb->term_state) && + (ev == AVND_COMP_CLC_PRES_FSM_EV_CLEANUP_SUCC || + ev == AVND_COMP_CLC_PRES_FSM_EV_CLEANUP_FAIL)) + { + AVND_COMP *proxy = comp->pxy_comp; + rc = avnd_comp_unreg_prc(cb, comp, proxy); + + /* if proxy got unset then we can continue with proxy's termination */ + if (rc == NCSCC_RC_SUCCESS && !m_AVND_COMP_TYPE_IS_PROXY(proxy)) + { + rc = avnd_comp_clc_fsm_run(avnd_cb, proxy, AVND_COMP_CLC_PRES_FSM_EV_CLEANUP); + } + } + TRACE_1("'%s':Entering CLC FSM: presence state:'%s', Event:'%s'", comp->name.value,pres_state[prv_st],pres_state_evt[ev]); @@ -1808,6 +1825,9 @@ uint32_t avnd_comp_clc_inst_clean_hdler( avnd_comp_cbq_del(cb, comp, true); /* call the cleanup callback */ rc = avnd_comp_cbk_send(cb, comp, AVSV_AMF_PXIED_COMP_CLEAN, 0, 0); + } else if (m_AVND_COMP_TYPE_IS_PROXY(comp) && comp->pxied_list.n_nodes) { + /* if there are still outstanding proxied components we can't terminate right now */ + return rc; } else /* cleanup the comp */ rc = avnd_comp_clc_cmd_execute(cb, comp, AVND_COMP_CLC_CMD_TYPE_CLEANUP); ------------------------------------------------------------------------------ "Accelerate Dev Cycles with Automated Cross-Browser Testing - For FREE Instantly run your Selenium tests across 300+ browser/OS combos. Get unparalleled scalability from the best Selenium testing platform available Simple to use. Nothing to install. Get started now for free." http://p.sf.net/sfu/SauceLabs _______________________________________________ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel