Hi Thang

ack (review only)

Thanks

Gary

On 16/9/19 4:44 pm, thang.d.nguyen wrote:
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;
        }


_______________________________________________
Opensaf-devel mailing list
Opensaf-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to