When IMM is restarted, AMF will be re-initialized. AMF constantly adds fresh entries to the local database. So while delete an app, it always leaves one more sg in the database. As a consequence of this, the assertion 'app->list_of_sg == nullptr' failed.
The solution is to check for existing sg before creating new one. --- src/amf/amfd/sg.cc | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/src/amf/amfd/sg.cc b/src/amf/amfd/sg.cc index 6ed585c49..ee6d00ca8 100644 --- a/src/amf/amfd/sg.cc +++ b/src/amf/amfd/sg.cc @@ -274,14 +274,20 @@ static AVD_SG *sg_create(const std::string &sg_name, TRACE_ENTER2("'%s'", sg_name.c_str()); - SaNameT sgtype_dn; - error = immutil_getAttr("saAmfSGType", attributes, 0, &sgtype_dn); - osafassert(error == SA_AIS_OK); - sgt = sgtype_db->find(Amf::to_string(&sgtype_dn)); - osafassert(sgt); - sg = sg_new(sg_name, sgt->saAmfSgtRedundancyModel); - sg->saAmfSGType = Amf::to_string(&sgtype_dn); - sg->sg_type = sgt; + sg = sg_db->find(sg_name); + if (sg == nullptr) { + SaNameT sgtype_dn; + error = immutil_getAttr("saAmfSGType", attributes, 0, &sgtype_dn); + osafassert(error == SA_AIS_OK); + sgt = sgtype_db->find(Amf::to_string(&sgtype_dn)); + osafassert(sgt); + sg = sg_new(sg_name, sgt->saAmfSgtRedundancyModel); + sg->saAmfSGType = Amf::to_string(&sgtype_dn); + sg->sg_type = sgt; + } else { + TRACE("already created, refreshing config..."); + sgt = sg->sg_type; + } if (immutil_getAttr(const_cast<SaImmAttrNameT>("saAmfSGSuHostNodeGroup"), attributes, 0, &temp_name) == SA_AIS_OK) { -- 2.40.1 _______________________________________________ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel