Ack, code review only/Regards HansN

-----Original Message-----
From: nagendr...@oracle.com [mailto:nagendr...@oracle.com] 
Sent: den 23 juli 2014 13:01
To: Hans Feldt; Hans Nordebäck; praveen.malv...@oracle.com
Cc: opensaf-devel@lists.sourceforge.net
Subject: [PATCH 1 of 1] amfd: replace patricia tree with stl::maps for 
node_lists [#713]

 osaf/services/saf/amf/amfd/include/node.h |   2 +-
 osaf/services/saf/amf/amfd/main.cc        |  10 +-----
 osaf/services/saf/amf/amfd/ndfsm.cc       |  49 +++++++++++++++---------------
 3 files changed, 28 insertions(+), 33 deletions(-)


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
@@ -62,7 +62,6 @@ typedef enum {
 /* Fail-over Node List */
 typedef struct avd_fail_over_node {
 
-       NCS_PATRICIA_NODE tree_node_id_node;
        SaClmNodeIdT node_id;
 } AVD_FAIL_OVER_NODE;
 
@@ -147,6 +146,7 @@ struct NodeNameCompare: public std::bina
 
 extern AmfDb<std::string, AVD_AVND> *node_name_db;  extern AmfDb<uint32_t, 
AVD_AVND> *node_id_db;
+extern AmfDb<uint32_t, AVD_FAIL_OVER_NODE> *node_list_db;
 
 typedef struct avd_ng_tag {
 
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
@@ -380,7 +380,8 @@ static void handle_event_in_failover_sta
                m_AVD_EVT_QUEUE_ENQUEUE(cb, queue_evt);
        }
 
-       if (cb->node_list.n_nodes == 0) {
+       std::map<uint32_t, AVD_FAIL_OVER_NODE *>::const_iterator it = 
node_list_db->begin();
+       if (it == node_list_db->end()) {
                AVD_EVT_QUEUE *queue_evt;
 
                /* We have received the info from all the nodes. */ @@ -455,7 
+456,6 @@ static void rda_cb(uint32_t notused, PCS  static uint32_t 
initialize(void)  {
        AVD_CL_CB *cb = avd_cb;
-       NCS_PATRICIA_PARAMS patricia_params = {0};
        int rc = NCSCC_RC_FAILURE;
        SaVersionT ntfVersion = { 'A', 0x01, 0x01 };
        SaAmfHAStateT role;
@@ -524,12 +524,6 @@ static uint32_t initialize(void)
                }
        }
 
-       patricia_params.key_size = sizeof(SaClmNodeIdT);
-       if (ncs_patricia_tree_init(&cb->node_list, &patricia_params) != 
NCSCC_RC_SUCCESS) {
-               LOG_ER("ncs_patricia_tree_init FAILED");
-               goto done;
-       }
-
        /* get the node id of the node on which the AVD is running. */
        cb->node_id_avd = m_NCS_GET_NODE_ID;
 
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
@@ -29,6 +29,8 @@
 #include <cluster.h>
 #include <daemon.h>
 
+AmfDb<uint32_t, AVD_FAIL_OVER_NODE> *node_list_db = 0;      /* SaClmNodeIdT 
index */
+
 /*****************************************************************************
  * Function: avd_node_up_func
  *
@@ -350,13 +352,14 @@ void avd_mds_avnd_down_evh(AVD_CL_CB *cb
                /* Find if node is there in the f-over node list.
                 * If yes then remove entry
                 */
-               AVD_FAIL_OVER_NODE *node_fovr;
-               node_fovr = (AVD_FAIL_OVER_NODE 
*)ncs_patricia_tree_get(&cb->node_list,
-                                       (uint8_t *)&evt->info.node_id);
-
-               if (NULL != node_fovr) {
-                       ncs_patricia_tree_del(&cb->node_list, 
&node_fovr->tree_node_id_node);
-                       delete node_fovr;
+               for (std::map<uint32_t, AVD_FAIL_OVER_NODE *>::const_iterator 
it = node_list_db->begin();
+                               it != node_list_db->end(); it++) {
+                       AVD_FAIL_OVER_NODE *node_fovr = it->second;
+                       if (node_fovr->node_id == evt->info.node_id) {
+                               node_list_db->erase(node_fovr->node_id);
+                               delete node_fovr;
+                               break;
+                       }
                }
        }
        TRACE_LEAVE();
@@ -421,12 +424,8 @@ void avd_fail_over_event(AVD_CL_CB *cb)
                        node_to_add = new AVD_FAIL_OVER_NODE();
 
                        node_to_add->node_id = avnd->node_info.nodeId;
-                       node_to_add->tree_node_id_node.key_info = (uint8_t 
*)&(node_to_add->node_id);
-                       node_to_add->tree_node_id_node.bit = 0;
-                       node_to_add->tree_node_id_node.left = 
NCS_PATRICIA_NODE_NULL;
-                       node_to_add->tree_node_id_node.right = 
NCS_PATRICIA_NODE_NULL;
 
-                       if (ncs_patricia_tree_add(&cb->node_list, 
&node_to_add->tree_node_id_node) != NCSCC_RC_SUCCESS) {
+                       if (node_list_db->insert(avnd->node_info.nodeId, 
node_to_add) != 
+NCSCC_RC_SUCCESS) {
                                /* log an error */
                                delete node_to_add;
                                return;
@@ -467,7 +466,6 @@ void avd_ack_nack_evh(AVD_CL_CB *cb, AVD
        AVD_AVND *avnd;
        AVD_SU *su_ptr;
        AVD_SU_SI_REL *rel_ptr;
-       AVD_FAIL_OVER_NODE *node_fovr;
        AVD_DND_MSG *n2d_msg;
 
        TRACE_ENTER();
@@ -476,17 +474,20 @@ void avd_ack_nack_evh(AVD_CL_CB *cb, AVD
        /* Find if node is there in the f-over node list. If yes then remove 
entry
         * and process the message. Else just return.
         */
-       if (NULL != (node_fovr =
-                    (AVD_FAIL_OVER_NODE *)ncs_patricia_tree_get(&cb->node_list,
-                                                                (uint8_t 
*)&evt->info.avnd_msg->msg_info.
-                                                                
n2d_ack_nack_info.node_id))) {
-               ncs_patricia_tree_del(&cb->node_list, 
&node_fovr->tree_node_id_node);
-               delete node_fovr;
-       } else {
-               /* do i need to log an error */
-               avsv_dnd_msg_free(n2d_msg);
-               evt->info.avnd_msg = NULL;
-               goto done;
+       for (std::map<uint32_t, AVD_FAIL_OVER_NODE *>::const_iterator it = 
node_list_db->begin();
+                       it != node_list_db->end(); it++) {
+               AVD_FAIL_OVER_NODE *node_fovr = it->second;
+               if (node_fovr->node_id == evt->info.avnd_msg->msg_info.
+                               n2d_ack_nack_info.node_id) {
+                       node_list_db->erase(node_fovr->node_id);
+                       delete node_fovr;
+                       break;
+               } else {
+                       /* do i need to log an error */
+                       avsv_dnd_msg_free(n2d_msg);
+                       evt->info.avnd_msg = NULL;
+                       goto done;
+               }
        }
 
        /*

------------------------------------------------------------------------------
Want fast and easy access to all the code in your enterprise? Index and
search up to 200,000 lines of code with a free copy of Black Duck
Code Sight - the same software that powers the world's largest code
search on Ohloh, the Black Duck Open Hub! Try it now.
http://p.sf.net/sfu/bds
_______________________________________________
Opensaf-devel mailing list
Opensaf-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to