During the standby controller come up, amfd is busy and take a lot of time to create data base from IMM. And at the time, some AMF objects deleted from active controller.
In consequence, the amfd on stanby will be rebooted due to objects NOT_EXIST error. --- src/amf/amfd/app.cc | 24 +++++++++++++++++++----- src/amf/amfd/comp.cc | 13 ++++++++++--- src/amf/amfd/compcstype.cc | 14 ++++++-------- src/amf/amfd/csi.cc | 16 ++++++++++------ src/amf/amfd/role.cc | 8 ++++---- src/amf/amfd/sg.cc | 20 +++++++++++--------- src/amf/amfd/si.cc | 18 ++++++++++++++++-- src/amf/amfd/su.cc | 24 +++++++++++++----------- 8 files changed, 89 insertions(+), 48 deletions(-) diff --git a/src/amf/amfd/app.cc b/src/amf/amfd/app.cc index 67e5e3e9d..f91c8699d 100644 --- a/src/amf/amfd/app.cc +++ b/src/amf/amfd/app.cc @@ -448,11 +448,12 @@ SaAisErrorT avd_app_config_get(void) { searchParam.searchOneAttr.attrValueType = SA_IMM_ATTR_SASTRINGT; searchParam.searchOneAttr.attrValue = &className; - if (immutil_saImmOmSearchInitialize_2( + if ((rc = immutil_saImmOmSearchInitialize_2( avd_cb->immOmHandle, nullptr, SA_IMM_SUBTREE, SA_IMM_SEARCH_ONE_ATTR | SA_IMM_SEARCH_GET_SOME_ATTR, &searchParam, - configAttributes, &searchHandle) != SA_AIS_OK) { - LOG_ER("%s: saImmOmSearchInitialize_2 failed: %u", __FUNCTION__, error); + configAttributes, &searchHandle)) != SA_AIS_OK) { + LOG_ER("%s: saImmOmSearchInitialize_2 failed: %u", __FUNCTION__, rc); + error = rc; goto done1; } @@ -468,9 +469,22 @@ SaAisErrorT avd_app_config_get(void) { app_add_to_model(app); - if (avd_sg_config_get(Amf::to_string(&dn), app) != SA_AIS_OK) goto done2; + if ((rc = avd_sg_config_get(Amf::to_string(&dn), app)) != SA_AIS_OK) { + if ((rc == SA_AIS_ERR_NOT_EXIST) && (avd_cb->is_active() == false)) { + avd_app_delete(app); + continue; + } else { + goto done2; + } + } - if (avd_si_config_get(app) != SA_AIS_OK) goto done2; + if ((rc = avd_si_config_get(app)) != SA_AIS_OK) { + if ((rc == SA_AIS_ERR_NOT_EXIST) && (avd_cb->is_active() == false)) { + avd_app_delete(app); + } else { + goto done2; + } + } } if (rc == SA_AIS_ERR_NOT_EXIST) { diff --git a/src/amf/amfd/comp.cc b/src/amf/amfd/comp.cc index 0ff365e55..ce75a9a2d 100644 --- a/src/amf/amfd/comp.cc +++ b/src/amf/amfd/comp.cc @@ -1509,6 +1509,7 @@ SaAisErrorT avd_comp_config_get(const std::string &su_name, AVD_SU *su) { SA_IMM_SEARCH_ONE_ATTR | SA_IMM_SEARCH_GET_SOME_ATTR, &searchParam, configAttributes, &searchHandle)) != SA_AIS_OK) { LOG_ER("%s: saImmOmSearchInitialize_2 failed: %u", __FUNCTION__, rc); + error = rc; goto done1; } @@ -1524,9 +1525,15 @@ SaAisErrorT avd_comp_config_get(const std::string &su_name, AVD_SU *su) { num_of_comp_in_su++; comp_add_to_model(comp); - if (avd_compcstype_config_get(Amf::to_string(&comp_name), comp) != - SA_AIS_OK) - goto done2; + if ((rc = avd_compcstype_config_get(Amf::to_string(&comp_name), comp)) != + SA_AIS_OK) { + if ((rc == SA_AIS_ERR_NOT_EXIST) && (avd_cb->is_active() == false)) { + avd_comp_delete(comp); + num_of_comp_in_su--; + } else { + goto done2; + } + } } /* If there are no component in the SU, we treat it as invalid configuration. diff --git a/src/amf/amfd/compcstype.cc b/src/amf/amfd/compcstype.cc index 37eb1e102..df7437aec 100644 --- a/src/amf/amfd/compcstype.cc +++ b/src/amf/amfd/compcstype.cc @@ -282,7 +282,7 @@ done: * @return int */ SaAisErrorT avd_compcstype_config_get(const std::string &name, AVD_COMP *comp) { - SaAisErrorT error; + SaAisErrorT error = SA_AIS_ERR_FAILED_OPERATION, rc; SaImmSearchHandleT searchHandle; SaImmSearchParametersT_2 searchParam; SaNameT dn; @@ -299,27 +299,25 @@ SaAisErrorT avd_compcstype_config_get(const std::string &name, AVD_COMP *comp) { searchParam.searchOneAttr.attrValueType = SA_IMM_ATTR_SASTRINGT; searchParam.searchOneAttr.attrValue = &className; - error = immutil_saImmOmSearchInitialize_o2( + rc = immutil_saImmOmSearchInitialize_o2( avd_cb->immOmHandle, name.c_str(), SA_IMM_SUBTREE, SA_IMM_SEARCH_ONE_ATTR | SA_IMM_SEARCH_GET_SOME_ATTR, &searchParam, attributeNames, &searchHandle); - - if (SA_AIS_OK != error) { - LOG_ER("saImmOmSearchInitialize_2 failed: %u", error); + if (SA_AIS_OK != rc) { + LOG_ER("saImmOmSearchInitialize_2 failed: %u", rc); + error = rc; goto done1; } - while ((error = immutil_saImmOmSearchNext_2( + while ((rc = immutil_saImmOmSearchNext_2( searchHandle, &dn, (SaImmAttrValuesT_2 ***)&attributes)) == SA_AIS_OK) { if (!is_config_valid(Amf::to_string(&dn), nullptr)) { - error = SA_AIS_ERR_FAILED_OPERATION; goto done2; } if ((compcstype = compcstype_create(Amf::to_string(&dn), attributes)) == nullptr) { - error = SA_AIS_ERR_FAILED_OPERATION; goto done2; } compcstype_add_to_model(compcstype); diff --git a/src/amf/amfd/csi.cc b/src/amf/amfd/csi.cc index f7e3730dd..1b1831321 100644 --- a/src/amf/amfd/csi.cc +++ b/src/amf/amfd/csi.cc @@ -473,7 +473,7 @@ done: * @return int */ SaAisErrorT avd_csi_config_get(const std::string &si_name, AVD_SI *si) { - SaAisErrorT error = SA_AIS_ERR_FAILED_OPERATION; + SaAisErrorT error = SA_AIS_ERR_FAILED_OPERATION, rc; SaImmSearchHandleT searchHandle; SaImmSearchParametersT_2 searchParam; SaNameT temp_csi_name; @@ -487,11 +487,12 @@ SaAisErrorT avd_csi_config_get(const std::string &si_name, AVD_SI *si) { searchParam.searchOneAttr.attrValueType = SA_IMM_ATTR_SASTRINGT; searchParam.searchOneAttr.attrValue = &className; - if (immutil_saImmOmSearchInitialize_o2( + if ((rc = immutil_saImmOmSearchInitialize_o2( avd_cb->immOmHandle, si_name.c_str(), SA_IMM_SUBTREE, SA_IMM_SEARCH_ONE_ATTR | SA_IMM_SEARCH_GET_ALL_ATTR, &searchParam, - nullptr, &searchHandle) != SA_AIS_OK) { + nullptr, &searchHandle)) != SA_AIS_OK) { LOG_ER("saImmOmSearchInitialize_2 failed"); + error = rc; goto done1; } @@ -507,9 +508,12 @@ SaAisErrorT avd_csi_config_get(const std::string &si_name, AVD_SI *si) { csi_get_attr_and_add_to_model(csi, attributes, si_name); } - if (avd_csiattr_config_get(csi_name, csi) != SA_AIS_OK) { - error = SA_AIS_ERR_FAILED_OPERATION; - goto done2; + if ((rc = avd_csiattr_config_get(csi_name, csi)) != SA_AIS_OK) { + if ((rc == SA_AIS_ERR_NOT_EXIST) && (avd_cb->is_active() == false)) { + avd_csi_delete(csi); + } else { + goto done2; + } } } diff --git a/src/amf/amfd/role.cc b/src/amf/amfd/role.cc index 15b0458d2..76828299d 100644 --- a/src/amf/amfd/role.cc +++ b/src/amf/amfd/role.cc @@ -316,13 +316,13 @@ uint32_t avd_standby_role_initialization(AVD_CL_CB *cb) { TRACE_ENTER(); - if (avd_imm_applier_set() != SA_AIS_OK) { - LOG_ER("avd_imm_applier_set FAILED"); + if (avd_imm_config_get() != NCSCC_RC_SUCCESS) { + LOG_ER("avd_imm_config_get FAILED, AMF will not start."); goto done; } - if (avd_imm_config_get() != NCSCC_RC_SUCCESS) { - LOG_ER("avd_imm_config_get FAILED, AMF will not start."); + if (avd_imm_applier_set() != SA_AIS_OK) { + LOG_ER("avd_imm_applier_set FAILED"); goto done; } diff --git a/src/amf/amfd/sg.cc b/src/amf/amfd/sg.cc index 628f3690f..322821686 100644 --- a/src/amf/amfd/sg.cc +++ b/src/amf/amfd/sg.cc @@ -435,7 +435,7 @@ static AVD_SG *sg_create(const std::string &sg_name, */ SaAisErrorT avd_sg_config_get(const std::string &app_dn, AVD_APP *app) { AVD_SG *sg; - SaAisErrorT error, rc; + SaAisErrorT error = SA_AIS_ERR_FAILED_OPERATION, rc; SaImmSearchHandleT searchHandle; SaImmSearchParametersT_2 searchParam; SaNameT dn; @@ -468,13 +468,14 @@ SaAisErrorT avd_sg_config_get(const std::string &app_dn, AVD_APP *app) { searchParam.searchOneAttr.attrValueType = SA_IMM_ATTR_SASTRINGT; searchParam.searchOneAttr.attrValue = &className; - error = immutil_saImmOmSearchInitialize_o2( + rc = immutil_saImmOmSearchInitialize_o2( avd_cb->immOmHandle, app_dn.c_str(), SA_IMM_SUBTREE, SA_IMM_SEARCH_ONE_ATTR | SA_IMM_SEARCH_GET_SOME_ATTR, &searchParam, configAttributes, &searchHandle); - if (SA_AIS_OK != error) { - LOG_ER("%s: saImmOmSearchInitialize_2 failed: %u", __FUNCTION__, error); + if (SA_AIS_OK != rc) { + LOG_ER("%s: saImmOmSearchInitialize_2 failed: %u", __FUNCTION__, rc); + error = rc; goto done1; } @@ -482,20 +483,21 @@ SaAisErrorT avd_sg_config_get(const std::string &app_dn, AVD_APP *app) { searchHandle, &dn, (SaImmAttrValuesT_2 ***)&attributes)) == SA_AIS_OK) { if (!is_config_valid(Amf::to_string(&dn), attributes, nullptr)) { - error = SA_AIS_ERR_FAILED_OPERATION; goto done2; } if ((sg = sg_create(Amf::to_string(&dn), attributes)) == nullptr) { - error = SA_AIS_ERR_FAILED_OPERATION; goto done2; } sg_add_to_model(sg); - if (avd_su_config_get(Amf::to_string(&dn), sg) != SA_AIS_OK) { - error = SA_AIS_ERR_FAILED_OPERATION; - goto done2; + if ((rc = avd_su_config_get(Amf::to_string(&dn), sg)) != SA_AIS_OK) { + if ((rc == SA_AIS_ERR_NOT_EXIST) && (avd_cb->is_active() == false)) { + avd_sg_delete(sg); + } else { + goto done2; + } } } diff --git a/src/amf/amfd/si.cc b/src/amf/amfd/si.cc index 2bf489bc9..6d5263fa6 100644 --- a/src/amf/amfd/si.cc +++ b/src/amf/amfd/si.cc @@ -792,6 +792,7 @@ SaAisErrorT avd_si_config_get(AVD_APP *app) { SA_IMM_SEARCH_ONE_ATTR | SA_IMM_SEARCH_GET_SOME_ATTR, &searchParam, configAttributes, &searchHandle)) != SA_AIS_OK) { LOG_ER("%s: saImmOmSearchInitialize_2 failed: %u", __FUNCTION__, rc); + error = rc; goto done1; } @@ -805,9 +806,22 @@ SaAisErrorT avd_si_config_get(AVD_APP *app) { si->si_add_to_model(); - if (avd_sirankedsu_config_get(si_str, si) != SA_AIS_OK) goto done2; + if ((rc = avd_sirankedsu_config_get(si_str, si)) != SA_AIS_OK) { + if ((rc == SA_AIS_ERR_NOT_EXIST) && (avd_cb->is_active() == false)) { + avd_si_delete(si); + continue; + } else { + goto done2; + } + } - if (avd_csi_config_get(si_str, si) != SA_AIS_OK) goto done2; + if ((rc = avd_csi_config_get(si_str, si)) != SA_AIS_OK) { + if ((rc == SA_AIS_ERR_NOT_EXIST) && (avd_cb->is_active() == false)) { + avd_si_delete(si); + } else { + goto done2; + } + } if ((si->sg_of_si != nullptr) && (si->sg_of_si->any_container_su() == true) && (si->csi_count() > 1)) { diff --git a/src/amf/amfd/su.cc b/src/amf/amfd/su.cc index d149cc4bb..582cf27ef 100644 --- a/src/amf/amfd/su.cc +++ b/src/amf/amfd/su.cc @@ -694,7 +694,7 @@ done: } SaAisErrorT avd_su_config_get(const std::string &sg_name, AVD_SG *sg) { - SaAisErrorT error, rc; + SaAisErrorT error = SA_AIS_ERR_FAILED_OPERATION, rc; SaImmSearchHandleT searchHandle; SaImmSearchParametersT_2 searchParam; SaNameT tmp_su_name; @@ -719,13 +719,14 @@ SaAisErrorT avd_su_config_get(const std::string &sg_name, AVD_SG *sg) { searchParam.searchOneAttr.attrValueType = SA_IMM_ATTR_SASTRINGT; searchParam.searchOneAttr.attrValue = &className; - error = immutil_saImmOmSearchInitialize_o2( + rc = immutil_saImmOmSearchInitialize_o2( avd_cb->immOmHandle, sg_name.c_str(), SA_IMM_SUBTREE, SA_IMM_SEARCH_ONE_ATTR | SA_IMM_SEARCH_GET_SOME_ATTR, &searchParam, configAttributes, &searchHandle); - if (SA_AIS_OK != error) { - LOG_ER("%s: saImmOmSearchInitialize_2 failed: %u", __FUNCTION__, error); + if (SA_AIS_OK != rc) { + LOG_ER("%s: saImmOmSearchInitialize_2 failed: %u", __FUNCTION__, rc); + error = rc; goto done1; } @@ -734,27 +735,29 @@ SaAisErrorT avd_su_config_get(const std::string &sg_name, AVD_SG *sg) { (SaImmAttrValuesT_2 ***)&attributes)) == SA_AIS_OK) { su_name = Amf::to_string(&tmp_su_name); if (!is_config_valid(su_name, attributes, nullptr)) { - error = SA_AIS_ERR_FAILED_OPERATION; goto done2; } if ((su = su_create(su_name, attributes)) == nullptr) { - error = SA_AIS_ERR_FAILED_OPERATION; goto done2; } su_add_to_model(su); - if (avd_comp_config_get(su_name, su) != SA_AIS_OK) { - error = SA_AIS_ERR_FAILED_OPERATION; - goto done2; + if ((rc = avd_comp_config_get(su_name, su)) != SA_AIS_OK) { + if ((rc == SA_AIS_ERR_NOT_EXIST) && (avd_cb->is_active() == false)) { + su->remove_from_model(); + delete su; + continue; + } else { + goto done2; + } } if (su->any_container_comp() == true) { if (su->container() == false) { LOG_ER("%s: comps of other category mixed with container comp: %u", su->name.c_str(), error); - error = SA_AIS_ERR_FAILED_OPERATION; goto done2; } } @@ -762,7 +765,6 @@ SaAisErrorT avd_su_config_get(const std::string &sg_name, AVD_SG *sg) { if (su->contained() == false) { LOG_ER("%s: comps of other category mixed with contained comp: %u", su->name.c_str(), error); - error = SA_AIS_ERR_FAILED_OPERATION; goto done2; } } -- 2.17.1 _______________________________________________ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel