- 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