diff options
| -rw-r--r-- | tests/bugs/glusterd/daemon-log-level-option.t | 93 | ||||
| -rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-handler.c | 1 | ||||
| -rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-messages.h | 3 | ||||
| -rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-op-sm.c | 51 | ||||
| -rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-svc-mgmt.c | 8 | ||||
| -rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-volume-set.c | 6 | ||||
| -rw-r--r-- | xlators/mgmt/glusterd/src/glusterd.h | 1 | 
7 files changed, 162 insertions, 1 deletions
diff --git a/tests/bugs/glusterd/daemon-log-level-option.t b/tests/bugs/glusterd/daemon-log-level-option.t new file mode 100644 index 00000000000..66e55e3d758 --- /dev/null +++ b/tests/bugs/glusterd/daemon-log-level-option.t @@ -0,0 +1,93 @@ +#!/bin/bash + +. $(dirname $0)/../../include.rc + +function Info_messages_count() { +        local shd_log=$1 +        cat $shd_log | grep " I " | wc -l +} + +function Warning_messages_count() { +        local shd_log=$1 +        cat $shd_log | grep " W " | wc -l +} + +function Debug_messages_count() { +        local shd_log=$1 +        cat $shd_log | grep " D " | wc -l +} + +function Trace_messages_count() { +        local shd_log=$1 +        cat $shd_log | grep " T " | wc -l +} + +cleanup; + +# Basic checks +TEST glusterd +TEST pidof glusterd +TEST $CLI volume info + +# set cluster.daemon-log-level option to DEBUG +TEST $CLI volume set all cluster.daemon-log-level DEBUG + +#Create a 3X2 distributed-replicate volume +TEST $CLI volume create $V0 replica 2 $H0:$B0/${V0}{1..6}; +TEST $CLI volume start $V0 + +# log should not have any trace messages +EXPECT 0 Trace_messages_count "/var/log/glusterfs/glustershd.log" + +# stop the volume and remove glustershd log +TEST $CLI volume stop $V0 +rm -f /var/log/glusterfs/glustershd.log + +# set cluster.daemon-log-level option to INFO and start the volume +TEST $CLI volume set all cluster.daemon-log-level INFO +TEST $CLI volume start $V0 + +# log should not have any debug messages +EXPECT 0 Debug_messages_count "/var/log/glusterfs/glustershd.log" + +# log should not have any trace messages +EXPECT 0 Trace_messages_count "/var/log/glusterfs/glustershd.log" + +# stop the volume and remove glustershd log +TEST $CLI volume stop $V0 +rm -f /var/log/glusterfs/glustershd.log + +# set cluster.daemon-log-level option to WARNING and start the volume +TEST $CLI volume set all cluster.daemon-log-level WARNING +TEST $CLI volume start $V0 + +# log should not have any info messages +EXPECT 0 Info_messages_count "/var/log/glusterfs/glustershd.log" + +# log should not have any debug messages +EXPECT 0 Debug_messages_count "/var/log/glusterfs/glustershd.log" + +# log should not have any trace messages +EXPECT 0 Trace_messages_count "/var/log/glusterfs/glustershd.log" + +# stop the volume and remove glustershd log +TEST $CLI volume stop $V0 +rm -f /var/log/glusterfs/glustershd.log + +# set cluster.daemon-log-level option to ERROR and start the volume +TEST $CLI volume set all cluster.daemon-log-level ERROR +TEST $CLI volume start $V0 + +# log should not have any info messages +EXPECT 0 Info_messages_count "/var/log/glusterfs/glustershd.log" + +# log should not have any warning messages +EXPECT 0 Warning_messages_count "/var/log/glusterfs/glustershd.log" + +# log should not have any debug messages +EXPECT 0 Debug_messages_count "/var/log/glusterfs/glustershd.log" + +# log should not have any trace messages +EXPECT 0 Trace_messages_count "/var/log/glusterfs/glustershd.log" + +cleanup diff --git a/xlators/mgmt/glusterd/src/glusterd-handler.c b/xlators/mgmt/glusterd/src/glusterd-handler.c index 64ff9ffcaf4..6d513bb90b1 100644 --- a/xlators/mgmt/glusterd/src/glusterd-handler.c +++ b/xlators/mgmt/glusterd/src/glusterd-handler.c @@ -4618,6 +4618,7 @@ gd_is_global_option (char *opt_key)                  strcmp (opt_key, GLUSTERD_GLOBAL_OP_VERSION_KEY) == 0 ||                  strcmp (opt_key, GLUSTERD_BRICK_MULTIPLEX_KEY) == 0 ||                  strcmp (opt_key, GLUSTERD_LOCALTIME_LOGGING_KEY) == 0 || +                strcmp (opt_key, GLUSTERD_DAEMON_LOG_LEVEL_KEY) == 0 ||                  strcmp (opt_key, GLUSTERD_MAX_OP_VERSION_KEY) == 0);  out: diff --git a/xlators/mgmt/glusterd/src/glusterd-messages.h b/xlators/mgmt/glusterd/src/glusterd-messages.h index 218071396d9..29b97570630 100644 --- a/xlators/mgmt/glusterd/src/glusterd-messages.h +++ b/xlators/mgmt/glusterd/src/glusterd-messages.h @@ -636,7 +636,8 @@ GLFS_MSGID(GLUSTERD,          GD_MSG_LOCALTIME_LOGGING_DISABLE,          GD_MSG_PORTS_EXHAUSTED,          GD_MSG_CHANGELOG_GET_FAIL, -        GD_MSG_MANAGER_FUNCTION_FAILED +        GD_MSG_MANAGER_FUNCTION_FAILED, +        GD_MSG_DAEMON_LOG_LEVEL_VOL_OPT_VALIDATE_FAIL  );  #endif /* !_GLUSTERD_MESSAGES_H_ */ diff --git a/xlators/mgmt/glusterd/src/glusterd-op-sm.c b/xlators/mgmt/glusterd/src/glusterd-op-sm.c index c1e7612c377..e49b9c720e5 100644 --- a/xlators/mgmt/glusterd/src/glusterd-op-sm.c +++ b/xlators/mgmt/glusterd/src/glusterd-op-sm.c @@ -87,6 +87,7 @@ glusterd_all_vol_opts valid_all_vol_opts[] = {           * dynamic value depending on the memory specifications per node */          { GLUSTERD_BRICKMUX_LIMIT_KEY,          "0"},          { GLUSTERD_LOCALTIME_LOGGING_KEY,       "disable"}, +        { GLUSTERD_DAEMON_LOG_LEVEL_KEY,        "INFO"},          { NULL },  }; @@ -937,6 +938,47 @@ out:  }  static int +glusterd_validate_daemon_log_level (char *key, char *value, char *errstr) +{ +        int32_t            ret                      = -1; +        xlator_t          *this                     = NULL; +        glusterd_conf_t   *conf                     = NULL; + +        this = THIS; +        GF_VALIDATE_OR_GOTO ("glusterd", this, out); + +        conf = this->private; +        GF_VALIDATE_OR_GOTO (this->name, conf, out); + +        GF_VALIDATE_OR_GOTO (this->name, key, out); +        GF_VALIDATE_OR_GOTO (this->name, value, out); +        GF_VALIDATE_OR_GOTO (this->name, errstr, out); + +        ret = 0; + +        if (strcmp (key, GLUSTERD_DAEMON_LOG_LEVEL_KEY)) { +                goto out; +        } + +        if ((strcmp (value, "INFO")) && +            (strcmp (value, "WARNING")) && +            (strcmp (value, "DEBUG")) && +            (strcmp (value, "TRACE")) && +            (strcmp (value, "ERROR"))) { +                snprintf (errstr, PATH_MAX, +                          "Invalid option(%s). Valid options " +                          "are 'INFO' or 'WARNING' or 'ERROR' or 'DEBUG' or " +                          " 'TRACE'", value); +                gf_msg (this->name, GF_LOG_ERROR, EINVAL, +                        GD_MSG_INVALID_ENTRY, "%s", errstr); +                ret = -1; +        } + +out: +        return ret; +} + +static int  glusterd_op_stage_set_volume (dict_t *dict, char **op_errstr)  {          int                   ret                         = -1; @@ -1333,6 +1375,15 @@ glusterd_op_stage_set_volume (dict_t *dict, char **op_errstr)                          goto out;                  } +                ret = glusterd_validate_daemon_log_level (key, value, errstr); +                if (ret) { +                        gf_msg (this->name, GF_LOG_ERROR, 0, +                                GD_MSG_DAEMON_LOG_LEVEL_VOL_OPT_VALIDATE_FAIL, +                                "Failed to validate daemon-log-level volume " +                                "options"); +                        goto out; +                } +                  if (volinfo) {                          ret = glusterd_volinfo_get (volinfo,                                                  VKEY_FEATURES_TRASH, &val_dup); diff --git a/xlators/mgmt/glusterd/src/glusterd-svc-mgmt.c b/xlators/mgmt/glusterd/src/glusterd-svc-mgmt.c index ba948b4c6f6..ebb288c7191 100644 --- a/xlators/mgmt/glusterd/src/glusterd-svc-mgmt.c +++ b/xlators/mgmt/glusterd/src/glusterd-svc-mgmt.c @@ -151,6 +151,8 @@ glusterd_svc_start (glusterd_svc_t *svc, int flags, dict_t *cmdline)          xlator_t            *this                       = NULL;          char                 valgrind_logfile[PATH_MAX] = {0};          char                *localtime_logging          = NULL; +        char                *log_level                  = NULL; +        char                 daemon_log_level[30]       = {0};          this = THIS;          GF_ASSERT (this); @@ -196,6 +198,12 @@ glusterd_svc_start (glusterd_svc_t *svc, int flags, dict_t *cmdline)                  if (strcmp (localtime_logging, "enable") == 0)                          runner_add_arg (&runner, "--localtime-logging");          } +        if (dict_get_str (priv->opts, GLUSTERD_DAEMON_LOG_LEVEL_KEY, +                          &log_level) == 0) { +                snprintf (daemon_log_level, 30, "--log-level=%s", log_level); +                runner_add_arg (&runner, daemon_log_level); +        } +          if (cmdline)                  dict_foreach (cmdline, svc_add_args, (void *) &runner); diff --git a/xlators/mgmt/glusterd/src/glusterd-volume-set.c b/xlators/mgmt/glusterd/src/glusterd-volume-set.c index 5af1b3eaff9..26a076905e9 100644 --- a/xlators/mgmt/glusterd/src/glusterd-volume-set.c +++ b/xlators/mgmt/glusterd/src/glusterd-volume-set.c @@ -3779,6 +3779,12 @@ struct volopt_map_entry glusterd_volopt_map[] = {            .op_version  = GD_OP_VERSION_3_12_0,            .validate_fn = validate_boolean          }, +        { .key         = GLUSTERD_DAEMON_LOG_LEVEL_KEY, +          .voltype     = "mgmt/glusterd", +          .type        = GLOBAL_NO_DOC, +          .value       = "INFO", +          .op_version  = GD_OP_VERSION_4_2_0 +        },          { .key        = "debug.delay-gen",            .voltype    = "debug/delay-gen",            .option     = "!debug", diff --git a/xlators/mgmt/glusterd/src/glusterd.h b/xlators/mgmt/glusterd/src/glusterd.h index e7a4c80a635..33413976e6d 100644 --- a/xlators/mgmt/glusterd/src/glusterd.h +++ b/xlators/mgmt/glusterd/src/glusterd.h @@ -56,6 +56,7 @@  #define GLUSTERD_BRICK_MULTIPLEX_KEY    "cluster.brick-multiplex"  #define GLUSTERD_BRICKMUX_LIMIT_KEY     "cluster.max-bricks-per-process"  #define GLUSTERD_LOCALTIME_LOGGING_KEY  "cluster.localtime-logging" +#define GLUSTERD_DAEMON_LOG_LEVEL_KEY   "cluster.daemon-log-level"  #define GLUSTERD_SNAPS_MAX_HARD_LIMIT 256  #define GLUSTERD_SNAPS_DEF_SOFT_LIMIT_PERCENT 90  | 
