summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--glusterfsd/src/glusterfsd.c25
-rw-r--r--glusterfsd/src/glusterfsd.h1
-rw-r--r--libglusterfs/src/glusterfs.h2
-rw-r--r--libglusterfs/src/mem-pool.c27
-rw-r--r--xlators/mgmt/glusterd/src/glusterd-op-sm.c61
-rw-r--r--xlators/mgmt/glusterd/src/glusterd-rebalance.c2
-rw-r--r--xlators/mgmt/glusterd/src/glusterd-replace-brick.c4
-rw-r--r--xlators/mgmt/glusterd/src/glusterd-utils.c3
-rw-r--r--xlators/mgmt/glusterd/src/glusterd-volume-ops.c2
-rw-r--r--xlators/mgmt/glusterd/src/glusterd.h2
10 files changed, 89 insertions, 40 deletions
diff --git a/glusterfsd/src/glusterfsd.c b/glusterfsd/src/glusterfsd.c
index 57b3f0160bd..68c51162101 100644
--- a/glusterfsd/src/glusterfsd.c
+++ b/glusterfsd/src/glusterfsd.c
@@ -185,6 +185,8 @@ static struct argp_option gf_options[] = {
"Dump fuse traffic to PATH"},
{"volfile-check", ARGP_VOLFILE_CHECK_KEY, 0, 0,
"Enable strict volume file checking"},
+ {"mem-accounting", ARGP_MEM_ACCOUNTING_KEY, 0, OPTION_HIDDEN,
+ "Enable internal memory accounting"},
{0, 0, 0, 0, "Miscellaneous Options:"},
{0, }
};
@@ -501,6 +503,7 @@ out:
static error_t
parse_opts (int key, char *arg, struct argp_state *state)
{
+ glusterfs_ctx_t *ctx = NULL;
cmd_args_t *cmd_args = NULL;
uint32_t n = 0;
double d = 0.0;
@@ -763,6 +766,12 @@ parse_opts (int key, char *arg, struct argp_state *state)
argp_failure (state, -1, 0,
"unknown brick (listen) port %s", arg);
break;
+
+ case ARGP_MEM_ACCOUNTING_KEY:
+ /* TODO: it should have got handled much earlier */
+ ctx = glusterfs_ctx_get ();
+ ctx->mem_accounting = 1;
+ break;
}
return 0;
@@ -1102,6 +1111,17 @@ logging_init (glusterfs_ctx_t *ctx)
return 0;
}
+void
+gf_check_and_set_mem_acct (int argc, char *argv[], glusterfs_ctx_t *ctx)
+{
+ int i = 0;
+ for (i = 0; i < argc; i++) {
+ if (strcmp (argv[i], "--mem-accounting") == 0) {
+ ctx->mem_accounting = 1;
+ break;
+ }
+ }
+}
int
parse_cmdline (int argc, char *argv[], glusterfs_ctx_t *ctx)
@@ -1582,7 +1602,10 @@ main (int argc, char *argv[])
"ERROR: glusterfs context not initialized");
return ENOMEM;
}
-
+#ifndef DEBUG
+ /* Enable memory accounting on the fly based on argument */
+ gf_check_and_set_mem_acct (argc, argv, ctx);
+#endif
ret = glusterfs_ctx_defaults_init (ctx);
if (ret)
goto out;
diff --git a/glusterfsd/src/glusterfsd.h b/glusterfsd/src/glusterfsd.h
index 3c38fbef065..06c23a34233 100644
--- a/glusterfsd/src/glusterfsd.h
+++ b/glusterfsd/src/glusterfsd.h
@@ -80,6 +80,7 @@ enum argp_option_keys {
ARGP_ACL_KEY = 154,
ARGP_WORM_KEY = 155,
ARGP_USER_MAP_ROOT_KEY = 156,
+ ARGP_MEM_ACCOUNTING_KEY = 157,
};
struct _gfd_vol_top_priv_t {
diff --git a/libglusterfs/src/glusterfs.h b/libglusterfs/src/glusterfs.h
index 0d4240a2a6e..a3adf151b19 100644
--- a/libglusterfs/src/glusterfs.h
+++ b/libglusterfs/src/glusterfs.h
@@ -376,6 +376,8 @@ struct _glusterfs_ctx {
struct mem_pool *dict_pair_pool;
struct mem_pool *dict_data_pool;
+ int mem_accounting; /* if value is other than 0, it
+ will be set */
};
typedef struct _glusterfs_ctx glusterfs_ctx_t;
diff --git a/libglusterfs/src/mem-pool.c b/libglusterfs/src/mem-pool.c
index 0cfd8bd712a..7f20d6d4b36 100644
--- a/libglusterfs/src/mem-pool.c
+++ b/libglusterfs/src/mem-pool.c
@@ -50,26 +50,31 @@ gf_mem_acct_is_enabled ()
void
gf_mem_acct_enable_set ()
{
- char *opt = NULL;
- long val = -1;
-
#ifdef DEBUG
gf_mem_acct_enable = 1;
return;
#endif
+ glusterfs_ctx_t *ctx = NULL;
+ char *opt = NULL;
+ long val = -1;
- opt = getenv (GLUSTERFS_ENV_MEM_ACCT_STR);
-
- if (!opt)
- return;
+ gf_mem_acct_enable = 0;
- val = strtol (opt, NULL, 0);
+ ctx = glusterfs_ctx_get ();
- if (val)
- gf_mem_acct_enable = 0;
- else
+ if (ctx->mem_accounting) {
gf_mem_acct_enable = 1;
+ return;
+ }
+ opt = getenv (GLUSTERFS_ENV_MEM_ACCT_STR);
+ if (opt) {
+ val = strtol (opt, NULL, 0);
+ if (val)
+ gf_mem_acct_enable = 1;
+ }
+
+ return;
}
void
diff --git a/xlators/mgmt/glusterd/src/glusterd-op-sm.c b/xlators/mgmt/glusterd/src/glusterd-op-sm.c
index f9813db12f5..d96d6717eeb 100644
--- a/xlators/mgmt/glusterd/src/glusterd-op-sm.c
+++ b/xlators/mgmt/glusterd/src/glusterd-op-sm.c
@@ -391,11 +391,25 @@ glusterd_op_stage_set_volume (dict_t *dict, char **op_errstr)
global_opt = _gf_false;
sprintf (str, "key%d", count);
ret = dict_get_str (dict, str, &key);
-
-
if (ret)
break;
+ sprintf (str, "value%d", count);
+ ret = dict_get_str (dict, str, &value);
+ if (ret) {
+ gf_log (this->name, GF_LOG_ERROR,
+ "invalid key,value pair in 'volume set'");
+ ret = -1;
+ goto out;
+ }
+
+ if (strcmp (key, "memory-accounting") == 0) {
+ gf_log (this->name, GF_LOG_INFO,
+ "enabling memory accounting for volume %s",
+ volname);
+ ret = 0;
+ goto out;
+ }
exists = glusterd_check_option_exists (key, &key_fixed);
if (exists == -1) {
ret = -1;
@@ -416,16 +430,6 @@ glusterd_op_stage_set_volume (dict_t *dict, char **op_errstr)
goto out;
}
- sprintf (str, "value%d", count);
- ret = dict_get_str (dict, str, &value);
-
- if (ret) {
- gf_log (this->name, GF_LOG_ERROR,
- "invalid key,value pair in 'volume set'");
- ret = -1;
- goto out;
- }
-
if (key_fixed)
key = key_fixed;
@@ -1008,24 +1012,9 @@ glusterd_op_set_volume (dict_t *dict)
global_opt = _gf_false;
sprintf (str, "key%d", count);
ret = dict_get_str (dict, str, &key);
-
if (ret)
break;
- if (!ret) {
- ret = glusterd_check_option_exists (key, &key_fixed);
- GF_ASSERT (ret);
- if (ret == -1) {
- key_fixed = NULL;
- goto out;
- }
- ret = 0;
- }
-
- ret = glusterd_check_globaloption (key);
- if (ret)
- global_opt = _gf_true;
-
sprintf (str, "value%d", count);
ret = dict_get_str (dict, str, &value);
if (ret) {
@@ -1035,6 +1024,22 @@ glusterd_op_set_volume (dict_t *dict)
goto out;
}
+ if (strcmp (key, "memory-accounting") == 0) {
+ ret = gf_string2boolean (value,
+ &volinfo->memory_accounting);
+ goto out;
+ }
+ ret = glusterd_check_option_exists (key, &key_fixed);
+ GF_ASSERT (ret);
+ if (ret == -1) {
+ key_fixed = NULL;
+ goto out;
+ }
+
+ ret = glusterd_check_globaloption (key);
+ if (ret)
+ global_opt = _gf_true;
+
if (!global_opt)
value = gf_strdup (value);
@@ -1067,7 +1072,7 @@ glusterd_op_set_volume (dict_t *dict)
}
}
- if ( count == 1 ) {
+ if (count == 1) {
gf_log (this->name, GF_LOG_ERROR, "No options received ");
ret = -1;
goto out;
diff --git a/xlators/mgmt/glusterd/src/glusterd-rebalance.c b/xlators/mgmt/glusterd/src/glusterd-rebalance.c
index 5d567e37a8a..36435868602 100644
--- a/xlators/mgmt/glusterd/src/glusterd-rebalance.c
+++ b/xlators/mgmt/glusterd/src/glusterd-rebalance.c
@@ -327,6 +327,8 @@ glusterd_handle_defrag_start (glusterd_volinfo_t *volinfo, char *op_errstr,
runner_argprintf (&runner, "%s",pidfile);
runner_add_arg (&runner, "-l");
runner_argprintf (&runner, logfile);
+ if (volinfo->memory_accounting)
+ runner_add_arg (&runner, "--mem-accounting");
ret = runner_run_reuse (&runner);
if (ret) {
diff --git a/xlators/mgmt/glusterd/src/glusterd-replace-brick.c b/xlators/mgmt/glusterd/src/glusterd-replace-brick.c
index 01bc974b75f..ca127f7a8ea 100644
--- a/xlators/mgmt/glusterd/src/glusterd-replace-brick.c
+++ b/xlators/mgmt/glusterd/src/glusterd-replace-brick.c
@@ -635,6 +635,8 @@ rb_spawn_dst_brick (glusterd_volinfo_t *volinfo,
priv->workdir, volinfo->volname);
runner_add_arg (&runner, "--xlator-option");
runner_argprintf (&runner, "src-server.listen-port=%d", port);
+ if (volinfo->memory_accounting)
+ runner_add_arg (&runner, "--mem-accounting");
ret = runner_run (&runner);
if (ret) {
@@ -671,6 +673,8 @@ rb_spawn_glusterfs_client (glusterd_volinfo_t *volinfo,
priv->workdir, volinfo->volname);
runner_argprintf (&runner, "%s/vols/%s/"RB_CLIENT_MOUNTPOINT,
priv->workdir, volinfo->volname);
+ if (volinfo->memory_accounting)
+ runner_add_arg (&runner, "--mem-accounting");
ret = runner_run (&runner);
if (ret) {
diff --git a/xlators/mgmt/glusterd/src/glusterd-utils.c b/xlators/mgmt/glusterd/src/glusterd-utils.c
index 64b7ba9ad1b..3c084635166 100644
--- a/xlators/mgmt/glusterd/src/glusterd-utils.c
+++ b/xlators/mgmt/glusterd/src/glusterd-utils.c
@@ -1236,6 +1236,9 @@ glusterd_volume_start_glusterfs (glusterd_volinfo_t *volinfo,
runner_argprintf (&runner, "%s-server.listen-port=%d",
volinfo->volname, port);
+ if (volinfo->memory_accounting)
+ runner_add_arg (&runner, "--mem-accounting");
+
runner_log (&runner, "", GF_LOG_DEBUG, "Starting GlusterFS");
ret = runner_run (&runner);
diff --git a/xlators/mgmt/glusterd/src/glusterd-volume-ops.c b/xlators/mgmt/glusterd/src/glusterd-volume-ops.c
index ef338658b97..d6e58c1b844 100644
--- a/xlators/mgmt/glusterd/src/glusterd-volume-ops.c
+++ b/xlators/mgmt/glusterd/src/glusterd-volume-ops.c
@@ -1665,6 +1665,8 @@ glusterd_clearlocks_mount (glusterd_volinfo_t *volinfo, char **xl_opts,
runner_add_arg (&runner, "-l");
runner_argprintf (&runner, DEFAULT_LOG_FILE_DIRECTORY
"/%s-clearlocks-mnt.log", volinfo->volname);
+ if (volinfo->memory_accounting)
+ runner_add_arg (&runner, "--mem-accounting");
for (i = 0; i < volinfo->brick_count && xl_opts[i]; i++) {
runner_add_arg (&runner, "--xlator-option");
diff --git a/xlators/mgmt/glusterd/src/glusterd.h b/xlators/mgmt/glusterd/src/glusterd.h
index 7a6ee653f0f..44934b2fc80 100644
--- a/xlators/mgmt/glusterd/src/glusterd.h
+++ b/xlators/mgmt/glusterd/src/glusterd.h
@@ -244,6 +244,8 @@ struct glusterd_volinfo_ {
int decommission_in_progress;
xlator_t *xl;
+
+ gf_boolean_t memory_accounting;
};
typedef enum gd_node_type_ {