Ack with one minor comment.
Thanks,
Praveen
On 21-May-14 9:56 PM, Alex Jones wrote:
> 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))
For readability each comparison can also be kept in ().
> + {
> + 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);
>
------------------------------------------------------------------------------
Time is money. Stop wasting it! Get your web API in 5 minutes.
www.restlet.com/download
http://p.sf.net/sfu/restlet
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel