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