diff options
Diffstat (limited to 'xlators/mgmt/glusterd/src/glusterd-pmap.c')
| -rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-pmap.c | 91 |
1 files changed, 56 insertions, 35 deletions
diff --git a/xlators/mgmt/glusterd/src/glusterd-pmap.c b/xlators/mgmt/glusterd/src/glusterd-pmap.c index 75c72abcc..f1f49fc60 100644 --- a/xlators/mgmt/glusterd/src/glusterd-pmap.c +++ b/xlators/mgmt/glusterd/src/glusterd-pmap.c @@ -1,18 +1,18 @@ /* - Copyright (c) 2010-2011 Gluster, Inc. <http://www.gluster.com> + Copyright (c) 2010 Gluster, Inc. <http://www.gluster.com> This file is part of GlusterFS. GlusterFS is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published + it under the terms of the GNU Affero General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. GlusterFS is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. + Affero General Public License for more details. - You should have received a copy of the GNU General Public License + You should have received a copy of the GNU Affero General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ @@ -30,8 +30,7 @@ #include "glusterd.h" #include "glusterd-utils.h" -#include "portmap-xdr.h" -#include "xdr-generic.h" +#include "portmap.h" #include "protocol-common.h" #include "rpcsvc.h" @@ -79,8 +78,8 @@ pmap_registry_new (void) pmap->ports[i].type = GF_PMAP_PORT_FOREIGN; } - pmap->base_port = GF_IANA_PRIV_PORTS_START; - pmap->last_alloc = GF_IANA_PRIV_PORTS_START; + pmap->base_port = GF_DEFAULT_BASE_PORT + 2; + pmap->last_alloc = GF_DEFAULT_BASE_PORT + 2; return pmap; } @@ -228,7 +227,8 @@ pmap_registry_bind (xlator_t *this, int port, const char *brickname, p = port; pmap->ports[p].type = type; - free (pmap->ports[p].brickname); + if (pmap->ports[p].brickname) + free (pmap->ports[p].brickname); pmap->ports[p].brickname = strdup (brickname); pmap->ports[p].type = type; pmap->ports[p].xprt = xprt; @@ -280,7 +280,8 @@ remove: gf_log ("pmap", GF_LOG_INFO, "removing brick %s on port %d", pmap->ports[p].brickname, p); - free (pmap->ports[p].brickname); + if (pmap->ports[p].brickname) + free (pmap->ports[p].brickname); pmap->ports[p].brickname = NULL; pmap->ports[p].xprt = NULL; @@ -289,6 +290,27 @@ out: return 0; } + +typedef ssize_t (*gfs_serialize_t) (struct iovec outmsg, void *data); + + +static int +xdr_to_glusterfs_req (rpcsvc_request_t *req, void *arg, gfs_serialize_t sfunc) +{ + int ret = -1; + + if (!req) + return -1; + + ret = sfunc (req->msg[0], arg); + + if (ret > 0) + ret = 0; + + return ret; +} + + int gluster_pmap_portbybrick (rpcsvc_request_t *req) { @@ -297,8 +319,7 @@ gluster_pmap_portbybrick (rpcsvc_request_t *req) char *brick = NULL; int port = 0; - if (!xdr_to_generic (req->msg[0], &args, - (xdrproc_t)xdr_pmap_port_by_brick_req)) { + if (xdr_to_glusterfs_req (req, &args, xdr_to_pmap_port_by_brick_req)) { req->rpc_err = GARBAGE_ARGS; goto fail; } @@ -314,8 +335,9 @@ gluster_pmap_portbybrick (rpcsvc_request_t *req) fail: glusterd_submit_reply (req, &rsp, NULL, 0, NULL, - (xdrproc_t)xdr_pmap_port_by_brick_rsp); - free (args.brick);//malloced by xdr + (gd_serialize_t)xdr_from_pmap_port_by_brick_rsp); + if (args.brick) + free (args.brick);//malloced by xdr return 0; } @@ -327,8 +349,7 @@ gluster_pmap_brickbyport (rpcsvc_request_t *req) pmap_brick_by_port_req args = {0,}; pmap_brick_by_port_rsp rsp = {0,}; - if (!xdr_to_generic (req->msg[0], &args, - (xdrproc_t)xdr_pmap_brick_by_port_req)) { + if (xdr_to_glusterfs_req (req, &args, xdr_to_pmap_brick_by_port_req)) { req->rpc_err = GARBAGE_ARGS; goto fail; } @@ -341,7 +362,7 @@ gluster_pmap_brickbyport (rpcsvc_request_t *req) fail: glusterd_submit_reply (req, &rsp, NULL, 0, NULL, - (xdrproc_t)xdr_pmap_brick_by_port_rsp); + (gd_serialize_t)xdr_from_pmap_brick_by_port_rsp); return 0; } @@ -362,8 +383,7 @@ gluster_pmap_signup (rpcsvc_request_t *req) pmap_signup_rsp rsp = {0,}; - if (!xdr_to_generic (req->msg[0], &args, - (xdrproc_t)xdr_pmap_signup_req)) { + if (xdr_to_glusterfs_req (req, &args, xdr_to_pmap_signup_req)) { req->rpc_err = GARBAGE_ARGS; goto fail; } @@ -373,8 +393,9 @@ gluster_pmap_signup (rpcsvc_request_t *req) fail: glusterd_submit_reply (req, &rsp, NULL, 0, NULL, - (xdrproc_t)xdr_pmap_signup_rsp); - free (args.brick);//malloced by xdr + (gd_serialize_t)xdr_from_pmap_signup_rsp); + if (args.brick) + free (args.brick);//malloced by xdr return 0; } @@ -387,8 +408,7 @@ gluster_pmap_signin (rpcsvc_request_t *req) glusterd_brickinfo_t *brickinfo = NULL; int ret = -1; - if (!xdr_to_generic (req->msg[0], &args, - (xdrproc_t)xdr_pmap_signin_req)) { + if (xdr_to_glusterfs_req (req, &args, xdr_to_pmap_signin_req)) { req->rpc_err = GARBAGE_ARGS; goto fail; } @@ -400,8 +420,9 @@ gluster_pmap_signin (rpcsvc_request_t *req) &brickinfo); fail: glusterd_submit_reply (req, &rsp, NULL, 0, NULL, - (xdrproc_t)xdr_pmap_signin_rsp); - free (args.brick);//malloced by xdr + (gd_serialize_t)xdr_from_pmap_signin_rsp); + if (args.brick) + free (args.brick);//malloced by xdr if (!ret) glusterd_brick_update_signin (brickinfo, _gf_true); @@ -419,8 +440,7 @@ gluster_pmap_signout (rpcsvc_request_t *req) int ret = -1; glusterd_brickinfo_t *brickinfo = NULL; - if (!xdr_to_generic (req->msg[0], &args, - (xdrproc_t)xdr_pmap_signout_req)) { + if (xdr_to_glusterfs_req (req, &args, xdr_to_pmap_signout_req)) { //failed to decode msg; req->rpc_err = GARBAGE_ARGS; goto fail; @@ -433,8 +453,9 @@ gluster_pmap_signout (rpcsvc_request_t *req) &brickinfo); fail: glusterd_submit_reply (req, &rsp, NULL, 0, NULL, - (xdrproc_t)xdr_pmap_signout_rsp); - free (args.brick);//malloced by xdr + (gd_serialize_t)xdr_from_pmap_signout_rsp); + if (args.brick) + free (args.brick);//malloced by xdr if (!ret) glusterd_brick_update_signin (brickinfo, _gf_false); @@ -443,17 +464,17 @@ fail: } rpcsvc_actor_t gluster_pmap_actors[] = { - [GF_PMAP_NULL] = {"NULL", GF_PMAP_NULL, NULL, NULL, NULL, 0}, + [GF_PMAP_NULL] = {"NULL", GF_HNDSK_NULL, NULL, NULL, NULL }, [GF_PMAP_PORTBYBRICK] = {"PORTBYBRICK", GF_PMAP_PORTBYBRICK, - gluster_pmap_portbybrick, NULL, NULL, 0}, + gluster_pmap_portbybrick, NULL, NULL }, [GF_PMAP_BRICKBYPORT] = {"BRICKBYPORT", GF_PMAP_BRICKBYPORT, - gluster_pmap_brickbyport, NULL, NULL, 0}, + gluster_pmap_brickbyport, NULL, NULL }, [GF_PMAP_SIGNIN] = {"SIGNIN", GF_PMAP_SIGNIN, - gluster_pmap_signin, NULL, NULL, 0}, + gluster_pmap_signin, NULL, NULL }, [GF_PMAP_SIGNOUT] = {"SIGNOUT", GF_PMAP_SIGNOUT, - gluster_pmap_signout, NULL, NULL, 0}, + gluster_pmap_signout, NULL, NULL }, [GF_PMAP_SIGNUP] = {"SIGNUP", GF_PMAP_SIGNUP, - gluster_pmap_signup, NULL, NULL, 0}, + gluster_pmap_signup, NULL, NULL }, }; |
