From e9a37d5a3471db02e1c7922cee93bf290e2f326d Mon Sep 17 00:00:00 2001 From: Avra Sengupta Date: Tue, 5 May 2015 10:58:10 +0530 Subject: glusterd/snapshot: Return correct errno in events of failure - PATCH 1 Backport of patch http://review.gluster.org/#/c/10313/ RETCODE ERROR ------------------------------------------- 30800 Internal Error 30801 Another Transaction In Progress >Change-Id: Ica7fd2e513b2c28717b6df73cfb2667725dbf057 >BUG: 1226117 >Signed-off-by: Avra Sengupta >Reviewed-on: http://review.gluster.org/10313 >Reviewed-by: Rajesh Joseph >Tested-by: Gluster Build System >Tested-by: NetBSD Build System >Reviewed-by: Krishnan Parthasarathi >(cherry picked from commit 4397d7e72fdff6f01c59b72eebea421f23c1a392) Change-Id: Iace6ac0f150919cead94e6c5d99a23d28d45046e BUG: 1226117 Signed-off-by: Avra Sengupta Reviewed-on: http://review.gluster.org/11011 Tested-by: NetBSD Build System Reviewed-by: Kaushal M --- xlators/mgmt/glusterd/src/glusterd-mgmt.c | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) (limited to 'xlators/mgmt/glusterd/src/glusterd-mgmt.c') diff --git a/xlators/mgmt/glusterd/src/glusterd-mgmt.c b/xlators/mgmt/glusterd/src/glusterd-mgmt.c index 85d8c777884..a3eaf2ebdcd 100644 --- a/xlators/mgmt/glusterd/src/glusterd-mgmt.c +++ b/xlators/mgmt/glusterd/src/glusterd-mgmt.c @@ -23,6 +23,7 @@ #include "glusterd-store.h" #include "glusterd-snapshot-utils.h" #include "glusterd-messages.h" +#include "glusterd-errno.h" extern struct rpc_clnt_program gd_mgmt_v3_prog; @@ -397,7 +398,7 @@ out: int glusterd_mgmt_v3_initiate_lockdown (glusterd_op_t op, dict_t *dict, - char **op_errstr, + char **op_errstr, uint32_t *op_errno, gf_boolean_t *is_acquired, uint32_t txn_generation) { @@ -420,7 +421,7 @@ glusterd_mgmt_v3_initiate_lockdown (glusterd_op_t op, dict_t *dict, GF_ASSERT (is_acquired); /* Trying to acquire multiple mgmt_v3 locks on local node */ - ret = glusterd_multiple_mgmt_v3_lock (dict, MY_UUID); + ret = glusterd_multiple_mgmt_v3_lock (dict, MY_UUID, op_errno); if (ret) { gf_msg (this->name, GF_LOG_ERROR, 0, GD_MSG_MGMTV3_LOCK_GET_FAIL, @@ -466,6 +467,7 @@ glusterd_mgmt_v3_initiate_lockdown (glusterd_op_t op, dict_t *dict, *op_errstr = gf_strdup (args.errstr); ret = args.op_ret; + *op_errno = args.op_errno; gf_msg_debug (this->name, 0, "Sent lock op req for %s " "to %d peers. Returning %d", gd_op_list[op], peer_cnt, ret); @@ -1701,6 +1703,7 @@ glusterd_mgmt_v3_initiate_all_phases (rpcsvc_request_t *req, glusterd_op_t op, gf_boolean_t is_acquired = _gf_false; uuid_t *originator_uuid = NULL; uint32_t txn_generation = 0; + uint32_t op_errno = 0; this = THIS; GF_ASSERT (this); @@ -1758,7 +1761,8 @@ glusterd_mgmt_v3_initiate_all_phases (rpcsvc_request_t *req, glusterd_op_t op, /* LOCKDOWN PHASE - Acquire mgmt_v3 locks */ ret = glusterd_mgmt_v3_initiate_lockdown (op, dict, &op_errstr, - &is_acquired, txn_generation); + &op_errno, &is_acquired, + txn_generation); if (ret) { gf_msg (this->name, GF_LOG_ERROR, 0, GD_MSG_MGMTV3_LOCKDOWN_FAIL, @@ -1828,8 +1832,12 @@ out: } } + if (ret && (op_errno == 0)) + op_errno = EINTRNL; + /* SEND CLI RESPONSE */ - glusterd_op_send_cli_response (op, op_ret, 0, req, dict, op_errstr); + glusterd_op_send_cli_response (op, op_ret, op_errno, req, + dict, op_errstr); if (req_dict) dict_unref (req_dict); @@ -1929,6 +1937,7 @@ glusterd_mgmt_v3_initiate_snap_phases (rpcsvc_request_t *req, glusterd_op_t op, gf_boolean_t success = _gf_false; char *cli_errstr = NULL; uint32_t txn_generation = 0; + uint32_t op_errno = 0; this = THIS; GF_ASSERT (this); @@ -1986,7 +1995,8 @@ glusterd_mgmt_v3_initiate_snap_phases (rpcsvc_request_t *req, glusterd_op_t op, /* LOCKDOWN PHASE - Acquire mgmt_v3 locks */ ret = glusterd_mgmt_v3_initiate_lockdown (op, dict, &op_errstr, - &is_acquired, txn_generation); + &op_errno, &is_acquired, + txn_generation); if (ret) { gf_msg (this->name, GF_LOG_ERROR, 0, GD_MSG_MGMTV3_LOCKDOWN_FAIL, @@ -2161,8 +2171,12 @@ out: } } + if (ret && (op_errno == 0)) + op_errno = EINTRNL; + /* SEND CLI RESPONSE */ - glusterd_op_send_cli_response (op, op_ret, 0, req, dict, op_errstr); + glusterd_op_send_cli_response (op, op_ret, op_errno, req, + dict, op_errstr); if (req_dict) dict_unref (req_dict); -- cgit