summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRavishankar N <ravishankar@redhat.com>2018-11-28 15:19:24 +0530
committerShyamsundar Ranganathan <srangana@redhat.com>2018-11-29 15:30:11 +0000
commit70ae565c759cb019b73c7b4d6ac3650293984bc2 (patch)
tree6030abec5c2f39c05f795867da0aa1fcf101754a
parent4c3cfd0f85c1044c804b2c31d99a4bc3b1c1fe49 (diff)
glfsheal: add a '--nolog' flag
....and if set, change the log level to GF_LOG_NONE. This is useful for monitoring applications which invoke the heal info set of commands once every minute, leading to un-necessary glfsheal* logs in /var/log/glusterfs/. For example, we can now run `gluster volume heal <VOLNAME> info --nolog` `gluster volume heal <VOLNAME> info split-brain --nolog` etc. The default log level is still retained at GF_LOG_INFO. The patch also changes glfsheal internally to accept '--xml' instead of 'xml'. Note: The --nolog flag is *not* displayed in the help anywhere, for the sake of consistency in how the other flags are not displayed anywhere in the help. fixes: bz#1654229 Change-Id: Ia08b6aa6e4a0548379db7e313dd4411ebc66f206 Signed-off-by: Ravishankar N <ravishankar@redhat.com>
-rw-r--r--cli/src/cli-cmd-volume.c8
-rw-r--r--cli/src/cli.c5
-rw-r--r--cli/src/cli.h1
-rw-r--r--heal/src/glfs-heal.c59
4 files changed, 56 insertions, 17 deletions
diff --git a/cli/src/cli-cmd-volume.c b/cli/src/cli-cmd-volume.c
index ee7e8f94c9e..22f02c7224e 100644
--- a/cli/src/cli-cmd-volume.c
+++ b/cli/src/cli-cmd-volume.c
@@ -2841,7 +2841,7 @@ cli_launch_glfs_heal (int heal_op, dict_t *options)
switch (heal_op) {
case GF_SHD_OP_INDEX_SUMMARY:
if (global_state->mode & GLUSTER_MODE_XML) {
- runner_add_args (&runner, "xml", NULL);
+ runner_add_args (&runner, "--xml", NULL);
}
break;
case GF_SHD_OP_SBRAIN_HEAL_FROM_BIGGER_FILE:
@@ -2865,7 +2865,7 @@ cli_launch_glfs_heal (int heal_op, dict_t *options)
case GF_SHD_OP_SPLIT_BRAIN_FILES:
runner_add_args (&runner, "split-brain-info", NULL);
if (global_state->mode & GLUSTER_MODE_XML) {
- runner_add_args (&runner, "xml", NULL);
+ runner_add_args (&runner, "--xml", NULL);
}
break;
case GF_SHD_OP_GRANULAR_ENTRY_HEAL_ENABLE:
@@ -2875,13 +2875,15 @@ cli_launch_glfs_heal (int heal_op, dict_t *options)
case GF_SHD_OP_HEAL_SUMMARY:
runner_add_args (&runner, "info-summary", NULL);
if (global_state->mode & GLUSTER_MODE_XML) {
- runner_add_args (&runner, "xml", NULL);
+ runner_add_args (&runner, "--xml", NULL);
}
break;
default:
ret = -1;
goto out;
}
+ if (global_state->mode & GLUSTER_MODE_GLFSHEAL_NOLOG)
+ runner_add_args(&runner, "--nolog", NULL);
ret = runner_start (&runner);
if (ret == -1)
goto out;
diff --git a/cli/src/cli.c b/cli/src/cli.c
index b58f211d3dd..dd49198feed 100644
--- a/cli/src/cli.c
+++ b/cli/src/cli.c
@@ -347,6 +347,11 @@ cli_opt_parse (char *opt, struct cli_state *state)
return 0;
}
+ if (strcmp(opt, "nolog") == 0) {
+ state->mode |= GLUSTER_MODE_GLFSHEAL_NOLOG;
+ return 0;
+ }
+
if (strcmp (opt, "wignore-partition") == 0) {
state->mode |= GLUSTER_MODE_WIGNORE_PARTITION;
return 0;
diff --git a/cli/src/cli.h b/cli/src/cli.h
index 3421d6911fb..6ce6f002221 100644
--- a/cli/src/cli.h
+++ b/cli/src/cli.h
@@ -61,6 +61,7 @@ typedef enum {
#define GLUSTER_MODE_XML (1 << 2)
#define GLUSTER_MODE_WIGNORE (1 << 3)
#define GLUSTER_MODE_WIGNORE_PARTITION (1 << 4)
+#define GLUSTER_MODE_GLFSHEAL_NOLOG (1 << 5)
#define GLUSTERD_GET_QUOTA_LIST_MOUNT_PATH(abspath, volname, path) do { \
diff --git a/heal/src/glfs-heal.c b/heal/src/glfs-heal.c
index 930b08f8301..eb7689ec880 100644
--- a/heal/src/glfs-heal.c
+++ b/heal/src/glfs-heal.c
@@ -40,6 +40,9 @@ xmlDocPtr glfsh_doc = NULL;
ret = 0; \
} while (0) \
+#define MODE_XML (1 << 0)
+#define MODE_NO_LOG (1 << 1)
+
typedef struct num_entries {
uint64_t num_entries;
uint64_t pending_entries;
@@ -1479,6 +1482,28 @@ out:
return ret;
}
+static void
+parse_flags(int *argc, char **argv, int *flags)
+{
+ int i = 0;
+ char *opt = NULL;
+ int count = 0;
+
+ for (i = 0; i < *argc; i++) {
+ opt = strtail(argv[i], "--");
+ if (!opt)
+ continue;
+ if (strcmp(opt, "nolog") == 0) {
+ *flags |= MODE_NO_LOG;
+ count++;
+ } else if (strcmp(opt, "xml") == 0) {
+ *flags |= MODE_XML;
+ count++;
+ }
+ }
+ *argc = *argc - count;
+}
+
int
glfsh_heal_from_bigger_file_or_mtime (glfs_t *fs, xlator_t *top_subvol,
loc_t *rootloc, char *file,
@@ -1564,6 +1589,8 @@ main (int argc, char **argv)
char *op_errstr = NULL;
char *socket_filepath = NULL;
gf_xl_afr_op_t heal_op = -1;
+ gf_loglevel_t log_level = GF_LOG_INFO;
+ int flags = 0;
if (argc < 2) {
printf (USAGE_STR, argv[0]);
@@ -1576,6 +1603,13 @@ main (int argc, char **argv)
}
}
volname = argv[1];
+
+ parse_flags(&argc, argv, &flags);
+ if (flags & MODE_NO_LOG)
+ log_level = GF_LOG_NONE;
+ if (flags & MODE_XML)
+ is_xml = 1;
+
switch (argc) {
case 2:
heal_op = GF_SHD_OP_INDEX_SUMMARY;
@@ -1583,9 +1617,6 @@ main (int argc, char **argv)
case 3:
if (!strcmp (argv[2], "split-brain-info")) {
heal_op = GF_SHD_OP_SPLIT_BRAIN_FILES;
- } else if (!strcmp (argv[2], "xml")) {
- heal_op = GF_SHD_OP_INDEX_SUMMARY;
- is_xml = 1;
} else if (!strcmp (argv[2], "granular-entry-heal-op")) {
heal_op = GF_SHD_OP_GRANULAR_ENTRY_HEAL_ENABLE;
} else if (!strcmp (argv[2], "info-summary")) {
@@ -1597,15 +1628,7 @@ main (int argc, char **argv)
}
break;
case 4:
- if ((!strcmp (argv[2], "split-brain-info")) &&
- (!strcmp (argv[3], "xml"))) {
- heal_op = GF_SHD_OP_SPLIT_BRAIN_FILES;
- is_xml = 1;
- } else if ((!strcmp (argv[2], "info-summary")) &&
- (!strcmp (argv[3], "xml"))) {
- heal_op = GF_SHD_OP_HEAL_SUMMARY;
- is_xml = 1;
- } else if (!strcmp (argv[2], "bigger-file")) {
+ if (!strcmp (argv[2], "bigger-file")) {
heal_op = GF_SHD_OP_SBRAIN_HEAL_FROM_BIGGER_FILE;
file = argv[3];
} else if (!strcmp (argv[2], "latest-mtime")) {
@@ -1642,7 +1665,15 @@ main (int argc, char **argv)
glfsh_output = &glfsh_human_readable;
if (is_xml) {
#if (HAVE_LIB_XML)
- glfsh_output = &glfsh_xml_output;
+ if ((heal_op == GF_SHD_OP_INDEX_SUMMARY) ||
+ (heal_op == GF_SHD_OP_SPLIT_BRAIN_FILES) ||
+ (heal_op == GF_SHD_OP_HEAL_SUMMARY)) {
+ glfsh_output = &glfsh_xml_output;
+ } else {
+ printf(USAGE_STR, argv[0]);
+ ret = -1;
+ goto out;
+ }
#else
/*No point doing anything, just fail the command*/
exit (EXIT_FAILURE);
@@ -1690,7 +1721,7 @@ main (int argc, char **argv)
}
snprintf (logfilepath, sizeof (logfilepath),
DEFAULT_HEAL_LOG_FILE_DIRECTORY"/glfsheal-%s.log", volname);
- ret = glfs_set_logging(fs, logfilepath, GF_LOG_INFO);
+ ret = glfs_set_logging(fs, logfilepath, log_level);
if (ret < 0) {
ret = -errno;
gf_asprintf (&op_errstr, "Failed to set the log file path, "