Add new 'isUp' flag to IMMD_IMMND_INFO_NODE.
If a new IMMND node is added during MDS UP event or intro message,
the flag is set to true.
If a new IMMND node is added during coldsync, the flag is set to false.
The flag will be set to true when MDS UP event comes.
---
 src/imm/immd/immd_cb.h    |  1 +
 src/imm/immd/immd_db.c    | 34 +++++++++++++++++++++-------------
 src/imm/immd/immd_evt.c   |  2 ++
 src/imm/immd/immd_mbcsv.c |  5 +++++
 4 files changed, 29 insertions(+), 13 deletions(-)

diff --git a/src/imm/immd/immd_cb.h b/src/imm/immd/immd_cb.h
index af63a98..09a9c2c 100644
--- a/src/imm/immd/immd_cb.h
+++ b/src/imm/immd/immd_cb.h
@@ -59,6 +59,7 @@ typedef struct immd_immnd_info_node {
   bool isCoord;
   bool syncStarted;
   bool pbeConfigured; /* Pbe-file-name configured. Pbe may still be disabled. 
*/
+  bool isUp; /* True if received the MDS UP event */
 } IMMD_IMMND_INFO_NODE;
 
 typedef struct immd_immnd_detached_node { /* IMMD SBY tracking of departed
diff --git a/src/imm/immd/immd_db.c b/src/imm/immd/immd_db.c
index 7968b07..ec005d9 100644
--- a/src/imm/immd/immd_db.c
+++ b/src/imm/immd/immd_db.c
@@ -80,20 +80,28 @@ uint32_t immd_immnd_info_node_get(NCS_PATRICIA_TREE 
*immnd_tree, MDS_DEST *dest,
 void immd_immnd_info_node_getnext(NCS_PATRICIA_TREE *immnd_tree, MDS_DEST 
*dest,
                                  IMMD_IMMND_INFO_NODE **immnd_info_node)
 {
-       NODE_ID key;
-       memset(&key, 0, sizeof(NODE_ID));
-       /* Fill the Key */
-
-       if (dest) {
-               key = m_NCS_NODE_ID_FROM_MDS_DEST((*dest));
+       IMMD_IMMND_INFO_NODE* next_node = NULL;
+       MDS_DEST* current_dest = dest;
+       do {
+               if (current_dest) {
+                       NODE_ID key;
+                       memset(&key, 0, sizeof(NODE_ID));
+                       key = m_NCS_NODE_ID_FROM_MDS_DEST((*current_dest));
+
+                       next_node =
+                           (IMMD_IMMND_INFO_NODE *)ncs_patricia_tree_getnext(
+                               immnd_tree, (uint8_t *)&key);
+                       if (next_node) {
+                               current_dest = &next_node->immnd_dest;
+                       }
+               } else {
+                       next_node =
+                           (IMMD_IMMND_INFO_NODE *)ncs_patricia_tree_getnext(
+                               immnd_tree, (uint8_t *)NULL);
+               }
+       } while (next_node && !next_node->isUp);
 
-               *immnd_info_node =
-                   (IMMD_IMMND_INFO_NODE *)ncs_patricia_tree_getnext(
-                       immnd_tree, (uint8_t *)&key);
-       } else
-               *immnd_info_node =
-                   (IMMD_IMMND_INFO_NODE *)ncs_patricia_tree_getnext(
-                       immnd_tree, (uint8_t *)NULL);
+       *immnd_info_node = next_node;
 
        return;
 }
diff --git a/src/imm/immd/immd_evt.c b/src/imm/immd/immd_evt.c
index 49ac7c3..c1371fc 100644
--- a/src/imm/immd/immd_evt.c
+++ b/src/imm/immd/immd_evt.c
@@ -1054,6 +1054,8 @@ static IMMD_IMMND_INFO_NODE *immd_add_immnd_node(IMMD_CB 
*cb, MDS_DEST dest)
                return NULL;
        }
 
+       node_info->isUp = true;
+
        if (add_flag) {
                TRACE("IMMND node has already been added, dest %" PRIu64, dest);
        }
diff --git a/src/imm/immd/immd_mbcsv.c b/src/imm/immd/immd_mbcsv.c
index 8ccadd1..bed2c28 100644
--- a/src/imm/immd/immd_mbcsv.c
+++ b/src/imm/immd/immd_mbcsv.c
@@ -1243,6 +1243,11 @@ static uint32_t mbcsv_dec_sync_resp(IMMD_CB *cb, 
NCS_MBCSV_CB_ARG *arg)
                immd_immnd_info_node_find_add(&cb->immnd_tree, &dest,
                                              &node_info, &add_flag);
                osafassert(node_info);
+               if (!add_flag) {
+                       /* New node is added to the list,
+                        * MDS UP event is not received */
+                       node_info->isUp = false;
+               }
 
                ptr = ncs_dec_flatten_space(&arg->info.decode.i_uba, data,
                                            sizeof(uint32_t));
-- 
1.9.1


------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to