ack, code review only/Regards HansN On 06/10/14 11:15, nagendr...@oracle.com wrote: > osaf/services/saf/amf/amfd/ckpt_enc.cc | 10 +- > osaf/services/saf/amf/amfd/clm.cc | 15 ++-- > osaf/services/saf/amf/amfd/imm.cc | 12 +-- > osaf/services/saf/amf/amfd/include/node.h | 11 +-- > osaf/services/saf/amf/amfd/main.cc | 8 +- > osaf/services/saf/amf/amfd/ndfsm.cc | 5 +- > osaf/services/saf/amf/amfd/ndproc.cc | 6 +- > osaf/services/saf/amf/amfd/node.cc | 83 > +++++------------------------- > osaf/services/saf/amf/amfd/role.cc | 9 +-- > osaf/services/saf/amf/amfd/util.cc | 7 +- > 10 files changed, 51 insertions(+), 115 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 > @@ -26,6 +26,7 @@ > #include <saflog.h> > #include <amfd.h> > #include <cluster.h> > +#include <db_template.h> > > extern "C" const AVSV_ENCODE_CKPT_DATA_FUNC_PTR > avd_enc_ckpt_data_func_list[AVSV_CKPT_MSG_MAX]; > > @@ -2080,17 +2081,17 @@ static uint32_t enc_cs_cluster_config(AV > static uint32_t enc_cs_node_config(AVD_CL_CB *cb, NCS_MBCSV_CB_ENC *enc, > uint32_t *num_of_obj) > { > uint32_t status = NCSCC_RC_SUCCESS; > - AVD_AVND *avnd_node = NULL; > EDU_ERR ederror = static_cast<EDU_ERR>(0); > TRACE_ENTER(); > > /* > * Walk through the entire list and send the entire list data. > */ > - avnd_node = avd_node_getnext(NULL); > - while (avnd_node != NULL) { > + for (std::map<std::string, AVD_AVND *>::const_iterator it = > node_name_db->begin(); > + it != node_name_db->end(); it++) { > + AVD_AVND *avnd_node = it->second; > status = m_NCS_EDU_VER_EXEC(&cb->edu_hdl, > avsv_edp_ckpt_msg_node, > - &enc->io_uba, EDP_OP_TYPE_ENC, > avnd_node, &ederror, enc->i_peer_version); > + &enc->io_uba, EDP_OP_TYPE_ENC, avnd_node, > &ederror, enc->i_peer_version); > > if (status != NCSCC_RC_SUCCESS) { > LOG_ER("%s: encode failed, ederror=%u", __FUNCTION__, > ederror); > @@ -2098,7 +2099,6 @@ static uint32_t enc_cs_node_config(AVD_C > } > > (*num_of_obj)++; > - avnd_node = avd_node_getnext(&avnd_node->name); > } > > TRACE_LEAVE2("status '%u'", status); > diff --git a/osaf/services/saf/amf/amfd/clm.cc > b/osaf/services/saf/amf/amfd/clm.cc > --- a/osaf/services/saf/amf/amfd/clm.cc > +++ b/osaf/services/saf/amf/amfd/clm.cc > @@ -322,13 +322,14 @@ static void clm_track_cb(const SaClmClus > SA_TRACK_CURRENT|CHANGES_ONLY and supply no > buffer > in saClmClusterTrack call so update the > local database */ > /* get the first node */ > - node = avd_node_getnext(NULL); > - while (node != NULL && > - 0 != > strncmp((char*)node->saAmfNodeClmNode.value, > - > (char*)notifItem->clusterNode.nodeName.value, > - > notifItem->clusterNode.nodeName.length)) > - { > - node = avd_node_getnext(&node->name); > + node = NULL; > + for (std::map<std::string, AVD_AVND > *>::const_iterator it = node_name_db->begin(); > + it != node_name_db->end(); > it++) { > + node = it->second; > + if (0 == > strncmp((char*)node->saAmfNodeClmNode.value, > + > (char*)notifItem->clusterNode.nodeName.value, > + > notifItem->clusterNode.nodeName.length)); > + break; > } > if ( node != NULL ) { > memcpy(&(node->node_info), > &(notifItem->clusterNode), > 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 > @@ -1574,9 +1574,6 @@ void avd_saImmOiRtObjectDelete(const SaN > */ > void avd_imm_update_runtime_attrs(void) > { > - SaNameT node_name = {0}; > - AVD_AVND *node; > - > /* Update SU Class runtime cached attributes. */ > for (std::map<std::string, AVD_SU*>::const_iterator it = su_db->begin(); > it != su_db->end(); it++) { > @@ -1617,12 +1614,11 @@ void avd_imm_update_runtime_attrs(void) > } > > /* Update Node Class runtime cached attributes. */ > - node = avd_node_getnext(&node_name); > - while (node != NULL) { > + for (std::map<std::string, AVD_AVND *>::const_iterator it = > node_name_db->begin(); > + it != node_name_db->end(); it++) { > + AVD_AVND *node = it->second; > avd_saImmOiRtObjectUpdate(&node->name, "saAmfNodeOperState", > - SA_IMM_ATTR_SAUINT32T, &node->saAmfNodeOperState); > - > - node = avd_node_getnext(&node->name); > + SA_IMM_ATTR_SAUINT32T, > &node->saAmfNodeOperState); > } > > /* Update Node Class runtime cached attributes. */ > diff --git a/osaf/services/saf/amf/amfd/include/node.h > b/osaf/services/saf/amf/amfd/include/node.h > --- a/osaf/services/saf/amf/amfd/include/node.h > +++ b/osaf/services/saf/amf/amfd/include/node.h > @@ -42,6 +42,7 @@ > #include <su.h> > #include <amf_d2nmsg.h> > #include <timer.h> > +#include <db_template.h> > > class AVD_SU; > struct avd_cluster_tag; > @@ -73,12 +74,6 @@ typedef struct avd_fail_over_node { > */ > > typedef struct avd_avnd_tag { > - > - NCS_PATRICIA_NODE tree_node_id_node; /* key will be the node id */ > - NCS_PATRICIA_NODE tree_node_name_node; /* key will be the node name > with len > - * in network order. > - */ > - > SaNameT name; /* DN */ > char *node_name; /* RDN value, normally the short host name */ > SaClmClusterNodeT_4 node_info; /* the node information of the node on > @@ -144,6 +139,9 @@ typedef struct avd_avnd_tag { > bool recvr_fail_sw; /* to indicate there was node reboot because of > node failover/switchover.*/ > } AVD_AVND; > > +extern AmfDb<std::string, AVD_AVND> *node_name_db; > +extern AmfDb<uint32_t, AVD_AVND> *node_id_db; > + > typedef struct avd_ng_tag { > > SaNameT name; > @@ -191,7 +189,6 @@ extern AVD_AVND *avd_node_getnext(const > extern uint32_t avd_node_add_nodeid(AVD_AVND *avnd); > extern void avd_node_delete_nodeid(AVD_AVND *node); > extern AVD_AVND *avd_node_find_nodeid(SaClmNodeIdT node_id); > -extern AVD_AVND *avd_node_getnext_nodeid(SaClmNodeIdT node_id); > extern SaAisErrorT avd_node_config_get(void); > extern void avd_node_state_set(AVD_AVND *node, AVD_AVND_STATE node_state); > extern void avd_node_oper_state_set(AVD_AVND *node, SaAmfOperationalStateT > oper_state); > diff --git a/osaf/services/saf/amf/amfd/main.cc > b/osaf/services/saf/amf/amfd/main.cc > --- a/osaf/services/saf/amf/amfd/main.cc > +++ b/osaf/services/saf/amf/amfd/main.cc > @@ -382,8 +382,6 @@ static void handle_event_in_failover_sta > > if (cb->node_list.n_nodes == 0) { > AVD_EVT_QUEUE *queue_evt; > - AVD_AVND *node; > - SaClmNodeIdT node_id = 0; > > /* We have received the info from all the nodes. */ > cb->avd_fover_state = false; > @@ -403,9 +401,9 @@ static void handle_event_in_failover_sta > * during the failover state and the susi failover is differed > till > * failover completes > */ > - while (NULL != (node = avd_node_getnext_nodeid(node_id))) { > - node_id = node->node_info.nodeId; > - > + for (std::map<uint32_t, AVD_AVND *>::const_iterator it = > node_id_db->begin(); > + it != node_id_db->end(); it++) { > + AVD_AVND *node = it->second; > if (AVD_AVND_STATE_ABSENT == node->node_state) { > avd_node_failover(node); > } > diff --git a/osaf/services/saf/amf/amfd/ndfsm.cc > b/osaf/services/saf/amf/amfd/ndfsm.cc > --- a/osaf/services/saf/amf/amfd/ndfsm.cc > +++ b/osaf/services/saf/amf/amfd/ndfsm.cc > @@ -378,7 +378,6 @@ void avd_mds_avnd_down_evh(AVD_CL_CB *cb > **************************************************************************/ > void avd_fail_over_event(AVD_CL_CB *cb) > { > - AVD_AVND *avnd; > SaClmNodeIdT node_id = 0; > AVD_FAIL_OVER_NODE *node_to_add; > > @@ -386,7 +385,9 @@ void avd_fail_over_event(AVD_CL_CB *cb) > cb->avd_fover_state = true; > > /* Walk through all the nodes and send verify message to them. */ > - while (NULL != (avnd = avd_node_getnext_nodeid(node_id))) { > + for (std::map<uint32_t, AVD_AVND *>::const_iterator it = > node_id_db->begin(); > + it != node_id_db->end(); it++) { > + AVD_AVND *avnd = it->second; > node_id = avnd->node_info.nodeId; > > /* > diff --git a/osaf/services/saf/amf/amfd/ndproc.cc > b/osaf/services/saf/amf/amfd/ndproc.cc > --- a/osaf/services/saf/amf/amfd/ndproc.cc > +++ b/osaf/services/saf/amf/amfd/ndproc.cc > @@ -487,6 +487,7 @@ void cluster_startup_expiry_event_genera > */ > bool cluster_su_instantiation_done(AVD_CL_CB *cb, AVD_SU *su) > { > + AVD_AVND *node = NULL; > TRACE_ENTER2("%p", su); > > if(su == NULL) > @@ -503,8 +504,9 @@ bool cluster_su_instantiation_done(AVD_C > > node_walk: > > - AVD_AVND *node; > - for (node = avd_node_getnext(NULL); node != NULL; node = > avd_node_getnext(&node->name)) { > + for (std::map<std::string, AVD_AVND *>::const_iterator it = > node_name_db->begin(); > + it != node_name_db->end(); it++) { > + node = it->second; > TRACE("node name '%s', Oper'%u'", node->name.value, > node->saAmfNodeOperState); > if (node->saAmfNodeOperState == SA_AMF_OPERATIONAL_ENABLED) > { > diff --git a/osaf/services/saf/amf/amfd/node.cc > b/osaf/services/saf/amf/amfd/node.cc > --- a/osaf/services/saf/amf/amfd/node.cc > +++ b/osaf/services/saf/amf/amfd/node.cc > @@ -25,8 +25,8 @@ > #include <cluster.h> > #include <imm.h> > > -static NCS_PATRICIA_TREE node_name_db; /* SaNameT index */ > -static NCS_PATRICIA_TREE node_id_db; /* SaClmNodeIdT index */ > +AmfDb<std::string, AVD_AVND> *node_name_db = 0; /* SaNameT index */ > +AmfDb<uint32_t, AVD_AVND> *node_id_db = 0; /* SaClmNodeIdT index */ > > // > // TODO(HANO) Temporary use this function instead of strdup which uses > malloc. > @@ -43,14 +43,9 @@ uint32_t avd_node_add_nodeid(AVD_AVND *n > { > unsigned int rc; > > - if ((avd_node_find_nodeid(node->node_info.nodeId) == NULL) && > (node->node_info.nodeId != 0)) { > - > - node->tree_node_id_node.key_info = (uint8_t > *)&(node->node_info.nodeId); > - node->tree_node_id_node.bit = 0; > - node->tree_node_id_node.left = NCS_PATRICIA_NODE_NULL; > - node->tree_node_id_node.right = NCS_PATRICIA_NODE_NULL; > - > - rc = ncs_patricia_tree_add(&node_id_db, > &node->tree_node_id_node); > + if ((node_id_db->find(node->node_info.nodeId) == NULL) && > + (node->node_info.nodeId != 0)) { > + rc = node_id_db->insert(node->node_info.nodeId, node); > osafassert(rc == NCSCC_RC_SUCCESS); > } > > @@ -59,16 +54,15 @@ uint32_t avd_node_add_nodeid(AVD_AVND *n > > void avd_node_delete_nodeid(AVD_AVND *node) > { > - if (node->tree_node_id_node.key_info != NULL) > - (void)ncs_patricia_tree_del(&node_id_db, > &node->tree_node_id_node); > + node_id_db->erase(node->node_info.nodeId); > } > > void avd_node_db_add(AVD_AVND *node) > { > unsigned int rc; > > - if (avd_node_get(&node->name) == NULL) { > - rc = ncs_patricia_tree_add(&node_name_db, > &node->tree_node_name_node); > + if (node_name_db->find(Amf::to_string(&node->name)) == NULL) { > + rc = node_name_db->insert(Amf::to_string(&node->name), node); > osafassert(rc == NCSCC_RC_SUCCESS); > } > } > @@ -88,7 +82,6 @@ AVD_AVND *avd_node_new(const SaNameT *dn > node_name = strchr((char*)rdn.value, '='); > node_name++; > node->node_name = StrDup(node_name); > - node->tree_node_name_node.key_info = (uint8_t *)&(node->name); > node->pg_csi_list.order = NCS_DBLIST_ANY_ORDER; > node->pg_csi_list.cmp_cookie = avsv_dblist_uns32_cmp; > node->saAmfNodeAdminState = SA_AMF_ADMIN_UNLOCKED; > @@ -106,7 +99,7 @@ void avd_node_delete(AVD_AVND *node) > if (node->node_info.nodeId) > avd_node_delete_nodeid(node); > m_AVSV_SEND_CKPT_UPDT_ASYNC_RMV(avd_cb, node, > AVSV_CKPT_AVD_NODE_CONFIG); > - ncs_patricia_tree_del(&node_name_db, &node->tree_node_name_node); > + node_name_db->erase(Amf::to_string(&node->name)); > delete [] node->node_name; > delete node; > } > @@ -132,56 +125,12 @@ done: > > AVD_AVND *avd_node_get(const SaNameT *dn) > { > - AVD_AVND *node; > - SaNameT tmp = { 0 }; > - > - tmp.length = dn->length; > - memcpy(tmp.value, dn->value, tmp.length); > - > - node = (AVD_AVND *)ncs_patricia_tree_get(&node_name_db, (uint8_t > *)&tmp); > - > - if (node != NULL) { > - /* Adjust the pointer > - */ > - node = (AVD_AVND *)(((char *)node) > - - (((char > *)&(AVD_AVND_NULL->tree_node_name_node)) > - - ((char *)AVD_AVND_NULL))); > - } > - > - return node; > + return node_name_db->find(Amf::to_string(dn)); > } > > AVD_AVND *avd_node_find_nodeid(SaClmNodeIdT node_id) > { > - return (AVD_AVND *)ncs_patricia_tree_get(&node_id_db, (uint8_t > *)&node_id); > -} > - > -AVD_AVND *avd_node_getnext(const SaNameT *dn) > -{ > - AVD_AVND *node; > - SaNameT tmp = { 0 }; > - > - if (dn != NULL) { > - tmp.length = dn->length; > - memcpy(tmp.value, dn->value, tmp.length); > - node = (AVD_AVND *)ncs_patricia_tree_getnext(&node_name_db, > (uint8_t *)&tmp); > - } else > - node = (AVD_AVND *)ncs_patricia_tree_getnext(&node_name_db, > (uint8_t *)0); > - > - > - if (node != NULL) { > - /* Adjust the pointer */ > - node = (AVD_AVND *)(((char *)node) > - - (((char > *)&(AVD_AVND_NULL->tree_node_name_node)) > - - ((char *)AVD_AVND_NULL))); > - } > - > - return node; > -} > - > -AVD_AVND *avd_node_getnext_nodeid(SaClmNodeIdT node_id) > -{ > - return (AVD_AVND *)ncs_patricia_tree_getnext(&node_id_db, (uint8_t > *)&node_id); > + return node_id_db->find(node_id); > } > > /** > @@ -1396,14 +1345,10 @@ void node_reset_su_try_inst_counter(cons > > void avd_node_constructor(void) > { > - NCS_PATRICIA_PARAMS patricia_params; > - > - patricia_params.key_size = sizeof(SaNameT); > - osafassert(ncs_patricia_tree_init(&node_name_db, &patricia_params) == > NCSCC_RC_SUCCESS); > - patricia_params.key_size = sizeof(SaClmNodeIdT); > - osafassert(ncs_patricia_tree_init(&node_id_db, &patricia_params) == > NCSCC_RC_SUCCESS); > + node_name_db = new AmfDb<std::string, AVD_AVND>; > + node_id_db = new AmfDb<uint32_t, AVD_AVND>; > > avd_class_impl_set("SaAmfNode", NULL, node_admin_op_cb, > - node_ccb_completed_cb, node_ccb_apply_cb); > + node_ccb_completed_cb, node_ccb_apply_cb); > } > > diff --git a/osaf/services/saf/amf/amfd/role.cc > b/osaf/services/saf/amf/amfd/role.cc > --- a/osaf/services/saf/amf/amfd/role.cc > +++ b/osaf/services/saf/amf/amfd/role.cc > @@ -880,8 +880,6 @@ uint32_t amfd_switch_actv_qsd(AVD_CL_CB > > uint32_t amfd_switch_qsd_stdby(AVD_CL_CB *cb) > { > - AVD_AVND *avnd = NULL; > - uint32_t node_id = 0; > uint32_t status = NCSCC_RC_SUCCESS; > > TRACE_ENTER(); > @@ -912,11 +910,10 @@ uint32_t amfd_switch_qsd_stdby(AVD_CL_CB > LOG_ER("rde role change failed from qsd -> stdby"); > } > > - node_id = 0; > - > /* Walk through all the nodes and free PG records. */ > - while (NULL != (avnd = avd_node_getnext_nodeid(node_id))) { > - node_id = avnd->node_info.nodeId; > + for (std::map<uint32_t, AVD_AVND *>::const_iterator it = > node_id_db->begin(); > + it != node_id_db->end(); it++) { > + AVD_AVND *avnd = it->second; > avd_pg_node_csi_del_all(cb, avnd); > } > > 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 > @@ -1349,9 +1349,9 @@ void amfd_file_dump(const char *path) > return; > } > > - AVD_AVND *node; > - SaClmNodeIdT node_id = 0; > - while (NULL != (node = avd_node_getnext_nodeid(node_id))) { > + for (std::map<uint32_t, AVD_AVND *>::const_iterator it = > node_id_db->begin(); > + it != node_id_db->end(); it++) { > + AVD_AVND *node = it->second; > fprintf(f, "%s\n", node->name.value); > fprintf(f, "\tsaAmfNodeAdminState=%u\n", > node->saAmfNodeAdminState); > fprintf(f, "\tsaAmfNodeOperState=%u\n", > node->saAmfNodeOperState); > @@ -1361,7 +1361,6 @@ void amfd_file_dump(const char *path) > fprintf(f, "\trcv_msg_id=%u\n", node->rcv_msg_id); > fprintf(f, "\tsnd_msg_id=%u\n", node->snd_msg_id); > fprintf(f, "\tnodeId=%x\n", node->node_info.nodeId); > - node_id = node->node_info.nodeId; > } > > // If use std=c++11 in Makefile.common the following syntax can be used > instead:
------------------------------------------------------------------------------ HPCC Systems Open Source Big Data Platform from LexisNexis Risk Solutions Find What Matters Most in Your Big Data with HPCC Systems Open Source. Fast. Scalable. Simple. Ideal for Dirty Data. Leverages Graph Analysis for Fast Processing & Easy Data Exploration http://p.sf.net/sfu/hpccsystems _______________________________________________ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel