osaf/services/saf/mqsv/mqd/mqd_api.c | 95 ++++++++++++++++++++--------------- 1 files changed, 53 insertions(+), 42 deletions(-)
With the introduction of spares support #79, all services were modified to wait for AMF role assignment to register with MDS and proceed further with their lifecycle. However, this is not necessary and would create a problem of 1781. i.e. All services should ideally register with CLM independent of their HA roles as provided by AMF or RDA. But ofcourse until now only AMF, EVT, CKPT, MSG, NTF, SMF have been integrated with CLM. This patch makes the services register with CLM before entering the wait() for AMF role. NTF service is already handling this correctly. This is also necessary to make OpenSAF services run - without abort, on nodes that are administratively locked/shutdown via CLM node admin commands. A separate patch for SMF follow. diff --git a/osaf/services/saf/mqsv/mqd/mqd_api.c b/osaf/services/saf/mqsv/mqd/mqd_api.c --- a/osaf/services/saf/mqsv/mqd/mqd_api.c +++ b/osaf/services/saf/mqsv/mqd/mqd_api.c @@ -113,6 +113,55 @@ uint32_t mqd_lib_req(NCS_LIB_REQ_INFO *i return rc; } /* End of mqd_lib_req() */ +static SaAisErrorT mqd_clm_init (MQD_CB *cb) +{ + SaAisErrorT saErr = SA_AIS_OK; + SaVersionT clm_version; + SaClmCallbacksT mqd_clm_cbk; + + m_MQSV_GET_AMF_VER(clm_version); + mqd_clm_cbk.saClmClusterNodeGetCallback = NULL; + mqd_clm_cbk.saClmClusterTrackCallback = mqd_clm_cluster_track_callback; + + saErr = saClmInitialize(&cb->clm_hdl, &mqd_clm_cbk, &clm_version); + if (saErr != SA_AIS_OK) { + LOG_ER("saClmInitialize failed with error %u", (unsigned) saErr); + mqd_mbcsv_finalize(cb); + if (mqd_mds_shut(cb) != NCSCC_RC_SUCCESS) { + TRACE_2("MDS Deregistration Failed"); + } + goto done; + } + TRACE_1("saClmInitialize success"); + + saErr = saClmSelectionObjectGet(cb->clm_hdl, &cb->clm_sel_obj); + if (SA_AIS_OK != saErr) { + LOG_ER("saClmSelectionObjectGet failed with error %u", (unsigned) saErr); + mqd_mbcsv_finalize(cb); + if (mqd_mds_shut(cb) != NCSCC_RC_SUCCESS) { + TRACE_2("MDS Deregistration Failed"); + } + goto done; + } + TRACE_1("saClmSelectionObjectGet success"); + + saErr = saClmClusterTrack(cb->clm_hdl, SA_TRACK_CHANGES_ONLY, NULL); + if (SA_AIS_OK != saErr) { + LOG_ER("saClmClusterTrack failed with error %u", (unsigned) saErr); + mqd_mbcsv_finalize(cb); + if (mqd_mds_shut(cb) != NCSCC_RC_SUCCESS) { + TRACE_2("MDS Deregistration Failed"); + } + goto done; + } + TRACE_1("saClmClusterTrack success"); + +done: + saClmFinalize(cb->clm_hdl); + + return saErr; +} + /****************************************************************************\ PROCEDURE NAME : mqd_lib_init @@ -256,6 +305,9 @@ static uint32_t mqd_lib_init(void) return rc; } + if (mqd_clm_init(pMqd) != SA_AIS_OK) + return NCSCC_RC_FAILURE; + if ((rc = initialize_for_assignment(pMqd, pMqd->ha_state)) != NCSCC_RC_SUCCESS) { LOG_ER("initialize_for_assignment FAILED %u", (unsigned) rc); @@ -271,9 +323,8 @@ uint32_t initialize_for_assignment(MQD_C { TRACE_ENTER2("ha_state = %d", (int) ha_state); uint32_t rc = NCSCC_RC_SUCCESS; - SaClmCallbacksT mqd_clm_cbk; - SaVersionT clm_version; SaAisErrorT saErr = SA_AIS_OK; + if (cb->fully_initialized || ha_state == SA_AMF_HA_QUIESCED) { goto done; } @@ -293,46 +344,6 @@ uint32_t initialize_for_assignment(MQD_C goto done; } - m_MQSV_GET_AMF_VER(clm_version); - mqd_clm_cbk.saClmClusterNodeGetCallback = NULL; - mqd_clm_cbk.saClmClusterTrackCallback = mqd_clm_cluster_track_callback; - - saErr = saClmInitialize(&cb->clm_hdl, &mqd_clm_cbk, &clm_version); - if (saErr != SA_AIS_OK) { - LOG_ER("saClmInitialize failed with error %u", (unsigned) saErr); - mqd_mbcsv_finalize(cb); - if (mqd_mds_shut(cb) != NCSCC_RC_SUCCESS) { - TRACE_2("MDS Deregistration Failed"); - } - rc = NCSCC_RC_FAILURE; - goto done; - } - TRACE_1("saClmInitialize success"); - - saErr = saClmSelectionObjectGet(cb->clm_hdl, &cb->clm_sel_obj); - if (SA_AIS_OK != saErr) { - LOG_ER("saClmSelectionObjectGet failed with error %u", (unsigned) saErr); - mqd_mbcsv_finalize(cb); - if (mqd_mds_shut(cb) != NCSCC_RC_SUCCESS) { - TRACE_2("MDS Deregistration Failed"); - } - rc = NCSCC_RC_FAILURE; - goto done; - } - TRACE_1("saClmSelectionObjectGet success"); - - saErr = saClmClusterTrack(cb->clm_hdl, SA_TRACK_CHANGES_ONLY, NULL); - if (SA_AIS_OK != saErr) { - LOG_ER("saClmClusterTrack failed with error %u", (unsigned) saErr); - mqd_mbcsv_finalize(cb); - if (mqd_mds_shut(cb) != NCSCC_RC_SUCCESS) { - TRACE_2("MDS Deregistration Failed"); - } - rc = NCSCC_RC_FAILURE; - goto done; - } - TRACE_1("saClmClusterTrack success"); - /* MQD Imm Initialization */ saErr = mqd_imm_initialize(cb); if (saErr != SA_AIS_OK) { ------------------------------------------------------------------------------ Find and fix application performance issues faster with Applications Manager Applications Manager provides deep performance insights into multiple tiers of your business applications. It resolves application problems quickly and reduces your MTTR. Get your free trial! https://ad.doubleclick.net/ddm/clk/302982198;130105516;z _______________________________________________ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel