Hi Thang,
The patch looks ok, but I'm thinking of not introducing mds_node_down_list.
In SAI-AIS-CLM-B.04.01:
"The term unconfigured node is used in this document to designate an
execution environment that is not configured to host a CLM node."
May we add a check if a node is unconfigured because it's not in
ee_lookup, to distinguish with if a node is down?
Thanks
Minh
On 1/2/19 2:34 pm, Tran Thuan wrote:
Hi Thang,
ACK from me for code review, not tested.
Best Regards,
ThuanTr
-----Original Message-----
From: thang.d.nguyen <thang.d.ngu...@dektech.com.au>
Sent: Wednesday, January 30, 2019 1:20 AM
To: gary....@dektech.com.au; minh.c...@dektech.com.au;
thuan.t...@dektech.com.au
Cc: opensaf-devel@lists.sourceforge.net; thang.d.nguyen
<thang.d.ngu...@dektech.com.au>
Subject: [PATCH 1/1] clmd: not send sync respond to client if node down
[#3004]
Clmd will not send sync respond to client if the node that client resided on
down. This will avoid timeout when clmd send via mds.
---
src/clm/clmd/clms_cb.h | 3 +++
src/clm/clmd/clms_evt.cc | 22 +++++++++++++++++-----
src/clm/clmd/clms_mds.cc | 2 +-
3 files changed, 21 insertions(+), 6 deletions(-)
diff --git a/src/clm/clmd/clms_cb.h b/src/clm/clmd/clms_cb.h index
4d7fdc7..637d53a 100644
--- a/src/clm/clmd/clms_cb.h
+++ b/src/clm/clmd/clms_cb.h
@@ -22,6 +22,7 @@
#include "osaf/config.h"
#endif
#include <pthread.h>
+#include <set>
#include <saImm.h>
#include <saImmOi.h>
#include <saPlm.h>
@@ -238,6 +239,8 @@ typedef struct clms_cb_t {
*node_down_list_head; /*NODE_DOWN record - Fix when active node goes
down
*/
NODE_DOWN_LIST *node_down_list_tail;
+ // Record node id when receive MDS node down std::set<SaUint32T>
+ mds_node_down_list;
bool is_impl_set;
bool nid_started; /**< true if started by NID */
NCS_PATRICIA_TREE iplist; /* To temporarily store ipaddress information
diff --git a/src/clm/clmd/clms_evt.cc b/src/clm/clmd/clms_evt.cc index
c2b83c2..5265002 100644
--- a/src/clm/clmd/clms_evt.cc
+++ b/src/clm/clmd/clms_evt.cc
@@ -943,6 +943,8 @@ static uint32_t proc_mds_node_evt(CLMSV_CLMS_EVT *evt) {
goto done;
}
+ clms_cb->mds_node_down_list.insert(node_id);
+
if ((clms_cb->ha_state == SA_AMF_HA_ACTIVE) ||
(clms_cb->ha_state == SA_AMF_HA_QUIESCED)) {
clms_track_send_node_down(node);
@@ -1531,19 +1533,24 @@ static uint32_t proc_initialize_msg(CLMS_CB *cb,
CLMSV_CLMS_EVT *evt) {
TRACE_ENTER2("dest %" PRIx64, evt->fr_dest);
- /*Handle the wrap around */
- if (clms_cb->last_client_id == INT_MAX) clms_cb->last_client_id = 0;
-
- clms_cb->last_client_id++;
-
node = clms_node_get_by_id(node_id);
TRACE("Node id = %d", node_id);
if (node == nullptr) {
LOG_IN("Initialize request of client on an unconfigured node: node_id =
%d",
node_id);
ais_rc = SA_AIS_ERR_UNAVAILABLE;
+ std::set<SaUint32T>::iterator it =
+ clms_cb->mds_node_down_list.find(node_id);
+ if (it != clms_cb->mds_node_down_list.end()) {
+ return (uint32_t)ais_rc;
+ }
}
+ /*Handle the wrap around */
+ if (clms_cb->last_client_id == INT_MAX) clms_cb->last_client_id = 0;
+
+ clms_cb->last_client_id++;
+
if ((client = clms_client_new(evt->fr_dest, clms_cb->last_client_id)) ==
nullptr) {
TRACE("Creating a new client failed"); @@ -1564,6 +1571,11 @@ static
uint32_t proc_initialize_msg(CLMS_CB *cb, CLMSV_CLMS_EVT *evt) {
return rc;
}
+ std::set<SaUint32T>::iterator it =
+ clms_cb->mds_node_down_list.find(node_id);
+ if (it != clms_cb->mds_node_down_list.end()) {
+ clms_cb->mds_node_down_list.erase(it);
+ }
+
if (node) {
if (node->member == false) {
rc = clms_send_is_member_info(clms_cb, node->node_id, node->member,
diff --git a/src/clm/clmd/clms_mds.cc b/src/clm/clmd/clms_mds.cc index
58552cc..833d18c 100644
--- a/src/clm/clmd/clms_mds.cc
+++ b/src/clm/clmd/clms_mds.cc
@@ -1097,7 +1097,7 @@ static uint32_t clms_mds_node_event(struct
ncsmds_callback_info *mds_info) {
clmsv_evt->info.node_mds_info.node_id =
mds_info->info.node_evt.node_id;
clmsv_evt->info.node_mds_info.nodeup = SA_TRUE;
- rc = m_NCS_IPC_SEND(&clms_cb->mbx, clmsv_evt, NCS_IPC_PRIORITY_HIGH);
+ rc = m_NCS_IPC_SEND(&clms_cb->mbx, clmsv_evt,
+ NCS_IPC_PRIORITY_VERY_HIGH);
if (rc != NCSCC_RC_SUCCESS) {
TRACE("IPC send failed %d", rc);
free(clmsv_evt);
--
2.7.4
_______________________________________________
Opensaf-devel mailing list
Opensaf-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/opensaf-devel