Hi Vu,

Reviewed the code.
Ack from me.

Thanks,
Zoran

-----Original Message-----
From: Vu Minh Nguyen [mailto:vu.m.ngu...@dektech.com.au] 
Sent: den 24 oktober 2017 09:58
To: Hans Nordebäck <hans.nordeb...@ericsson.com>; Zoran Milinkovic 
<zoran.milinko...@ericsson.com>; Anders Widell <anders.wid...@ericsson.com>
Cc: opensaf-devel@lists.sourceforge.net; Vu Minh Nguyen 
<vu.m.ngu...@dektech.com.au>
Subject: [PATCH 1/1] clm: fix return wrong error code [#2652]

saClmClusterNodeGet_4() and saClmClusterNodeGetAsync() returns
SA_AIS_ERR_UNAVAILABLE(31) when querying non-member node information from a 
member node.

According to AIS, they should return SA_AIS_ERR_NOT_EXIST.
SA_AIS_ERR_UNAVAILABLE should be returned when invoking process is not 
executing on a member node.
---
 src/clm/clmd/clms_evt.c | 27 ++++++++++++++++++++++-----
 1 file changed, 22 insertions(+), 5 deletions(-)

diff --git a/src/clm/clmd/clms_evt.c b/src/clm/clmd/clms_evt.c index 
8352af8..4d7010d 100644
--- a/src/clm/clmd/clms_evt.c
+++ b/src/clm/clmd/clms_evt.c
@@ -1492,13 +1492,20 @@ static uint32_t proc_node_get_msg(CLMS_CB *cb, 
CLMSV_CLMS_EVT *evt)
                                    .bootTimestamp = node->boot_time;
                                clm_msg.info.api_resp_info.param.node_get
                                    .initialViewNumber = node->init_view;
-                       } else {
+                       } else if (local_node->member == SA_FALSE) {
                                clm_msg.evt_type =
                                    CLMSV_CLMS_TO_CLMA_API_RESP_MSG;
                                clm_msg.info.api_resp_info.type =
                                    CLMSV_NODE_GET_RESP;
                                clm_msg.info.api_resp_info.rc =
                                    SA_AIS_ERR_UNAVAILABLE;
+                       } else {
+                               clm_msg.evt_type =
+                                       CLMSV_CLMS_TO_CLMA_API_RESP_MSG;
+                               clm_msg.info.api_resp_info.type =
+                                       CLMSV_NODE_GET_RESP;
+                               clm_msg.info.api_resp_info.rc =
+                                       SA_AIS_ERR_NOT_EXIST;
                        }
                } else {
                        clm_msg.evt_type = CLMSV_CLMS_TO_CLMA_API_RESP_MSG; @@ 
-1508,7 +1515,7 @@ static uint32_t proc_node_get_msg(CLMS_CB *cb, 
CLMSV_CLMS_EVT *evt)
        } else {
                clm_msg.evt_type = CLMSV_CLMS_TO_CLMA_API_RESP_MSG;
                clm_msg.info.api_resp_info.type = CLMSV_NODE_GET_RESP;
-               clm_msg.info.api_resp_info.rc = SA_AIS_ERR_NOT_EXIST;
+               clm_msg.info.api_resp_info.rc = SA_AIS_ERR_UNAVAILABLE;
        }
 
        TRACE_LEAVE();
@@ -1573,6 +1580,16 @@ static uint32_t proc_node_get_async_msg(CLMS_CB *cb, 
CLMSV_CLMS_EVT *evt)
                                    ais_rc;
                                clm_msg.info.cbk_info.client_id =
                                    param->client_id;
+                       } else if (local_node->member == SA_FALSE) {
+                               clm_msg.evt_type = CLMSV_CLMS_TO_CLMA_CBK_MSG;
+                               clm_msg.info.cbk_info.type =
+                                       CLMSV_NODE_ASYNC_GET_CBK;
+                               clm_msg.info.cbk_info.param.node_get.inv =
+                                       param->inv;
+                               clm_msg.info.cbk_info.param.node_get.err =
+                                       SA_AIS_ERR_UNAVAILABLE;
+                               clm_msg.info.cbk_info.client_id =
+                                       param->client_id;
                        } else {
                                TRACE(
                                    "Node exists in the database but is 
non-member"); @@ -1582,7 +1599,7 @@ static uint32_t 
proc_node_get_async_msg(CLMS_CB *cb, CLMSV_CLMS_EVT *evt)
                                clm_msg.info.cbk_info.param.node_get.inv =
                                    param->inv;
                                clm_msg.info.cbk_info.param.node_get.err =
-                                   SA_AIS_ERR_UNAVAILABLE;
+                                   SA_AIS_ERR_NOT_EXIST;
                                clm_msg.info.cbk_info.client_id =
                                    param->client_id;
                        }
@@ -1596,11 +1613,11 @@ static uint32_t proc_node_get_async_msg(CLMS_CB *cb, 
CLMSV_CLMS_EVT *evt)
                        clm_msg.info.cbk_info.client_id = param->client_id;
                }
        } else {
-               TRACE("Node doesn't exist in the data base");
+               TRACE("Invoking process is not in cluster membership");
                clm_msg.evt_type = CLMSV_CLMS_TO_CLMA_CBK_MSG;
                clm_msg.info.cbk_info.type = CLMSV_NODE_ASYNC_GET_CBK;
                clm_msg.info.cbk_info.param.node_get.inv = param->inv;
-               clm_msg.info.cbk_info.param.node_get.err = SA_AIS_ERR_NOT_EXIST;
+               clm_msg.info.cbk_info.param.node_get.err = 
SA_AIS_ERR_UNAVAILABLE;
                clm_msg.info.cbk_info.client_id = param->client_id;
        }
        TRACE_LEAVE();
--
1.9.1


------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Opensaf-devel mailing list
Opensaf-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to