From c0e6146f53d3e91764e9ff602ccba9a637b2db7d Mon Sep 17 00:00:00 2001 From: Pranith Kumar K Date: Fri, 1 Apr 2011 03:44:02 +0000 Subject: debug/io-stats: Fix bugs in re-configure options If the options are not present in vol file reset the option values. If there is an invalid option log an error and continue, no need to exit Signed-off-by: Pranith Kumar K Signed-off-by: Vijay Bellur BUG: 2638 () URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2638 --- xlators/debug/io-stats/src/io-stats.c | 105 ++++++++++++++-------------------- 1 file changed, 43 insertions(+), 62 deletions(-) diff --git a/xlators/debug/io-stats/src/io-stats.c b/xlators/debug/io-stats/src/io-stats.c index d4dd786ab78..0a702d5a9b6 100644 --- a/xlators/debug/io-stats/src/io-stats.c +++ b/xlators/debug/io-stats/src/io-stats.c @@ -2352,32 +2352,26 @@ io_stats_forget (xlator_t *this, inode_t *inode) } int -reconfigure (xlator_t *this, dict_t *options) +iostats_configure_options (xlator_t *this, dict_t *options, + struct ios_conf *conf) { - struct ios_conf *conf = NULL; - char *str = NULL; int ret = 0; char *log_str = NULL; - glusterfs_ctx_t *ctx = NULL; - - if (!this || !this->private) - return -1; - - conf = this->private; - ret = dict_get_str (options, "dump-fd-stats", &str); - if (ret == 0) { - ret = gf_string2boolean (str, &conf->dump_fd_stats); - if (ret == -1) { - gf_log (this->name, GF_LOG_ERROR, - "'dump-fd-stats' takes only boolean arguments"); - return -1; - } + GF_ASSERT (this); + GF_ASSERT (options); + GF_ASSERT (conf); - if (conf->dump_fd_stats) { - gf_log (this->name, GF_LOG_DEBUG, - "enabling dump-fd-stats"); - } + ret = dict_get_str_boolean (options, "dump-fd-stats", _gf_false); + if (ret == -1) { + gf_log (this->name, GF_LOG_ERROR, + "'dump-fd-stats' takes only boolean arguments"); + } else { + conf->dump_fd_stats = ret; + if (conf->dump_fd_stats) + gf_log (this->name, GF_LOG_DEBUG, "enabling dump-fd-stats"); + else + gf_log (this->name, GF_LOG_DEBUG, "disabling dump-fd-stats"); } ret = dict_get_str_boolean (options, "latency-measurement", 0); @@ -2388,14 +2382,15 @@ reconfigure (xlator_t *this, dict_t *options) conf->measure_latency, ret); } conf->measure_latency = ret; + } else { + gf_log (this->name, GF_LOG_ERROR, + "'latency-measurement' takes only boolean arguments"); } - ctx = glusterfs_ctx_get (); - if (!ctx) - return -1; ret = dict_get_str (options, "log-level", &log_str); if (!ret) { - if (!is_gf_log_command(this, "trusted.glusterfs.set-log-level", log_str)) { + if (!is_gf_log_command(this, "trusted.glusterfs.set-log-level", + log_str)) { gf_log (this->name, GF_LOG_DEBUG, "changing log-level to %s", log_str); } @@ -2403,6 +2398,25 @@ reconfigure (xlator_t *this, dict_t *options) return 0; } +int +reconfigure (xlator_t *this, dict_t *options) +{ + struct ios_conf *conf = NULL; + glusterfs_ctx_t *ctx = NULL; + + if (!this || !this->private) + return -1; + + conf = this->private; + + iostats_configure_options (this, options, conf); + ctx = glusterfs_ctx_get (); + if (!ctx) + return -1; + + return 0; +} + int32_t mem_acct_init (xlator_t *this) { @@ -2412,7 +2426,7 @@ mem_acct_init (xlator_t *this) return ret; ret = xlator_mem_acct_init (this, gf_io_stats_mt_end + 1); - + if (ret != 0) { gf_log (this->name, GF_LOG_ERROR, "Memory accounting init" " failed"); @@ -2427,9 +2441,6 @@ init (xlator_t *this) { dict_t *options = NULL; struct ios_conf *conf = NULL; - char *str = NULL; - int ret = 0; - char *log_str = NULL; int i = 0; if (!this) @@ -2465,8 +2476,8 @@ init (xlator_t *this) gettimeofday (&conf->incremental.started_at, NULL); for (i = 0; i list[i].iosstats = GF_CALLOC (1, - sizeof(*conf->list[i].iosstats), + conf->list[i].iosstats = GF_CALLOC (1, + sizeof(*conf->list[i].iosstats), gf_io_stats_mt_ios_stat); if (!conf->list[i].iosstats) { @@ -2494,37 +2505,7 @@ init (xlator_t *this) LOCK_INIT (&conf->thru_list[i].lock); } - ret = dict_get_str (options, "dump-fd-stats", &str); - if (ret == 0) { - ret = gf_string2boolean (str, &conf->dump_fd_stats); - if (ret == -1) { - gf_log (this->name, GF_LOG_ERROR, - "'dump-fd-stats' takes only boolean arguments"); - return -1; - } - - if (conf->dump_fd_stats) { - gf_log (this->name, GF_LOG_DEBUG, - "enabling dump-fd-stats"); - } - } - - ret = dict_get_str_boolean (options, "latency-measurement", 0); - if (ret != -1) { - conf->measure_latency = ret; - if (conf->measure_latency) - gf_log (this->name, GF_LOG_DEBUG, - "enabling latency measurement"); - } - - ret = dict_get_str (options, "log-level", &log_str); - if (!ret) { - if (!is_gf_log_command(this, "trusted.glusterfs.set-log-level", log_str)) { - gf_log (this->name, GF_LOG_DEBUG, - "changing log-level to %s", log_str); - } - } - + iostats_configure_options (this, options, conf); this->private = conf; return 0; -- cgit