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