--- src/fm/fmd/fm_cb.h | 89 ++++++++++++++++++++++++++------------------------- src/fm/fmd/fm_main.cc | 38 +++++++++++----------- src/fm/fmd/fm_mds.cc | 35 +++++++++++--------- src/fm/fmd/fm_mds.h | 2 ++ src/fm/fmd/fm_mem.h | 8 ----- 5 files changed, 86 insertions(+), 86 deletions(-)
diff --git a/src/fm/fmd/fm_cb.h b/src/fm/fmd/fm_cb.h index ffb3d8478..cfa50d883 100644 --- a/src/fm/fmd/fm_cb.h +++ b/src/fm/fmd/fm_cb.h @@ -18,19 +18,20 @@ #ifndef FM_FMD_FM_CB_H_ #define FM_FMD_FM_CB_H_ -#include <saAmf.h> -#include <saClm.h> #include <stdbool.h> #include <stdint.h> +#include <time.h> +#include <atomic> +#include <string> +#include <saAmf.h> +#include <saClm.h> +#include "base/mutex.h" #include "base/ncssysf_ipc.h" #include "base/ncssysf_tmr.h" -#include "fm_amf.h" +#include "fm/fmd/fm_amf.h" #include "mds/mds_papi.h" #include "rde/agent/rda_papi.h" -#include <stdbool.h> -#include <stdint.h> -#include <time.h> extern uint32_t gl_fm_hdl; @@ -55,58 +56,60 @@ typedef struct fm_tmr { } FM_TMR; /* FM control block */ -typedef struct fm_cb { - uint32_t cb_hdl; - SYSF_MBX mbx; +struct FM_CB { + uint32_t cb_hdl{}; + SYSF_MBX mbx{}; /* FM AMF CB */ - FM_AMF_CB fm_amf_cb; - NODE_ID node_id; - SaNameT node_name; + FM_AMF_CB fm_amf_cb{}; + std::atomic<NODE_ID> node_id{}; + SaNameT node_name{}; - SaNameT peer_node_name; - NODE_ID peer_node_id; - MDS_DEST peer_adest; /* will be 0 if peer is not up */ + std::string peer_node_name{}; + std::atomic<NODE_ID> peer_node_id{}; + std::atomic<MDS_DEST> peer_adest{}; /* will be 0 if peer is not up */ /* Holds own role. */ - PCS_RDA_ROLE role; + PCS_RDA_ROLE role{}; /* AMF HA state for FM */ - SaAmfHAStateT amf_state; + SaAmfHAStateT amf_state{}; /* MDS handles. */ - MDS_DEST adest; - MDS_HDL adest_hdl; - MDS_HDL adest_pwe1_hdl; + MDS_DEST adest{}; + MDS_HDL adest_hdl{}; + MDS_HDL adest_pwe1_hdl{}; /* Timers */ - FM_TMR promote_active_tmr; - FM_TMR activation_supervision_tmr; + FM_TMR promote_active_tmr{}; + FM_TMR activation_supervision_tmr{}; /* Time in terms of one hundredth of seconds (500 for 5 secs.) */ - uint32_t active_promote_tmr_val; - uint32_t activation_supervision_tmr_val; - bool fully_initialized; - bool csi_assigned; + uint32_t active_promote_tmr_val{}; + uint32_t activation_supervision_tmr_val{}; + bool fully_initialized{false}; + bool csi_assigned{false}; /* Variable to indicate OpenSAF control of TIPC transport */ - bool control_tipc; + bool control_tipc{true}; /* Booleans to mark service down events of critical Osaf Services */ - bool immd_down; - bool immnd_down; - bool amfnd_down; - bool amfd_down; - bool fm_down; - - bool peer_sc_up; - bool well_connected; - uint64_t cluster_size; - struct timespec last_well_connected; - struct timespec node_isolation_timeout; - SaClmHandleT clm_hdl; - bool use_remote_fencing; - SaNameT peer_clm_node_name; - bool peer_node_terminated; -} FM_CB; + bool immd_down{true}; + bool immnd_down{true}; + std::atomic<bool> amfnd_down{true}; + bool amfd_down{true}; + bool fm_down{false}; + + std::atomic<bool> peer_sc_up{false}; + bool well_connected{false}; + uint64_t cluster_size{}; + struct timespec last_well_connected{}; + struct timespec node_isolation_timeout{}; + SaClmHandleT clm_hdl{}; + bool use_remote_fencing{false}; + SaNameT peer_clm_node_name{}; + std::atomic<bool> peer_node_terminated{false}; + + base::Mutex mutex_{}; +}; extern const char *role_string[]; extern FM_CB *fm_cb; diff --git a/src/fm/fmd/fm_main.cc b/src/fm/fmd/fm_main.cc index 693bf9438..1244c2347 100644 --- a/src/fm/fmd/fm_main.cc +++ b/src/fm/fmd/fm_main.cc @@ -30,7 +30,7 @@ This file contains the main() routine for FM. #include "base/osaf_extended_name.h" #include "base/osaf_poll.h" #include "base/osaf_time.h" -#include "fm.h" +#include "fm/fmd/fm.h" #include "nid/agent/nid_api.h" #include "osaf/configmake.h" #include "osaf/consensus/consensus.h" @@ -107,7 +107,7 @@ void rda_cb(uint32_t cb_hdl, PCS_RDA_CB_INFO *cb_info, rc = ncs_ipc_send(&fm_cb->mbx, (NCS_IPC_MSG *)evt, NCS_IPC_PRIORITY_HIGH); if (rc != NCSCC_RC_SUCCESS) { - syslog(LOG_ERR, "IPC send failed %d", rc); + syslog(LOG_ERR, "IPC send failed %u", rc); free(evt); } @@ -144,17 +144,10 @@ int main(int argc, char *argv[]) { } /* Allocate memory for FM_CB. */ - fm_cb = m_MMGR_ALLOC_FM_CB; - if (NULL == fm_cb) { - syslog(LOG_ERR, "CB Allocation failed."); - goto fm_init_failed; - } + fm_cb = new FM_CB(); - memset(fm_cb, 0, sizeof(FM_CB)); fm_cb->fm_amf_cb.nid_started = nid_started; fm_cb->fm_amf_cb.amf_fd = -1; - fm_cb->fully_initialized = false; - fm_cb->csi_assigned = false; /* Variable to control whether FM will trigger failover immediately * upon recieving down event of critical services or will wait @@ -169,11 +162,6 @@ int main(int argc, char *argv[]) { */ fm_cb->control_tipc = true; /* Default behaviour */ - fm_cb->immd_down = true; - fm_cb->immnd_down = true; - fm_cb->amfnd_down = true; - fm_cb->amfd_down = true; - /* Create CB handle */ gl_fm_hdl = ncshm_create_hdl(NCS_HM_POOL_ID_COMMON, NCS_SERVICE_ID_GFM, (NCSCONTEXT)fm_cb); @@ -395,8 +383,9 @@ static uint32_t fm_get_args(FM_CB *fm_cb) { fm_cb->node_name.length = strlen(value); memcpy(fm_cb->node_name.value, value, fm_cb->node_name.length); LOG_NO("EE_ID : %s", fm_cb->node_name.value); - } else + } else { fm_cb->node_name.length = 0; + } /* Update fm_cb configuration fields */ fm_cb->node_id = m_NCS_GET_NODE_ID; @@ -587,8 +576,12 @@ static void fm_mbx_msg_handler(FM_CB *fm_cb, FM_EVT *fm_mbx_evt) { fm_cb->peer_clm_node_name.value); } } else { + std::string peer_node_name; + fm_cb->mutex_.Lock(); + peer_node_name = fm_cb->peer_node_name; + fm_cb->mutex_.Unlock(); opensaf_reboot(fm_cb->peer_node_id, - (char *)fm_cb->peer_node_name.value, + peer_node_name.c_str(), "Received Node Down for peer controller"); } if (!((fm_cb->role == PCS_RDA_ACTIVE) && @@ -610,7 +603,7 @@ static void fm_mbx_msg_handler(FM_CB *fm_cb, FM_EVT *fm_mbx_evt) { LOG_WA( "Two active controllers observed in a cluster, newActive: %x and " "old-Active: %x", - fm_cb->node_id, fm_cb->peer_node_id); + unsigned(fm_cb->node_id), unsigned(fm_cb->peer_node_id)); opensaf_reboot(0, NULL, "Received svc up from peer node (old-active is not " "fully DOWN), hence rebooting the new Active"); @@ -644,7 +637,8 @@ static void fm_mbx_msg_handler(FM_CB *fm_cb, FM_EVT *fm_mbx_evt) { /* Now. Try resetting other blade */ fm_cb->role = PCS_RDA_ACTIVE; - LOG_NO("Reseting peer controller node id: %x", fm_cb->peer_node_id); + LOG_NO("Reseting peer controller node id: %x", + unsigned(fm_cb->peer_node_id)); if (fm_cb->use_remote_fencing) { if (fm_cb->peer_node_terminated == false) { opensaf_reboot(fm_cb->peer_node_id, @@ -655,8 +649,12 @@ static void fm_mbx_msg_handler(FM_CB *fm_cb, FM_EVT *fm_mbx_evt) { fm_cb->peer_clm_node_name.value); } } else { + std::string peer_node_name; + fm_cb->mutex_.Lock(); + peer_node_name = fm_cb->peer_node_name; + fm_cb->mutex_.Unlock(); opensaf_reboot(fm_cb->peer_node_id, - (char *)fm_cb->peer_node_name.value, + peer_node_name.c_str(), "Received Node Down for Active peer"); } fm_rda_set_role(fm_cb, PCS_RDA_ACTIVE); diff --git a/src/fm/fmd/fm_mds.cc b/src/fm/fmd/fm_mds.cc index fce6e6789..277a357d2 100644 --- a/src/fm/fmd/fm_mds.cc +++ b/src/fm/fmd/fm_mds.cc @@ -16,9 +16,11 @@ * */ +#include "fm/fmd/fm_mds.h" +#include <string> #include "base/ncssysf_def.h" +#include "base/osaf_extended_name.h" #include "base/osaf_time.h" -#include "fm.h" const MDS_CLIENT_MSG_FORMAT_VER fm_fm_msg_fmt_map_table[FM_SUBPART_VER_MAX] = { FM_FM_MSG_FMT_VER_1}; @@ -290,23 +292,23 @@ void fm_proc_svc_down(FM_CB *cb, uint32_t node_id, NCSMDS_SVC_ID svc_id) { switch (svc_id) { case NCSMDS_SVC_ID_IMMND: cb->immnd_down = true; - LOG_NO("IMMND down on: %x", cb->peer_node_id); + LOG_NO("IMMND down on: %x", unsigned(cb->peer_node_id)); break; case NCSMDS_SVC_ID_AVND: cb->amfnd_down = true; - LOG_NO("AMFND down on: %x", cb->peer_node_id); + LOG_NO("AMFND down on: %x", unsigned(cb->peer_node_id));; break; case NCSMDS_SVC_ID_IMMD: cb->immd_down = true; - LOG_NO("IMMD down on: %x", cb->peer_node_id); + LOG_NO("IMMD down on: %x", unsigned(cb->peer_node_id)); break; case NCSMDS_SVC_ID_AVD: cb->amfd_down = true; - LOG_NO("AVD down on: %x", cb->peer_node_id); + LOG_NO("AVD down on: %x", unsigned(cb->peer_node_id)); break; case NCSMDS_SVC_ID_GFM: cb->fm_down = true; - LOG_NO("FM down on: %x", cb->peer_node_id); + LOG_NO("FM down on: %x", unsigned(cb->peer_node_id)); break; default: break; @@ -629,15 +631,18 @@ static uint32_t fm_mds_rcv_evt(FM_CB *cb, MDS_CALLBACK_RECEIVE_INFO *rcv_info) { gfm_rcv_msg = (GFM_GFM_MSG *)rcv_info->i_msg; switch (gfm_rcv_msg->msg_type) { case GFM_GFM_EVT_NODE_INFO_EXCHANGE: - - cb->peer_node_id = gfm_rcv_msg->info.node_info.node_id; - cb->peer_node_name.length = - gfm_rcv_msg->info.node_info.node_name.length; - memcpy(cb->peer_node_name.value, - gfm_rcv_msg->info.node_info.node_name.value, - cb->peer_node_name.length); - LOG_IN("Peer Node_id %u : EE_ID %s", cb->peer_node_id, - cb->peer_node_name.value); + { + std::string peer_node_name( + reinterpret_cast<const char*>( + gfm_rcv_msg->info.node_info.node_name.value), + gfm_rcv_msg->info.node_info.node_name.length); + cb->peer_node_id = gfm_rcv_msg->info.node_info.node_id; + cb->mutex_.Lock(); + cb->peer_node_name = peer_node_name; + cb->mutex_.Unlock(); + LOG_IN("Peer Node_id %u : EE_ID %s", unsigned(cb->peer_node_id), + peer_node_name.c_str()); + } break; case GFM_GFM_EVT_PEER_IS_TERMINATING: fm_cb->peer_node_terminated = true; diff --git a/src/fm/fmd/fm_mds.h b/src/fm/fmd/fm_mds.h index ccdf30060..d984c4f59 100644 --- a/src/fm/fmd/fm_mds.h +++ b/src/fm/fmd/fm_mds.h @@ -15,6 +15,8 @@ * */ +#include "fm/fmd/fm.h" + #ifndef FM_FMD_FM_MDS_H_ #define FM_FMD_FM_MDS_H_ diff --git a/src/fm/fmd/fm_mem.h b/src/fm/fmd/fm_mem.h index 38eb0fb94..2cad08218 100644 --- a/src/fm/fmd/fm_mem.h +++ b/src/fm/fmd/fm_mem.h @@ -28,14 +28,6 @@ typedef enum ncs_fm_service_sub_id { NCS_FM_SVC_SUB_ID_DEFAULT_VAL } NCS_FM_SVC_SUB_ID; -#define m_MMGR_ALLOC_FM_CB \ - (FM_CB*)m_NCS_MEM_ALLOC(sizeof(FM_CB), NCS_MEM_REGION_PERSISTENT, \ - NCS_SERVICE_ID_GFM, NCS_FM_SVC_SUB_ID_FM_CB) - -#define m_MMGR_FREE_FM_CB(ptr) \ - m_NCS_MEM_FREE(ptr, NCS_MEM_REGION_PERSISTENT, NCS_SERVICE_ID_GFM, \ - NCS_FM_SVC_SUB_ID_FM_CB) - #define m_MMGR_ALLOC_FM_EVT \ (FM_EVT*)m_NCS_MEM_ALLOC(sizeof(FM_EVT), NCS_MEM_REGION_PERSISTENT, \ NCS_SERVICE_ID_GFM, NCS_FM_SVC_SUB_ID_FM_EVT) -- 2.14.1 ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot _______________________________________________ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel