summaryrefslogtreecommitdiffstats
path: root/cli/src
diff options
context:
space:
mode:
authorRaghavendra Bhat <raghavendra@redhat.com>2013-07-25 01:14:48 +0530
committerAnand Avati <avati@redhat.com>2013-10-03 21:32:43 -0700
commitdcfe4ab475c53cec7d117fb8052b26213a4b41db (patch)
tree4a18f76152b1779077315f49fadd0cee5c24a587 /cli/src
parenta25bd2d7695760c9fe35fec39065c9326f2952d6 (diff)
glusterfsd, libgfapi: destroy the temporary graphs constructed for comparison
* The new and the oldgraphs which have been constructed whenever there is a volfile change (either reconfigure of the existing graph or creating a new graph) for comparison should be freed. Otherwise frequent graph changes will lead to huge memory leak Change-Id: I4faddb1aa9393b34cd2de6732e537a60f600026a BUG: 948178 Signed-off-by: Raghavendra Bhat <raghavendra@redhat.com> Reviewed-on: http://review.gluster.org/5388 Tested-by: Gluster Build System <jenkins@build.gluster.com> Reviewed-by: Anand Avati <avati@redhat.com>
Diffstat (limited to 'cli/src')
0 files changed, 0 insertions, 0 deletions
fstat' width='100%'> -rw-r--r--xlators/mgmt/glusterd/src/glusterd-geo-rep.h4
-rw-r--r--xlators/mgmt/glusterd/src/glusterd-handler.c127
8 files changed, 177 insertions, 36 deletions
diff --git a/.gitignore b/.gitignore
index 0662df7fe99..2f7b8ca8b8f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -92,6 +92,7 @@ libglusterfs/src/y.tab.h
libglusterfs/src/defaults.c
libglusterfs/src/glusterfs-fops.h
libglusterfs/src/cli1-xdr.h
+libglusterfs/src/protocol-common.h
libtool
# copied XDR for cyclic libglusterfs <-> rpc-header dependency
rpc/xdr/gen/*.x
diff --git a/cli/src/cli-rpc-ops.c b/cli/src/cli-rpc-ops.c
index ab1519705cf..03071dd9e45 100644
--- a/cli/src/cli-rpc-ops.c
+++ b/cli/src/cli-rpc-ops.c
@@ -5622,39 +5622,6 @@ gf_cli_gsync_config_command (dict_t *dict)
return runner_run (&runner);
}
-char*
-get_struct_variable (int mem_num, gf_gsync_status_t *sts_val)
-{
- switch (mem_num) {
- case 0: return (sts_val->node);
- case 1: return (sts_val->master);
- case 2: return (sts_val->brick);
- case 3: return (sts_val->slave_user);
- case 4: return (sts_val->slave);
- case 5: return (sts_val->slave_node);
- case 6: return (sts_val->worker_status);
- case 7: return (sts_val->crawl_status);
- case 8: return (sts_val->last_synced);
- case 9: return (sts_val->entry);
- case 10: return (sts_val->data);
- case 11: return (sts_val->meta);
- case 12: return (sts_val->failures);
- case 13: return (sts_val->checkpoint_time);
- case 14: return (sts_val->checkpoint_completed);
- case 15: return (sts_val->checkpoint_completion_time);
- case 16: return (sts_val->brick_host_uuid);
- case 17: return (sts_val->last_synced_utc);
- case 18: return (sts_val->checkpoint_time_utc);
- case 19: return (sts_val->checkpoint_completion_time_utc);
- case 20: return (sts_val->slavekey);
- case 21: return (sts_val->session_slave);
- default:
- goto out;
- }
-
-out:
- return NULL;
-}
int
gf_cli_print_status (char **title_values,
diff --git a/libglusterfs/src/Makefile.am b/libglusterfs/src/Makefile.am
index 768fe042a10..6c81142b826 100644
--- a/libglusterfs/src/Makefile.am
+++ b/libglusterfs/src/Makefile.am
@@ -38,9 +38,12 @@ libglusterfs_la_SOURCES = dict.c xlator.c logging.c \
compound-fop-utils.c throttle-tbf.c
nodist_libglusterfs_la_SOURCES = y.tab.c graph.lex.c defaults.c
-nodist_libglusterfs_la_HEADERS = y.tab.h
+nodist_libglusterfs_la_HEADERS = y.tab.h protocol-common.h
-BUILT_SOURCES = graph.lex.c defaults.c eventtypes.h
+BUILT_SOURCES = graph.lex.c defaults.c eventtypes.h protocol-common.h
+
+protocol-common.h: $(top_srcdir)/rpc/rpc-lib/src/protocol-common.h
+ cp $(top_srcdir)/rpc/rpc-lib/src/protocol-common.h .
libglusterfs_la_HEADERS = common-utils.h defaults.h default-args.h \
dict.h glusterfs.h hashfn.h timespec.h logging.h xlator.h \
diff --git a/libglusterfs/src/common-utils.c b/libglusterfs/src/common-utils.c
index e855f04a443..5897aca0b38 100644
--- a/libglusterfs/src/common-utils.c
+++ b/libglusterfs/src/common-utils.c
@@ -53,6 +53,7 @@
#include "xxhash.h"
#include <ifaddrs.h>
#include "libglusterfs-messages.h"
+#include "protocol-common.h"
#ifndef AI_ADDRCONFIG
#define AI_ADDRCONFIG 0
@@ -4930,3 +4931,38 @@ glusterfs_compute_sha256 (const unsigned char *content, size_t size,
return 0;
}
+
+char*
+get_struct_variable (int mem_num, gf_gsync_status_t *sts_val)
+{
+ switch (mem_num) {
+ case 0: return (sts_val->node);
+ case 1: return (sts_val->master);
+ case 2: return (sts_val->brick);
+ case 3: return (sts_val->slave_user);
+ case 4: return (sts_val->slave);
+ case 5: return (sts_val->slave_node);
+ case 6: return (sts_val->worker_status);
+ case 7: return (sts_val->crawl_status);
+ case 8: return (sts_val->last_synced);
+ case 9: return (sts_val->entry);
+ case 10: return (sts_val->data);
+ case 11: return (sts_val->meta);
+ case 12: return (sts_val->failures);
+ case 13: return (sts_val->checkpoint_time);
+ case 14: return (sts_val->checkpoint_completed);
+ case 15: return (sts_val->checkpoint_completion_time);
+ case 16: return (sts_val->brick_host_uuid);
+ case 17: return (sts_val->last_synced_utc);
+ case 18: return (sts_val->checkpoint_time_utc);
+ case 19: return (sts_val->checkpoint_completion_time_utc);
+ case 20: return (sts_val->slavekey);
+ case 21: return (sts_val->session_slave);
+ default:
+ goto out;
+ }
+
+out:
+ return NULL;
+}
+
diff --git a/libglusterfs/src/common-utils.h b/libglusterfs/src/common-utils.h
index 4470bb25f25..eb3a8f3ac77 100644
--- a/libglusterfs/src/common-utils.h
+++ b/libglusterfs/src/common-utils.h
@@ -44,6 +44,7 @@ void trap (void);
#include "iatt.h"
#include "uuid.h"
#include "libglusterfs-messages.h"
+#include "protocol-common.h"
#define STRINGIFY(val) #val
#define TOSTRING(val) STRINGIFY(val)
@@ -939,5 +940,7 @@ gf_getgrouplist (const char *user, gid_t group, gid_t **groups);
int
glusterfs_compute_sha256 (const unsigned char *content, size_t size,
char *sha256_hash);
+char*
+get_struct_variable (int mem_num, gf_gsync_status_t *sts_val);
#endif /* _COMMON_UTILS_H */
diff --git a/xlators/mgmt/glusterd/src/glusterd-geo-rep.c b/xlators/mgmt/glusterd/src/glusterd-geo-rep.c
index 19f7a3b4d72..b3ce6d102f4 100644
--- a/xlators/mgmt/glusterd/src/glusterd-geo-rep.c
+++ b/xlators/mgmt/glusterd/src/glusterd-geo-rep.c
@@ -4882,7 +4882,7 @@ out:
return ret;
}
-static int
+int
glusterd_get_gsync_status_mst (glusterd_volinfo_t *volinfo, dict_t *rsp_dict,
char *node)
{
diff --git a/xlators/mgmt/glusterd/src/glusterd-geo-rep.h b/xlators/mgmt/glusterd/src/glusterd-geo-rep.h
index 045bc2e4ba7..8d08bcda50e 100644
--- a/xlators/mgmt/glusterd/src/glusterd-geo-rep.h
+++ b/xlators/mgmt/glusterd/src/glusterd-geo-rep.h
@@ -45,5 +45,9 @@ int
_get_slave_status (dict_t *dict, char *key, data_t *value, void *data);
int
glusterd_check_geo_rep_running (gsync_status_param_t *param, char **op_errstr);
+
+int
+glusterd_get_gsync_status_mst (glusterd_volinfo_t *volinfo, dict_t *rsp_dict,
+ char *node);
#endif
diff --git a/xlators/mgmt/glusterd/src/glusterd-handler.c b/xlators/mgmt/glusterd/src/glusterd-handler.c
index 230d2196d41..c0929fa8192 100644
--- a/xlators/mgmt/glusterd/src/glusterd-handler.c
+++ b/xlators/mgmt/glusterd/src/glusterd-handler.c
@@ -32,6 +32,7 @@
#include "glusterd-store.h"
#include "glusterd-locks.h"
#include "glusterd-snapshot-utils.h"
+#include "glusterd-geo-rep.h"
#include "glusterd1-xdr.h"
#include "cli1-xdr.h"
@@ -4985,6 +4986,128 @@ out:
}
static int
+glusterd_print_gsync_status (FILE *fp, dict_t *gsync_dict)
+{
+ int ret = -1;
+ int gsync_count = 0;
+ int i = 0;
+ gf_gsync_status_t **status_vals = NULL;
+ char status_val_name[PATH_MAX] = {0,};
+
+ GF_VALIDATE_OR_GOTO (THIS->name, fp, out);
+ GF_VALIDATE_OR_GOTO (THIS->name, gsync_dict, out);
+
+ ret = dict_get_int32 (gsync_dict, "gsync-count", &gsync_count);
+
+ fprintf (fp, "Volume%d.gsync_count: %d\n", volcount, gsync_count);
+
+ if (gsync_count == 0) {
+ ret = 0;
+ goto out;
+ }
+
+ status_vals = GF_CALLOC (gsync_count, sizeof (gf_gsync_status_t *),
+ gf_common_mt_char);
+ if (!status_vals) {
+ ret = -1;
+ goto out;
+ }
+ for (i = 0; i < gsync_count; i++) {
+ status_vals[i] = GF_CALLOC (1, sizeof (gf_gsync_status_t),
+ gf_common_mt_char);
+ if (!status_vals[i]) {
+ ret = -1;
+ goto out;
+ }
+ }
+
+ for (i = 0; i < gsync_count; i++) {
+ snprintf (status_val_name, sizeof(status_val_name), "status_value%d", i);
+
+ ret = dict_get_bin (gsync_dict, status_val_name, (void **)&(status_vals[i]));
+ if (ret)
+ goto out;
+
+ fprintf (fp, "Volume%d.p