Hi Thang, 2 comments (code review, not test) - The function name should be: "avnd_clean_and_exit" - Conditions for call the function sometimes only "all_comps_terminated()" sometimes with SHUTDOWN_STARTED. Can you check if we can make conditions consistent (only one or always two)?
Best Regards, ThuanTr -----Original Message----- From: Thang Duc Nguyen <thang.d.ngu...@dektech.com.au> Sent: Thursday, February 20, 2020 1:28 PM To: Minh Hon Chau <minh.c...@dektech.com.au>; Thuan Tran <thuan.t...@dektech.com.au>; Gary Lee <gary....@dektech.com.au> Cc: opensaf-devel@lists.sourceforge.net; Thang Duc Nguyen <thang.d.ngu...@dektech.com.au> Subject: [PATCH 1/1] amfnd: correct handling "terminate success" evt in terminating state [#3157] Amfnd need to exist in node in shutdown state and all components terminated. --- src/amf/amfnd/clc.cc | 40 ++++++++++++++++++++++++++++------------ 1 file changed, 28 insertions(+), 12 deletions(-) diff --git a/src/amf/amfnd/clc.cc b/src/amf/amfnd/clc.cc index de57838c9..f78e1a707 100644 --- a/src/amf/amfnd/clc.cc +++ b/src/amf/amfnd/clc.cc @@ -80,6 +80,8 @@ uint32_t avnd_comp_clc_st_chng_prc(AVND_CB *, AVND_COMP *, SaAmfPresenceStateT, static uint32_t avnd_instfail_su_failover(AVND_CB *, AVND_SU *, AVND_COMP *); +static void amfnd_clean_before_exit(AVND_CB *); + /*************************************************************************** ** C O M P O N E N T C L C F S M M A T R I X D E F I N I T I O N ** ***************************************************************************/ @@ -297,6 +299,23 @@ static void log_failed_exec(NCS_OS_PROC_EXEC_STATUS_INFO *exec_stat, comp->clc_info.cmds[exec_cmd - 1].cmd); } +/**************************************************************************** + Name : amfnd_clean_before_exit + + Description : Clean database before exit + + Arguments : cb - ptr to the AvND control block + + Return Values : None + +******************************************************************************/ +void amfnd_clean_before_exit(AVND_CB *cb) { [Thuan] + LOG_NO("Shutdown completed, exiting"); + cb->nodeid_mdsdest_db.deleteAll(); + cb->hctypedb.deleteAll(); + daemon_exit(); +} + /**************************************************************************** Name : avnd_evt_clc_resp @@ -810,10 +829,7 @@ uint32_t avnd_comp_clc_fsm_run(AVND_CB *cb, AVND_COMP *comp, avnd_comp_pres_state_set(cb, comp, SA_AMF_PRESENCE_UNINSTANTIATED); if (all_comps_terminated()) { LOG_NO("Terminated all AMF components"); - LOG_NO("Shutdown completed, exiting"); - cb->nodeid_mdsdest_db.deleteAll(); - cb->hctypedb.deleteAll(); - daemon_exit(); + amfnd_clean_before_exit(cb); } else { TRACE("Do nothing"); goto done; @@ -2401,6 +2417,12 @@ uint32_t avnd_comp_clc_terming_termsucc_hdler(AVND_CB *cb, AVND_COMP *comp) { avnd_comp_curr_info_del(cb, comp); } + if ((cb->term_state == AVND_TERM_STATE_OPENSAF_SHUTDOWN_STARTED) && + all_comps_terminated()) { + LOG_NO("Terminated all AMF components"); + amfnd_clean_before_exit(cb); + } + TRACE_LEAVE(); return rc; } @@ -2520,10 +2542,7 @@ uint32_t avnd_comp_clc_terming_cleansucc_hdler(AVND_CB *cb, AVND_COMP *comp) { } if (all_comps_terminated()) { LOG_NO("Terminated all AMF components"); - LOG_NO("Shutdown completed, exiting"); - cb->nodeid_mdsdest_db.deleteAll(); - cb->hctypedb.deleteAll(); - daemon_exit(); + amfnd_clean_before_exit(cb); } } /* @@ -2584,10 +2603,7 @@ uint32_t avnd_comp_clc_terming_cleanfail_hdler(AVND_CB *cb, AVND_COMP *comp) { if ((cb->term_state == AVND_TERM_STATE_OPENSAF_SHUTDOWN_STARTED) && all_comps_terminated()) { LOG_WA("Terminated all AMF components (with failures)"); - LOG_NO("Shutdown completed, exiting"); - cb->nodeid_mdsdest_db.deleteAll(); - cb->hctypedb.deleteAll(); - daemon_exit(); + amfnd_clean_before_exit(cb); } TRACE_LEAVE(); -- 2.17.1 _______________________________________________ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel