During stanby SC comes up, AMF config objects are deleted on active SC. It causes NOT_EXIST error on standby node. AMFD on standby should ignore this error in this case. --- src/amf/amfd/app.cc | 29 ++++++++++++++++++++++++----- src/amf/amfd/comp.cc | 18 +++++++++++++++--- src/amf/amfd/compcstype.cc | 14 ++++++-------- src/amf/amfd/csi.cc | 24 ++++++++++++++++++------ src/amf/amfd/nodegroup.cc | 7 ++++--- src/amf/amfd/sg.cc | 32 ++++++++++++++++++++++---------- src/amf/amfd/sgtype.cc | 11 +++++++++++ src/amf/amfd/si.cc | 29 ++++++++++++++++++++++++++--- src/amf/amfd/su.cc | 35 ++++++++++++++++++++++++----------- src/amf/amfd/sutype.cc | 12 ++++++++++++ 10 files changed, 162 insertions(+), 49 deletions(-)
diff --git a/src/amf/amfd/app.cc b/src/amf/amfd/app.cc index 67e5e3e9d..17a259199 100644 --- a/src/amf/amfd/app.cc +++ b/src/amf/amfd/app.cc @@ -296,6 +296,11 @@ static void app_ccb_apply_cb(CcbUtilOperationData_t *opdata) { case CCBUTIL_MODIFY: { const SaImmAttrModificationT_2 *attr_mod; app = app_db->find(Amf::to_string(&opdata->objectName)); + if (app == nullptr && avd_cb->is_active() == false) { + LOG_WA("App modify apply (STDBY): app does not exist"); + break; + } + assert(app != nullptr); int i = 0; while ((attr_mod = opdata->param.modify.attrMods[i++]) != nullptr) { const SaImmAttrValuesT_2 *attribute = &attr_mod->modAttr; @@ -448,11 +453,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 +474,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..7e46584db 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. @@ -1695,6 +1702,10 @@ static SaAisErrorT ccb_completed_modify_hdlr(CcbUtilOperationData_t *opdata) { TRACE_ENTER(); comp = comp_db->find(Amf::to_string(&opdata->objectName)); + if (comp == nullptr && avd_cb->is_active() == false) { + LOG_WA("Comp modify completed (STDBY): comp does not exist"); + return SA_AIS_OK; + } while ((attr_mod = opdata->param.modify.attrMods[i++]) != nullptr) { const SaImmAttrValuesT_2 *attribute = &attr_mod->modAttr; @@ -2479,6 +2490,7 @@ void comp_ccb_apply_delete_hdlr(struct CcbUtilOperationData *opdata) { AVD_COMP *comp = comp_db->find(Amf::to_string(&opdata->objectName)); if (comp == nullptr && avd_cb->is_active() == false) { + LOG_WA("Comp modify apply (STDBY): comp does not exist"); return; } /* comp should be found in the database even if it was 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..9e6fcf007 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; + } } } @@ -638,6 +642,10 @@ static SaAisErrorT csi_ccb_completed_modify_hdlr( const SaImmAttrModificationT_2 *attr_mod; int i = 0; AVD_CSI *csi = csi_db->find(Amf::to_string(&opdata->objectName)); + if (csi == nullptr && avd_cb->is_active() == false) { + LOG_WA("Csi modify completed (STDBY): csi does not exist"); + return SA_AIS_OK; + } const std::string object_name(Amf::to_string(&opdata->objectName)); assert(csi); @@ -983,6 +991,10 @@ static void csi_ccb_apply_modify_hdlr(struct CcbUtilOperationData *opdata) { osaf_extended_name_borrow(&opdata->objectName)); AVD_CSI *csi = csi_db->find(Amf::to_string(&opdata->objectName)); + if (csi == nullptr && avd_cb->is_active() == false) { + LOG_WA("Csi modify apply (STDBY): csi does not exist"); + return; + } assert(csi != nullptr); AVD_SI *si = csi->si; assert(si != nullptr); diff --git a/src/amf/amfd/nodegroup.cc b/src/amf/amfd/nodegroup.cc index 483505d22..73223fb19 100644 --- a/src/amf/amfd/nodegroup.cc +++ b/src/amf/amfd/nodegroup.cc @@ -324,10 +324,11 @@ static SaAisErrorT ng_ccb_completed_modify_hdlr( TRACE_ENTER(); ng = avd_ng_get(Amf::to_string(&opdata->objectName)); - if (ng == nullptr) { - report_ccb_validation_error(opdata, "ng modify: nodegroup cannot be found"); - goto done; + if (ng == nullptr && avd_cb->is_active() == false) { + LOG_WA("NG modify completed (STDBY): ng does not exist"); + return SA_AIS_OK; } + assert(ng != nullptr); while ((mod = opdata->param.modify.attrMods[i++]) != nullptr) { if (mod->modType == SA_IMM_ATTR_VALUES_REPLACE) { diff --git a/src/amf/amfd/sg.cc b/src/amf/amfd/sg.cc index 628f3690f..47ffb9866 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; + } } } @@ -582,7 +584,11 @@ static SaAisErrorT ccb_completed_modify_hdlr( TRACE_ENTER2("'%s'", osaf_extended_name_borrow(&opdata->objectName)); sg = sg_db->find(Amf::to_string(&opdata->objectName)); - osafassert(sg != nullptr); + if (sg == nullptr && avd_cb->is_active() == false) { + LOG_WA("SG modify completed (STDBY): sg does not exist"); + return SA_AIS_OK; + } + assert(sg != nullptr); /* Validate whether we can modify it. */ @@ -890,6 +896,10 @@ static void ccb_apply_modify_hdlr(CcbUtilOperationData_t *opdata) { TRACE_ENTER2("'%s'", osaf_extended_name_borrow(&opdata->objectName)); sg = sg_db->find(Amf::to_string(&opdata->objectName)); + if (sg == nullptr && avd_cb->is_active() == false) { + LOG_WA("SG modify apply (STDBY): sg does not exist"); + return; + } assert(sg != nullptr); sg_type = sgtype_db->find(sg->saAmfSGType); @@ -1625,6 +1635,7 @@ static SaAisErrorT sg_ccb_completed_cb(CcbUtilOperationData_t *opdata) { case CCBUTIL_DELETE: sg = sg_db->find(Amf::to_string(&opdata->objectName)); if (sg == nullptr && avd_cb->is_active() == false) { + LOG_WA("SG delete completed (STDBY): sg does not exist"); rc = SA_AIS_OK; opdata->userData = nullptr; break; @@ -1687,6 +1698,7 @@ static void sg_ccb_apply_cb(CcbUtilOperationData_t *opdata) { break; case CCBUTIL_DELETE: if (opdata->userData == nullptr && avd_cb->is_active() == false) { + LOG_WA("SG delete apply (STDBY): sg does not exist"); break; } osafassert(opdata->userData != nullptr); diff --git a/src/amf/amfd/sgtype.cc b/src/amf/amfd/sgtype.cc index 25cfd7c20..15fae9cb9 100644 --- a/src/amf/amfd/sgtype.cc +++ b/src/amf/amfd/sgtype.cc @@ -326,6 +326,11 @@ static SaAisErrorT sgtype_ccb_completed_modify_hdlr( const SaImmAttrModificationT_2 *attr_mod; int i = 0; AVD_AMF_SG_TYPE *sgt = sgtype_db->find(Amf::to_string(&opdata->objectName)); + if (sgt == nullptr && avd_cb->is_active() == false) { + LOG_WA("SGT modify completed (STDBY): sgt does not exist"); + return SA_AIS_OK; + } + assert(sgt != nullptr); TRACE_ENTER2("CCB ID %llu, '%s'", opdata->ccbId, osaf_extended_name_borrow(&opdata->objectName)); @@ -383,6 +388,7 @@ static SaAisErrorT sgtype_ccb_completed_cb(CcbUtilOperationData_t *opdata) { case CCBUTIL_DELETE: sgt = sgtype_db->find(Amf::to_string(&opdata->objectName)); if (sgt == nullptr && avd_cb->is_active() == false) { + LOG_WA("SGT delete completed (STDBY): sgt does not exist"); rc = SA_AIS_OK; opdata->userData = nullptr; goto done; @@ -429,6 +435,10 @@ static void sgtype_ccb_apply_modify_hdlr(struct CcbUtilOperationData *opdata) { osaf_extended_name_borrow(&opdata->objectName)); AVD_AMF_SG_TYPE *sgt = sgtype_db->find(Amf::to_string(&opdata->objectName)); + if (sgt == nullptr && avd_cb->is_active() == false) { + LOG_WA("SGT modify apply (STDBY): sgt does not exist"); + return; + } while ((attr_mod = opdata->param.modify.attrMods[i++]) != nullptr) { bool value_is_deleted; @@ -499,6 +509,7 @@ static void sgtype_ccb_apply_cb(CcbUtilOperationData_t *opdata) { break; case CCBUTIL_DELETE: if (opdata->userData == nullptr && avd_cb->is_active() == false) { + LOG_WA("SGT delete apply (STDBY): sgt does not exist"); break; } osafassert(opdata->userData != nullptr); diff --git a/src/amf/amfd/si.cc b/src/amf/amfd/si.cc index 2bf489bc9..cd8be9479 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)) { @@ -842,7 +856,11 @@ static SaAisErrorT si_ccb_completed_modify_hdlr( osaf_extended_name_borrow(&opdata->objectName)); si = avd_si_get(Amf::to_string(&opdata->objectName)); - osafassert(si != nullptr); + if (si == nullptr && avd_cb->is_active() == false) { + LOG_WA("SI modify completed (STDBY): si does not exist"); + return SA_AIS_OK; + } + assert(si != nullptr); /* Modifications can only be done for these attributes. */ while ((attr_mod = opdata->param.modify.attrMods[i++]) != nullptr) { @@ -1341,6 +1359,10 @@ static void si_ccb_apply_modify_hdlr(CcbUtilOperationData_t *opdata) { osaf_extended_name_borrow(&opdata->objectName)); si = avd_si_get(Amf::to_string(&opdata->objectName)); + if (si == nullptr && avd_cb->is_active() == false) { + LOG_WA("SI modify apply (STDBY): si does not exist"); + return; + } osafassert(si != nullptr); /* Modifications can be done for any parameters. */ @@ -1441,6 +1463,7 @@ static void si_ccb_apply_cb(CcbUtilOperationData_t *opdata) { break; case CCBUTIL_DELETE: if (opdata->userData == nullptr && avd_cb->is_active() == false) { + LOG_WA("SI delete apply (STDBY): si does not exist"); break; } osafassert(opdata->userData != nullptr); diff --git a/src/amf/amfd/su.cc b/src/amf/amfd/su.cc index d149cc4bb..51604f312 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; } } @@ -1604,6 +1606,11 @@ static SaAisErrorT su_ccb_completed_modify_hdlr( if (!strcmp(attr_mod->modAttr.attrName, "saAmfSUFailover")) { if (value_is_deleted == true) continue; AVD_SU *su = su_db->find(Amf::to_string(&opdata->objectName)); + if (su == nullptr && avd_cb->is_active() == false) { + LOG_WA("SU modify completed (STDBY): su does not exist"); + return SA_AIS_OK; + } + assert(su != nullptr); uint32_t su_failover = *((SaUint32T *)attr_mod->modAttr.attrValues[0]); /* If SG is not in stable state and amfnd is already busy in the handling @@ -1698,6 +1705,7 @@ static SaAisErrorT su_ccb_completed_delete_hdlr( su = su_db->find(Amf::to_string(&opdata->objectName)); if (su == nullptr && avd_cb->is_active() == false) { + LOG_WA("SU delete completed (STDBY): su does not exist"); opdata->userData = nullptr; return SA_AIS_OK; } @@ -1970,6 +1978,10 @@ static void su_ccb_apply_modify_hdlr(struct CcbUtilOperationData *opdata) { osaf_extended_name_borrow(&opdata->objectName)); su = su_db->find(Amf::to_string(&opdata->objectName)); + if (su == nullptr && avd_cb->is_active() == false) { + LOG_WA("SU modify apply (STDBY): su does not exist"); + return; + } osafassert(su != nullptr); while ((attr_mod = opdata->param.modify.attrMods[i++]) != nullptr) { @@ -2053,6 +2065,7 @@ void su_ccb_apply_delete_hdlr(struct CcbUtilOperationData *opdata) { AVD_SG *sg; if (opdata->userData == nullptr && avd_cb->is_active() == false) { + LOG_WA("SU delete apply (STDBY): su does not exist"); return; } AVD_SU *su = static_cast<AVD_SU *>(opdata->userData); diff --git a/src/amf/amfd/sutype.cc b/src/amf/amfd/sutype.cc index e3fe7b3d3..009decf79 100644 --- a/src/amf/amfd/sutype.cc +++ b/src/amf/amfd/sutype.cc @@ -237,6 +237,11 @@ static void sutype_ccb_apply_modify_hdlr(struct CcbUtilOperationData *opdata) { TRACE_ENTER2("CCB ID %llu, '%s'", opdata->ccbId, osaf_extended_name_borrow(&opdata->objectName)); AVD_SUTYPE *sut = sutype_db->find(Amf::to_string(&opdata->objectName)); + if (sut == nullptr && avd_cb->is_active() == false) { + LOG_WA("SUT modify apply (STDBY): sut does not exist"); + return; + } + assert(sut != nullptr); while ((attr_mod = opdata->param.modify.attrMods[i++]) != nullptr) { if (!strcmp(attr_mod->modAttr.attrName, "saAmfSutDefSUFailover")) { @@ -282,6 +287,7 @@ static void sutype_ccb_apply_cb(CcbUtilOperationData_t *opdata) { case CCBUTIL_DELETE: sut = sutype_db->find(Amf::to_string(&opdata->objectName)); if (sut == nullptr && avd_cb->is_active() == false) { + LOG_WA("SUT delete apply (STDBY): sut does not exist"); break; } sutype_db->erase(sut->name); @@ -306,6 +312,11 @@ static SaAisErrorT sutype_ccb_completed_modify_hdlr( const SaImmAttrModificationT_2 *attr_mod; int i = 0; AVD_SUTYPE *sut = sutype_db->find(Amf::to_string(&opdata->objectName)); + if (sut == nullptr && avd_cb->is_active() == false) { + LOG_WA("SUT modify completed (STDBY): sut does not exist"); + return SA_AIS_OK; + } + assert(sut != nullptr); TRACE_ENTER2("CCB ID %llu, '%s'", opdata->ccbId, osaf_extended_name_borrow(&opdata->objectName)); @@ -377,6 +388,7 @@ static SaAisErrorT sutype_ccb_completed_cb(CcbUtilOperationData_t *opdata) { case CCBUTIL_DELETE: sut = sutype_db->find(Amf::to_string(&opdata->objectName)); if (sut == nullptr && avd_cb->is_active() == false) { + LOG_WA("SUT delete completed (STDBY): sut does not exist"); rc = SA_AIS_OK; break; } -- 2.17.1 _______________________________________________ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel