---
 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

Reply via email to