Re: [devel] [PATCH 1/1] clm: fix return wrong error code [#2652]

2017-10-24 Thread Zoran Milinkovic
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 ; Zoran Milinkovic 
; Anders Widell 
Cc: opensaf-devel@lists.sourceforge.net; Vu Minh Nguyen 

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;
-   

[devel] [PATCH 1/1] clm: fix return wrong error code [#2652]

2017-10-24 Thread Vu Minh Nguyen
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