osaf/services/saf/amf/amfd/ckpt_enc.cc | 7 +-- osaf/services/saf/amf/amfd/ckpt_updt.cc | 4 +- osaf/services/saf/amf/amfd/compcstype.cc | 59 +++++++----------------------- osaf/services/saf/amf/amfd/include/comp.h | 1 + osaf/services/saf/amf/amfd/util.cc | 7 +-- 5 files changed, 23 insertions(+), 55 deletions(-)
diff --git a/osaf/services/saf/amf/amfd/ckpt_enc.cc b/osaf/services/saf/amf/amfd/ckpt_enc.cc --- a/osaf/services/saf/amf/amfd/ckpt_enc.cc +++ b/osaf/services/saf/amf/amfd/ckpt_enc.cc @@ -2686,7 +2686,6 @@ static uint32_t enc_comp_cs_type_config( static uint32_t enc_cs_comp_cs_type_config(AVD_CL_CB *cb, NCS_MBCSV_CB_ENC *enc, uint32_t *num_of_obj) { uint32_t status = NCSCC_RC_SUCCESS; - AVD_COMPCS_TYPE *compcstype; EDU_ERR ederror = static_cast<EDU_ERR>(0); SaNameT dn = {0}; TRACE_ENTER(); @@ -2694,9 +2693,9 @@ static uint32_t enc_cs_comp_cs_type_conf /* * Walk through the entire list and send the entire list data. */ - dn.length = 0; - for (compcstype = avd_compcstype_getnext(&dn); compcstype != NULL; - compcstype = avd_compcstype_getnext(&dn)) { + for (std::map<std::string, AVD_COMPCS_TYPE*>::const_iterator it = compcstype_db->begin(); + it != compcstype_db->end(); it++) { + AVD_COMPCS_TYPE *compcstype = it->second; status = m_NCS_EDU_VER_EXEC(&cb->edu_hdl, avsv_edp_ckpt_msg_comp_cs_type, &enc->io_uba, EDP_OP_TYPE_ENC, compcstype, &ederror, enc->i_peer_version); diff --git a/osaf/services/saf/amf/amfd/ckpt_updt.cc b/osaf/services/saf/amf/amfd/ckpt_updt.cc --- a/osaf/services/saf/amf/amfd/ckpt_updt.cc +++ b/osaf/services/saf/amf/amfd/ckpt_updt.cc @@ -586,8 +586,8 @@ uint32_t avd_ckpt_compcstype(AVD_CL_CB * osafassert (action == NCS_MBCSV_ACT_UPDATE); - if (NULL == (ccst = avd_compcstype_get(dn))) { - LOG_ER("avd_compcstype_get FAILED for '%s'", dn->value); + if (NULL == (ccst = compcstype_db->find(Amf::to_string(dn)))) { + LOG_ER("compcstype_db->find()FAILED for '%s'", dn->value); goto done; } ccst->saAmfCompNumCurrActiveCSIs = ckpt_compcstype->saAmfCompNumCurrActiveCSIs; diff --git a/osaf/services/saf/amf/amfd/compcstype.cc b/osaf/services/saf/amf/amfd/compcstype.cc --- a/osaf/services/saf/amf/amfd/compcstype.cc +++ b/osaf/services/saf/amf/amfd/compcstype.cc @@ -29,7 +29,7 @@ #include <proc.h> #include <ckpt_msg.h> -static NCS_PATRICIA_TREE compcstype_db; +AmfDb<std::string, AVD_COMPCS_TYPE> *compcstype_db = NULL;; // // TODO(HANO) Temporary use this function instead of strdup which uses malloc. @@ -46,8 +46,8 @@ void avd_compcstype_db_add(AVD_COMPCS_TY { unsigned int rc; - if (avd_compcstype_get(&cst->name) == NULL) { - rc = ncs_patricia_tree_add(&compcstype_db, &cst->tree_node); + if (compcstype_db->find(Amf::to_string(&cst->name)) == NULL) { + rc = compcstype_db->insert(Amf::to_string(&cst->name),cst); osafassert(rc == NCSCC_RC_SUCCESS); } } @@ -60,21 +60,10 @@ AVD_COMPCS_TYPE *avd_compcstype_new(cons memcpy(compcstype->name.value, dn->value, dn->length); compcstype->name.length = dn->length; - compcstype->tree_node.key_info = (uint8_t *)&(compcstype->name); return compcstype; } -void avd_compcstype_delete(AVD_COMPCS_TYPE **cst) -{ - unsigned int rc; - - rc = ncs_patricia_tree_del(&compcstype_db, &(*cst)->tree_node); - osafassert(rc == NCSCC_RC_SUCCESS); - delete *cst; - *cst = NULL; -} - static void compcstype_add_to_model(AVD_COMPCS_TYPE *cst) { /* Check comp link to see if it has been added already */ @@ -110,30 +99,10 @@ AVD_COMPCS_TYPE * avd_compcstype_find_ma TRACE_ENTER(); avsv_create_association_class_dn(cstype_name, &comp->comp_info.name, "safSupportedCsType", &dn); TRACE("'%s'", dn.value); - cst = (AVD_COMPCS_TYPE *)ncs_patricia_tree_get(&compcstype_db, (uint8_t *)&dn); + cst = compcstype_db->find(Amf::to_string(&dn)); return cst; } -AVD_COMPCS_TYPE *avd_compcstype_get(const SaNameT *dn) -{ - SaNameT tmp = {0}; - - tmp.length = dn->length; - memcpy(tmp.value, dn->value, tmp.length); - - return (AVD_COMPCS_TYPE *)ncs_patricia_tree_get(&compcstype_db, (uint8_t *)&tmp); -} - -AVD_COMPCS_TYPE *avd_compcstype_getnext(const SaNameT *dn) -{ - SaNameT tmp = {0}; - - tmp.length = dn->length; - memcpy(tmp.value, dn->value, dn->length); - - return (AVD_COMPCS_TYPE *)ncs_patricia_tree_getnext(&compcstype_db, (uint8_t *)&tmp); -} - /** * Validate configuration attributes for an SaAmfCompCsType object * @param cst @@ -245,7 +214,7 @@ static AVD_COMPCS_TYPE *compcstype_creat ** If called at new active at failover, the object is found in the DB ** but needs to get configuration attributes initialized. */ - if ((NULL == (compcstype = avd_compcstype_get(dn))) && + if ((NULL == (compcstype = compcstype_db->find(Amf::to_string(dn)))) && ((compcstype = avd_compcstype_new(dn)) == NULL)) goto done; @@ -284,7 +253,7 @@ static AVD_COMPCS_TYPE *compcstype_creat done: if (rc != 0) - avd_compcstype_delete(&compcstype); + compcstype_db->erase(Amf::to_string(&compcstype->name)); delete [] cstype_name; return compcstype; @@ -372,7 +341,7 @@ static SaAisErrorT compcstype_ccb_comple AVD_SU_SI_REL *curr_susi; AVD_COMP_CSI_REL *compcsi; - cst = avd_compcstype_get(&opdata->objectName); + cst = compcstype_db->find(Amf::to_string(&opdata->objectName)); osafassert(cst); avsv_sanamet_init(&opdata->objectName, &comp_name, "safComp="); comp = avd_comp_get(&comp_name); @@ -407,8 +376,11 @@ static void compcstype_ccb_apply_cb(CcbU compcstype_add_to_model(cst); break; case CCBUTIL_DELETE: - cst = avd_compcstype_get(&opdata->objectName); - avd_compcstype_delete(&cst); + cst = compcstype_db->find(Amf::to_string(&opdata->objectName)); + if (cst != NULL) { + compcstype_db->erase(Amf::to_string(&cst->name)); + delete cst; + } break; default: osafassert(0); @@ -419,7 +391,7 @@ static void compcstype_ccb_apply_cb(CcbU static SaAisErrorT compcstype_rt_attr_callback(SaImmOiHandleT immOiHandle, const SaNameT *objectName, const SaImmAttrNameT *attributeNames) { - AVD_COMPCS_TYPE *cst = avd_compcstype_get(objectName); + AVD_COMPCS_TYPE *cst = compcstype_db->find(Amf::to_string(objectName)); SaImmAttrNameT attributeName; int i = 0; @@ -445,10 +417,7 @@ static SaAisErrorT compcstype_rt_attr_ca void avd_compcstype_constructor(void) { - NCS_PATRICIA_PARAMS patricia_params; - - patricia_params.key_size = sizeof(SaNameT); - osafassert(ncs_patricia_tree_init(&compcstype_db, &patricia_params) == NCSCC_RC_SUCCESS); + compcstype_db = new AmfDb<std::string, AVD_COMPCS_TYPE>; avd_class_impl_set("SaAmfCompCsType", compcstype_rt_attr_callback, NULL, compcstype_ccb_completed_cb, compcstype_ccb_apply_cb); } diff --git a/osaf/services/saf/amf/amfd/include/comp.h b/osaf/services/saf/amf/amfd/include/comp.h --- a/osaf/services/saf/amf/amfd/include/comp.h +++ b/osaf/services/saf/amf/amfd/include/comp.h @@ -163,6 +163,7 @@ typedef struct avd_comp_cs_type_tag { SaNameT *saAmfCompAssignedCsi; AVD_COMP *comp; } AVD_COMPCS_TYPE; +extern AmfDb<std::string, AVD_COMPCS_TYPE> *compcstype_db; /* AMF Class SaAmfCtCsType */ typedef struct { diff --git a/osaf/services/saf/amf/amfd/util.cc b/osaf/services/saf/amf/amfd/util.cc --- a/osaf/services/saf/amf/amfd/util.cc +++ b/osaf/services/saf/amf/amfd/util.cc @@ -1440,10 +1440,9 @@ void amfd_file_dump(const char *path) } } - dn.length = 0; - AVD_COMPCS_TYPE *compcstype; - for (compcstype = avd_compcstype_getnext(&dn); compcstype != NULL; - compcstype = avd_compcstype_getnext(&dn)) { + for (std::map<std::string, AVD_COMPCS_TYPE*>::const_iterator it = compcstype_db->begin(); + it != compcstype_db->end(); it++) { + const AVD_COMPCS_TYPE *compcstype = it->second; fprintf(f, "%s\n", compcstype->name.value); fprintf(f, "\tsaAmfCompNumCurrActiveCSIs=%u\n", compcstype->saAmfCompNumCurrActiveCSIs); fprintf(f, "\tsaAmfCompNumCurrStandbyCSIs=%u\n", compcstype->saAmfCompNumCurrStandbyCSIs); ------------------------------------------------------------------------------ Learn Graph Databases - Download FREE O'Reilly Book "Graph Databases" is the definitive new guide to graph databases and their applications. Written by three acclaimed leaders in the field, this first edition is now available. Download your free book today! http://p.sf.net/sfu/NeoTech _______________________________________________ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel