osaf/services/saf/amf/amfd/ckpt_enc.cc | 14 ++----
osaf/services/saf/amf/amfd/comp.cc | 57 +++++++++---------------------
osaf/services/saf/amf/amfd/compcstype.cc | 2 +-
osaf/services/saf/amf/amfd/imm.cc | 7 +--
osaf/services/saf/amf/amfd/include/comp.h | 9 ++--
osaf/services/saf/amf/amfd/util.cc | 6 +-
6 files changed, 33 insertions(+), 62 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
@@ -2603,17 +2603,14 @@ static uint32_t enc_cs_siass(AVD_CL_CB *
static uint32_t enc_cs_comp_config(AVD_CL_CB *cb, NCS_MBCSV_CB_ENC *enc,
uint32_t *num_of_obj)
{
uint32_t status = NCSCC_RC_SUCCESS;
- AVD_COMP *comp;
- SaNameT comp_name = {0};
EDU_ERR ederror = static_cast<EDU_ERR>(0);
TRACE_ENTER();
- /*
- * Walk through the entire list and send the entire list data.
- */
- comp_name.length = 0;
- for (comp = avd_comp_getnext(&comp_name); comp != NULL;
- comp = avd_comp_getnext(&comp_name)) {
+ /* Walk through all component instances and encode. */
+ // If use std=c++11 in Makefile.common the following syntax can be used
instead:
+ // for (auto it = app_db->begin()
+ for (std::map<std::string, AVD_COMP*>::const_iterator it =
comp_db->begin(); it != comp_db->end(); it++) {
+ AVD_COMP *comp = it->second;
status = m_NCS_EDU_VER_EXEC(&cb->edu_hdl,
avsv_edp_ckpt_msg_comp, &enc->io_uba,
EDP_OP_TYPE_ENC, comp, &ederror,
enc->i_peer_version);
@@ -2622,7 +2619,6 @@ static uint32_t enc_cs_comp_config(AVD_C
return NCSCC_RC_FAILURE;
}
- comp_name = comp->comp_info.name;
(*num_of_obj)++;
}
diff --git a/osaf/services/saf/amf/amfd/comp.cc
b/osaf/services/saf/amf/amfd/comp.cc
--- a/osaf/services/saf/amf/amfd/comp.cc
+++ b/osaf/services/saf/amf/amfd/comp.cc
@@ -40,17 +40,7 @@
#include <proc.h>
#include <ckpt_msg.h>
-static NCS_PATRICIA_TREE comp_db;
-
-void avd_comp_db_add(AVD_COMP *comp)
-{
- unsigned int rc;
-
- if (avd_comp_get(&comp->comp_info.name) == NULL) {
- rc = ncs_patricia_tree_add(&comp_db, &comp->tree_node);
- osafassert(rc == NCSCC_RC_SUCCESS);
- }
-}
+AmfDb<AVD_COMP> *comp_db = 0;
AVD_COMP *avd_comp_new(const SaNameT *dn)
{
@@ -60,7 +50,6 @@ AVD_COMP *avd_comp_new(const SaNameT *dn
memcpy(comp->comp_info.name.value, dn->value, dn->length);
comp->comp_info.name.length = dn->length;
- comp->tree_node.key_info = (uint8_t *)&(comp->comp_info.name);
comp->comp_info.cap = SA_AMF_COMP_ONE_ACTIVE_OR_ONE_STANDBY;
comp->comp_info.category = AVSV_COMP_TYPE_NON_SAF;
comp->comp_info.def_recvr = SA_AMF_COMPONENT_RESTART;
@@ -143,26 +132,16 @@ AVD_COMP *avd_comp_get(const SaNameT *dn
tmp.length = dn->length;
memcpy(tmp.value, dn->value, tmp.length);
-
- return (AVD_COMP *)ncs_patricia_tree_get(&comp_db, (uint8_t *)&tmp);
-}
-
-AVD_COMP *avd_comp_getnext(const SaNameT *dn)
-{
- SaNameT tmp = {0};
-
- tmp.length = dn->length;
- memcpy(tmp.value, dn->value, tmp.length);
-
- return (AVD_COMP *)ncs_patricia_tree_getnext(&comp_db, (uint8_t *)&tmp);
+
+ return comp_db->find(&tmp);
}
void avd_comp_delete(AVD_COMP *comp)
{
+ comp_db->erase(comp);
m_AVSV_SEND_CKPT_UPDT_ASYNC_RMV(avd_cb, comp,
AVSV_CKPT_AVD_COMP_CONFIG);
avd_su_remove_comp(comp);
avd_comptype_remove_comp(comp);
- (void)ncs_patricia_tree_del(&comp_db, &comp->tree_node);
delete comp;
}
@@ -185,8 +164,11 @@ static void comp_add_to_model(AVD_COMP *
avsv_sanamet_init(&comp->comp_info.name, &dn, "safSu");
comp->su = avd_su_get(&dn);
- avd_comp_db_add(comp);
- comp->comp_type = avd_comptype_get(&comp->saAmfCompType);
+ if (comp_db->find(&comp->name) == NULL) {
+ comp_db->insert(comp);
+ }
+
+ comp->comp_type = avd_comptype_get(&comp->name);
osafassert(comp->comp_type);
avd_comptype_add_comp(comp);
avd_su_add_comp(comp);
@@ -432,18 +414,18 @@ static AVD_COMP *comp_create(const SaNam
else
TRACE("already created, refreshing config...");
- error = immutil_getAttr(const_cast<SaImmAttrNameT>("saAmfCompType"),
attributes, 0, &comp->saAmfCompType);
+ error = immutil_getAttr(const_cast<SaImmAttrNameT>("saAmfCompType"),
attributes, 0, &comp->name);
osafassert(error == SA_AIS_OK);
- if ((comptype = avd_comptype_get(&comp->saAmfCompType)) == NULL) {
- LOG_ER("saAmfCompType '%s' does not exist",
comp->saAmfCompType.value);
+ if ((comptype = avd_comptype_get(&comp->name)) == NULL) {
+ LOG_ER("saAmfCompType '%s' does not exist", comp->name.value);
goto done;
}
/* TODO clean this up! */
comp->comp_info.category =
avsv_amfcompcategory_to_avsvcomptype(comptype->saAmfCtCompCategory);
if (comp->comp_info.category == AVSV_COMP_TYPE_INVALID) {
- LOG_ER("Comp category %x invalid for '%s'",
comp->comp_info.category, comp->saAmfCompType.value);
+ LOG_ER("Comp category %x invalid for '%s'",
comp->comp_info.category, comp->name.value);
goto done;
}
@@ -1065,7 +1047,7 @@ static void comp_ccb_apply_modify_hdlr(s
comp = avd_comp_get(&opdata->objectName);
param.name = comp->comp_info.name;
- comp_type = avd_comptype_get(&comp->saAmfCompType);
+ comp_type = avd_comptype_get(&comp->name);
m_AVD_GET_SU_NODE_PTR(avd_cb, comp->su, su_node_ptr);
@@ -1094,10 +1076,10 @@ static void comp_ccb_apply_modify_hdlr(s
SaNameT *dn = (SaNameT*) value;
- TRACE("saAmfCompType modified from '%s' to '%s' for
'%s'", comp->saAmfCompType.value, dn->value,
+ TRACE("saAmfCompType modified from '%s' to '%s' for
'%s'", comp->name.value, dn->value,
opdata->objectName.value);
avd_comptype_remove_comp(comp);
- comp->saAmfCompType = *dn;
+ comp->name = *dn;
comp->comp_type = avd_comptype_get(dn);
avd_comptype_add_comp(comp);
param.attr_id = saAmfCompType_ID;
@@ -1551,11 +1533,8 @@ static void comp_ccb_apply_cb(CcbUtilOpe
void avd_comp_constructor(void)
{
- NCS_PATRICIA_PARAMS patricia_params;
-
- patricia_params.key_size = sizeof(SaNameT);
- osafassert(ncs_patricia_tree_init(&comp_db, &patricia_params) ==
NCSCC_RC_SUCCESS);
-
+ comp_db = new AmfDb<AVD_COMP>;
+
avd_class_impl_set(const_cast<SaImmClassNameT>("SaAmfComp"),
comp_rt_attr_cb, comp_admin_op_cb,
comp_ccb_completed_cb, comp_ccb_apply_cb);
}
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
@@ -181,7 +181,7 @@ static int is_config_valid(const SaNameT
comp = avd_comp_get(&comp_name);
if (comp != NULL)
- comptype_name = &comp->saAmfCompType;
+ comptype_name = &comp->name;
else {
CcbUtilOperationData_t *tmp;
diff --git a/osaf/services/saf/amf/amfd/imm.cc
b/osaf/services/saf/amf/amfd/imm.cc
--- a/osaf/services/saf/amf/amfd/imm.cc
+++ b/osaf/services/saf/amf/amfd/imm.cc
@@ -1555,8 +1555,6 @@ void avd_imm_update_runtime_attrs(void)
{
SaNameT su_name = {0};
AVD_SU *su;
- SaNameT comp_name ={0};
- AVD_COMP *comp;
SaNameT node_name = {0};
AVD_AVND *node;
SaNameT si_name = {0};
@@ -1589,8 +1587,8 @@ void avd_imm_update_runtime_attrs(void)
}
/* Update Component Class runtime cached attributes. */
- comp = avd_comp_getnext(&comp_name);
- while (comp != NULL) {
+ for (std::map<std::string, AVD_COMP*>::const_iterator it =
comp_db->begin(); it != comp_db->end(); it++) {
+ AVD_COMP *comp = it->second;
avd_saImmOiRtObjectUpdate(&comp->comp_info.name,
const_cast<SaImmAttrNameT>("saAmfCompReadinessState"), SA_IMM_ATTR_SAUINT32T,
&comp->saAmfCompReadinessState);
@@ -1600,7 +1598,6 @@ void avd_imm_update_runtime_attrs(void)
avd_saImmOiRtObjectUpdate(&comp->comp_info.name,
const_cast<SaImmAttrNameT>("saAmfCompPresenceState"), SA_IMM_ATTR_SAUINT32T,
&comp->saAmfCompPresenceState);
- comp = avd_comp_getnext(&comp->comp_info.name);
}
/* Update Node Class runtime cached attributes. */
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
@@ -39,6 +39,7 @@
#include <ncspatricia.h>
#include <amf_d2nmsg.h>
#include <su.h>
+#include "db_template.h"
/* AMF Class SaAmfCompGlobalAttributes */
typedef struct {
@@ -52,8 +53,7 @@ typedef struct {
/* AMF Class SaAmfCompType */
typedef struct avd_comp_tag {
- NCS_PATRICIA_NODE tree_node; /* key will be the component name */
- SaNameT saAmfCompType;
+ SaNameT name;
/* Detailed as in data structure definition */
AVSV_COMP_INFO comp_info; /* component name field with
@@ -119,6 +119,8 @@ typedef struct avd_comp_tag {
AVD_ADMIN_OPER_CBK admin_pend_cbk; /* holds callback invocation for
admin operation */
} AVD_COMP;
+extern AmfDb<AVD_COMP> *comp_db;
+
/* AMF Class SaAmfCompType */
typedef struct avd_amf_comp_type_tag {
@@ -202,12 +204,9 @@ extern void avd_comp_readiness_state_set
*/
extern void avd_comp_proxy_status_change(AVD_COMP *comp, SaAmfProxyStatusT
proxy_status);
-extern void avd_comp_db_add(AVD_COMP *comp);
-
extern AVD_COMP *avd_comp_new(const SaNameT *dn);
extern void avd_comp_delete(AVD_COMP *comp);
extern AVD_COMP *avd_comp_get(const SaNameT *comp_name);
-extern AVD_COMP *avd_comp_getnext(const SaNameT *comp_name);
extern void avd_su_remove_comp(AVD_COMP* comp);
extern SaAisErrorT avd_comp_config_get(const SaNameT* su_name, struct
avd_su_tag* su);
extern void avd_comp_constructor(void);
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
@@ -1465,9 +1465,9 @@ void amfd_file_dump(const char *path)
dn = su->name;
}
- AVD_COMP *comp;
- dn.length = 0;
- for (comp = avd_comp_getnext(&dn); comp != NULL; comp =
avd_comp_getnext(&dn)) {
+ for (std::map<std::string, AVD_COMP*>::const_iterator it =
comp_db->begin();
+ it != comp_db->end(); it++) {
+ const AVD_COMP *comp = it->second;
fprintf(f, "%s\n", comp->comp_info.name.value);
fprintf(f, "\tsaAmfCompOperState=%u\n",
comp->saAmfCompOperState);
fprintf(f, "\tsaAmfCompReadinessState=%u\n",
comp->saAmfCompReadinessState);
------------------------------------------------------------------------------
CenturyLink Cloud: The Leader in Enterprise Cloud Services.
Learn Why More Businesses Are Choosing CenturyLink Cloud For
Critical Workloads, Development Environments & Everything In Between.
Get a Quote or Start a Free Trial Today.
http://pubads.g.doubleclick.net/gampad/clk?id=119420431&iu=/4140/ostg.clktrk
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel