---
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 18aeca447..f2571a1bc 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
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel