From f02499e16624f29ac2be5531f1c4c298a12f33a8 Mon Sep 17 00:00:00 2001 From: shishir gowda Date: Mon, 4 Oct 2010 06:47:35 +0000 Subject: Add log-level option to command volume set log-level option to set brick's log-level client-log-level to set client's log-level Signed-off-by: shishir gowda Signed-off-by: Vijay Bellur BUG: 1789 (add log-level options to volume set) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=1789 --- libglusterfs/src/xlator.c | 90 +++++++++++++++++++++++++++++ libglusterfs/src/xlator.h | 1 + xlators/debug/io-stats/src/io-stats.c | 24 ++++++++ xlators/mgmt/glusterd/src/glusterd-volgen.c | 2 + xlators/mount/fuse/src/fuse-bridge.h | 1 - xlators/mount/fuse/src/fuse-helpers.c | 85 --------------------------- 6 files changed, 117 insertions(+), 86 deletions(-) diff --git a/libglusterfs/src/xlator.c b/libglusterfs/src/xlator.c index 66508966a54..64f8b711017 100644 --- a/libglusterfs/src/xlator.c +++ b/libglusterfs/src/xlator.c @@ -1166,3 +1166,93 @@ xlator_destroy (xlator_t *xl) return 0; } +int +is_gf_log_command (xlator_t *this, const char *name, char *value) +{ + xlator_t *trav = NULL; + char key[1024] = {0,}; + int ret = -1; + int log_level = -1; + gf_boolean_t syslog_flag = 0; + glusterfs_ctx_t *ctx = NULL; + + if (!strcmp ("trusted.glusterfs.syslog", name)) { + ret = gf_string2boolean (value, &syslog_flag); + if (ret) { + ret = EOPNOTSUPP; + goto out; + } + if (syslog_flag) + gf_log_enable_syslog (); + else + gf_log_disable_syslog (); + + goto out; + } + + if (fnmatch ("trusted.glusterfs*set-log-level", name, FNM_NOESCAPE)) + goto out; + + if (!strcasecmp (value, "CRITICAL")) { + log_level = GF_LOG_CRITICAL; + } else if (!strcasecmp (value, "ERROR")) { + log_level = GF_LOG_ERROR; + } else if (!strcasecmp (value, "WARNING")) { + log_level = GF_LOG_WARNING; + } else if (!strcasecmp (value, "INFO")) { + log_level = GF_LOG_INFO; + } else if (!strcasecmp (value, "DEBUG")) { + log_level = GF_LOG_DEBUG; + } else if (!strcasecmp (value, "TRACE")) { + log_level = GF_LOG_TRACE; + } else if (!strcasecmp (value, "NONE")) { + log_level = GF_LOG_NONE; + } + + if (log_level == -1) { + ret = EOPNOTSUPP; + goto out; + } + + /* Some crude way to change the log-level of process */ + if (!strcmp (name, "trusted.glusterfs.set-log-level")) { + /* */ + gf_log ("glusterfs", gf_log_get_loglevel(), + "setting log level to %d (old-value=%d)", + log_level, gf_log_get_loglevel()); + gf_log_set_loglevel (log_level); + ret = 0; + goto out; + } + if (!strcmp (name, "trusted.glusterfs.fuse.set-log-level")) { + /* */ + gf_log (this->name, gf_log_get_xl_loglevel (this), + "setting log level to %d (old-value=%d)", + log_level, gf_log_get_xl_loglevel (this)); + gf_log_set_xl_loglevel (this, log_level); + ret = 0; + goto out; + } + + ctx = glusterfs_ctx_get(); + if (!ctx) + goto out; + if (!ctx->active) + goto out; + trav = ctx->active->top; + + while (trav) { + snprintf (key, 1024, "trusted.glusterfs.%s.set-log-level", + trav->name); + if (fnmatch (name, key, FNM_NOESCAPE) == 0) { + gf_log (trav->name, gf_log_get_xl_loglevel (trav), + "setting log level to %d (old-value=%d)", + log_level, gf_log_get_xl_loglevel (trav)); + gf_log_set_xl_loglevel (trav, log_level); + ret = 0; + } + trav = trav->next; + } +out: + return ret; +} diff --git a/libglusterfs/src/xlator.h b/libglusterfs/src/xlator.h index db5e652890c..d1cb839485a 100644 --- a/libglusterfs/src/xlator.h +++ b/libglusterfs/src/xlator.h @@ -859,6 +859,7 @@ int loc_copy (loc_t *dst, loc_t *src); void loc_wipe (loc_t *loc); int xlator_mem_acct_init (xlator_t *xl, int num_types); int xlator_tree_reconfigure (xlator_t *old_xl, xlator_t *new_xl); +int is_gf_log_command (xlator_t *trans, const char *name, char *value); #define GF_STAT_PRINT_FMT_STR "%"PRIx64",%"PRIx64",%"PRIx32",%"PRIx32",%"PRIx32",%"PRIx32",%"PRIx64",%"PRIx64",%"PRIx32",%"PRIx64",%"PRIx32",%"PRIx32",%"PRIx32",%"PRIx32",%"PRIx32",%"PRIx32"\n" diff --git a/xlators/debug/io-stats/src/io-stats.c b/xlators/debug/io-stats/src/io-stats.c index bf513184025..0fdefd1e201 100644 --- a/xlators/debug/io-stats/src/io-stats.c +++ b/xlators/debug/io-stats/src/io-stats.c @@ -20,6 +20,7 @@ #ifndef _CONFIG_H #define _CONFIG_H #include "config.h" +#include "xlator.h" #endif /** @@ -1549,6 +1550,8 @@ reconfigure (xlator_t *this, dict_t *options) 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; @@ -1579,6 +1582,21 @@ reconfigure (xlator_t *this, dict_t *options) } conf->measure_latency = ret; } + ctx = glusterfs_ctx_get (); + if (!ctx) + return -1; + + if (ctx->cmd_args.brick_name) + ret = dict_get_str (options, "log-level", &log_str); + else + ret = dict_get_str (options, "client-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); + } + } return 0; } @@ -1737,5 +1755,11 @@ struct volume_options options[] = { { .key = { "latency-measurement" }, .type = GF_OPTION_TYPE_BOOL, }, + { .key = {"log-level"}, + .type = GF_OPTION_TYPE_STR, + }, + { .key = {"client-log-level"}, + .type = GF_OPTION_TYPE_STR, + }, { .key = {NULL} }, }; diff --git a/xlators/mgmt/glusterd/src/glusterd-volgen.c b/xlators/mgmt/glusterd/src/glusterd-volgen.c index 9e672a57fa1..53250cc3ed7 100644 --- a/xlators/mgmt/glusterd/src/glusterd-volgen.c +++ b/xlators/mgmt/glusterd/src/glusterd-volgen.c @@ -87,6 +87,8 @@ static struct volopt_map_entry glusterd_volopt_map[] = { {"latency-measurement", "debug/io-stats"}, {"dump-fd-stats", "debug/io-stats"}, + {"log-level", "debug/io-stats"}, + {"client-log-level", "debug/io-stats"}, {"max-file-size", "performance/io-cache"}, {"min-file-size", "performance/io-cache"}, diff --git a/xlators/mount/fuse/src/fuse-bridge.h b/xlators/mount/fuse/src/fuse-bridge.h index d719832e398..285b4ec2a1f 100644 --- a/xlators/mount/fuse/src/fuse-bridge.h +++ b/xlators/mount/fuse/src/fuse-bridge.h @@ -285,7 +285,6 @@ xlator_t *fuse_state_subvol (fuse_state_t *state); xlator_t *fuse_active_subvol (xlator_t *fuse); inode_t *fuse_ino_to_inode (uint64_t ino, xlator_t *fuse); int fuse_resolve_and_resume (fuse_state_t *state, fuse_resume_fn_t fn); -int is_gf_log_command (xlator_t *this, const char *name, char *value); int send_fuse_err (xlator_t *this, fuse_in_header_t *finh, int error); int fuse_gfid_set (fuse_state_t *state); #endif /* _GF_FUSE_BRIDGE_H_ */ diff --git a/xlators/mount/fuse/src/fuse-helpers.c b/xlators/mount/fuse/src/fuse-helpers.c index 9a6b13514aa..edddb77f955 100644 --- a/xlators/mount/fuse/src/fuse-helpers.c +++ b/xlators/mount/fuse/src/fuse-helpers.c @@ -300,89 +300,4 @@ gf_fuse_stat2attr (struct iatt *st, struct fuse_attr *fa) } -int -is_gf_log_command (xlator_t *this, const char *name, char *value) -{ - fuse_private_t *priv = NULL; - xlator_t *trav = NULL; - char key[1024] = {0,}; - int ret = -1; - int log_level = -1; - gf_boolean_t syslog_flag = 0; - - priv = this->private; - - if (!strcmp ("trusted.glusterfs.syslog", name)) { - ret = gf_string2boolean (value, &syslog_flag); - if (ret) { - ret = EOPNOTSUPP; - goto out; - } - if (syslog_flag) - gf_log_enable_syslog (); - else - gf_log_disable_syslog (); - - goto out; - } - - if (fnmatch ("trusted.glusterfs*set-log-level", name, FNM_NOESCAPE)) - goto out; - - if (!strcasecmp (value, "CRITICAL")) { - log_level = GF_LOG_CRITICAL; - } else if (!strcasecmp (value, "ERROR")) { - log_level = GF_LOG_ERROR; - } else if (!strcasecmp (value, "WARNING")) { - log_level = GF_LOG_WARNING; - } else if (!strcasecmp (value, "INFO")) { - log_level = GF_LOG_INFO; - } else if (!strcasecmp (value, "DEBUG")) { - log_level = GF_LOG_DEBUG; - } else if (!strcasecmp (value, "TRACE")) { - log_level = GF_LOG_TRACE; - } else if (!strcasecmp (value, "NONE")) { - log_level = GF_LOG_NONE; - } - - if (log_level == -1) { - ret = EOPNOTSUPP; - goto out; - } - - /* Some crude way to change the log-level of process */ - if (!strcmp (name, "trusted.glusterfs.set-log-level")) { - /* */ - gf_log ("glusterfs", gf_log_get_loglevel(), - "setting log level to %d (old-value=%d)", - log_level, gf_log_get_loglevel()); - gf_log_set_loglevel (log_level); - ret = 0; - goto out; - } - if (!strcmp (name, "trusted.glusterfs.fuse.set-log-level")) { - /* */ - gf_log (this->name, gf_log_get_xl_loglevel (this), - "setting log level to %d (old-value=%d)", - log_level, gf_log_get_xl_loglevel (this)); - gf_log_set_xl_loglevel (this, log_level); - ret = 0; - goto out; - } - trav = priv->active_subvol; - while (trav) { - snprintf (key, 1024, "trusted.glusterfs.%s.set-log-level", - trav->name); - if (fnmatch (name, key, FNM_NOESCAPE) == 0) { - gf_log (trav->name, gf_log_get_xl_loglevel (trav), - "setting log level to %d (old-value=%d)", - log_level, gf_log_get_xl_loglevel (trav)); - gf_log_set_xl_loglevel (trav, log_level); - ret = 0; - } - trav = trav->next; - } -out: - return ret; -} -- cgit