In the ticket 3291, a new message was introduced. Increase the log subpart version to figure out a log director support that message or not. --- src/log/agent/lga_agent.cc | 29 +++++++++++++++-------------- src/log/agent/lga_mds.cc | 23 +++++++++++++++++++---- src/log/agent/lga_mds.h | 2 ++ src/log/logd/lgs.h | 2 ++ src/log/logd/lgs_evt.cc | 6 ++++-- src/log/logd/lgs_evt.h | 1 + src/log/logd/lgs_mds.cc | 26 +++++++++++++++++++++++--- 7 files changed, 66 insertions(+), 23 deletions(-)
diff --git a/src/log/agent/lga_agent.cc b/src/log/agent/lga_agent.cc index acbb18884..33130b160 100644 --- a/src/log/agent/lga_agent.cc +++ b/src/log/agent/lga_agent.cc @@ -330,7 +330,7 @@ unsigned int LogAgent::WaitLogServerUp(int64_t polling_timeout) { status = osaf_poll_one_fd(m_GET_FD_FROM_SEL_OBJ(log_server_up_sel_), timeout); if (status == 0) { - TRACE("Waiting for log server up timeout"); + TRACE("Timeout of waiting for the log server up expired"); rc = NCSCC_RC_REQ_TIMOUT; goto done; } else if (status < 0) { @@ -339,19 +339,20 @@ unsigned int LogAgent::WaitLogServerUp(int64_t polling_timeout) { goto done; } - // Wait for initial clm status - status = osaf_poll_one_fd(m_GET_FD_FROM_SEL_OBJ(init_clm_status_sel_), - timeout); - if (status == 0) { - // The server may not support this signal - // or it's dropped. - TRACE("Waiting for initial clm status timeout"); - rc = NCSCC_RC_SUCCESS; - goto done; - } else if (status < 0) { - TRACE("Waiting for initial clm status failed: %s", strerror(errno)); - rc = NCSCC_RC_FAILURE; - goto done; + if (lga_mds_msg_does_support_init_clm_status()) { + // Wait for the initial clm status + TRACE("Waiting for the initial clm status"); + status = osaf_poll_one_fd(m_GET_FD_FROM_SEL_OBJ(init_clm_status_sel_), + timeout); + if (status == 0) { + TRACE("Timeout of waiting for the initial clm status expired"); + rc = NCSCC_RC_SUCCESS; + goto done; + } else if (status < 0) { + TRACE("Waiting for initial clm status failed: %s", strerror(errno)); + rc = NCSCC_RC_FAILURE; + goto done; + } } // Log server was up and detected this agent. Stop waiting diff --git a/src/log/agent/lga_mds.cc b/src/log/agent/lga_mds.cc index a7ce61b47..06b780b24 100644 --- a/src/log/agent/lga_mds.cc +++ b/src/log/agent/lga_mds.cc @@ -29,16 +29,19 @@ #include "log/agent/lga_common.h" #include "log/common/lgsv_defs.h" -#define LGA_SVC_PVT_SUBPART_VERSION 1 +#define LGA_SVC_PVT_SUBPART_VERSION 2 #define LGA_WRT_LGS_SUBPART_VER_AT_MIN_MSG_FMT 1 -#define LGA_WRT_LGS_SUBPART_VER_AT_MAX_MSG_FMT 1 +#define LGA_WRT_LGS_SUBPART_VER_AT_MAX_MSG_FMT 2 #define LGA_WRT_LGS_SUBPART_VER_RANGE \ (LGA_WRT_LGS_SUBPART_VER_AT_MAX_MSG_FMT - \ LGA_WRT_LGS_SUBPART_VER_AT_MIN_MSG_FMT + 1) +#define LGA_SVC_PVT_INIT_CLM_STATE_SUBPART_VERSION 2 -// msg format version for LGA subpart version 1 +// msg format version for LGA subpart version 2 static MDS_CLIENT_MSG_FORMAT_VER - LGA_WRT_LGS_MSG_FMT_ARRAY[LGA_WRT_LGS_SUBPART_VER_RANGE] = {1}; + LGA_WRT_LGS_MSG_FMT_ARRAY[LGA_WRT_LGS_SUBPART_VER_RANGE] = {1, 2}; + +static MDS_SVC_PVT_SUB_PART_VER rem_svc_pvt_ver = LGA_SVC_PVT_SUBPART_VERSION; /**************************************************************************** Name : lga_enc_initialize_msg @@ -719,6 +722,7 @@ static uint32_t lga_mds_svc_evt(struct ncsmds_callback_info *mds_cb_info) { mds_cb_info->info.svc_evt.i_dest); // Inform LOG server is up LogAgent::instance()->MarkLogServerUp(); + rem_svc_pvt_ver = mds_cb_info->info.svc_evt.i_rem_svc_pvt_ver; // Start recovery lga_serv_recov1state_set(); break; @@ -1459,6 +1463,17 @@ uint32_t lga_mds_msg_async_send(lgsv_msg_t *i_msg, uint32_t prio) { return rc; } +/**************************************************************************** + * Name : lga_mds_msg_does_support_init_clm_status + * + * Description : Check if the log director supports the init clm status or not + * + * Return Values : true/false + *****************************************************************************/ +bool lga_mds_msg_does_support_init_clm_status() { + return rem_svc_pvt_ver >= LGA_SVC_PVT_INIT_CLM_STATE_SUBPART_VERSION; +} + /**************************************************************************** * Name : lga_msg_destroy * diff --git a/src/log/agent/lga_mds.h b/src/log/agent/lga_mds.h index af5608849..b06b25bd4 100644 --- a/src/log/agent/lga_mds.h +++ b/src/log/agent/lga_mds.h @@ -32,4 +32,6 @@ uint32_t lga_mds_msg_sync_send(lgsv_msg_t *i_msg, lgsv_msg_t **o_msg, SaTimeT timeout, uint32_t prio); uint32_t lga_mds_msg_async_send(lgsv_msg_t *i_msg, uint32_t prio); +bool lga_mds_msg_does_support_init_clm_status(); + #endif // SRC_LOG_AGENT_LGA_MDS_H_ diff --git a/src/log/logd/lgs.h b/src/log/logd/lgs.h index b1d773375..0be123428 100644 --- a/src/log/logd/lgs.h +++ b/src/log/logd/lgs.h @@ -106,5 +106,7 @@ extern uint32_t lgs_mds_change_role(lgs_cb_t *cb); extern uint32_t lgs_mds_msg_send(lgs_cb_t *cb, lgsv_msg_t *msg, MDS_DEST *dest, MDS_SYNC_SND_CTXT *mds_ctxt, MDS_SEND_PRIORITY_TYPE prio); +extern bool lgs_mds_does_support_init_clm_status( + lgsv_lgs_mds_info_t *mds_info); #endif // LOG_LOGD_LGS_H_ diff --git a/src/log/logd/lgs_evt.cc b/src/log/logd/lgs_evt.cc index 6b186cdc3..5052a542d 100644 --- a/src/log/logd/lgs_evt.cc +++ b/src/log/logd/lgs_evt.cc @@ -426,8 +426,10 @@ static uint32_t proc_lga_updn_mds_msg(lgsv_lgs_evt_t *evt) { } else { clusterChange = SA_CLM_NODE_LEFT; } - /* Send clm status to log agent */ - lgs_send_clm_node_status(clusterChange, evt->fr_dest); + if (lgs_mds_does_support_init_clm_status(&evt->info.mds_info)) { + /* Send clm status to log agent */ + lgs_send_clm_node_status(clusterChange, evt->fr_dest); + } } break; diff --git a/src/log/logd/lgs_evt.h b/src/log/logd/lgs_evt.h index a4b140eee..dbb8b58d1 100644 --- a/src/log/logd/lgs_evt.h +++ b/src/log/logd/lgs_evt.h @@ -38,6 +38,7 @@ typedef enum lgsv_lgs_evt_type { typedef struct lgsv_lgs_mds_info { uint32_t node_id; MDS_DEST mds_dest_id; + MDS_SVC_PVT_SUB_PART_VER i_rem_svc_pvt_ver; } lgsv_lgs_mds_info_t; typedef struct { PCS_RDA_ROLE io_role; } lgsv_rda_info_t; diff --git a/src/log/logd/lgs_mds.cc b/src/log/logd/lgs_mds.cc index ae106f951..e65f31431 100644 --- a/src/log/logd/lgs_mds.cc +++ b/src/log/logd/lgs_mds.cc @@ -23,16 +23,18 @@ #include "base/osaf_time.h" #include "base/osaf_extended_name.h" -#define LGS_SVC_PVT_SUBPART_VERSION 1 +#define LGS_SVC_PVT_SUBPART_VERSION 2 #define LGS_WRT_LGA_SUBPART_VER_AT_MIN_MSG_FMT 1 -#define LGS_WRT_LGA_SUBPART_VER_AT_MAX_MSG_FMT 1 +#define LGS_WRT_LGA_SUBPART_VER_AT_MAX_MSG_FMT 2 #define LGS_WRT_LGA_SUBPART_VER_RANGE \ (LGS_WRT_LGA_SUBPART_VER_AT_MAX_MSG_FMT - \ LGS_WRT_LGA_SUBPART_VER_AT_MIN_MSG_FMT + 1) +#define LGS_WRT_LGA_INIT_CLM_STATE_SUBPART_VERSION 2 static MDS_CLIENT_MSG_FORMAT_VER LGS_WRT_LGA_MSG_FMT_ARRAY[LGS_WRT_LGA_SUBPART_VER_RANGE] = { - 1 /*msg format version for LGA subpart version 1 */ + 1, /*msg format version for LGA subpart version 1 */ + 2 /*msg format version for LGA subpart version 2 */ }; /**************************************************************************** @@ -1212,6 +1214,8 @@ static uint32_t mds_svc_event(struct ncsmds_callback_info *info) { /** Initialize the MDS portion of the header **/ evt->info.mds_info.node_id = info->info.svc_evt.i_node_id; evt->info.mds_info.mds_dest_id = info->info.svc_evt.i_dest; + evt->info.mds_info.i_rem_svc_pvt_ver = + info->info.svc_evt.i_rem_svc_pvt_ver; /* Push to the lowest prio queue to not bypass any pending writes. If that * fails (it is FULL) use the high prio unbounded ctrl msg queue */ @@ -1243,6 +1247,8 @@ static uint32_t mds_svc_event(struct ncsmds_callback_info *info) { /** Initialize the MDS portion of the header **/ evt->info.mds_info.node_id = info->info.svc_evt.i_node_id; evt->info.mds_info.mds_dest_id = info->info.svc_evt.i_dest; + evt->info.mds_info.i_rem_svc_pvt_ver = + info->info.svc_evt.i_rem_svc_pvt_ver; /* Push to the lowest prio queue to not bypass any pending writes. If that * fails (it is FULL) use the high prio unbounded ctrl msg queue */ @@ -1585,3 +1591,17 @@ uint32_t lgs_mds_msg_send(lgs_cb_t *cb, lgsv_msg_t *msg, MDS_DEST *dest, } return rc; } + +/**************************************************************************** + * Name : lgs_mds_does_support_init_clm_status + * + * Description : Check if the log agent supports the init clm status or not + * + * Arguments : mds_info - ptr to the mds info + * + * Return Values : true/false + *****************************************************************************/ +bool lgs_mds_does_support_init_clm_status(lgsv_lgs_mds_info_t *mds_info) { + return mds_info->i_rem_svc_pvt_ver >= + LGS_WRT_LGA_INIT_CLM_STATE_SUBPART_VERSION; +} -- 2.25.1 _______________________________________________ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel