Hi Hieu,

ACK from me.

Best Regards,
Thien

-----Original Message-----
From: Hieu Hong Hoang <hieu.h.ho...@dektech.com.au> 
Sent: Friday, March 11, 2022 3:48 PM
To: Thang Duc Nguyen <thang.d.ngu...@dektech.com.au>; Minh Hon Chau 
<minh.c...@dektech.com.au>; Thien Minh Huynh <thien.m.hu...@dektech.com.au>
Cc: opensaf-devel@lists.sourceforge.net; Hieu Hong Hoang 
<hieu.h.ho...@dektech.com.au>
Subject: [PATCH 1/1] log: Increase the log subpart version [#3310]

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

Reply via email to