diff options
Diffstat (limited to 'glusterfsd/src/glusterfsd-mgmt.c')
-rw-r--r-- | glusterfsd/src/glusterfsd-mgmt.c | 22 |
1 files changed, 19 insertions, 3 deletions
diff --git a/glusterfsd/src/glusterfsd-mgmt.c b/glusterfsd/src/glusterfsd-mgmt.c index 459d79fea0e..d7e87728e74 100644 --- a/glusterfsd/src/glusterfsd-mgmt.c +++ b/glusterfsd/src/glusterfsd-mgmt.c @@ -33,6 +33,7 @@ #include "xlator.h" static gf_boolean_t is_mgmt_rpc_reconnect = _gf_false; +int need_emancipate = 0; int glusterfs_mgmt_pmap_signin (glusterfs_ctx_t *ctx); int glusterfs_volfile_fetch (glusterfs_ctx_t *ctx); @@ -1571,6 +1572,7 @@ mgmt_getspec_cbk (struct rpc_req *req, struct iovec *iov, int count, oldvollen = size; memcpy (oldvolfile, rsp.spec, size); if (!is_mgmt_rpc_reconnect) { + need_emancipate = 1; glusterfs_mgmt_pmap_signin (ctx); is_mgmt_rpc_reconnect = _gf_true; } @@ -1580,9 +1582,6 @@ out: free (rsp.spec); - if (ctx) - emancipate (ctx, ret); - // Stop if server is running at an unsupported op-version if (ENOTSUP == ret) { gf_log ("mgmt", GF_LOG_ERROR, "Server is operating at an " @@ -2070,12 +2069,15 @@ mgmt_pmap_signin2_cbk (struct rpc_req *req, struct iovec *iov, int count, void *myframe) { pmap_signin_rsp rsp = {0,}; + glusterfs_ctx_t *ctx = NULL; call_frame_t *frame = NULL; int ret = 0; + ctx = glusterfsd_ctx; frame = myframe; if (-1 == req->rpc_status) { + ret = -1; rsp.op_ret = -1; rsp.op_errno = EINVAL; goto out; @@ -2092,9 +2094,13 @@ mgmt_pmap_signin2_cbk (struct rpc_req *req, struct iovec *iov, int count, if (-1 == rsp.op_ret) { gf_log (frame->this->name, GF_LOG_ERROR, "failed to register the port with glusterd"); + ret = -1; goto out; } out: + if (need_emancipate) + emancipate (ctx, ret); + STACK_DESTROY (frame->root); return 0; @@ -2107,6 +2113,7 @@ mgmt_pmap_signin_cbk (struct rpc_req *req, struct iovec *iov, int count, pmap_signin_rsp rsp = {0,}; call_frame_t *frame = NULL; int ret = 0; + int emancipate_ret = -1; pmap_signin_req pmap_req = {0, }; cmd_args_t *cmd_args = NULL; glusterfs_ctx_t *ctx = NULL; @@ -2115,6 +2122,7 @@ mgmt_pmap_signin_cbk (struct rpc_req *req, struct iovec *iov, int count, frame = myframe; if (-1 == req->rpc_status) { + ret = -1; rsp.op_ret = -1; rsp.op_errno = EINVAL; goto out; @@ -2131,6 +2139,7 @@ mgmt_pmap_signin_cbk (struct rpc_req *req, struct iovec *iov, int count, if (-1 == rsp.op_ret) { gf_log (frame->this->name, GF_LOG_ERROR, "failed to register the port with glusterd"); + ret = -1; goto out; } @@ -2139,6 +2148,7 @@ mgmt_pmap_signin_cbk (struct rpc_req *req, struct iovec *iov, int count, if (!cmd_args->brick_port2) { /* We are done with signin process */ + emancipate_ret = 0; goto out; } @@ -2155,6 +2165,8 @@ mgmt_pmap_signin_cbk (struct rpc_req *req, struct iovec *iov, int count, return 0; out: + if (need_emancipate && (ret < 0 || !cmd_args->brick_port2)) + emancipate (ctx, emancipate_ret); STACK_DESTROY (frame->root); return 0; @@ -2166,6 +2178,7 @@ glusterfs_mgmt_pmap_signin (glusterfs_ctx_t *ctx) call_frame_t *frame = NULL; pmap_signin_req req = {0, }; int ret = -1; + int emancipate_ret = -1; cmd_args_t *cmd_args = NULL; char brick_name[PATH_MAX] = {0,}; @@ -2175,6 +2188,7 @@ glusterfs_mgmt_pmap_signin (glusterfs_ctx_t *ctx) if (!cmd_args->brick_port || !cmd_args->brick_name) { gf_log ("fsd-mgmt", GF_LOG_DEBUG, "portmapper signin arguments not given"); + emancipate_ret = 0; goto out; } @@ -2193,6 +2207,8 @@ glusterfs_mgmt_pmap_signin (glusterfs_ctx_t *ctx) (xdrproc_t)xdr_pmap_signin_req); out: + if (need_emancipate && ret < 0) + emancipate (ctx, emancipate_ret); return ret; } |