glusterfsd: Use dynamic volfile buffer

Glusterfsd used a fixed buffer to store volfiles fetched via getspec.
This caused problems with large volfiles. Changining this to a dynamic
buffer allows large volfiles to be loaded in memory.

Change-Id: I40236dcb1c37b9a0136dfb5231cafabb3d4f00dc
BUG: 986100
Signed-off-by: Kaushal M <kaushal@redhat.com>
Reviewed-on: http://review.gluster.org/5373
Reviewed-by: Vijay Bellur <vbellur@redhat.com>
Tested-by: Gluster Build System <jenkins@build.gluster.com>
This commit is contained in:
Kaushal M 2013-07-22 19:14:56 +05:30 committed by Vijay Bellur
parent 950371be29
commit fa787929ba

View File

@ -1327,7 +1327,7 @@ out:
/* XXX: move these into @ctx */
static char oldvolfile[131072];
static char *oldvolfile = NULL;
static int oldvollen = 0;
static int
@ -1522,6 +1522,7 @@ mgmt_getspec_cbk (struct rpc_req *req, struct iovec *iov, int count,
int ret = 0;
ssize_t size = 0;
FILE *tmpfp = NULL;
char *volfilebuf = NULL;
frame = myframe;
ctx = frame->this->ctx;
@ -1579,6 +1580,15 @@ mgmt_getspec_cbk (struct rpc_req *req, struct iovec *iov, int count,
if (ret == 0) {
gf_log ("glusterfsd-mgmt", GF_LOG_DEBUG,
"No need to re-load volfile, reconfigure done");
if (oldvolfile)
volfilebuf = GF_REALLOC (oldvolfile, size);
else
volfilebuf = GF_CALLOC (1, size, gf_common_mt_char);
if (!volfilebuf) {
ret = -1;
goto out;
}
oldvolfile = volfilebuf;
oldvollen = size;
memcpy (oldvolfile, rsp.spec, size);
goto out;
@ -1595,6 +1605,15 @@ mgmt_getspec_cbk (struct rpc_req *req, struct iovec *iov, int count,
if (ret)
goto out;
if (oldvolfile)
volfilebuf = GF_REALLOC (oldvolfile, size);
else
volfilebuf = GF_CALLOC (1, size, gf_common_mt_char);
if (!volfilebuf) {
ret = -1;
goto out;
}
oldvolfile = volfilebuf;
oldvollen = size;
memcpy (oldvolfile, rsp.spec, size);
if (!is_mgmt_rpc_reconnect) {