- Let IMMND go into headless when it seen two active IMMDs
- Intialize ex-IMMD node id for IMMD
---
 src/imm/immd/immd_main.c  |  1 +
 src/imm/immnd/immnd_evt.c | 30 ++++++++++++++++++++++--------
 2 files changed, 23 insertions(+), 8 deletions(-)

diff --git a/src/imm/immd/immd_main.c b/src/imm/immd/immd_main.c
index f673d667b..1edca2232 100644
--- a/src/imm/immd/immd_main.c
+++ b/src/imm/immd/immd_main.c
@@ -259,6 +259,7 @@ uint32_t initialize_for_assignment(IMMD_CB *cb, 
SaAmfHAStateT ha_state)
        }
 
 done:
+       cb->ex_immd_node_id = cb->node_id;
        TRACE_LEAVE2("rc = %u", rc);
        return rc;
 }
diff --git a/src/imm/immnd/immnd_evt.c b/src/imm/immnd/immnd_evt.c
index 714a75ca2..e405d3ce4 100644
--- a/src/imm/immnd/immnd_evt.c
+++ b/src/imm/immnd/immnd_evt.c
@@ -12230,15 +12230,29 @@ static uint32_t immnd_evt_proc_mds_evt(IMMND_CB *cb, 
IMMND_EVT *evt)
 
        /* In multi partitioned clusters rejoin, IMMND may not realize
         * headless due to see IMMDs from different partitions */
-       if ((evt->info.mds_info.change == NCSMDS_RED_UP) &&
+       if ((evt->info.mds_info.change == NCSMDS_DOWN) &&
+           (evt->info.mds_info.svc_id == NCSMDS_SVC_ID_IMMD)) {
+               is_headless = true;
+               cb->immd_node_id = 0;
+               cb->other_immd_id = 0;
+       } else if ((evt->info.mds_info.change == NCSMDS_RED_UP) &&
            (evt->info.mds_info.svc_id == NCSMDS_SVC_ID_IMMD) &&
-           (evt->info.mds_info.node_id != cb->immd_node_id) &&
-           (evt->info.mds_info.role == V_DEST_RL_STANDBY) &&
-           (cb->other_immd_id == 0)) {
-               cb->other_immd_id = evt->info.mds_info.node_id;
-               TRACE_2("IMMD RED_UP EVENT %x role=%d ==> ACT:%x SBY:%x",
-                   evt->info.mds_info.node_id, evt->info.mds_info.role,
-                   cb->immd_node_id, cb->other_immd_id);
+           (evt->info.mds_info.node_id != cb->immd_node_id)) {
+               if ((evt->info.mds_info.role == V_DEST_RL_STANDBY) &&
+                   (cb->other_immd_id == 0)) {
+                       cb->other_immd_id = evt->info.mds_info.node_id;
+                       TRACE_2("IMMD RED_UP EVENT %x role=%d ==> ACT:%x 
SBY:%x",
+                           evt->info.mds_info.node_id, evt->info.mds_info.role,
+                           cb->immd_node_id, cb->other_immd_id);
+               } else if ((evt->info.mds_info.role == V_DEST_RL_ACTIVE) &&
+                   (cb->immd_node_id != 0) &&
+                   (cb->node_id != cb->immd_node_id)) {
+                       LOG_WA("See two Active IMMD: %x %x, going to headless",
+                           cb->immd_node_id, evt->info.mds_info.node_id);
+                       is_headless = true;
+                       cb->immd_node_id = 0;
+                       cb->other_immd_id = 0;
+               }
        } else if ((evt->info.mds_info.change == NCSMDS_RED_DOWN) &&
                   (evt->info.mds_info.svc_id == NCSMDS_SVC_ID_IMMD)) {
                if (cb->immd_node_id == evt->info.mds_info.node_id)
-- 
2.17.1



_______________________________________________
Opensaf-devel mailing list
Opensaf-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to