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

Reply via email to