Hi Minh,

There is NO node info in data base of CLM in both case node down and node 
unconfigured.
So we can not use it to distingush b/w them.

B.R
/Thang

-----Original Message-----
From: Minh Hon Chau <minh.c...@dektech.com.au> 
Sent: Wednesday, February 13, 2019 9:49 AM
To: Tran Thuan <thuan.t...@dektech.com.au>; 'thang.d.nguyen' 
<thang.d.ngu...@dektech.com.au>; gary....@dektech.com.au
Cc: opensaf-devel@lists.sourceforge.net
Subject: Re: [PATCH 1/1] clmd: not send sync respond to client if node down 
[#3004]

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

Reply via email to