--- src/imm/common/immsv_evt.h | 11 +++++++- src/imm/immd/immd.h | 10 +++++++ src/imm/immd/immd_evt.c | 57 ++++++++++---------------------------- src/imm/immd/immd_proc.c | 11 ++------ src/imm/immd/immd_sbevt.c | 15 +++++----- src/imm/immnd/immnd_evt.c | 8 +++--- 6 files changed, 49 insertions(+), 63 deletions(-)
diff --git a/src/imm/common/immsv_evt.h b/src/imm/common/immsv_evt.h index ec45ca486..374c351f5 100644 --- a/src/imm/common/immsv_evt.h +++ b/src/imm/common/immsv_evt.h @@ -437,12 +437,21 @@ typedef struct immsv_d2nd_ccbinit { IMMSV_OM_CCB_INITIALIZE i; } IMMSV_D2ND_CCBINIT; +typedef enum immsv_coord_type { + IMMSV_NOT_COORD = 0, /* payload cannot be coordinator, except headless */ + IMMSV_SC_COORD = 1, /* controller to be coordinator */ + IMMSV_2PBE_PRELOAD = 2, + IMMSV_2PBE_SYNC = 3, + IMMSV_VETERAN_COORD = 4, /* veteran node after headless can be coordinator */ + IMMSV_UNKNOWN = 5 /* Unknown node will be ordered reboot */ +} IMMSV_COORD_TYPE; + typedef struct immsv_d2nd_control { SaUint32T nodeId; SaUint32T rulingEpoch; SaUint64T fevsMsgStart; SaUint32T ndExecPid; - uint8_t canBeCoord; /* 0=>payload; 1=>SC; 2=>2PBE_preload; 3=>2PBE_sync*/ + IMMSV_COORD_TYPE canBeCoord; uint8_t isCoord; uint8_t syncStarted; SaUint32T nodeEpoch; diff --git a/src/imm/immd/immd.h b/src/imm/immd/immd.h index 7dc1da686..421de4507 100644 --- a/src/imm/immd/immd.h +++ b/src/imm/immd/immd.h @@ -46,4 +46,14 @@ IMMD_CB *immd_cb; extern uint32_t initialize_for_assignment(IMMD_CB *cb, SaAmfHAStateT ha_state); +static inline void set_canBeCoord_and_execPid(IMMSV_EVT *evt, + IMMD_CB *cb, IMMD_IMMND_INFO_NODE *node_info) { + evt->info.immnd.info.ctrl.canBeCoord = + (node_info->isOnController) ? IMMSV_SC_COORD : + (cb->mScAbsenceAllowed) ? IMMSV_VETERAN_COORD : IMMSV_NOT_COORD; + evt->info.immnd.info.ctrl.ndExecPid = + (evt->info.immnd.info.ctrl.canBeCoord == IMMSV_VETERAN_COORD) ? + (cb->mScAbsenceAllowed): node_info->immnd_execPid; +} + #endif // IMM_IMMD_IMMD_H_ diff --git a/src/imm/immd/immd_evt.c b/src/imm/immd/immd_evt.c index 83831258f..16e8cbaf0 100644 --- a/src/imm/immd/immd_evt.c +++ b/src/imm/immd/immd_evt.c @@ -448,12 +448,7 @@ static void immd_start_sync_ok(IMMD_CB *cb, SaUint32T rulingEpoch, sync_evt.info.immnd.info.ctrl.rulingEpoch = cb->mRulingEpoch; sync_evt.info.immnd.info.ctrl.fevsMsgStart = cb->fevsSendCount; sync_evt.info.immnd.info.ctrl.nodeId = node_info->immnd_key; - sync_evt.info.immnd.info.ctrl.canBeCoord = - (node_info->isOnController) ? 1 : (cb->mScAbsenceAllowed) ? 4 : 0; - sync_evt.info.immnd.info.ctrl.ndExecPid = - (sync_evt.info.immnd.info.ctrl.canBeCoord == 4) - ? (cb->mScAbsenceAllowed) - : node_info->immnd_execPid; + set_canBeCoord_and_execPid(&sync_evt, cb, node_info); sync_evt.info.immnd.info.ctrl.isCoord = node_info->isCoord; sync_evt.info.immnd.info.ctrl.syncStarted = node_info->syncStarted; sync_evt.info.immnd.info.ctrl.nodeEpoch = node_info->epoch; @@ -503,12 +498,7 @@ static void immd_abort_sync_ok(IMMD_CB *cb, IMMD_IMMND_INFO_NODE *node_info) sync_evt.info.immnd.info.ctrl.nodeId = node_info->immnd_key; sync_evt.info.immnd.info.ctrl.rulingEpoch = cb->mRulingEpoch; sync_evt.info.immnd.info.ctrl.fevsMsgStart = cb->fevsSendCount; - sync_evt.info.immnd.info.ctrl.canBeCoord = - (node_info->isOnController) ? 1 : (cb->mScAbsenceAllowed) ? 4 : 0; - sync_evt.info.immnd.info.ctrl.ndExecPid = - (sync_evt.info.immnd.info.ctrl.canBeCoord == 4) - ? (cb->mScAbsenceAllowed) - : node_info->immnd_execPid; + set_canBeCoord_and_execPid(&sync_evt, cb, node_info); sync_evt.info.immnd.info.ctrl.isCoord = node_info->isCoord; sync_evt.info.immnd.info.ctrl.syncStarted = node_info->syncStarted; sync_evt.info.immnd.info.ctrl.nodeEpoch = node_info->epoch; @@ -553,12 +543,7 @@ static void immd_prto_purge_mutations(IMMD_CB *cb, sync_evt.info.immnd.info.ctrl.nodeId = node_info->immnd_key; sync_evt.info.immnd.info.ctrl.rulingEpoch = cb->mRulingEpoch; sync_evt.info.immnd.info.ctrl.fevsMsgStart = cb->fevsSendCount; - sync_evt.info.immnd.info.ctrl.canBeCoord = - (node_info->isOnController) ? 1 : (cb->mScAbsenceAllowed) ? 4 : 0; - sync_evt.info.immnd.info.ctrl.ndExecPid = - (sync_evt.info.immnd.info.ctrl.canBeCoord == 4) - ? (cb->mScAbsenceAllowed) - : node_info->immnd_execPid; + set_canBeCoord_and_execPid(&sync_evt, cb, node_info); sync_evt.info.immnd.info.ctrl.isCoord = node_info->isCoord; sync_evt.info.immnd.info.ctrl.syncStarted = node_info->syncStarted; sync_evt.info.immnd.info.ctrl.nodeEpoch = node_info->epoch; @@ -590,12 +575,7 @@ static int immd_dump_ok(IMMD_CB *cb, SaUint32T rulingEpoch, dump_evt.info.immnd.type = IMMND_EVT_D2ND_DUMP_OK; dump_evt.info.immnd.info.ctrl.rulingEpoch = cb->mRulingEpoch; dump_evt.info.immnd.info.ctrl.nodeId = node_info->immnd_key; - dump_evt.info.immnd.info.ctrl.canBeCoord = - (node_info->isOnController) ? 1 : (cb->mScAbsenceAllowed) ? 4 : 0; - dump_evt.info.immnd.info.ctrl.ndExecPid = - (dump_evt.info.immnd.info.ctrl.canBeCoord == 4) - ? (cb->mScAbsenceAllowed) - : node_info->immnd_execPid; + set_canBeCoord_and_execPid(&dump_evt, cb, node_info); dump_evt.info.immnd.info.ctrl.isCoord = node_info->isCoord; dump_evt.info.immnd.info.ctrl.fevsMsgStart = cb->fevsSendCount; dump_evt.info.immnd.info.ctrl.syncStarted = node_info->syncStarted; @@ -669,12 +649,7 @@ static void immd_req_sync(IMMD_CB *cb, IMMD_IMMND_INFO_NODE *node_info) rqsync_evt.info.immnd.type = IMMND_EVT_D2ND_SYNC_REQ; rqsync_evt.info.immnd.info.ctrl.nodeId = node_info->immnd_key; rqsync_evt.info.immnd.info.ctrl.rulingEpoch = cb->mRulingEpoch; - rqsync_evt.info.immnd.info.ctrl.canBeCoord = - (node_info->isOnController) ? 1 : (cb->mScAbsenceAllowed) ? 4 : 0; - rqsync_evt.info.immnd.info.ctrl.ndExecPid = - (rqsync_evt.info.immnd.info.ctrl.canBeCoord == 4) - ? (cb->mScAbsenceAllowed) - : node_info->immnd_execPid; + set_canBeCoord_and_execPid(&rqsync_evt, cb, node_info); rqsync_evt.info.immnd.info.ctrl.fevsMsgStart = cb->fevsSendCount; rqsync_evt.info.immnd.info.ctrl.isCoord = node_info->isCoord; rqsync_evt.info.immnd.info.ctrl.syncStarted = node_info->syncStarted; @@ -829,12 +804,8 @@ static void immd_accept_node(IMMD_CB *cb, IMMD_IMMND_INFO_NODE *node_info, accept_evt.info.immnd.info.ctrl.nodeId = node_info->immnd_key; accept_evt.info.immnd.info.ctrl.rulingEpoch = cb->mRulingEpoch; accept_evt.info.immnd.info.ctrl.canBeCoord = - (node_info->isOnController) - ? 1 - : 0; /* ScAbsenceAllowed case handled below*/ - accept_evt.info.immnd.info.ctrl.ndExecPid = - /*(accept_evt.info.immnd.info.ctrl.canBeCoord==4)?(cb->mScAbsenceAllowed):*/ - node_info->immnd_execPid; + (node_info->isOnController) ? IMMSV_SC_COORD : IMMSV_NOT_COORD; + accept_evt.info.immnd.info.ctrl.ndExecPid = node_info->immnd_execPid; accept_evt.info.immnd.info.ctrl.fevsMsgStart = cb->fevsSendCount; accept_evt.info.immnd.info.ctrl.nodeEpoch = node_info->epoch; /* Sending back pbeEnabled from IMMD to IMMNDs not really needed.*/ @@ -856,7 +827,7 @@ static void immd_accept_node(IMMD_CB *cb, IMMD_IMMND_INFO_NODE *node_info, " Cluster is loading. 2PBE configured => Wait.", node_info->immnd_key, cb->node_id); accept_evt.info.immnd.info.ctrl.canBeCoord = - 2; /* 2PBE => order preload. */ + IMMSV_2PBE_PRELOAD; /* 2PBE => order preload. */ } else if (!(cb->mScAbsenceAllowed) || (mds_attached_nodes == 1) || (accepted_nodes > @@ -896,7 +867,7 @@ static void immd_accept_node(IMMD_CB *cb, IMMD_IMMND_INFO_NODE *node_info, if (cb->mIs2Pbe) { /* 2PBE is true => joining SC must sync AND get * informed of 2PBE. */ - accept_evt.info.immnd.info.ctrl.canBeCoord = 3; + accept_evt.info.immnd.info.ctrl.canBeCoord = IMMSV_2PBE_SYNC; } } } else if (cb->immnd_coord == 0 && cb->mScAbsenceAllowed && @@ -913,7 +884,7 @@ static void immd_accept_node(IMMD_CB *cb, IMMD_IMMND_INFO_NODE *node_info, "IMMND found at %x Cluster is loading. 2PBE configured => Wait.", node_info->immnd_key); accept_evt.info.immnd.info.ctrl.canBeCoord = - 2; /* 2PBE => order preload. */ + IMMSV_2PBE_PRELOAD; /* 2PBE => order preload. */ } if (node_info->isCoord) { @@ -969,15 +940,15 @@ static void immd_accept_node(IMMD_CB *cb, IMMD_IMMND_INFO_NODE *node_info, if (cb->mScAbsenceAllowed) { osafassert(accept_evt.info.immnd.info.ctrl.canBeCoord < - 2); /* Not 2PBE */ + IMMSV_2PBE_PRELOAD); /* Not 2PBE */ accept_evt.info.immnd.info.ctrl - .canBeCoord = 4; /* Allow all nodes including - payloads to be coord */ + .canBeCoord = IMMSV_VETERAN_COORD; + /* Allow all nodes including payloads to be coord */ if (check_ex_immd_node_id && !is_on_same_partition_with_coord(cb, node_info)) { LOG_WA("Going to reboot node 0x%x", node_info->immnd_key); - accept_evt.info.immnd.info.ctrl.canBeCoord = 255; + accept_evt.info.immnd.info.ctrl.canBeCoord = IMMSV_UNKNOWN; } accept_evt.info.immnd.info.ctrl.ndExecPid = diff --git a/src/imm/immd/immd_proc.c b/src/imm/immd/immd_proc.c index b1116b07c..5b8b0d56f 100644 --- a/src/imm/immd/immd_proc.c +++ b/src/imm/immd/immd_proc.c @@ -442,12 +442,7 @@ bool immd_proc_elect_coord(IMMD_CB *cb, bool new_active) send_evt.info.immnd.info.ctrl.nodeId = immnd_info_node->immnd_key; send_evt.info.immnd.info.ctrl.rulingEpoch = cb->mRulingEpoch; - send_evt.info.immnd.info.ctrl.canBeCoord = - (immnd_info_node->isOnController) - ? 1 - : (cb->mScAbsenceAllowed) ? 4 : 0; - send_evt.info.immnd.info.ctrl.ndExecPid = - immnd_info_node->immnd_execPid; + set_canBeCoord_and_execPid(&send_evt, cb, immnd_info_node); send_evt.info.immnd.info.ctrl.isCoord = true; send_evt.info.immnd.info.ctrl.fevsMsgStart = cb->fevsSendCount; send_evt.info.immnd.info.ctrl.syncStarted = false; @@ -652,7 +647,7 @@ decided: send_evt.info.immnd.info.ctrl.nodeId = immnd_info_node->immnd_key; send_evt.info.immnd.info.ctrl.rulingEpoch = cb->mRulingEpoch; - send_evt.info.immnd.info.ctrl.canBeCoord = true; + send_evt.info.immnd.info.ctrl.canBeCoord = IMMSV_SC_COORD; send_evt.info.immnd.info.ctrl.ndExecPid = immnd_info_node->immnd_execPid; send_evt.info.immnd.info.ctrl.isCoord = false; @@ -693,7 +688,7 @@ decided: send_evt.info.immnd.type = IMMND_EVT_D2ND_INTRO_RSP; send_evt.info.immnd.info.ctrl.nodeId = immnd_info_node->immnd_key; send_evt.info.immnd.info.ctrl.rulingEpoch = cb->mRulingEpoch; - send_evt.info.immnd.info.ctrl.canBeCoord = true; + send_evt.info.immnd.info.ctrl.canBeCoord = IMMSV_SC_COORD; send_evt.info.immnd.info.ctrl.ndExecPid = immnd_info_node->immnd_execPid; send_evt.info.immnd.info.ctrl.isCoord = true; diff --git a/src/imm/immd/immd_sbevt.c b/src/imm/immd/immd_sbevt.c index fb7e42a68..5d23e829c 100644 --- a/src/imm/immd/immd_sbevt.c +++ b/src/imm/immd/immd_sbevt.c @@ -140,13 +140,14 @@ uint32_t immd_process_node_accept(IMMD_CB *cb, IMMSV_D2ND_CONTROL *ctrl) ctrl->nodeId, ctrl->nodeEpoch, ctrl->canBeCoord, ctrl->isCoord, ctrl->syncStarted, ctrl->rulingEpoch, ctrl->pbeEnabled); - if ((ctrl->canBeCoord > 1) && (ctrl->canBeCoord < 4) && + if ((ctrl->canBeCoord > IMMSV_SC_COORD) && + (ctrl->canBeCoord < IMMSV_VETERAN_COORD) && !(immd_cb->mIs2Pbe)) { LOG_ER( "Active IMMD has 2PBE enabled, yet this standby is not enabled for 2PBE - exiting"); exit(1); } else if ((cb->immnd_coord == 0) && immd_cb->mIs2Pbe && - (ctrl->canBeCoord == 1)) { + (ctrl->canBeCoord == IMMSV_SC_COORD)) { /* If 2Pbe is enabled, then ctrl->canBeCoord must be 2 or 3 for first node accpet message for each SC. Subsequent may have ctgrl->canBeCoord set to just 1. First message check done @@ -190,7 +191,7 @@ uint32_t immd_process_node_accept(IMMD_CB *cb, IMMSV_D2ND_CONTROL *ctrl) immnd_info_node->epoch = ctrl->nodeEpoch; } if (!(immnd_info_node->isOnController) && ctrl->canBeCoord && - (ctrl->canBeCoord < 4)) { + (ctrl->canBeCoord < IMMSV_VETERAN_COORD)) { immnd_info_node->isOnController = true; TRACE_5( "Corrected isOnController status for immnd node info"); @@ -245,7 +246,7 @@ uint32_t immd_process_node_accept(IMMD_CB *cb, IMMSV_D2ND_CONTROL *ctrl) } if (!(ctrl->canBeCoord) || - (ctrl->canBeCoord == 4)) { /* payload node */ + (ctrl->canBeCoord == IMMSV_VETERAN_COORD)) { /* payload node */ /* Remove the node-id from the list of detached * payloads. */ IMMD_IMMND_DETACHED_NODE *detached_node = @@ -281,7 +282,7 @@ uint32_t immd_process_node_accept(IMMD_CB *cb, IMMSV_D2ND_CONTROL *ctrl) ctrl->xmlFile.buf, ctrl->pbeFile.buf); if (ctrl->dir.size && cb->mDir == NULL && - (ctrl->canBeCoord && (ctrl->canBeCoord < 4))) { + (ctrl->canBeCoord && (ctrl->canBeCoord < IMMSV_VETERAN_COORD))) { TRACE("cb->mDir set to %s in standby", ctrl->dir.buf); cb->mDir = ctrl->dir.buf; /*steal*/ } else if (ctrl->dir.size && cb->mDir) { @@ -297,7 +298,7 @@ uint32_t immd_process_node_accept(IMMD_CB *cb, IMMSV_D2ND_CONTROL *ctrl) ctrl->dir.size = 0; if (ctrl->xmlFile.size && cb->mFile == NULL && - (ctrl->canBeCoord && (ctrl->canBeCoord < 4))) { + (ctrl->canBeCoord && (ctrl->canBeCoord < IMMSV_VETERAN_COORD))) { TRACE("cb->mFile set to %s in standby", ctrl->xmlFile.buf); cb->mFile = ctrl->xmlFile.buf; /*steal*/ @@ -314,7 +315,7 @@ uint32_t immd_process_node_accept(IMMD_CB *cb, IMMSV_D2ND_CONTROL *ctrl) ctrl->xmlFile.size = 0; if (ctrl->pbeFile.size && cb->mPbeFile == NULL && - (ctrl->canBeCoord && (ctrl->canBeCoord < 4))) { + (ctrl->canBeCoord && (ctrl->canBeCoord < IMMSV_VETERAN_COORD))) { TRACE("cb->mPbeFile set to %s in standby", ctrl->pbeFile.buf); cb->mPbeFile = ctrl->pbeFile.buf; /*steal*/ diff --git a/src/imm/immnd/immnd_evt.c b/src/imm/immnd/immnd_evt.c index ff6cc353e..3f1eb64fb 100644 --- a/src/imm/immnd/immnd_evt.c +++ b/src/imm/immnd/immnd_evt.c @@ -10499,20 +10499,20 @@ static uint32_t immnd_evt_proc_intro_rsp(IMMND_CB *cb, IMMND_EVT *evt, if (evt->info.ctrl.nodeId == cb->node_id) { /*This node was introduced to the IMM cluster */ uint8_t oldCanBeCoord = cb->mCanBeCoord; - if (evt->info.ctrl.canBeCoord == 255) { + if (evt->info.ctrl.canBeCoord == IMMSV_UNKNOWN) { LOG_NO("Used to be on another partition. Rebooting..."); opensaf_quick_reboot( "Used to be on another partition. Rebooting..."); return NCSCC_RC_SUCCESS; - } else if (evt->info.ctrl.canBeCoord == 3) { + } else if (evt->info.ctrl.canBeCoord == IMMSV_2PBE_SYNC) { cb->m2Pbe = 1; - evt->info.ctrl.canBeCoord = 1; + evt->info.ctrl.canBeCoord = IMMSV_SC_COORD; LOG_IN("2PBE SYNC CASE CAUGHT oldCanBeCoord:%u", oldCanBeCoord); } cb->mIntroduced = 1; cb->mCanBeCoord = evt->info.ctrl.canBeCoord; - if ((cb->mCanBeCoord == 2) && (cb->m2Pbe < 2) && + if ((cb->mCanBeCoord == IMMSV_2PBE_PRELOAD) && (cb->m2Pbe < 2) && immnd_cb->isNodeTypeController) { LOG_NO("2PBE startup arbitration initiated from IMMD"); cb->m2Pbe = 2; -- 2.17.1 _______________________________________________ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel