Re: [devel] [PATCH 1/1] amf: fix SU get stuck in INSTANTIATING presence state [#3047]
Hi bro.Minh, Thanks for your comment. I did update to make it clearer and sent out V2. Best Regards, ThuanTr -Original Message- From: Minh Hon Chau Sent: Thursday, June 13, 2019 6:31 PM To: thuan.tran ; gary@dektech.com.au Cc: opensaf-devel@lists.sourceforge.net; Hans Nordeback Subject: Re: [PATCH 1/1] amf: fix SU get stuck in INSTANTIATING presence state [#3047] Hi Thuan, ack with minor comment. Thanks Minh On 3/6/19 5:10 pm, thuan.tran wrote: > COMP restart recovery during SU restart recovery can lead to SU stuck > in INSTANTIATING without further action. Because COMP instaniated > event in RESTARTING does not trigger avnd_su_pres_fsm_run(). > --- > src/amf/amfnd/clc.cc | 4 > src/amf/amfnd/susm.cc | 4 +++- > 2 files changed, 7 insertions(+), 1 deletion(-) > > diff --git a/src/amf/amfnd/clc.cc b/src/amf/amfnd/clc.cc index > 675ca49..9b1b3a7 100644 > --- a/src/amf/amfnd/clc.cc > +++ b/src/amf/amfnd/clc.cc > @@ -926,6 +926,7 @@ uint32_t avnd_comp_clc_st_chng_prc(AVND_CB *cb, AVND_COMP > *comp, > AVND_SU_PRES_FSM_EV ev = AVND_SU_PRES_FSM_EV_MAX; > AVND_COMP_CSI_REC *csi = 0; > bool is_en; > + bool pi_comp_recover = false; > uint32_t rc = NCSCC_RC_SUCCESS; > TRACE_ENTER2("Comp '%s', Prv_state '%s', Final_state '%s'", > comp->name.c_str(), presence_state[prv_st], @@ -953,6 > +954,8 @@ uint32_t avnd_comp_clc_st_chng_prc(AVND_CB *cb, AVND_COMP *comp, > TRACE_1( > "Component restart is through admin opration, admin oper flag > reset"); > comp->admin_oper = false; > + } else if (m_AVND_COMP_TYPE_IS_PREINSTANTIABLE(comp)) { > +pi_comp_recover = true; [M]: It looks doubtful, the check itself only wants to know if the @comp is pi, it does not relate to the first *if* (@admin_oper and @final_st)? > } > > if ((SA_AMF_PRESENCE_INSTANTIATED == prv_st) && @@ -1487,6 +1490,7 > @@ uint32_t avnd_comp_clc_st_chng_prc(AVND_CB *cb, AVND_COMP *comp, >(SA_AMF_PRESENCE_ORPHANED != prv_st) && >((prv_st == SA_AMF_PRESENCE_INSTANTIATING) || > (prv_st == SA_AMF_PRESENCE_TERMINATING) || > + (prv_st == SA_AMF_PRESENCE_RESTARTING && > + pi_comp_recover) || > (comp->su->admin_op_Id == SA_AMF_ADMIN_RESTART))) > ev = AVND_SU_PRES_FSM_EV_COMP_INSTANTIATED; > else if (SA_AMF_PRESENCE_INSTANTIATION_FAILED == final_st) diff > --git a/src/amf/amfnd/susm.cc b/src/amf/amfnd/susm.cc index > c023c8d..62e2db9 100644 > --- a/src/amf/amfnd/susm.cc > +++ b/src/amf/amfnd/susm.cc > @@ -2282,7 +2282,9 @@ uint32_t avnd_su_pres_insting_compinst_hdler(AVND_CB > *cb, AVND_SU *su, > curr_comp; curr_comp = m_AVND_COMP_FROM_SU_DLL_NODE_GET( > m_NCS_DBLIST_FIND_NEXT(_comp->su_dll_node))) > { > /* instantiate the pi comp */ > -if (m_AVND_COMP_TYPE_IS_PREINSTANTIABLE(curr_comp)) { > +if (m_AVND_COMP_TYPE_IS_PREINSTANTIABLE(curr_comp) && > + (!m_AVND_COMP_IS_FAILED(curr_comp) || > +curr_comp->pres != SA_AMF_PRESENCE_RESTARTING)) { > TRACE("Running the component clc FSM"); > rc = avnd_comp_clc_fsm_run(cb, curr_comp, > > AVND_COMP_CLC_PRES_FSM_EV_INST); ___ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel
[devel] [PATCH 1/1] amf: fix SU get stuck in INSTANTIATING presence state [#3047]
COMP restart recovery during SU restart recovery can lead to SU stuck in INSTANTIATING without further action. Because COMP instaniated event in RESTARTING does not trigger avnd_su_pres_fsm_run(). --- src/amf/amfnd/clc.cc | 11 ++- src/amf/amfnd/susm.cc | 4 +++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/amf/amfnd/clc.cc b/src/amf/amfnd/clc.cc index 675ca49..c4067f4 100644 --- a/src/amf/amfnd/clc.cc +++ b/src/amf/amfnd/clc.cc @@ -926,6 +926,7 @@ uint32_t avnd_comp_clc_st_chng_prc(AVND_CB *cb, AVND_COMP *comp, AVND_SU_PRES_FSM_EV ev = AVND_SU_PRES_FSM_EV_MAX; AVND_COMP_CSI_REC *csi = 0; bool is_en; + bool pi_comp_recover = false; uint32_t rc = NCSCC_RC_SUCCESS; TRACE_ENTER2("Comp '%s', Prv_state '%s', Final_state '%s'", comp->name.c_str(), presence_state[prv_st], @@ -947,6 +948,13 @@ uint32_t avnd_comp_clc_st_chng_prc(AVND_CB *cb, AVND_COMP *comp, comp->name, comp->err_info.restart_cnt); } } + + if ((comp->admin_oper == false) && + (prv_st == SA_AMF_PRESENCE_RESTARTING) && + m_AVND_COMP_TYPE_IS_PREINSTANTIABLE(comp)) { +pi_comp_recover = true; + } + /* reset the admin-oper flag to false */ if ((comp->admin_oper == true) && (final_st == SA_AMF_PRESENCE_INSTANTIATED)) { @@ -1487,7 +1495,8 @@ uint32_t avnd_comp_clc_st_chng_prc(AVND_CB *cb, AVND_COMP *comp, (SA_AMF_PRESENCE_ORPHANED != prv_st) && ((prv_st == SA_AMF_PRESENCE_INSTANTIATING) || (prv_st == SA_AMF_PRESENCE_TERMINATING) || - (comp->su->admin_op_Id == SA_AMF_ADMIN_RESTART))) + (comp->su->admin_op_Id == SA_AMF_ADMIN_RESTART) || + pi_comp_recover)) ev = AVND_SU_PRES_FSM_EV_COMP_INSTANTIATED; else if (SA_AMF_PRESENCE_INSTANTIATION_FAILED == final_st) ev = AVND_SU_PRES_FSM_EV_COMP_INST_FAIL; diff --git a/src/amf/amfnd/susm.cc b/src/amf/amfnd/susm.cc index c023c8d..62e2db9 100644 --- a/src/amf/amfnd/susm.cc +++ b/src/amf/amfnd/susm.cc @@ -2282,7 +2282,9 @@ uint32_t avnd_su_pres_insting_compinst_hdler(AVND_CB *cb, AVND_SU *su, curr_comp; curr_comp = m_AVND_COMP_FROM_SU_DLL_NODE_GET( m_NCS_DBLIST_FIND_NEXT(_comp->su_dll_node))) { /* instantiate the pi comp */ -if (m_AVND_COMP_TYPE_IS_PREINSTANTIABLE(curr_comp)) { +if (m_AVND_COMP_TYPE_IS_PREINSTANTIABLE(curr_comp) && + (!m_AVND_COMP_IS_FAILED(curr_comp) || +curr_comp->pres != SA_AMF_PRESENCE_RESTARTING)) { TRACE("Running the component clc FSM"); rc = avnd_comp_clc_fsm_run(cb, curr_comp, AVND_COMP_CLC_PRES_FSM_EV_INST); -- 2.7.4 ___ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel
Re: [devel] [PATCH 1/1] amf: fix SU get stuck in INSTANTIATING presence state [#3047]
Hi Thuan, ack with minor comment. Thanks Minh On 3/6/19 5:10 pm, thuan.tran wrote: COMP restart recovery during SU restart recovery can lead to SU stuck in INSTANTIATING without further action. Because COMP instaniated event in RESTARTING does not trigger avnd_su_pres_fsm_run(). --- src/amf/amfnd/clc.cc | 4 src/amf/amfnd/susm.cc | 4 +++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/amf/amfnd/clc.cc b/src/amf/amfnd/clc.cc index 675ca49..9b1b3a7 100644 --- a/src/amf/amfnd/clc.cc +++ b/src/amf/amfnd/clc.cc @@ -926,6 +926,7 @@ uint32_t avnd_comp_clc_st_chng_prc(AVND_CB *cb, AVND_COMP *comp, AVND_SU_PRES_FSM_EV ev = AVND_SU_PRES_FSM_EV_MAX; AVND_COMP_CSI_REC *csi = 0; bool is_en; + bool pi_comp_recover = false; uint32_t rc = NCSCC_RC_SUCCESS; TRACE_ENTER2("Comp '%s', Prv_state '%s', Final_state '%s'", comp->name.c_str(), presence_state[prv_st], @@ -953,6 +954,8 @@ uint32_t avnd_comp_clc_st_chng_prc(AVND_CB *cb, AVND_COMP *comp, TRACE_1( "Component restart is through admin opration, admin oper flag reset"); comp->admin_oper = false; + } else if (m_AVND_COMP_TYPE_IS_PREINSTANTIABLE(comp)) { +pi_comp_recover = true; [M]: It looks doubtful, the check itself only wants to know if the @comp is pi, it does not relate to the first *if* (@admin_oper and @final_st)? } if ((SA_AMF_PRESENCE_INSTANTIATED == prv_st) && @@ -1487,6 +1490,7 @@ uint32_t avnd_comp_clc_st_chng_prc(AVND_CB *cb, AVND_COMP *comp, (SA_AMF_PRESENCE_ORPHANED != prv_st) && ((prv_st == SA_AMF_PRESENCE_INSTANTIATING) || (prv_st == SA_AMF_PRESENCE_TERMINATING) || + (prv_st == SA_AMF_PRESENCE_RESTARTING && pi_comp_recover) || (comp->su->admin_op_Id == SA_AMF_ADMIN_RESTART))) ev = AVND_SU_PRES_FSM_EV_COMP_INSTANTIATED; else if (SA_AMF_PRESENCE_INSTANTIATION_FAILED == final_st) diff --git a/src/amf/amfnd/susm.cc b/src/amf/amfnd/susm.cc index c023c8d..62e2db9 100644 --- a/src/amf/amfnd/susm.cc +++ b/src/amf/amfnd/susm.cc @@ -2282,7 +2282,9 @@ uint32_t avnd_su_pres_insting_compinst_hdler(AVND_CB *cb, AVND_SU *su, curr_comp; curr_comp = m_AVND_COMP_FROM_SU_DLL_NODE_GET( m_NCS_DBLIST_FIND_NEXT(_comp->su_dll_node))) { /* instantiate the pi comp */ -if (m_AVND_COMP_TYPE_IS_PREINSTANTIABLE(curr_comp)) { +if (m_AVND_COMP_TYPE_IS_PREINSTANTIABLE(curr_comp) && + (!m_AVND_COMP_IS_FAILED(curr_comp) || +curr_comp->pres != SA_AMF_PRESENCE_RESTARTING)) { TRACE("Running the component clc FSM"); rc = avnd_comp_clc_fsm_run(cb, curr_comp, AVND_COMP_CLC_PRES_FSM_EV_INST); ___ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel
[devel] [PATCH 1/1] amf: fix SU get stuck in INSTANTIATING presence state [#3047]
COMP restart recovery during SU restart recovery can lead to SU stuck in INSTANTIATING without further action. Because COMP instaniated event in RESTARTING does not trigger avnd_su_pres_fsm_run(). --- src/amf/amfnd/clc.cc | 4 src/amf/amfnd/susm.cc | 4 +++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/amf/amfnd/clc.cc b/src/amf/amfnd/clc.cc index 675ca49..9b1b3a7 100644 --- a/src/amf/amfnd/clc.cc +++ b/src/amf/amfnd/clc.cc @@ -926,6 +926,7 @@ uint32_t avnd_comp_clc_st_chng_prc(AVND_CB *cb, AVND_COMP *comp, AVND_SU_PRES_FSM_EV ev = AVND_SU_PRES_FSM_EV_MAX; AVND_COMP_CSI_REC *csi = 0; bool is_en; + bool pi_comp_recover = false; uint32_t rc = NCSCC_RC_SUCCESS; TRACE_ENTER2("Comp '%s', Prv_state '%s', Final_state '%s'", comp->name.c_str(), presence_state[prv_st], @@ -953,6 +954,8 @@ uint32_t avnd_comp_clc_st_chng_prc(AVND_CB *cb, AVND_COMP *comp, TRACE_1( "Component restart is through admin opration, admin oper flag reset"); comp->admin_oper = false; + } else if (m_AVND_COMP_TYPE_IS_PREINSTANTIABLE(comp)) { +pi_comp_recover = true; } if ((SA_AMF_PRESENCE_INSTANTIATED == prv_st) && @@ -1487,6 +1490,7 @@ uint32_t avnd_comp_clc_st_chng_prc(AVND_CB *cb, AVND_COMP *comp, (SA_AMF_PRESENCE_ORPHANED != prv_st) && ((prv_st == SA_AMF_PRESENCE_INSTANTIATING) || (prv_st == SA_AMF_PRESENCE_TERMINATING) || + (prv_st == SA_AMF_PRESENCE_RESTARTING && pi_comp_recover) || (comp->su->admin_op_Id == SA_AMF_ADMIN_RESTART))) ev = AVND_SU_PRES_FSM_EV_COMP_INSTANTIATED; else if (SA_AMF_PRESENCE_INSTANTIATION_FAILED == final_st) diff --git a/src/amf/amfnd/susm.cc b/src/amf/amfnd/susm.cc index c023c8d..62e2db9 100644 --- a/src/amf/amfnd/susm.cc +++ b/src/amf/amfnd/susm.cc @@ -2282,7 +2282,9 @@ uint32_t avnd_su_pres_insting_compinst_hdler(AVND_CB *cb, AVND_SU *su, curr_comp; curr_comp = m_AVND_COMP_FROM_SU_DLL_NODE_GET( m_NCS_DBLIST_FIND_NEXT(_comp->su_dll_node))) { /* instantiate the pi comp */ -if (m_AVND_COMP_TYPE_IS_PREINSTANTIABLE(curr_comp)) { +if (m_AVND_COMP_TYPE_IS_PREINSTANTIABLE(curr_comp) && + (!m_AVND_COMP_IS_FAILED(curr_comp) || +curr_comp->pres != SA_AMF_PRESENCE_RESTARTING)) { TRACE("Running the component clc FSM"); rc = avnd_comp_clc_fsm_run(cb, curr_comp, AVND_COMP_CLC_PRES_FSM_EV_INST); -- 2.7.4 ___ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel