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:
parent
950371be29
commit
fa787929ba
@ -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) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user