Ack. -----Original Message----- From: Thien Minh Huynh <thien.m.hu...@dektech.com.au> Sent: Wednesday, January 10, 2024 10:19 AM To: Thang Duc Nguyen <thang.d.ngu...@dektech.com.au>; Dat Tran Quoc Phan <dat.tq.p...@dektech.com.au> Cc: opensaf-devel@lists.sourceforge.net; Thien Minh Huynh <thien.m.hu...@dektech.com.au> Subject: [PATCH 1/1] amf: retry if imm unavailable during recovery [#3344]
If a component has changed, AMF will obtain configuration from IMM when recovering it. If IMM is unavailable and SC absence is enabled, AMF will immediately fail. Retrying the cleanup event is the solution. This is to prevent watchdog kill AMFND. --- src/amf/amfnd/clc.cc | 14 +++++++++++--- src/amf/amfnd/compdb.cc | 6 +++++- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/src/amf/amfnd/clc.cc b/src/amf/amfnd/clc.cc index 0b0d62634..3c35a916f 100644 --- a/src/amf/amfnd/clc.cc +++ b/src/amf/amfnd/clc.cc @@ -1969,9 +1969,17 @@ uint32_t avnd_comp_clc_xxxing_cleansucc_hdler(AVND_CB *cb, AVND_COMP *comp) { "'%s': Cleanup success event in the instantiating/restarting state", comp->name.c_str()); /* Refresh the component configuration, it may have changed */ - if (!m_AVND_IS_SHUTTING_DOWN(cb) && (avnd_comp_config_reinit(comp) != 0)) { - rc = NCSCC_RC_FAILURE; - goto done; + if (!m_AVND_IS_SHUTTING_DOWN(cb)) { + int res = avnd_comp_config_reinit(comp); + if (res != 0) { + if ((res == SA_AIS_ERR_TRY_AGAIN || res == SA_AIS_ERR_TIMEOUT) && + avnd_comp_clc_cmd_execute( + cb, comp, AVND_COMP_CLC_CMD_TYPE_CLEANUP) != NCSCC_RC_SUCCESS) { + TRACE("AVND_COMP_CLC_CMD_TYPE_CLEANUP retry failed"); + } + rc = NCSCC_RC_FAILURE; + goto done; + } } /* diff --git a/src/amf/amfnd/compdb.cc b/src/amf/amfnd/compdb.cc index b104d5649..ebe9d1f5b 100644 --- a/src/amf/amfnd/compdb.cc +++ b/src/amf/amfnd/compdb.cc @@ -1706,7 +1706,7 @@ int avnd_comp_config_reinit(AVND_COMP *comp) { const SaImmAttrValuesT_2 **attributes; SaImmHandleT immOmHandle; SaVersionT immVersion = {'A', 2, 15}; - SaAisErrorT error; + SaAisErrorT error = SA_AIS_OK; const SaImmAttrNameT attributeNames[] = { const_cast<SaImmAttrNameT>("SA_IMM_SEARCH_GET_CONFIG_ATTR"), nullptr}; @@ -1767,6 +1767,10 @@ done3: done2: immutil_saImmOmFinalize(immOmHandle); done1: + if (res != 0 && + (error == SA_AIS_ERR_TRY_AGAIN || error == SA_AIS_ERR_TIMEOUT)) { + res = error; + } TRACE_LEAVE2("%u", res); return res; } -- 2.40.1 _______________________________________________ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel