diff options
| -rw-r--r-- | cli/src/cli-cmd-volume.c | 8 | ||||
| -rw-r--r-- | cli/src/cli.c | 5 | ||||
| -rw-r--r-- | cli/src/cli.h | 1 | ||||
| -rw-r--r-- | heal/src/glfs-heal.c | 59 | 
4 files changed, 56 insertions, 17 deletions
diff --git a/cli/src/cli-cmd-volume.c b/cli/src/cli-cmd-volume.c index 4b5af6bd707..a7723be86b8 100644 --- a/cli/src/cli-cmd-volume.c +++ b/cli/src/cli-cmd-volume.c @@ -2844,7 +2844,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: @@ -2866,7 +2866,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: @@ -2876,13 +2876,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 22b7fb9663e..3716d2a89ca 100644 --- a/cli/src/cli.c +++ b/cli/src/cli.c @@ -345,6 +345,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 bf51402dc17..773297e4be8 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 f0576f9d76e..0ce9defc83a 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; @@ -1508,6 +1511,28 @@ glfsh_info_t glfsh_xml_output = {      .end = glfsh_xml_end};  #endif +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  main(int argc, char **argv)  { @@ -1523,6 +1548,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]); @@ -1535,6 +1562,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; @@ -1542,9 +1576,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")) { @@ -1556,15 +1587,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")) { @@ -1601,7 +1624,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); @@ -1647,7 +1678,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,  | 
