diff options
Diffstat (limited to 'cli/src')
| -rw-r--r-- | cli/src/cli-cmd-global.c | 176 | ||||
| -rw-r--r-- | cli/src/cli-cmd-misc.c | 149 | ||||
| -rw-r--r-- | cli/src/cli-cmd-parser.c | 9435 | ||||
| -rw-r--r-- | cli/src/cli-cmd-peer.c | 432 | ||||
| -rw-r--r-- | cli/src/cli-cmd-snapshot.c | 206 | ||||
| -rw-r--r-- | cli/src/cli-cmd-system.c | 953 | ||||
| -rw-r--r-- | cli/src/cli-cmd-volume.c | 5579 | ||||
| -rw-r--r-- | cli/src/cli-cmd.c | 541 | ||||
| -rw-r--r-- | cli/src/cli-quotad-client.c | 199 | ||||
| -rw-r--r-- | cli/src/cli-rl.c | 502 | ||||
| -rw-r--r-- | cli/src/cli-rpc-ops.c | 20062 | ||||
| -rw-r--r-- | cli/src/cli-xml-output.c | 9924 | ||||
| -rw-r--r-- | cli/src/cli.c | 1115 | ||||
| -rw-r--r-- | cli/src/input.c | 102 | ||||
| -rw-r--r-- | cli/src/registry.c | 495 | 
15 files changed, 24747 insertions, 25123 deletions
diff --git a/cli/src/cli-cmd-global.c b/cli/src/cli-cmd-global.c index 3c8ae227ca7..e1bedf13542 100644 --- a/cli/src/cli-cmd-global.c +++ b/cli/src/cli-cmd-global.c @@ -30,111 +30,109 @@  extern rpc_clnt_prog_t *cli_rpc_prog;  int -cli_cmd_global_help_cbk (struct cli_state *state, struct cli_cmd_word *in_word, -                         const char **words, int wordcount); +cli_cmd_global_help_cbk(struct cli_state *state, struct cli_cmd_word *in_word, +                        const char **words, int wordcount);  int -cli_cmd_get_state_cbk (struct cli_state *state, struct cli_cmd_word *word, -                              const char **words, int wordcount); +cli_cmd_get_state_cbk(struct cli_state *state, struct cli_cmd_word *word, +                      const char **words, int wordcount);  struct cli_cmd global_cmds[] = { -        { "global help", -           cli_cmd_global_help_cbk, -           "list global commands", -        }, -        { "get-state [<daemon>] [[odir </path/to/output/dir/>] " -          "[file <filename>]] [detail|volumeoptions]", -          cli_cmd_get_state_cbk, -          "Get local state representation of mentioned daemon", -        }, -        {NULL,  NULL,  NULL} -}; +    { +        "global help", +        cli_cmd_global_help_cbk, +        "list global commands", +    }, +    { +        "get-state [<daemon>] [[odir </path/to/output/dir/>] " +        "[file <filename>]] [detail|volumeoptions]", +        cli_cmd_get_state_cbk, +        "Get local state representation of mentioned daemon", +    }, +    {NULL, NULL, NULL}};  int -cli_cmd_global_help_cbk (struct cli_state *state, struct cli_cmd_word *in_word, -                      const char **words, int wordcount) +cli_cmd_global_help_cbk(struct cli_state *state, struct cli_cmd_word *in_word, +                        const char **words, int wordcount)  { -        struct cli_cmd        *cmd = NULL; -        struct cli_cmd        *global_cmd = NULL; -        int                   count     = 0; - -        cmd = GF_MALLOC (sizeof (global_cmds), cli_mt_cli_cmd); -        memcpy (cmd, global_cmds, sizeof (global_cmds)); -        count = (sizeof (global_cmds) / sizeof (struct cli_cmd)); -        cli_cmd_sort (cmd, count); - -        cli_out ("\ngluster global commands"); -        cli_out ("========================\n"); -        for (global_cmd = cmd; global_cmd->pattern; global_cmd++) -                if (_gf_false == global_cmd->disable) -                        cli_out ("%s - %s", global_cmd->pattern, -                                 global_cmd->desc); - -        cli_out ("\n"); -        GF_FREE (cmd); -        return 0; +    struct cli_cmd *cmd = NULL; +    struct cli_cmd *global_cmd = NULL; +    int count = 0; + +    cmd = GF_MALLOC(sizeof(global_cmds), cli_mt_cli_cmd); +    memcpy(cmd, global_cmds, sizeof(global_cmds)); +    count = (sizeof(global_cmds) / sizeof(struct cli_cmd)); +    cli_cmd_sort(cmd, count); + +    cli_out("\ngluster global commands"); +    cli_out("========================\n"); +    for (global_cmd = cmd; global_cmd->pattern; global_cmd++) +        if (_gf_false == global_cmd->disable) +            cli_out("%s - %s", global_cmd->pattern, global_cmd->desc); + +    cli_out("\n"); +    GF_FREE(cmd); +    return 0;  }  int -cli_cmd_global_register (struct cli_state *state) +cli_cmd_global_register(struct cli_state *state)  { -        int ret = 0; -        struct cli_cmd *cmd =  NULL; -        for (cmd = global_cmds; cmd->pattern; cmd++) { -                ret = cli_cmd_register (&state->tree, cmd); -                        if (ret) -                                goto out; -        } +    int ret = 0; +    struct cli_cmd *cmd = NULL; +    for (cmd = global_cmds; cmd->pattern; cmd++) { +        ret = cli_cmd_register(&state->tree, cmd); +        if (ret) +            goto out; +    }  out: -        return ret; - +    return ret;  }  int -cli_cmd_get_state_cbk (struct cli_state *state, struct cli_cmd_word *word, -                       const char **words, int wordcount) +cli_cmd_get_state_cbk(struct cli_state *state, struct cli_cmd_word *word, +                      const char **words, int wordcount)  { -        int                     sent        =   0; -        int                     parse_error =   0; -        int                     ret         =  -1; -        rpc_clnt_procedure_t    *proc       =  NULL; -        call_frame_t            *frame      =  NULL; -        dict_t                  *options    =  NULL; -        cli_local_t             *local      =  NULL; -        char                    *op_errstr  =  NULL; - -        frame = create_frame (THIS, THIS->ctx->pool); -        if (!frame) -                goto out; - -        ret = cli_cmd_get_state_parse (state, words, wordcount, &options, -                                       &op_errstr); - -        if (ret) { -                if (op_errstr) { -                        cli_err ("%s", op_errstr); -                        cli_usage_out (word->pattern); -                        GF_FREE (op_errstr); -                } else -                        cli_usage_out (word->pattern); - -                parse_error = 1; -                goto out; -        } - -        CLI_LOCAL_INIT (local, words, frame, options); - -        proc = &cli_rpc_prog->proctable[GLUSTER_CLI_GET_STATE]; -        if (proc->fn) -                ret = proc->fn (frame, THIS, options); +    int sent = 0; +    int parse_error = 0; +    int ret = -1; +    rpc_clnt_procedure_t *proc = NULL; +    call_frame_t *frame = NULL; +    dict_t *options = NULL; +    cli_local_t *local = NULL; +    char *op_errstr = NULL; + +    frame = create_frame(THIS, THIS->ctx->pool); +    if (!frame) +        goto out; + +    ret = cli_cmd_get_state_parse(state, words, wordcount, &options, +                                  &op_errstr); + +    if (ret) { +        if (op_errstr) { +            cli_err("%s", op_errstr); +            cli_usage_out(word->pattern); +            GF_FREE(op_errstr); +        } else +            cli_usage_out(word->pattern); + +        parse_error = 1; +        goto out; +    } + +    CLI_LOCAL_INIT(local, words, frame, options); + +    proc = &cli_rpc_prog->proctable[GLUSTER_CLI_GET_STATE]; +    if (proc->fn) +        ret = proc->fn(frame, THIS, options);  out: -        if (ret) { -                cli_cmd_sent_status_get (&sent); -                if ((sent == 0) && (parse_error == 0)) -                        cli_out ("Getting daemon state failed"); -        } +    if (ret) { +        cli_cmd_sent_status_get(&sent); +        if ((sent == 0) && (parse_error == 0)) +            cli_out("Getting daemon state failed"); +    } -        CLI_STACK_DESTROY (frame); +    CLI_STACK_DESTROY(frame); -        return ret; +    return ret;  } - diff --git a/cli/src/cli-cmd-misc.c b/cli/src/cli-cmd-misc.c index c887515af85..04dd2efc220 100644 --- a/cli/src/cli-cmd-misc.c +++ b/cli/src/cli-cmd-misc.c @@ -35,107 +35,98 @@ extern struct cli_cmd global_cmds[];  struct cli_cmd cli_misc_cmds[];  int -cli_cmd_quit_cbk (struct cli_state *state, struct cli_cmd_word *word, -                   const char **words, int wordcount) +cli_cmd_quit_cbk(struct cli_state *state, struct cli_cmd_word *word, +                 const char **words, int wordcount)  { -        exit (0); +    exit(0);  } -  static gf_boolean_t -cli_is_help_command (const char *pattern) +cli_is_help_command(const char *pattern)  { -        /* FixFixFix -         * This is not the best way to determine whether -         * this is a help command -         */ -        if (strstr (pattern, "help")) -                return _gf_true; - -        return _gf_false; +    /* FixFixFix +     * This is not the best way to determine whether +     * this is a help command +     */ +    if (strstr(pattern, "help")) +        return _gf_true; + +    return _gf_false;  } -  int -cli_cmd_display_help (struct cli_state *state, struct cli_cmd_word *in_word, -                      const char **words, int wordcount) +cli_cmd_display_help(struct cli_state *state, struct cli_cmd_word *in_word, +                     const char **words, int wordcount)  { -        struct cli_cmd        *cmd[] = {cli_misc_cmds, cli_probe_cmds, -                                        volume_cmds, bitrot_cmds, quota_cmds, +    struct cli_cmd *cmd[] = { +        cli_misc_cmds, +        cli_probe_cmds, +        volume_cmds, +        bitrot_cmds, +        quota_cmds,  #if !defined(__NetBSD__) -                                        tier_cmds, +        tier_cmds,  #endif -                                        snapshot_cmds, global_cmds, NULL}; -        struct cli_cmd        *cmd_ind      = NULL; -        int                    i            = 0; -        gf_boolean_t           list_all     = _gf_false; - -         /* cli_system_cmds commands for internal usage -           they are not exposed -         */ - -        /* If "help all" */ -        if (wordcount == 2) -                list_all = _gf_true; - -        for (i = 0; cmd[i] != NULL; i++) { -                for (cmd_ind = cmd[i]; cmd_ind->pattern; cmd_ind++) { -                        if ((_gf_false == cmd_ind->disable) && -                            cli_is_help_command (cmd_ind->pattern)) { -                                if (list_all && (cmd_ind->cbk)) { -                                        cmd_ind->cbk (state, in_word, words, -                                                      wordcount); -                                } else { -                                        cli_out (" %-25s- %s", cmd_ind->pattern, -                                                 cmd_ind->desc); -                                } -                        } +        snapshot_cmds, +        global_cmds, +        NULL +    }; +    struct cli_cmd *cmd_ind = NULL; +    int i = 0; +    gf_boolean_t list_all = _gf_false; + +    /* cli_system_cmds commands for internal usage +      they are not exposed +    */ + +    /* If "help all" */ +    if (wordcount == 2) +        list_all = _gf_true; + +    for (i = 0; cmd[i] != NULL; i++) { +        for (cmd_ind = cmd[i]; cmd_ind->pattern; cmd_ind++) { +            if ((_gf_false == cmd_ind->disable) && +                cli_is_help_command(cmd_ind->pattern)) { +                if (list_all && (cmd_ind->cbk)) { +                    cmd_ind->cbk(state, in_word, words, wordcount); +                } else { +                    cli_out(" %-25s- %s", cmd_ind->pattern, cmd_ind->desc);                  } +            }          } +    } -        cli_out ("\n"); -        return 0; +    cli_out("\n"); +    return 0;  } -  struct cli_cmd cli_help_cmds[] = { -        { "help [all]", -           cli_cmd_display_help, -           "display help for command classes"}, - -        { NULL, NULL, NULL } -}; - +    {"help [all]", cli_cmd_display_help, "display help for command classes"}, -struct cli_cmd cli_misc_cmds[] = { -        { "quit", -          cli_cmd_quit_cbk, -          "quit"}, -        { "exit", -          cli_cmd_quit_cbk, -          "exit"}, +    {NULL, NULL, NULL}}; -        { NULL, NULL, NULL } -}; +struct cli_cmd cli_misc_cmds[] = {{"quit", cli_cmd_quit_cbk, "quit"}, +                                  {"exit", cli_cmd_quit_cbk, "exit"}, +                                  {NULL, NULL, NULL}};  int -cli_cmd_misc_register (struct cli_state *state) +cli_cmd_misc_register(struct cli_state *state)  { -        int  ret = 0; -        struct cli_cmd *cmd = NULL; - -        for (cmd = cli_misc_cmds; cmd->pattern; cmd++) { -                ret = cli_cmd_register (&state->tree, cmd); -                if (ret) -                        goto out; -        } - -        for (cmd = cli_help_cmds; cmd->pattern; cmd++) { -                ret = cli_cmd_register (&state->tree, cmd); -                if (ret) -                        goto out; -        } +    int ret = 0; +    struct cli_cmd *cmd = NULL; + +    for (cmd = cli_misc_cmds; cmd->pattern; cmd++) { +        ret = cli_cmd_register(&state->tree, cmd); +        if (ret) +            goto out; +    } + +    for (cmd = cli_help_cmds; cmd->pattern; cmd++) { +        ret = cli_cmd_register(&state->tree, cmd); +        if (ret) +            goto out; +    }  out: -        return ret; +    return ret;  } diff --git a/cli/src/cli-cmd-parser.c b/cli/src/cli-cmd-parser.c index 48d6ebd64a7..3f9056b5d9e 100644 --- a/cli/src/cli-cmd-parser.c +++ b/cli/src/cli-cmd-parser.c @@ -27,2726 +27,2794 @@  #define MAX_SNAP_DESCRIPTION_LEN 1024  struct snap_config_opt_vals_ snap_confopt_vals[] = { -        {.op_name        = "snap-max-hard-limit", -         .question       = "Changing snapshot-max-hard-limit " -                           "will limit the creation of new snapshots " -                           "if they exceed the new limit.\n" -                           "Do you want to continue?" -        }, -        {.op_name        = "snap-max-soft-limit", -         .question       = "If Auto-delete is enabled, snap-max-soft-limit will" -                           " trigger deletion of oldest snapshot, on the " -                           "creation of new snapshot, when the " -                           "snap-max-soft-limit is reached.\n" -                           "Do you want to change the snap-max-soft-limit?" -        }, -        {.op_name        = "both", -        .question        = "Changing snapshot-max-hard-limit " -                           "will limit the creation of new snapshots " -                           "if they exceed the new snapshot-max-hard-limit.\n" -                           "If Auto-delete is enabled, snap-max-soft-limit will" -                           " trigger deletion of oldest snapshot, on the " -                           "creation of new snapshot, when the " -                           "snap-max-soft-limit is reached.\n" -                           "Do you want to continue?" -        }, -        {.op_name        = NULL, -        } -}; +    {.op_name = "snap-max-hard-limit", +     .question = "Changing snapshot-max-hard-limit " +                 "will limit the creation of new snapshots " +                 "if they exceed the new limit.\n" +                 "Do you want to continue?"}, +    {.op_name = "snap-max-soft-limit", +     .question = "If Auto-delete is enabled, snap-max-soft-limit will" +                 " trigger deletion of oldest snapshot, on the " +                 "creation of new snapshot, when the " +                 "snap-max-soft-limit is reached.\n" +                 "Do you want to change the snap-max-soft-limit?"}, +    {.op_name = "both", +     .question = "Changing snapshot-max-hard-limit " +                 "will limit the creation of new snapshots " +                 "if they exceed the new snapshot-max-hard-limit.\n" +                 "If Auto-delete is enabled, snap-max-soft-limit will" +                 " trigger deletion of oldest snapshot, on the " +                 "creation of new snapshot, when the " +                 "snap-max-soft-limit is reached.\n" +                 "Do you want to continue?"}, +    { +        .op_name = NULL, +    }};  enum cli_snap_config_set_types { -        GF_SNAP_CONFIG_SET_HARD = 0, -        GF_SNAP_CONFIG_SET_SOFT = 1, -        GF_SNAP_CONFIG_SET_BOTH = 2, +    GF_SNAP_CONFIG_SET_HARD = 0, +    GF_SNAP_CONFIG_SET_SOFT = 1, +    GF_SNAP_CONFIG_SET_BOTH = 2,  };  typedef enum cli_snap_config_set_types cli_snap_config_set_types;  typedef struct _cli_brick { -        struct list_head  list; -        const char       *name; -        int32_t           len; +    struct list_head list; +    const char *name; +    int32_t len;  } cli_brick_t;  int -cli_cmd_validate_volume (char *volname); +cli_cmd_validate_volume(char *volname);  static const char * -id_sel (void *wcon) +id_sel(void *wcon)  { -        return (const char *)wcon; +    return (const char *)wcon;  }  static char * -str_getunamb (const char *tok, char **opwords) +str_getunamb(const char *tok, char **opwords)  { -        return (char *)cli_getunamb (tok, (void **)opwords, id_sel); +    return (char *)cli_getunamb(tok, (void **)opwords, id_sel);  }  int32_t -cli_cmd_bricks_parse (const char **words, int wordcount, int brick_index, -                      char **bricks, int *brick_count) +cli_cmd_bricks_parse(const char **words, int wordcount, int brick_index, +                     char **bricks, int *brick_count)  { -        int                         ret = 0; -        char                 *delimiter = NULL; -        char                 *host_name = NULL; -        char                  *tmp_host = NULL; -        char                *bricks_str = NULL; -        int                         len = 0; -        int              brick_list_len = 1; /* For initial space */ -        struct list_head     brick_list = { 0, }; -        cli_brick_t              *brick = NULL; - -        GF_ASSERT (words); -        GF_ASSERT (wordcount); -        GF_ASSERT (bricks); -        GF_ASSERT (brick_index > 0); -        GF_ASSERT (brick_index < wordcount); - -        INIT_LIST_HEAD(&brick_list); - -        while (brick_index < wordcount) { -                if (validate_brick_name ((char *)words[brick_index])) { -                        cli_err ("Wrong brick type: %s, use <HOSTNAME>:" -                                 "<export-dir-abs-path>", words[brick_index]); -                        ret = -1; -                        goto out; -                } else { -                        delimiter = strrchr (words[brick_index], ':'); -                        ret = gf_canonicalize_path (delimiter + 1); -                        if (ret) -                                goto out; -                } - -                tmp_host = gf_strdup ((char *)words[brick_index]); -                if (!tmp_host) { -                        gf_log ("cli", GF_LOG_ERROR, "Out of memory"); -                        ret = -1; -                        goto out; -                } -                get_host_name (tmp_host, &host_name); -                if (!host_name) { -                        ret = -1; -                        gf_log("cli",GF_LOG_ERROR, "Unable to allocate " -                               "memory"); -                        GF_FREE (tmp_host); -                        goto out; -                } - -                if (!(strcmp (host_name, "localhost") && -                      strcmp (host_name, "127.0.0.1") && -                      strncmp (host_name, "0.", 2))) { -                        cli_err ("Please provide a valid hostname/ip other " -                                 "than localhost, 127.0.0.1 or loopback " -                                 "address (0.0.0.0 to 0.255.255.255)."); -                        ret = -1; -                        GF_FREE (tmp_host); -                        goto out; -                } -                if (!valid_internet_address (host_name, _gf_false)) { -                        cli_err ("internet address '%s' does not conform to " -                                 "standards", host_name); -                } -                GF_FREE (tmp_host); -                list_for_each_entry(brick, &brick_list, list) { -                        if (strcmp(brick->name, words[brick_index]) == 0) { -                                ret = -1; -                                cli_err("Found duplicate exports %s", -                                        words[brick_index]); -                                goto out; -                        } -                } - -                brick = GF_MALLOC(sizeof(cli_brick_t), gf_common_list_node); -                if (brick == NULL) { -                        ret = -1; -                        gf_log("cli", GF_LOG_ERROR, "Out of memory"); -                        goto out; -                } -                len = strlen(words[brick_index]); -                brick->name = words[brick_index]; -                brick->len = len; -                list_add_tail(&brick->list, &brick_list); - -                brick_list_len += len + 1; /* Brick name + space */ -                ++(*brick_count); -                ++brick_index; -        } - -        /* If brick count is not valid exit here */ -        if (!*brick_count) { -                cli_err ("No bricks specified"); -                ret = -1; +    int ret = 0; +    char *delimiter = NULL; +    char *host_name = NULL; +    char *tmp_host = NULL; +    char *bricks_str = NULL; +    int len = 0; +    int brick_list_len = 1; /* For initial space */ +    struct list_head brick_list = { +        0, +    }; +    cli_brick_t *brick = NULL; + +    GF_ASSERT(words); +    GF_ASSERT(wordcount); +    GF_ASSERT(bricks); +    GF_ASSERT(brick_index > 0); +    GF_ASSERT(brick_index < wordcount); + +    INIT_LIST_HEAD(&brick_list); + +    while (brick_index < wordcount) { +        if (validate_brick_name((char *)words[brick_index])) { +            cli_err( +                "Wrong brick type: %s, use <HOSTNAME>:" +                "<export-dir-abs-path>", +                words[brick_index]); +            ret = -1; +            goto out; +        } else { +            delimiter = strrchr(words[brick_index], ':'); +            ret = gf_canonicalize_path(delimiter + 1); +            if (ret)                  goto out;          } -        brick_list_len++; /* For terminating null char */ - -        bricks_str = GF_MALLOC(brick_list_len, gf_common_mt_char); -        if (bricks_str == NULL) { +        tmp_host = gf_strdup((char *)words[brick_index]); +        if (!tmp_host) { +            gf_log("cli", GF_LOG_ERROR, "Out of memory"); +            ret = -1; +            goto out; +        } +        get_host_name(tmp_host, &host_name); +        if (!host_name) { +            ret = -1; +            gf_log("cli", GF_LOG_ERROR, +                   "Unable to allocate " +                   "memory"); +            GF_FREE(tmp_host); +            goto out; +        } + +        if (!(strcmp(host_name, "localhost") && +              strcmp(host_name, "127.0.0.1") && strncmp(host_name, "0.", 2))) { +            cli_err( +                "Please provide a valid hostname/ip other " +                "than localhost, 127.0.0.1 or loopback " +                "address (0.0.0.0 to 0.255.255.255)."); +            ret = -1; +            GF_FREE(tmp_host); +            goto out; +        } +        if (!valid_internet_address(host_name, _gf_false)) { +            cli_err( +                "internet address '%s' does not conform to " +                "standards", +                host_name); +        } +        GF_FREE(tmp_host); +        list_for_each_entry(brick, &brick_list, list) +        { +            if (strcmp(brick->name, words[brick_index]) == 0) {                  ret = -1; -                gf_log("cli", GF_LOG_ERROR, "Out of memory"); +                cli_err("Found duplicate exports %s", words[brick_index]);                  goto out; +            }          } -        *bricks = bricks_str; -        *bricks_str = ' '; -        bricks_str++; -        while (!list_empty(&brick_list)) { -                brick = list_first_entry(&brick_list, cli_brick_t, list); -                list_del_init(&brick->list); -                memcpy(bricks_str, brick->name, brick->len); -                bricks_str[brick->len] = ' '; -                bricks_str += brick->len + 1; -                GF_FREE(brick); + +        brick = GF_MALLOC(sizeof(cli_brick_t), gf_common_list_node); +        if (brick == NULL) { +            ret = -1; +            gf_log("cli", GF_LOG_ERROR, "Out of memory"); +            goto out;          } -        *bricks_str = 0; +        len = strlen(words[brick_index]); +        brick->name = words[brick_index]; +        brick->len = len; +        list_add_tail(&brick->list, &brick_list); + +        brick_list_len += len + 1; /* Brick name + space */ +        ++(*brick_count); +        ++brick_index; +    } + +    /* If brick count is not valid exit here */ +    if (!*brick_count) { +        cli_err("No bricks specified"); +        ret = -1; +        goto out; +    } + +    brick_list_len++; /* For terminating null char */ + +    bricks_str = GF_MALLOC(brick_list_len, gf_common_mt_char); +    if (bricks_str == NULL) { +        ret = -1; +        gf_log("cli", GF_LOG_ERROR, "Out of memory"); +        goto out; +    } +    *bricks = bricks_str; +    *bricks_str = ' '; +    bricks_str++; +    while (!list_empty(&brick_list)) { +        brick = list_first_entry(&brick_list, cli_brick_t, list); +        list_del_init(&brick->list); +        memcpy(bricks_str, brick->name, brick->len); +        bricks_str[brick->len] = ' '; +        bricks_str += brick->len + 1; +        GF_FREE(brick); +    } +    *bricks_str = 0;  out: -        while (!list_empty(&brick_list)) { -                brick = list_first_entry(&brick_list, cli_brick_t, list); -                list_del_init(&brick->list); -                GF_FREE(brick); -        } +    while (!list_empty(&brick_list)) { +        brick = list_first_entry(&brick_list, cli_brick_t, list); +        list_del_init(&brick->list); +        GF_FREE(brick); +    } -        return ret; +    return ret;  }  int32_t -cli_cmd_create_disperse_check (struct cli_state *state, int *disperse, -                               int *redundancy, int *data, int count) +cli_cmd_create_disperse_check(struct cli_state *state, int *disperse, +                              int *redundancy, int *data, int count)  { -        int i = 0; -        int tmp = 0; -        gf_answer_t answer = GF_ANSWER_NO; -        char question[128]; - -        const char *question1 = "There isn't an optimal redundancy value " -                                "for this configuration. Do you want to " -                                "create the volume with redundancy 1 ?"; - -        const char *question2 = "The optimal redundancy for this " -                                "configuration is %d. Do you want to create " -                                "the volume with this value ?"; - -        const char *question3 = "This configuration is not optimal on most " -                                "workloads. Do you want to use it ?"; - -        const char *question4 = "Redundancy for this configuration is %d. " -                                "Do you want to create " -                                "the volume with this value ?"; - -        if (*data > 0) { -                if (*disperse > 0 && *redundancy > 0) { -                        if (*disperse != (*data + *redundancy)) { -                                cli_err ("Disperse count(%d) should be equal " -                                         "to sum of disperse-data count(%d) and " -                                         "redundancy count(%d)", *disperse, -                                         *data, *redundancy); -                                return -1; -                        } -                } else if (*redundancy > 0) { -                        *disperse = *data + *redundancy; -                } else if (*disperse > 0) { -                        *redundancy = *disperse - *data; -                } else { -                        if ((count - *data) >= *data) { -                                cli_err ("Please provide redundancy count " -                                         "along with disperse-data count"); -                                return -1; -                        } else { -                                sprintf (question, question4, count - *data); -                                answer = cli_cmd_get_confirmation (state, -                                                                   question); -                                if (answer == GF_ANSWER_NO) -                                        return -1; -                                *redundancy = count - *data; -                                *disperse = count; -                        } -                } +    int i = 0; +    int tmp = 0; +    gf_answer_t answer = GF_ANSWER_NO; +    char question[128]; + +    const char *question1 = +        "There isn't an optimal redundancy value " +        "for this configuration. Do you want to " +        "create the volume with redundancy 1 ?"; + +    const char *question2 = +        "The optimal redundancy for this " +        "configuration is %d. Do you want to create " +        "the volume with this value ?"; + +    const char *question3 = +        "This configuration is not optimal on most " +        "workloads. Do you want to use it ?"; + +    const char *question4 = +        "Redundancy for this configuration is %d. " +        "Do you want to create " +        "the volume with this value ?"; + +    if (*data > 0) { +        if (*disperse > 0 && *redundancy > 0) { +            if (*disperse != (*data + *redundancy)) { +                cli_err( +                    "Disperse count(%d) should be equal " +                    "to sum of disperse-data count(%d) and " +                    "redundancy count(%d)", +                    *disperse, *data, *redundancy); +                return -1; +            } +        } else if (*redundancy > 0) { +            *disperse = *data + *redundancy; +        } else if (*disperse > 0) { +            *redundancy = *disperse - *data; +        } else { +            if ((count - *data) >= *data) { +                cli_err( +                    "Please provide redundancy count " +                    "along with disperse-data count"); +                return -1; +            } else { +                sprintf(question, question4, count - *data); +                answer = cli_cmd_get_confirmation(state, question); +                if (answer == GF_ANSWER_NO) +                    return -1; +                *redundancy = count - *data; +                *disperse = count; +            }          } +    } -        if (*disperse <= 0) { -                if (count < 3) { -                        cli_err ("number of bricks must be greater " -                                 "than 2"); +    if (*disperse <= 0) { +        if (count < 3) { +            cli_err( +                "number of bricks must be greater " +                "than 2"); -                        return -1; -                } -                *disperse = count; +            return -1;          } +        *disperse = count; +    } -        if (*redundancy == -1) { -                tmp = *disperse - 1; -                for (i = tmp / 2; -                     (i > 0) && ((tmp & -tmp) != tmp); -                     i--, tmp--); - -                if (i == 0) { -                        answer = cli_cmd_get_confirmation(state, question1); -                        if (answer == GF_ANSWER_NO) -                                return -1; +    if (*redundancy == -1) { +        tmp = *disperse - 1; +        for (i = tmp / 2; (i > 0) && ((tmp & -tmp) != tmp); i--, tmp--) +            ; -                        *redundancy = 1; -                } -                else -                { -                        *redundancy = *disperse - tmp; -                        if (*redundancy > 1) { -                                sprintf(question, question2, *redundancy); -                                answer = cli_cmd_get_confirmation(state, -                                                                  question); -                                if (answer == GF_ANSWER_NO) -                                        return -1; -                        } -                } +        if (i == 0) { +            answer = cli_cmd_get_confirmation(state, question1); +            if (answer == GF_ANSWER_NO) +                return -1; -                tmp = 0; +            *redundancy = 1;          } else { -                tmp = *disperse - *redundancy; +            *redundancy = *disperse - tmp; +            if (*redundancy > 1) { +                sprintf(question, question2, *redundancy); +                answer = cli_cmd_get_confirmation(state, question); +                if (answer == GF_ANSWER_NO) +                    return -1; +            }          } -        if (*redundancy > (*disperse - 1) / 2) { -                cli_err ("redundancy must be less than %d for a " -                         "disperse %d volume", -                         (*disperse + 1) / 2, *disperse); +        tmp = 0; +    } else { +        tmp = *disperse - *redundancy; +    } -                return -1; -        } +    if (*redundancy > (*disperse - 1) / 2) { +        cli_err( +            "redundancy must be less than %d for a " +            "disperse %d volume", +            (*disperse + 1) / 2, *disperse); -        if ((tmp & -tmp) != tmp) { -                answer = cli_cmd_get_confirmation(state, question3); -                if (answer == GF_ANSWER_NO) -                        return -1; -        } +        return -1; +    } -        return 0; +    if ((tmp & -tmp) != tmp) { +        answer = cli_cmd_get_confirmation(state, question3); +        if (answer == GF_ANSWER_NO) +            return -1; +    } + +    return 0;  }  static int32_t -cli_validate_disperse_volume (char *word, gf1_cluster_type type, -                              const char **words, int32_t wordcount, -                              int32_t index, int32_t *disperse_count, -                              int32_t *redundancy_count, -                              int32_t *data_count) +cli_validate_disperse_volume(char *word, gf1_cluster_type type, +                             const char **words, int32_t wordcount, +                             int32_t index, int32_t *disperse_count, +                             int32_t *redundancy_count, int32_t *data_count)  { -        int     ret = -1; +    int ret = -1; -        switch (type) { +    switch (type) {          case GF_CLUSTER_TYPE_NONE:          case GF_CLUSTER_TYPE_DISPERSE: -                if (strcmp (word, "disperse") == 0) { -                        if (*disperse_count >= 0) { -                                cli_err ("disperse option given twice"); -                                goto out; -                        } -                        if (wordcount < (index+2)) { -                                goto out; -                        } -                        ret = gf_string2int (words[index + 1], disperse_count); -                        if (ret == -1 && errno == EINVAL) { -                                *disperse_count = 0; -                                ret = 1; -                        } else if (ret == -1) { -                                goto out; -                        } else { -                                if (*disperse_count < 3) { -                                        cli_err ("disperse count must " -                                                 "be greater than 2"); -                                        goto out; -                                } -                                ret = 2; -                        } -                } else if (strcmp (word, "disperse-data") == 0) { -                        if (*data_count >= 0) { -                                cli_err ("disperse-data option given twice"); -                                goto out; -                        } -                        if (wordcount < (index+2)) { -                                goto out; -                        } -                        ret = gf_string2int (words[index+1], data_count); -                        if (ret == -1 || *data_count < 2) { -                                cli_err ("disperse-data must be greater than 1"); -                                goto out; -                        } -                        ret = 2; -                } else if (strcmp (word, "redundancy") == 0) { -                        if (*redundancy_count >= 0) { -                                cli_err ("redundancy option given twice"); -                                goto out; -                        } -                        if (wordcount < (index+2)) { -                                goto out; -                        } -                        ret = gf_string2int (words[index+1], redundancy_count); -                        if (ret == -1 || *redundancy_count < 1) { -                                cli_err ("redundancy must be greater than 0"); -                                goto out; -                        } -                        ret = 2; -                } -                break; +            if (strcmp(word, "disperse") == 0) { +                if (*disperse_count >= 0) { +                    cli_err("disperse option given twice"); +                    goto out; +                } +                if (wordcount < (index + 2)) { +                    goto out; +                } +                ret = gf_string2int(words[index + 1], disperse_count); +                if (ret == -1 && errno == EINVAL) { +                    *disperse_count = 0; +                    ret = 1; +                } else if (ret == -1) { +                    goto out; +                } else { +                    if (*disperse_count < 3) { +                        cli_err( +                            "disperse count must " +                            "be greater than 2"); +                        goto out; +                    } +                    ret = 2; +                } +            } else if (strcmp(word, "disperse-data") == 0) { +                if (*data_count >= 0) { +                    cli_err("disperse-data option given twice"); +                    goto out; +                } +                if (wordcount < (index + 2)) { +                    goto out; +                } +                ret = gf_string2int(words[index + 1], data_count); +                if (ret == -1 || *data_count < 2) { +                    cli_err("disperse-data must be greater than 1"); +                    goto out; +                } +                ret = 2; +            } else if (strcmp(word, "redundancy") == 0) { +                if (*redundancy_count >= 0) { +                    cli_err("redundancy option given twice"); +                    goto out; +                } +                if (wordcount < (index + 2)) { +                    goto out; +                } +                ret = gf_string2int(words[index + 1], redundancy_count); +                if (ret == -1 || *redundancy_count < 1) { +                    cli_err("redundancy must be greater than 0"); +                    goto out; +                } +                ret = 2; +            } +            break;          case GF_CLUSTER_TYPE_STRIPE_REPLICATE: -                cli_err ("striped-replicated-dispersed volume " -                         "is not supported"); -                goto out; +            cli_err( +                "striped-replicated-dispersed volume " +                "is not supported"); +            goto out;          case GF_CLUSTER_TYPE_TIER: -                cli_err ("tier-dispersed volume is not " -                         "supported"); -                goto out; +            cli_err( +                "tier-dispersed volume is not " +                "supported"); +            goto out;          case GF_CLUSTER_TYPE_STRIPE: -                cli_err ("striped-dispersed volume is not " -                         "supported"); -                goto out; +            cli_err( +                "striped-dispersed volume is not " +                "supported"); +            goto out;          case GF_CLUSTER_TYPE_REPLICATE: -                cli_err ("replicated-dispersed volume is not " -                         "supported"); -                goto out; +            cli_err( +                "replicated-dispersed volume is not " +                "supported"); +            goto out;          default: -                cli_err ("Invalid type given"); -                break; -        } +            cli_err("Invalid type given"); +            break; +    }  out: -        return ret; +    return ret;  }  int32_t -cli_validate_volname (const char *volname) +cli_validate_volname(const char *volname)  { -        int32_t            ret                       = -1; -        int32_t            i                         = -1; -        int                volname_len; -        static const char * const invalid_volnames[] = { -                                      "volume", "type", "subvolumes", "option", -                                      "end-volume", "all", "volume_not_in_ring", -                                      "description", "force", -                                      "snap-max-hard-limit", -                                      "snap-max-soft-limit", "auto-delete", -                                      "activate-on-create", NULL}; - -        if (volname[0] == '-') -                goto out; - -        for (i = 0; invalid_volnames[i]; i++) { -                if (!strcmp (volname, invalid_volnames[i])) { -                        cli_err ("\"%s\" cannot be the name of a volume.", -                                 volname); -                        goto out; -                } -        } +    int32_t ret = -1; +    int32_t i = -1; +    int volname_len; +    static const char *const invalid_volnames[] = {"volume", +                                                   "type", +                                                   "subvolumes", +                                                   "option", +                                                   "end-volume", +                                                   "all", +                                                   "volume_not_in_ring", +                                                   "description", +                                                   "force", +                                                   "snap-max-hard-limit", +                                                   "snap-max-soft-limit", +                                                   "auto-delete", +                                                   "activate-on-create", +                                                   NULL}; -        if (strchr (volname, '/')) -                goto out; +    if (volname[0] == '-') +        goto out; -        volname_len = strlen (volname); -        if (volname_len > GD_VOLUME_NAME_MAX) { -                cli_err("Volume name exceeds %d characters.", -                        GD_VOLUME_NAME_MAX); -                goto out; +    for (i = 0; invalid_volnames[i]; i++) { +        if (!strcmp(volname, invalid_volnames[i])) { +            cli_err("\"%s\" cannot be the name of a volume.", volname); +            goto out;          } +    } -        for (i = 0; i < volname_len; i++) { -                if (!isalnum (volname[i]) && (volname[i] != '_') && -                   (volname[i] != '-')) { -                        cli_err ("Volume name should not contain \"%c\"" -                                 " character.\nVolume names can only" -                                 "contain alphanumeric, '-' and '_' " -                                 "characters.", volname[i]); -                        goto out; -                } -        } +    if (strchr(volname, '/')) +        goto out; -        ret = 0; +    volname_len = strlen(volname); +    if (volname_len > GD_VOLUME_NAME_MAX) { +        cli_err("Volume name exceeds %d characters.", GD_VOLUME_NAME_MAX); +        goto out; +    } + +    for (i = 0; i < volname_len; i++) { +        if (!isalnum(volname[i]) && (volname[i] != '_') && +            (volname[i] != '-')) { +            cli_err( +                "Volume name should not contain \"%c\"" +                " character.\nVolume names can only" +                "contain alphanumeric, '-' and '_' " +                "characters.", +                volname[i]); +            goto out; +        } +    } + +    ret = 0;  out: -        return ret; +    return ret;  }  int32_t -cli_cmd_volume_create_parse (struct cli_state *state, const char **words, -                             int wordcount, dict_t **options, char **brick_list) +cli_cmd_volume_create_parse(struct cli_state *state, const char **words, +                            int wordcount, dict_t **options, char **brick_list)  { -        dict_t  *dict = NULL; -        char    *volname = NULL; -        int     ret = -1; -        gf1_cluster_type type = GF_CLUSTER_TYPE_NONE; -        int     sub_count = 1; -        int     brick_index = 0; -        char    *trans_type = NULL; -        int32_t index = 0; -        char    *bricks = NULL; -        int32_t brick_count = 0; -        char    *opwords[] = { "replica", "stripe", "transport", "disperse", -                               "redundancy", "disperse-data", "arbiter", NULL }; - -        char    *w = NULL; -        int      op_count = 0; -        int32_t  replica_count = 1; -        int32_t  arbiter_count = 0; -        int32_t  stripe_count = 1; -        int32_t  disperse_count = -1; -        int32_t  redundancy_count = -1; -        int32_t  disperse_data_count = -1; -        gf_boolean_t is_force = _gf_false; -        int wc = wordcount; -        gf_answer_t answer = GF_ANSWER_NO; -        const char *question = NULL; - -        GF_ASSERT (words); -        GF_ASSERT (options); - -        dict = dict_new (); - -        if (!dict) -                goto out; +    dict_t *dict = NULL; +    char *volname = NULL; +    int ret = -1; +    gf1_cluster_type type = GF_CLUSTER_TYPE_NONE; +    int sub_count = 1; +    int brick_index = 0; +    char *trans_type = NULL; +    int32_t index = 0; +    char *bricks = NULL; +    int32_t brick_count = 0; +    char *opwords[] = {"replica",    "stripe",        "transport", "disperse", +                       "redundancy", "disperse-data", "arbiter",   NULL}; + +    char *w = NULL; +    int op_count = 0; +    int32_t replica_count = 1; +    int32_t arbiter_count = 0; +    int32_t stripe_count = 1; +    int32_t disperse_count = -1; +    int32_t redundancy_count = -1; +    int32_t disperse_data_count = -1; +    gf_boolean_t is_force = _gf_false; +    int wc = wordcount; +    gf_answer_t answer = GF_ANSWER_NO; +    const char *question = NULL; + +    GF_ASSERT(words); +    GF_ASSERT(options); + +    dict = dict_new(); + +    if (!dict) +        goto out; -        if (wordcount < 3) -                goto out; +    if (wordcount < 3) +        goto out; -        volname = (char *)words[2]; +    volname = (char *)words[2]; -        GF_ASSERT (volname); +    GF_ASSERT(volname); -        /* Validate the volume name here itself */ -        if (cli_validate_volname (volname) < 0) -                goto out; +    /* Validate the volume name here itself */ +    if (cli_validate_volname(volname) < 0) +        goto out; -        if (wordcount < 4) { -                ret = -1; -                goto out; -        } +    if (wordcount < 4) { +        ret = -1; +        goto out; +    } -        type = GF_CLUSTER_TYPE_NONE; -        index = 3; +    type = GF_CLUSTER_TYPE_NONE; +    index = 3; -        while (op_count < 3) { +    while (op_count < 3) { +        ret = -1; +        w = str_getunamb(words[index], opwords); +        if (!w) { +            break; +        } else if ((strcmp(w, "replica")) == 0) { +            switch (type) { +                case GF_CLUSTER_TYPE_STRIPE_REPLICATE: +                case GF_CLUSTER_TYPE_REPLICATE: +                    cli_err("replica option given twice"); +                    goto out; +                case GF_CLUSTER_TYPE_NONE: +                    type = GF_CLUSTER_TYPE_REPLICATE; +                    break; +                case GF_CLUSTER_TYPE_STRIPE: +                    type = GF_CLUSTER_TYPE_STRIPE_REPLICATE; +                    break; +                case GF_CLUSTER_TYPE_TIER: +                    cli_err( +                        "replicated-tiered volume is not " +                        "supported"); +                    goto out; +                    break; +                case GF_CLUSTER_TYPE_DISPERSE: +                    cli_err( +                        "replicated-dispersed volume is not " +                        "supported"); +                    goto out; +                default: +                    cli_err("Invalid type given"); +                    goto out; +            } + +            if (wordcount < (index + 2)) {                  ret = -1; -                w = str_getunamb (words[index], opwords); -                if (!w) { -                        break; -                } else if ((strcmp (w, "replica")) == 0) { -                        switch (type) { -                        case GF_CLUSTER_TYPE_STRIPE_REPLICATE: -                        case GF_CLUSTER_TYPE_REPLICATE: -                                cli_err ("replica option given twice"); -                                goto out; -                        case GF_CLUSTER_TYPE_NONE: -                                type = GF_CLUSTER_TYPE_REPLICATE; -                                break; -                        case GF_CLUSTER_TYPE_STRIPE: -                                type = GF_CLUSTER_TYPE_STRIPE_REPLICATE; -                                break; -                        case GF_CLUSTER_TYPE_TIER: -                                cli_err ("replicated-tiered volume is not " -                                         "supported"); -                                goto out; -                                break; -                        case GF_CLUSTER_TYPE_DISPERSE: -                                cli_err ("replicated-dispersed volume is not " -                                         "supported"); -                                goto out; -                        default: -                                cli_err ("Invalid type given"); -                                goto out; -                        } - -                        if (wordcount < (index+2)) { -                                ret = -1; -                                goto out; -                        } - -                        replica_count = strtol (words[index+1], NULL, 0); -                        if (replica_count < 2) { -                                cli_err ("replica count should be greater" -                                         " than 1"); -                                ret = -1; -                                goto out; -                        } - -                        index += 2; -                        if (words[index]) { -                                if (!strcmp (words[index], "arbiter")) { -                                        ret = gf_string2int (words[index+1], -                                                             &arbiter_count); -                                        if ((ret == -1) || (arbiter_count != 1)) { -                                                cli_err ("For arbiter " -                                                         "configuration, " -                                                         "replica count must be" -                                                         " 2 and arbiter count " -                                                         "must be 1. The 3rd " -                                                         "brick of the replica " -                                                         "will be the arbiter"); -                                                ret = -1; -                                                goto out; -                                        } -                                        ret = dict_set_int32 (dict, "arbiter-count", -                                                              arbiter_count); -                                        if (ret) -                                                goto out; -                                        index += 2; -                                } -                        } - -                        /* Do this to keep glusterd happy with sending -                           "replica 3 arbiter 1" options to server */ -                        if ((arbiter_count == 1) && (replica_count == 2)) -                                replica_count += arbiter_count; - -                        if (replica_count == 2) { -                                if (strcmp (words[wordcount - 1], "force")) { -                                        question = "Replica 2 volumes are prone" -                                                   " to split-brain. Use " -                                                   "Arbiter or Replica 3 to " -                                                   "avoid this. See: " -                                                   "http://docs.gluster.org/en/latest/Administrator%20Guide/Split%20brain%20and%20ways%20to%20deal%20with%20it/." -                                                   "\nDo you still want to " -                                                   "continue?\n"; -                                        answer = cli_cmd_get_confirmation (state, -                                                 question); -                                        if (GF_ANSWER_NO == answer) { -                                                gf_log ("cli", GF_LOG_ERROR, -                                                        "Volume create " -                                                        "cancelled, exiting"); -                                                ret = -1; -                                                goto out; -                                        } -                                } -                        } -                        ret = dict_set_int32 (dict, "replica-count", replica_count); -                        if (ret) -                                goto out; - -                } else if ((strcmp (w, "stripe")) == 0) { -                        switch (type) { -                        case GF_CLUSTER_TYPE_STRIPE_REPLICATE: -                        case GF_CLUSTER_TYPE_STRIPE: -                                cli_err ("stripe option given twice"); -                                goto out; -                        case GF_CLUSTER_TYPE_NONE: -                                type = GF_CLUSTER_TYPE_STRIPE; -                                break; -                        case GF_CLUSTER_TYPE_REPLICATE: -                                type = GF_CLUSTER_TYPE_STRIPE_REPLICATE; -                                break; -                        case GF_CLUSTER_TYPE_DISPERSE: -                                cli_err ("striped-dispersed volume is not " -                                         "supported"); -                                goto out; -                        case GF_CLUSTER_TYPE_TIER: -                                cli_err ("striped-tier volume is not " -                                         "supported"); -                                goto out; -                        default: -                                cli_err ("Invalid type given"); -                                goto out; -                        } -                        if (wordcount < (index + 2)) { -                                ret = -1; -                                goto out; -                        } -                        stripe_count = strtol (words[index+1], NULL, 0); -                        if (stripe_count < 2) { -                                cli_err ("stripe count should be greater" -                                         " than 1"); -                                ret = -1; -                                goto out; -                        } -                        ret = dict_set_int32 (dict, "stripe-count", stripe_count); -                        if (ret) -                                goto out; - -                        index += 2; +                goto out; +            } -                } else if ((strcmp (w, "transport")) == 0) { -                        if (trans_type) { -                                cli_err ("'transport' option given more" -                                         " than one time"); -                                goto out; -                        } -                        if ((strcasecmp (words[index+1], "tcp") == 0)) { -                                trans_type = gf_strdup ("tcp"); -                        } else if ((strcasecmp (words[index+1], "rdma") == 0)) { -                                trans_type = gf_strdup ("rdma"); -                        } else if ((strcasecmp (words[index+1], "tcp,rdma") == 0) || -                                   (strcasecmp (words[index+1], "rdma,tcp") == 0)) { -                                trans_type = gf_strdup ("tcp,rdma"); -                        } else { -                                gf_log ("", GF_LOG_ERROR, "incorrect transport" -                                        " protocol specified"); -                                ret = -1; -                                goto out; -                        } -                        index += 2; - -                } else if ((strcmp (w, "disperse") == 0) || -                           (strcmp (w, "redundancy") == 0) || -                           (strcmp (w, "disperse-data") == 0)) { -                        ret = cli_validate_disperse_volume (w, type, words, -                                      wordcount, index, &disperse_count, -                                      &redundancy_count, &disperse_data_count); -                        if (ret < 0) -                                goto out; -                        index += ret; -                        type = GF_CLUSTER_TYPE_DISPERSE; -                } else if ((strcmp (w, "arbiter") == 0)) { -                        cli_err ("arbiter option must be preceded by replica " -                                 "option."); +            replica_count = strtol(words[index + 1], NULL, 0); +            if (replica_count < 2) { +                cli_err( +                    "replica count should be greater" +                    " than 1"); +                ret = -1; +                goto out; +            } + +            index += 2; +            if (words[index]) { +                if (!strcmp(words[index], "arbiter")) { +                    ret = gf_string2int(words[index + 1], &arbiter_count); +                    if ((ret == -1) || (arbiter_count != 1)) { +                        cli_err( +                            "For arbiter " +                            "configuration, " +                            "replica count must be" +                            " 2 and arbiter count " +                            "must be 1. The 3rd " +                            "brick of the replica " +                            "will be the arbiter");                          ret = -1;                          goto out; -                } else { -                        GF_ASSERT (!"opword mismatch"); +                    } +                    ret = dict_set_int32(dict, "arbiter-count", arbiter_count); +                    if (ret) +                        goto out; +                    index += 2; +                } +            } + +            /* Do this to keep glusterd happy with sending +               "replica 3 arbiter 1" options to server */ +            if ((arbiter_count == 1) && (replica_count == 2)) +                replica_count += arbiter_count; + +            if (replica_count == 2) { +                if (strcmp(words[wordcount - 1], "force")) { +                    question = +                        "Replica 2 volumes are prone" +                        " to split-brain. Use " +                        "Arbiter or Replica 3 to " +                        "avoid this. See: " +                        "http://docs.gluster.org/en/latest/" +                        "Administrator%20Guide/" +                        "Split%20brain%20and%20ways%20to%20deal%20with%20it/." +                        "\nDo you still want to " +                        "continue?\n"; +                    answer = cli_cmd_get_confirmation(state, question); +                    if (GF_ANSWER_NO == answer) { +                        gf_log("cli", GF_LOG_ERROR, +                               "Volume create " +                               "cancelled, exiting");                          ret = -1;                          goto out; -                } -                op_count++; -        } - -        if (!trans_type) -                trans_type = gf_strdup ("tcp"); - -        if (index >= wordcount) { +                    } +                } +            } +            ret = dict_set_int32(dict, "replica-count", replica_count); +            if (ret) +                goto out; + +        } else if ((strcmp(w, "stripe")) == 0) { +            switch (type) { +                case GF_CLUSTER_TYPE_STRIPE_REPLICATE: +                case GF_CLUSTER_TYPE_STRIPE: +                    cli_err("stripe option given twice"); +                    goto out; +                case GF_CLUSTER_TYPE_NONE: +                    type = GF_CLUSTER_TYPE_STRIPE; +                    break; +                case GF_CLUSTER_TYPE_REPLICATE: +                    type = GF_CLUSTER_TYPE_STRIPE_REPLICATE; +                    break; +                case GF_CLUSTER_TYPE_DISPERSE: +                    cli_err( +                        "striped-dispersed volume is not " +                        "supported"); +                    goto out; +                case GF_CLUSTER_TYPE_TIER: +                    cli_err( +                        "striped-tier volume is not " +                        "supported"); +                    goto out; +                default: +                    cli_err("Invalid type given"); +                    goto out; +            } +            if (wordcount < (index + 2)) { +                ret = -1; +                goto out; +            } +            stripe_count = strtol(words[index + 1], NULL, 0); +            if (stripe_count < 2) { +                cli_err( +                    "stripe count should be greater" +                    " than 1");                  ret = -1;                  goto out; +            } +            ret = dict_set_int32(dict, "stripe-count", stripe_count); +            if (ret) +                goto out; + +            index += 2; + +        } else if ((strcmp(w, "transport")) == 0) { +            if (trans_type) { +                cli_err( +                    "'transport' option given more" +                    " than one time"); +                goto out; +            } +            if ((strcasecmp(words[index + 1], "tcp") == 0)) { +                trans_type = gf_strdup("tcp"); +            } else if ((strcasecmp(words[index + 1], "rdma") == 0)) { +                trans_type = gf_strdup("rdma"); +            } else if ((strcasecmp(words[index + 1], "tcp,rdma") == 0) || +                       (strcasecmp(words[index + 1], "rdma,tcp") == 0)) { +                trans_type = gf_strdup("tcp,rdma"); +            } else { +                gf_log("", GF_LOG_ERROR, +                       "incorrect transport" +                       " protocol specified"); +                ret = -1; +                goto out; +            } +            index += 2; + +        } else if ((strcmp(w, "disperse") == 0) || +                   (strcmp(w, "redundancy") == 0) || +                   (strcmp(w, "disperse-data") == 0)) { +            ret = cli_validate_disperse_volume( +                w, type, words, wordcount, index, &disperse_count, +                &redundancy_count, &disperse_data_count); +            if (ret < 0) +                goto out; +            index += ret; +            type = GF_CLUSTER_TYPE_DISPERSE; +        } else if ((strcmp(w, "arbiter") == 0)) { +            cli_err( +                "arbiter option must be preceded by replica " +                "option."); +            ret = -1; +            goto out; +        } else { +            GF_ASSERT(!"opword mismatch"); +            ret = -1; +            goto out;          } +        op_count++; +    } -        brick_index = index; - -        if (strcmp (words[wordcount - 1], "force") == 0) { -                is_force = _gf_true; -                wc = wordcount - 1; -        } +    if (!trans_type) +        trans_type = gf_strdup("tcp"); -        ret = cli_cmd_bricks_parse (words, wc, brick_index, &bricks, -                                    &brick_count); -        if (ret) -                goto out; +    if (index >= wordcount) { +        ret = -1; +        goto out; +    } -        if (type == GF_CLUSTER_TYPE_DISPERSE) { -                ret = cli_cmd_create_disperse_check (state, &disperse_count, -                                                     &redundancy_count, -                                                     &disperse_data_count, -                                                     brick_count); -                if (!ret) -                        ret = dict_set_int32 (dict, "disperse-count", -                                              disperse_count); -                if (!ret) -                        ret = dict_set_int32 (dict, "redundancy-count", -                                              redundancy_count); -                if (ret) -                        goto out; +    brick_index = index; -                sub_count = disperse_count; -        } else -                sub_count = stripe_count * replica_count; - -        if (brick_count % sub_count) { -                if (type == GF_CLUSTER_TYPE_STRIPE) -                        cli_err ("number of bricks is not a multiple of " -                                 "stripe count"); -                else if (type == GF_CLUSTER_TYPE_REPLICATE) -                        cli_err ("number of bricks is not a multiple of " -                                 "replica count"); -                else if (type == GF_CLUSTER_TYPE_DISPERSE) -                        cli_err ("number of bricks is not a multiple of " -                                 "disperse count"); -                else -                        cli_err ("number of bricks given doesn't match " -                                 "required count"); +    if (strcmp(words[wordcount - 1], "force") == 0) { +        is_force = _gf_true; +        wc = wordcount - 1; +    } -                ret = -1; -                goto out; -        } +    ret = cli_cmd_bricks_parse(words, wc, brick_index, &bricks, &brick_count); +    if (ret) +        goto out; -        /* Everything is parsed fine. start setting info in dict */ -        ret = dict_set_str (dict, "volname", volname); +    if (type == GF_CLUSTER_TYPE_DISPERSE) { +        ret = cli_cmd_create_disperse_check(state, &disperse_count, +                                            &redundancy_count, +                                            &disperse_data_count, brick_count); +        if (!ret) +            ret = dict_set_int32(dict, "disperse-count", disperse_count); +        if (!ret) +            ret = dict_set_int32(dict, "redundancy-count", redundancy_count);          if (ret) -                goto out; +            goto out; + +        sub_count = disperse_count; +    } else +        sub_count = stripe_count * replica_count; + +    if (brick_count % sub_count) { +        if (type == GF_CLUSTER_TYPE_STRIPE) +            cli_err( +                "number of bricks is not a multiple of " +                "stripe count"); +        else if (type == GF_CLUSTER_TYPE_REPLICATE) +            cli_err( +                "number of bricks is not a multiple of " +                "replica count"); +        else if (type == GF_CLUSTER_TYPE_DISPERSE) +            cli_err( +                "number of bricks is not a multiple of " +                "disperse count"); +        else +            cli_err( +                "number of bricks given doesn't match " +                "required count"); -        ret = dict_set_int32 (dict, "type", type); -        if (ret) -                goto out; +        ret = -1; +        goto out; +    } -        ret = dict_set_dynstr (dict, "transport", trans_type); -        if (ret) -                goto out; -        trans_type = NULL; +    /* Everything is parsed fine. start setting info in dict */ +    ret = dict_set_str(dict, "volname", volname); +    if (ret) +        goto out; -        ret = dict_set_dynstr (dict, "bricks", bricks); -        if (ret) -                goto out; +    ret = dict_set_int32(dict, "type", type); +    if (ret) +        goto out; -        ret = dict_set_int32 (dict, "count", brick_count); -        if (ret) -                goto out; +    ret = dict_set_dynstr(dict, "transport", trans_type); +    if (ret) +        goto out; +    trans_type = NULL; -        ret = dict_set_int32 (dict, "force", is_force); -        if (ret) -                goto out; +    ret = dict_set_dynstr(dict, "bricks", bricks); +    if (ret) +        goto out; -        *options = dict; -        *brick_list = bricks; +    ret = dict_set_int32(dict, "count", brick_count); +    if (ret) +        goto out; + +    ret = dict_set_int32(dict, "force", is_force); +    if (ret) +        goto out; + +    *options = dict; +    *brick_list = bricks;  out: -        if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Unable to parse create volume CLI"); -                if (dict) -                        dict_unref (dict); -        } +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, "Unable to parse create volume CLI"); +        if (dict) +            dict_unref(dict); +    } -        GF_FREE (trans_type); +    GF_FREE(trans_type); -        return ret; +    return ret;  }  int32_t -cli_cmd_volume_reset_parse (const char **words, int wordcount, dict_t **options) +cli_cmd_volume_reset_parse(const char **words, int wordcount, dict_t **options)  { -        dict_t  *dict = NULL; -        char    *volname = NULL; -        int     ret = -1; +    dict_t *dict = NULL; +    char *volname = NULL; +    int ret = -1; -        GF_ASSERT (words); -        GF_ASSERT (options); +    GF_ASSERT(words); +    GF_ASSERT(options); -        dict = dict_new (); +    dict = dict_new(); -        if (!dict) -                goto out; +    if (!dict) +        goto out; -        if (wordcount < 3) -                goto out; +    if (wordcount < 3) +        goto out; -        if (wordcount > 5) -                goto out; +    if (wordcount > 5) +        goto out; -        volname = (char *)words[2]; +    volname = (char *)words[2]; -        if (!volname) { -                ret = -1; -                goto out; -        } +    if (!volname) { +        ret = -1; +        goto out; +    } -        ret = dict_set_str (dict, "volname", volname); -        if (ret) -                goto out; +    ret = dict_set_str(dict, "volname", volname); +    if (ret) +        goto out; -        if (wordcount == 3) { -                ret = dict_set_str (dict, "key", "all"); -                if (ret) -                        goto out; -        } +    if (wordcount == 3) { +        ret = dict_set_str(dict, "key", "all"); +        if (ret) +            goto out; +    } -        if (wordcount >= 4) { -                if (!strcmp ("force", (char*)words[3])) { -                        ret = dict_set_int32 (dict, "force", 1); -                        if (ret) -                                goto out; -                        ret = dict_set_str (dict, "key", "all"); -                        if (ret) -                                goto out; -                } else { -                        ret = dict_set_str (dict, "key", (char *)words[3]); -                        if (ret) -                                goto out; -                } +    if (wordcount >= 4) { +        if (!strcmp("force", (char *)words[3])) { +            ret = dict_set_int32(dict, "force", 1); +            if (ret) +                goto out; +            ret = dict_set_str(dict, "key", "all"); +            if (ret) +                goto out; +        } else { +            ret = dict_set_str(dict, "key", (char *)words[3]); +            if (ret) +                goto out;          } +    } -        if (wordcount == 5) { -                if (strcmp ("force", (char*)words[4])) { -                        ret = -1; -                        goto out; -                } else { -                        ret = dict_set_int32 (dict, "force", 1); -                        if (ret) -                                goto out; -                } +    if (wordcount == 5) { +        if (strcmp("force", (char *)words[4])) { +            ret = -1; +            goto out; +        } else { +            ret = dict_set_int32(dict, "force", 1); +            if (ret) +                goto out;          } +    } -        *options = dict; +    *options = dict;  out: -        if (ret && dict) { -                dict_unref (dict); -        } +    if (ret && dict) { +        dict_unref(dict); +    } -                return ret; +    return ret;  }  int32_t -cli_cmd_get_state_parse (struct cli_state *state, -                         const char **words, int wordcount, -                         dict_t **options, char **op_errstr) +cli_cmd_get_state_parse(struct cli_state *state, const char **words, +                        int wordcount, dict_t **options, char **op_errstr)  { -        dict_t    *dict                 = NULL; -        int        ret                  = -1; -        char      *odir                 = NULL; -        char      *filename             = NULL; -        char      *daemon_name          = NULL; -        int        count                = 0; -        uint32_t   cmd                  = 0; - -        GF_VALIDATE_OR_GOTO ("cli", options, out); -        GF_VALIDATE_OR_GOTO ("cli", words, out); - -        dict = dict_new (); -        if (!dict) -                goto out; - -        if (wordcount < 1 || wordcount > 7) { -                *op_errstr = gf_strdup ("Problem parsing arguments." -                                        " Check usage."); -                goto out; -        } +    dict_t *dict = NULL; +    int ret = -1; +    char *odir = NULL; +    char *filename = NULL; +    char *daemon_name = NULL; +    int count = 0; +    uint32_t cmd = 0; + +    GF_VALIDATE_OR_GOTO("cli", options, out); +    GF_VALIDATE_OR_GOTO("cli", words, out); + +    dict = dict_new(); +    if (!dict) +        goto out; -        if (wordcount >= 1) { -                gf_asprintf (&daemon_name, "%s", "glusterd"); - -                for (count = 1; count < wordcount; count++) { -                        if (strcmp (words[count], "odir") == 0 || -                                        strcmp (words[count], "file") == 0) { -                                if (strcmp (words[count], "odir") == 0) { -                                        if (++count < wordcount) { -                                                odir = (char *) words[count]; -                                                continue; -                                        } else { -                                                ret = -1; -                                                goto out; -                                        } -                                } else if (strcmp (words[count], "file") == 0) { -                                        if (++count < wordcount) { -                                                filename = (char *) words[count]; -                                                continue; -                                        } else { -                                                ret = -1; -                                                goto out; -                                        } -                                } -                        } else { -                                if (count > 1) { -                                        if (count == wordcount-1) { -                                                if (strcmp (words[count], -                                                            "detail") == 0) { -                                                        cmd = GF_CLI_GET_STATE_DETAIL; -                                                        continue; -                                                } else if (strcmp (words[count], -                                                                   "volumeoptions") == 0) { -                                                        cmd = GF_CLI_GET_STATE_VOLOPTS; -                                                        continue; -                                                } -                                        } else { -                                                *op_errstr = gf_strdup ("Problem" -                                                        " parsing arguments. " -                                                        "Check usage."); -                                                ret = -1; -                                                goto out; -                                        } - -                                } -                                if (strcmp (words[count], "glusterd") == 0) { -                                        continue; -                                } else { -                                        if (count == wordcount-1) { -                                                if (strcmp (words[count], -                                                            "detail") == 0) { -                                                        cmd = GF_CLI_GET_STATE_DETAIL; -                                                        continue; -                                                } else if (strcmp (words[count], -                                                                   "volumeoptions") == 0) { -                                                        cmd = GF_CLI_GET_STATE_VOLOPTS; -                                                        continue; -                                                } -                                        } - -                                        *op_errstr = gf_strdup ("glusterd is " -                                                 "the only supported daemon."); -                                        ret = -1; -                                        goto out; -                                } +    if (wordcount < 1 || wordcount > 7) { +        *op_errstr = gf_strdup( +            "Problem parsing arguments." +            " Check usage."); +        goto out; +    } + +    if (wordcount >= 1) { +        gf_asprintf(&daemon_name, "%s", "glusterd"); + +        for (count = 1; count < wordcount; count++) { +            if (strcmp(words[count], "odir") == 0 || +                strcmp(words[count], "file") == 0) { +                if (strcmp(words[count], "odir") == 0) { +                    if (++count < wordcount) { +                        odir = (char *)words[count]; +                        continue; +                    } else { +                        ret = -1; +                        goto out; +                    } +                } else if (strcmp(words[count], "file") == 0) { +                    if (++count < wordcount) { +                        filename = (char *)words[count]; +                        continue; +                    } else { +                        ret = -1; +                        goto out; +                    } +                } +            } else { +                if (count > 1) { +                    if (count == wordcount - 1) { +                        if (strcmp(words[count], "detail") == 0) { +                            cmd = GF_CLI_GET_STATE_DETAIL; +                            continue; +                        } else if (strcmp(words[count], "volumeoptions") == 0) { +                            cmd = GF_CLI_GET_STATE_VOLOPTS; +                            continue;                          } -                } - -                ret = dict_set_dynstr (dict, "daemon", daemon_name); -                if (ret) { -                        *op_errstr = gf_strdup ("Command failed. Please check " -                                                " log file for more details."); -                        gf_log (THIS->name, GF_LOG_ERROR, -                                "Setting daemon name to dictionary failed"); +                    } else { +                        *op_errstr = gf_strdup( +                            "Problem" +                            " parsing arguments. " +                            "Check usage."); +                        ret = -1;                          goto out; +                    }                  } -                daemon_name = NULL; - -                if (odir) { -                        ret = dict_set_str (dict, "odir", odir); -                        if (ret) { -                                *op_errstr = gf_strdup ("Command failed. Please" -                                                        " check log file for" -                                                        " more details."); -                                gf_log (THIS->name, GF_LOG_ERROR, -                                        "Setting output directory to" -                                        "dictionary failed"); -                                goto out; +                if (strcmp(words[count], "glusterd") == 0) { +                    continue; +                } else { +                    if (count == wordcount - 1) { +                        if (strcmp(words[count], "detail") == 0) { +                            cmd = GF_CLI_GET_STATE_DETAIL; +                            continue; +                        } else if (strcmp(words[count], "volumeoptions") == 0) { +                            cmd = GF_CLI_GET_STATE_VOLOPTS; +                            continue;                          } -                } +                    } -                if (filename) { -                        ret = dict_set_str (dict, "filename", filename); -                        if (ret) { -                                *op_errstr = gf_strdup ("Command failed. Please" -                                                        " check log file for" -                                                        " more  details."); -                                gf_log (THIS->name, GF_LOG_ERROR, -                                        "Setting filename to dictionary failed"); -                                goto out; -                        } -                } - -                if (cmd) { -                        ret = dict_set_uint32 (dict, "getstate-cmd", cmd); -                        if (ret) { -                                *op_errstr = gf_strdup ("Command failed. Please" -                                                        " check log file for" -                                                        " more details."); -                                gf_log (THIS->name, GF_LOG_ERROR, "Setting " -                                        "get-state command type to dictionary " -                                        "failed"); -                                goto out; -                        } +                    *op_errstr = gf_strdup( +                        "glusterd is " +                        "the only supported daemon."); +                    ret = -1; +                    goto out;                  } +            }          } - out: -        if (dict) -                *options = dict; +        ret = dict_set_dynstr(dict, "daemon", daemon_name); +        if (ret) { +            *op_errstr = gf_strdup( +                "Command failed. Please check " +                " log file for more details."); +            gf_log(THIS->name, GF_LOG_ERROR, +                   "Setting daemon name to dictionary failed"); +            goto out; +        } +        daemon_name = NULL; + +        if (odir) { +            ret = dict_set_str(dict, "odir", odir); +            if (ret) { +                *op_errstr = gf_strdup( +                    "Command failed. Please" +                    " check log file for" +                    " more details."); +                gf_log(THIS->name, GF_LOG_ERROR, +                       "Setting output directory to" +                       "dictionary failed"); +                goto out; +            } +        } + +        if (filename) { +            ret = dict_set_str(dict, "filename", filename); +            if (ret) { +                *op_errstr = gf_strdup( +                    "Command failed. Please" +                    " check log file for" +                    " more  details."); +                gf_log(THIS->name, GF_LOG_ERROR, +                       "Setting filename to dictionary failed"); +                goto out; +            } +        } + +        if (cmd) { +            ret = dict_set_uint32(dict, "getstate-cmd", cmd); +            if (ret) { +                *op_errstr = gf_strdup( +                    "Command failed. Please" +                    " check log file for" +                    " more details."); +                gf_log(THIS->name, GF_LOG_ERROR, +                       "Setting " +                       "get-state command type to dictionary " +                       "failed"); +                goto out; +            } +        } +    } -        if (ret && dict) -                dict_unref (dict); +out: +    if (dict) +        *options = dict; -        GF_FREE(daemon_name); +    if (ret && dict) +        dict_unref(dict); -        return ret; +    GF_FREE(daemon_name); + +    return ret;  }  int32_t -cli_cmd_inode_quota_parse (const char **words, int wordcount, dict_t **options) +cli_cmd_inode_quota_parse(const char **words, int wordcount, dict_t **options)  { -        dict_t          *dict    = NULL; -        char            *volname = NULL; -        int              ret     = -1; +    dict_t *dict = NULL; +    char *volname = NULL; +    int ret = -1; -        GF_ASSERT (words); -        GF_ASSERT (options); +    GF_ASSERT(words); +    GF_ASSERT(options); -        dict = dict_new (); -        if (!dict) { -                gf_log ("cli", GF_LOG_ERROR, "dict_new failed"); -                goto out; -        } +    dict = dict_new(); +    if (!dict) { +        gf_log("cli", GF_LOG_ERROR, "dict_new failed"); +        goto out; +    } -        if (wordcount != 4) -                goto out; +    if (wordcount != 4) +        goto out; -        volname = (char *)words[2]; -        if (!volname) { -                ret = -1; -                goto out; -        } +    volname = (char *)words[2]; +    if (!volname) { +        ret = -1; +        goto out; +    } -        /* Validate the volume name here itself */ -        if (cli_validate_volname (volname) < 0) -                goto out; +    /* Validate the volume name here itself */ +    if (cli_validate_volname(volname) < 0) +        goto out; -        ret = dict_set_str (dict, "volname", volname); -        if (ret < 0) -                goto out; +    ret = dict_set_str(dict, "volname", volname); +    if (ret < 0) +        goto out; -        if (strcmp (words[3], "enable") != 0) { -                cli_out ("Invalid quota option : %s", words[3]); -                ret = -1; -                goto out; -        } +    if (strcmp(words[3], "enable") != 0) { +        cli_out("Invalid quota option : %s", words[3]); +        ret = -1; +        goto out; +    } -        ret = dict_set_int32 (dict, "type", -                              GF_QUOTA_OPTION_TYPE_ENABLE_OBJECTS); -        if (ret < 0) -                goto out; +    ret = dict_set_int32(dict, "type", GF_QUOTA_OPTION_TYPE_ENABLE_OBJECTS); +    if (ret < 0) +        goto out; -        *options = dict; +    *options = dict;  out: -        if (ret < 0) { -                if (dict) -                        dict_unref (dict); -        } +    if (ret < 0) { +        if (dict) +            dict_unref(dict); +    } -        return ret; +    return ret;  }  int32_t -cli_cmd_quota_parse (const char **words, int wordcount, dict_t **options) +cli_cmd_quota_parse(const char **words, int wordcount, dict_t **options)  { -        dict_t          *dict    = NULL; -        char            *volname = NULL; -        int              ret     = -1; -        int              i       = -1; -        char             key[20] = {0, }; -        int64_t          value   = 0; -        gf_quota_type    type    = GF_QUOTA_OPTION_TYPE_NONE; -        char           *opwords[] = { "enable", "disable", "limit-usage", -                                      "remove", "list", "alert-time", -                                      "soft-timeout", "hard-timeout", -                                      "default-soft-limit", "limit-objects", -                                      "list-objects", "remove-objects", NULL}; -        char            *w       = NULL; -        uint32_t         time    = 0; -        double           percent = 0; -        char            *end_ptr = NULL; -        int64_t          limit   = 0; - -        GF_ASSERT (words); -        GF_ASSERT (options); - -        dict = dict_new (); -        if (!dict) { -                gf_log ("cli", GF_LOG_ERROR, "dict_new failed"); -                goto out; -        } - -        if (wordcount < 4) { - -                if ((wordcount == 3) && !(strcmp (words[2], "help"))) { -                        ret = 1; -                } -                goto out; -        } +    dict_t *dict = NULL; +    char *volname = NULL; +    int ret = -1; +    int i = -1; +    char key[20] = { +        0, +    }; +    int64_t value = 0; +    gf_quota_type type = GF_QUOTA_OPTION_TYPE_NONE; +    char *opwords[] = {"enable", +                       "disable", +                       "limit-usage", +                       "remove", +                       "list", +                       "alert-time", +                       "soft-timeout", +                       "hard-timeout", +                       "default-soft-limit", +                       "limit-objects", +                       "list-objects", +                       "remove-objects", +                       NULL}; +    char *w = NULL; +    uint32_t time = 0; +    double percent = 0; +    char *end_ptr = NULL; +    int64_t limit = 0; + +    GF_ASSERT(words); +    GF_ASSERT(options); + +    dict = dict_new(); +    if (!dict) { +        gf_log("cli", GF_LOG_ERROR, "dict_new failed"); +        goto out; +    } -        volname = (char *)words[2]; -        if (!volname) { -                ret = -1; -                goto out; +    if (wordcount < 4) { +        if ((wordcount == 3) && !(strcmp(words[2], "help"))) { +            ret = 1;          } +        goto out; +    } -        /* Validate the volume name here itself */ -        if (cli_validate_volname (volname) < 0) -                goto out; +    volname = (char *)words[2]; +    if (!volname) { +        ret = -1; +        goto out; +    } -        ret = dict_set_str (dict, "volname", volname); -        if (ret < 0) -                goto out; +    /* Validate the volume name here itself */ +    if (cli_validate_volname(volname) < 0) +        goto out; -        w = str_getunamb (words[3], opwords); -        if (!w) { -                cli_out ("Invalid quota option : %s", words[3]); -                ret = - 1; -                goto out; -        } +    ret = dict_set_str(dict, "volname", volname); +    if (ret < 0) +        goto out; -        if (strcmp (w, "enable") == 0) { -                if (wordcount == 4) { -                        type = GF_QUOTA_OPTION_TYPE_ENABLE; -                        ret = 0; -                        goto set_type; -                } else { -                        ret = -1; -                        goto out; -                } -        } +    w = str_getunamb(words[3], opwords); +    if (!w) { +        cli_out("Invalid quota option : %s", words[3]); +        ret = -1; +        goto out; +    } -        if (strcmp (w, "disable") == 0) { -                if (wordcount == 4) { -                        type = GF_QUOTA_OPTION_TYPE_DISABLE; -                        ret = 0; -                        goto set_type; -                } else { -                        ret = -1; -                        goto out; -                } +    if (strcmp(w, "enable") == 0) { +        if (wordcount == 4) { +            type = GF_QUOTA_OPTION_TYPE_ENABLE; +            ret = 0; +            goto set_type; +        } else { +            ret = -1; +            goto out;          } +    } -        if (strcmp (w, "limit-usage") == 0) { -                type = GF_QUOTA_OPTION_TYPE_LIMIT_USAGE; -        } else if (strcmp (w, "limit-objects") == 0) { -                type = GF_QUOTA_OPTION_TYPE_LIMIT_OBJECTS; +    if (strcmp(w, "disable") == 0) { +        if (wordcount == 4) { +            type = GF_QUOTA_OPTION_TYPE_DISABLE; +            ret = 0; +            goto set_type; +        } else { +            ret = -1; +            goto out;          } +    } -        if (type == GF_QUOTA_OPTION_TYPE_LIMIT_USAGE || -            type == GF_QUOTA_OPTION_TYPE_LIMIT_OBJECTS) { +    if (strcmp(w, "limit-usage") == 0) { +        type = GF_QUOTA_OPTION_TYPE_LIMIT_USAGE; +    } else if (strcmp(w, "limit-objects") == 0) { +        type = GF_QUOTA_OPTION_TYPE_LIMIT_OBJECTS; +    } -                if (wordcount < 6 || wordcount > 7) { -                        ret = -1; -                        goto out; -                } +    if (type == GF_QUOTA_OPTION_TYPE_LIMIT_USAGE || +        type == GF_QUOTA_OPTION_TYPE_LIMIT_OBJECTS) { +        if (wordcount < 6 || wordcount > 7) { +            ret = -1; +            goto out; +        } -                if (words[4][0] != '/') { -                        cli_err ("Please enter absolute path"); -                        ret = -1; -                        goto out; -                } -                ret = dict_set_str (dict, "path", (char *) words[4]); -                if (ret) -                        goto out; +        if (words[4][0] != '/') { +            cli_err("Please enter absolute path"); +            ret = -1; +            goto out; +        } +        ret = dict_set_str(dict, "path", (char *)words[4]); +        if (ret) +            goto out; + +        if (!words[5]) { +            cli_err("Please enter the limit value to be set"); +            ret = -1; +            goto out; +        } + +        if (type == GF_QUOTA_OPTION_TYPE_LIMIT_USAGE) { +            ret = gf_string2bytesize_int64(words[5], &value); +            if (ret != 0 || value <= 0) { +                if (errno == ERANGE || value <= 0) { +                    ret = -1; +                    cli_err( +                        "Please enter an integer " +                        "value in the range of " +                        "(1 - %" PRId64 ")", +                        INT64_MAX); +                } else +                    cli_err( +                        "Please enter a correct " +                        "value"); +                goto out; +            } +        } else { +            errno = 0; +            limit = strtol(words[5], &end_ptr, 10); +            if (errno == ERANGE || errno == EINVAL || limit <= 0 || +                strcmp(end_ptr, "") != 0) { +                ret = -1; +                cli_err( +                    "Please enter an integer value in " +                    "the range 1 - %" PRId64, +                    INT64_MAX); +                goto out; +            } +        } -                if (!words[5]) { -                        cli_err ("Please enter the limit value to be set"); -                        ret = -1; -                        goto out; -                } +        ret = dict_set_str(dict, "hard-limit", (char *)words[5]); +        if (ret < 0) +            goto out; -                if (type == GF_QUOTA_OPTION_TYPE_LIMIT_USAGE) { -                        ret = gf_string2bytesize_int64 (words[5], &value); -                        if (ret != 0 || value <= 0) { -                                if (errno == ERANGE || value <= 0) { -                                        ret = -1; -                                        cli_err ("Please enter an integer " -                                                 "value in the range of " -                                                 "(1 - %"PRId64 ")", -                                                 INT64_MAX); -                                } else -                                        cli_err ("Please enter a correct " -                                                 "value"); -                                goto out; -                        } -                } else { -                        errno = 0; -                        limit = strtol (words[5], &end_ptr, 10); -                        if (errno == ERANGE || errno == EINVAL || limit <= 0 -                                            || strcmp (end_ptr, "") != 0) { -                                ret = -1; -                                cli_err ("Please enter an integer value in " -                                         "the range 1 - %"PRId64, INT64_MAX); -                                goto out; -                        } -                } +        if (wordcount == 7) { +            ret = gf_string2percent(words[6], &percent); +            if (ret != 0 || percent > 100) { +                ret = -1; +                cli_err( +                    "Please enter a correct value " +                    "in the range of 0 to 100"); +                goto out; +            } -                ret  = dict_set_str (dict, "hard-limit", (char *) words[5]); -                if (ret < 0) -                        goto out; +            ret = dict_set_str(dict, "soft-limit", (char *)words[6]); +            if (ret < 0) +                goto out; +        } -                if (wordcount == 7) { +        goto set_type; +    } -                        ret = gf_string2percent (words[6], &percent); -                        if (ret != 0 || percent > 100) { -                                ret = -1; -                                cli_err ("Please enter a correct value " -                                         "in the range of 0 to 100"); -                                goto out; -                        } +    if (strcmp(w, "remove") == 0) { +        if (wordcount != 5) { +            ret = -1; +            goto out; +        } -                        ret = dict_set_str (dict, "soft-limit", -                                            (char *) words[6]); -                        if (ret < 0) -                                goto out; -                } +        type = GF_QUOTA_OPTION_TYPE_REMOVE; -                goto set_type; +        if (words[4][0] != '/') { +            cli_err("Please enter absolute path"); +            ret = -1; +            goto out;          } -        if (strcmp (w, "remove") == 0) { -                if (wordcount != 5) { -                        ret = -1; -                        goto out; -                } +        ret = dict_set_str(dict, "path", (char *)words[4]); +        if (ret < 0) +            goto out; +        goto set_type; +    } -                type = GF_QUOTA_OPTION_TYPE_REMOVE; +    if (strcmp(w, "remove-objects") == 0) { +        if (wordcount != 5) { +            ret = -1; +            goto out; +        } -                if (words[4][0] != '/') { -                        cli_err ("Please enter absolute path"); -                        ret = -1; -                        goto out; -                } +        type = GF_QUOTA_OPTION_TYPE_REMOVE_OBJECTS; -                ret = dict_set_str (dict, "path", (char *) words[4]); -                if (ret < 0) -                        goto out; -                goto set_type; +        if (words[4][0] != '/') { +            cli_err("Please enter absolute path"); +            ret = -1; +            goto out;          } -        if (strcmp (w, "remove-objects") == 0) { -                if (wordcount != 5) { -                        ret = -1; -                        goto out; -                } - -                type = GF_QUOTA_OPTION_TYPE_REMOVE_OBJECTS; +        ret = dict_set_str(dict, "path", (char *)words[4]); +        if (ret < 0) +            goto out; +        goto set_type; +    } -                if (words[4][0] != '/') { -                        cli_err ("Please enter absolute path"); -                        ret = -1; -                        goto out; -                } +    if (strcmp(w, "list") == 0) { +        type = GF_QUOTA_OPTION_TYPE_LIST; -                ret = dict_set_str (dict, "path", (char *) words[4]); -                if (ret < 0) -                        goto out; -                goto set_type; +        if (words[4] && words[4][0] != '/') { +            cli_err("Please enter absolute path"); +            ret = -1; +            goto out;          } -        if (strcmp (w, "list") == 0) { +        i = 4; +        while (i < wordcount) { +            snprintf(key, 20, "path%d", i - 4); -                type = GF_QUOTA_OPTION_TYPE_LIST; +            ret = dict_set_str(dict, key, (char *)words[i++]); +            if (ret < 0) +                goto out; +        } -                if (words[4] && words[4][0] != '/') { -                        cli_err ("Please enter absolute path"); -                        ret = -1; -                        goto out; -                } +        ret = dict_set_int32(dict, "count", i - 4); +        if (ret < 0) +            goto out; -                i = 4; -                while (i < wordcount) { -                        snprintf (key, 20, "path%d", i-4); +        goto set_type; +    } -                        ret = dict_set_str (dict, key, (char *) words [i++]); -                        if (ret < 0) -                                goto out; -                } +    if (strcmp(w, "list-objects") == 0) { +        type = GF_QUOTA_OPTION_TYPE_LIST_OBJECTS; -                ret = dict_set_int32 (dict, "count", i - 4); -                if (ret < 0) -                        goto out; +        i = 4; +        while (i < wordcount) { +            snprintf(key, 20, "path%d", i - 4); -                goto set_type; +            ret = dict_set_str(dict, key, (char *)words[i++]); +            if (ret < 0) { +                gf_log("cli", GF_LOG_ERROR, +                       "Failed to set " +                       "quota patch in request dictionary"); +                goto out; +            }          } -        if (strcmp (w, "list-objects") == 0) { -                type = GF_QUOTA_OPTION_TYPE_LIST_OBJECTS; - -                i = 4; -                while (i < wordcount) { -                        snprintf (key, 20, "path%d", i-4); - -                        ret = dict_set_str (dict, key, (char *) words[i++]); -                        if (ret < 0) { -                                gf_log ("cli", GF_LOG_ERROR, "Failed to set " -                                        "quota patch in request dictionary"); -                                goto out; -                        } -                } - -                ret = dict_set_int32 (dict, "count", i - 4); -                if (ret < 0) { -                        gf_log ("cli", GF_LOG_ERROR, "Failed to set quota " -                                "limit count in request dictionary"); -                        goto out; -                } - -                goto set_type; +        ret = dict_set_int32(dict, "count", i - 4); +        if (ret < 0) { +            gf_log("cli", GF_LOG_ERROR, +                   "Failed to set quota " +                   "limit count in request dictionary"); +            goto out;          } -        if (strcmp (w, "alert-time") == 0) { -                if (wordcount != 5) { -                        ret = -1; -                        goto out; -                } -                type = GF_QUOTA_OPTION_TYPE_ALERT_TIME; +        goto set_type; +    } -                ret = gf_string2time (words[4], &time); -                if (ret) { -                        cli_err ("Invalid argument %s. Please enter a valid " -                                 "string", words[4]); -                        goto out; -                } +    if (strcmp(w, "alert-time") == 0) { +        if (wordcount != 5) { +            ret = -1; +            goto out; +        } +        type = GF_QUOTA_OPTION_TYPE_ALERT_TIME; -                ret = dict_set_str (dict, "value", (char *)words[4]); -                if (ret < 0) -                        goto out; -                goto set_type; +        ret = gf_string2time(words[4], &time); +        if (ret) { +            cli_err( +                "Invalid argument %s. Please enter a valid " +                "string", +                words[4]); +            goto out;          } -        if (strcmp (w, "soft-timeout") == 0) { -                if (wordcount != 5) { -                        ret = -1; -                        goto out; -                } -                type = GF_QUOTA_OPTION_TYPE_SOFT_TIMEOUT; +        ret = dict_set_str(dict, "value", (char *)words[4]); +        if (ret < 0) +            goto out; +        goto set_type; +    } -                ret = gf_string2time (words[4], &time); -                if (ret) { -                        cli_err ("Invalid argument %s. Please enter a valid " -                                 "string", words[4]); -                        goto out; -                } +    if (strcmp(w, "soft-timeout") == 0) { +        if (wordcount != 5) { +            ret = -1; +            goto out; +        } +        type = GF_QUOTA_OPTION_TYPE_SOFT_TIMEOUT; -                ret = dict_set_str (dict, "value", (char *)words[4]); -                if (ret < 0) -                        goto out; -                goto set_type; +        ret = gf_string2time(words[4], &time); +        if (ret) { +            cli_err( +                "Invalid argument %s. Please enter a valid " +                "string", +                words[4]); +            goto out;          } -        if (strcmp (w, "hard-timeout") == 0) { -                if(wordcount != 5) { -                        ret = -1; -                        goto out; -                } -                type = GF_QUOTA_OPTION_TYPE_HARD_TIMEOUT; +        ret = dict_set_str(dict, "value", (char *)words[4]); +        if (ret < 0) +            goto out; +        goto set_type; +    } -                ret = gf_string2time (words[4], &time); -                if (ret) { -                        cli_err ("Invalid argument %s. Please enter a valid " -                                 "string", words[4]); -                        goto out; -                } +    if (strcmp(w, "hard-timeout") == 0) { +        if (wordcount != 5) { +            ret = -1; +            goto out; +        } +        type = GF_QUOTA_OPTION_TYPE_HARD_TIMEOUT; -                ret = dict_set_str (dict, "value", (char *)words[4]); -                if (ret < 0) -                        goto out; -                goto set_type; +        ret = gf_string2time(words[4], &time); +        if (ret) { +            cli_err( +                "Invalid argument %s. Please enter a valid " +                "string", +                words[4]); +            goto out;          } -        if (strcmp (w, "default-soft-limit") == 0) { -                if(wordcount != 5) { -                        ret = -1; -                        goto out; -                } -                type = GF_QUOTA_OPTION_TYPE_DEFAULT_SOFT_LIMIT; -                ret = dict_set_str (dict, "value", (char *)words[4]); -                if (ret < 0) -                        goto out; -                goto set_type; -        } else { -                GF_ASSERT (!"opword mismatch"); +        ret = dict_set_str(dict, "value", (char *)words[4]); +        if (ret < 0) +            goto out; +        goto set_type; +    } +    if (strcmp(w, "default-soft-limit") == 0) { +        if (wordcount != 5) { +            ret = -1; +            goto out;          } +        type = GF_QUOTA_OPTION_TYPE_DEFAULT_SOFT_LIMIT; -set_type: -        ret = dict_set_int32 (dict, "type", type); +        ret = dict_set_str(dict, "value", (char *)words[4]);          if (ret < 0) -                goto out; +            goto out; +        goto set_type; +    } else { +        GF_ASSERT(!"opword mismatch"); +    } -        *options = dict; +set_type: +    ret = dict_set_int32(dict, "type", type); +    if (ret < 0) +        goto out; + +    *options = dict;  out: -        if (ret < 0) { -                if (dict) -                        dict_unref (dict); -        } +    if (ret < 0) { +        if (dict) +            dict_unref(dict); +    } -        return ret; +    return ret;  }  static gf_boolean_t -cli_is_key_spl (char *key) +cli_is_key_spl(char *key)  { -        return (strcmp (key, "group") == 0); +    return (strcmp(key, "group") == 0);  }  static int32_t  cli_add_key_group_value(dict_t *dict, const char *name, const char *value,                          int32_t id, char **op_errstr)  { -        char         *key  = NULL; -        char         *data = NULL; -        int32_t       ret  = -1; +    char *key = NULL; +    char *data = NULL; +    int32_t ret = -1; -        ret = gf_asprintf(&key, "%s%d", name, id); -        if (ret < 0) { -                goto out; -        } -        data = gf_strdup(value); -        if (data == NULL) { -                goto out; -        } +    ret = gf_asprintf(&key, "%s%d", name, id); +    if (ret < 0) { +        goto out; +    } +    data = gf_strdup(value); +    if (data == NULL) { +        goto out; +    } -        ret = dict_set_dynstr(dict, key, data); -        if (ret == 0) { -                data = NULL; -        } +    ret = dict_set_dynstr(dict, key, data); +    if (ret == 0) { +        data = NULL; +    }  out: -        GF_FREE(key); -        GF_FREE(data); +    GF_FREE(key); +    GF_FREE(data); -        if ((ret != 0) && (op_errstr != NULL)) { -                *op_errstr = gf_strdup("Failed to allocate memory"); -        } +    if ((ret != 0) && (op_errstr != NULL)) { +        *op_errstr = gf_strdup("Failed to allocate memory"); +    } -        return ret; +    return ret;  }  static int -cli_add_key_group (dict_t *dict, char *key, char *value, char **op_errstr) +cli_add_key_group(dict_t *dict, char *key, char *value, char **op_errstr)  { -        int             ret = -1; -        int             opt_count = 0; -        char            *saveptr = NULL; -        char            *tok_key = NULL; -        char            *tok_val = NULL; -        char            *tagpath = NULL; -        char            line[PATH_MAX + 256] = {0,}; -        FILE            *fp = NULL; - -        ret = gf_asprintf (&tagpath, "%s/groups/%s", -                           GLUSTERD_DEFAULT_WORKDIR, value); -        if (ret == -1) { -                tagpath = NULL; -                goto out; -        } - -        fp = fopen (tagpath, "r"); -        if (!fp) { -                ret = -1; -                if (op_errstr) { -                        gf_asprintf(op_errstr, "Unable to open file '%s'. " -                                               "Error: %s", -                                    tagpath, strerror(errno)); -                } -                goto out; -        } - -        opt_count = 0; -        while (fgets(line, sizeof(line), fp) != NULL) { -                if (strlen(line) >= sizeof(line) - 1) { -                        ret = -1; -                        if (op_errstr != NULL) { -                                *op_errstr = gf_strdup("Line too long"); -                        } -                        goto out; -                } -                opt_count++; -                tok_key = strtok_r (line, "=", &saveptr); -                tok_val = strtok_r (NULL, "\r\n", &saveptr); -                if (!tok_key || !tok_val) { -                        ret = -1; -                        if (op_errstr) { -                                gf_asprintf(op_errstr, "'%s' file format " -                                                       "not valid.", -                                            tagpath); -                        } -                        goto out; -                } +    int ret = -1; +    int opt_count = 0; +    char *saveptr = NULL; +    char *tok_key = NULL; +    char *tok_val = NULL; +    char *tagpath = NULL; +    char line[PATH_MAX + 256] = { +        0, +    }; +    FILE *fp = NULL; + +    ret = gf_asprintf(&tagpath, "%s/groups/%s", GLUSTERD_DEFAULT_WORKDIR, +                      value); +    if (ret == -1) { +        tagpath = NULL; +        goto out; +    } -                ret = cli_add_key_group_value(dict, "key", tok_key, opt_count, -                                              op_errstr); -                if (ret != 0) { -                        goto out; -                } -                ret = cli_add_key_group_value(dict, "value", tok_val, -                                              opt_count, op_errstr); -                if (ret != 0) { -                        goto out; -                } +    fp = fopen(tagpath, "r"); +    if (!fp) { +        ret = -1; +        if (op_errstr) { +            gf_asprintf(op_errstr, +                        "Unable to open file '%s'. " +                        "Error: %s", +                        tagpath, strerror(errno));          } - -        if (!opt_count) { -                ret = -1; -                if (op_errstr) { -                        gf_asprintf(op_errstr, "'%s' file format not valid.", -                                    tagpath); -                } -                goto out; +        goto out; +    } + +    opt_count = 0; +    while (fgets(line, sizeof(line), fp) != NULL) { +        if (strlen(line) >= sizeof(line) - 1) { +            ret = -1; +            if (op_errstr != NULL) { +                *op_errstr = gf_strdup("Line too long"); +            } +            goto out; +        } +        opt_count++; +        tok_key = strtok_r(line, "=", &saveptr); +        tok_val = strtok_r(NULL, "\r\n", &saveptr); +        if (!tok_key || !tok_val) { +            ret = -1; +            if (op_errstr) { +                gf_asprintf(op_errstr, +                            "'%s' file format " +                            "not valid.", +                            tagpath); +            } +            goto out; +        } + +        ret = cli_add_key_group_value(dict, "key", tok_key, opt_count, +                                      op_errstr); +        if (ret != 0) { +            goto out; +        } +        ret = cli_add_key_group_value(dict, "value", tok_val, opt_count, +                                      op_errstr); +        if (ret != 0) { +            goto out; +        } +    } + +    if (!opt_count) { +        ret = -1; +        if (op_errstr) { +            gf_asprintf(op_errstr, "'%s' file format not valid.", tagpath);          } -        ret = dict_set_int32 (dict, "count", opt_count); +        goto out; +    } +    ret = dict_set_int32(dict, "count", opt_count);  out: -        GF_FREE (tagpath); +    GF_FREE(tagpath); -        if (fp) -                fclose (fp); +    if (fp) +        fclose(fp); -        return ret; +    return ret;  }  int32_t -cli_cmd_volume_set_parse (struct cli_state *state, const char **words, -                          int wordcount, dict_t **options, char **op_errstr) +cli_cmd_volume_set_parse(struct cli_state *state, const char **words, +                         int wordcount, dict_t **options, char **op_errstr)  { -        dict_t                 *dict      = NULL; -        char                   *volname   = NULL; -        int                     ret       = -1; -        int                     count     = 0; -        char                   *key       = NULL; -        char                   *value     = NULL; -        int                     i         = 0; -        char                    str[50]   = {0,}; -        const char             *question  = NULL; -        gf_answer_t             answer    = GF_ANSWER_NO; - -        GF_ASSERT (words); -        GF_ASSERT (options); - -        dict = dict_new (); - -        if (!dict) -                goto out; - -        if (wordcount < 3) -                goto out; +    dict_t *dict = NULL; +    char *volname = NULL; +    int ret = -1; +    int count = 0; +    char *key = NULL; +    char *value = NULL; +    int i = 0; +    char str[50] = { +        0, +    }; +    const char *question = NULL; +    gf_answer_t answer = GF_ANSWER_NO; + +    GF_ASSERT(words); +    GF_ASSERT(options); + +    dict = dict_new(); + +    if (!dict) +        goto out; -        volname = (char *)words[2]; +    if (wordcount < 3) +        goto out; -        GF_ASSERT (volname); +    volname = (char *)words[2]; -        ret = dict_set_str (dict, "volname", volname); +    GF_ASSERT(volname); -        if (ret) -                goto out; +    ret = dict_set_str(dict, "volname", volname); -        if (!strcmp (volname, "all")) { -                ret = dict_set_str (dict, "globalname", "All"); -                if (ret) { -                        gf_log (THIS->name, GF_LOG_ERROR, -                                "dict set on global key failed."); -                        goto out; -                } +    if (ret) +        goto out; -                ret = dict_set_int32 (dict, "hold_global_locks", _gf_true); -                if (ret) { -                        gf_log (THIS->name, GF_LOG_ERROR, -                                "dict set on global key failed."); -                        goto out; -                } +    if (!strcmp(volname, "all")) { +        ret = dict_set_str(dict, "globalname", "All"); +        if (ret) { +            gf_log(THIS->name, GF_LOG_ERROR, "dict set on global key failed."); +            goto out;          } -        if ((!strcmp (volname, "help") || !strcmp (volname, "help-xml")) -            && wordcount == 3 ) { -                ret = dict_set_str (dict, volname, volname); -                if (ret) -                        goto out; +        ret = dict_set_int32(dict, "hold_global_locks", _gf_true); +        if (ret) { +            gf_log(THIS->name, GF_LOG_ERROR, "dict set on global key failed."); +            goto out; +        } +    } -        } else if (wordcount < 5) { -                ret = -1; -                goto out; +    if ((!strcmp(volname, "help") || !strcmp(volname, "help-xml")) && +        wordcount == 3) { +        ret = dict_set_str(dict, volname, volname); +        if (ret) +            goto out; -        } else if (wordcount == 5  && cli_is_key_spl ((char *)words[3])) { -                key = (char *) words[3]; -                value = (char *) words[4]; -                if ( !key || !value) { -                        ret = -1; -                        goto out; -                } +    } else if (wordcount < 5) { +        ret = -1; +        goto out; -                ret = gf_strip_whitespace (value, strlen (value)); -                if (ret == -1) -                        goto out; +    } else if (wordcount == 5 && cli_is_key_spl((char *)words[3])) { +        key = (char *)words[3]; +        value = (char *)words[4]; +        if (!key || !value) { +            ret = -1; +            goto out; +        } -                if (strlen (value) == 0) { -                        ret = -1; -                        goto out; -                } +        ret = gf_strip_whitespace(value, strlen(value)); +        if (ret == -1) +            goto out; -                ret = cli_add_key_group (dict, key, value, op_errstr); -                if (ret == 0) -                        *options = dict; -                goto out; +        if (strlen(value) == 0) { +            ret = -1; +            goto out;          } -        for (i = 3; i < wordcount; i+=2) { - -                key = (char *) words[i]; -                value = (char *) words[i+1]; +        ret = cli_add_key_group(dict, key, value, op_errstr); +        if (ret == 0) +            *options = dict; +        goto out; +    } -                if ( !key || !value) { -                        ret = -1; -                        goto out; -                } +    for (i = 3; i < wordcount; i += 2) { +        key = (char *)words[i]; +        value = (char *)words[i + 1]; -                count++; +        if (!key || !value) { +            ret = -1; +            goto out; +        } -                if (fnmatch ("user.*", key, FNM_NOESCAPE) != 0) { -                        ret = gf_strip_whitespace (value, strlen (value)); -                        if (ret == -1) -                                goto out; -                } +        count++; -                if (strlen (value) == 0) { -                        ret = -1; -                        goto out; -                } +        if (fnmatch("user.*", key, FNM_NOESCAPE) != 0) { +            ret = gf_strip_whitespace(value, strlen(value)); +            if (ret == -1) +                goto out; +        } -                if (cli_is_key_spl (key)) { -                        ret = -1; -                        goto out; -                } +        if (strlen(value) == 0) { +            ret = -1; +            goto out; +        } -                sprintf (str, "key%d", count); -                ret = dict_set_str (dict, str, key); -                if (ret) -                        goto out; +        if (cli_is_key_spl(key)) { +            ret = -1; +            goto out; +        } -                sprintf (str, "value%d", count); -                ret = dict_set_str (dict, str, value); +        sprintf(str, "key%d", count); +        ret = dict_set_str(dict, str, key); +        if (ret) +            goto out; -                if (ret) -                        goto out; +        sprintf(str, "value%d", count); +        ret = dict_set_str(dict, str, value); -                if ((!strcmp (key, "cluster.enable-shared-storage")) && -                    (!strcmp (value, "disable"))) { -                        question = "Disabling cluster.enable-shared-storage " -                                   "will delete the shared storage volume" -                                   "(gluster_shared_storage), which is used " -                                   "by snapshot scheduler, geo-replication " -                                   "and NFS-Ganesha. Do you still want to " -                                   "continue?"; -                        answer = cli_cmd_get_confirmation (state, question); -                        if (GF_ANSWER_NO == answer) { -                                gf_log ("cli", GF_LOG_ERROR, "Operation " -                                        "cancelled, exiting"); -                                *op_errstr = gf_strdup ("Aborted by user."); -                                ret = -1; -                                goto out; -                        } -                } -                if ((!strcmp (key, "nfs.disable")) && -                            (!strcmp (value, "off"))) { -                        question = "Gluster NFS is being deprecated in favor " -                                   "of NFS-Ganesha Enter \"yes\" to continue " -                                   "using Gluster NFS"; -                        answer = cli_cmd_get_confirmation (state, question); -                        if (GF_ANSWER_NO == answer) { -                                gf_log ("cli", GF_LOG_ERROR, "Operation " -                                        "cancelled, exiting"); -                                *op_errstr = gf_strdup ("Aborted by user."); -                                ret = -1; -                                goto out; -                        } -                } +        if (ret) +            goto out; + +        if ((!strcmp(key, "cluster.enable-shared-storage")) && +            (!strcmp(value, "disable"))) { +            question = +                "Disabling cluster.enable-shared-storage " +                "will delete the shared storage volume" +                "(gluster_shared_storage), which is used " +                "by snapshot scheduler, geo-replication " +                "and NFS-Ganesha. Do you still want to " +                "continue?"; +            answer = cli_cmd_get_confirmation(state, question); +            if (GF_ANSWER_NO == answer) { +                gf_log("cli", GF_LOG_ERROR, +                       "Operation " +                       "cancelled, exiting"); +                *op_errstr = gf_strdup("Aborted by user."); +                ret = -1; +                goto out; +            } +        } +        if ((!strcmp(key, "nfs.disable")) && (!strcmp(value, "off"))) { +            question = +                "Gluster NFS is being deprecated in favor " +                "of NFS-Ganesha Enter \"yes\" to continue " +                "using Gluster NFS"; +            answer = cli_cmd_get_confirmation(state, question); +            if (GF_ANSWER_NO == answer) { +                gf_log("cli", GF_LOG_ERROR, +                       "Operation " +                       "cancelled, exiting"); +                *op_errstr = gf_strdup("Aborted by user."); +                ret = -1; +                goto out; +            }          } +    } -        ret = dict_set_int32 (dict, "count", wordcount-3); +    ret = dict_set_int32(dict, "count", wordcount - 3); -        if (ret) -                goto out; +    if (ret) +        goto out; -        *options = dict; +    *options = dict;  out: -        if (ret && dict) -                dict_unref (dict); +    if (ret && dict) +        dict_unref(dict); -        return ret; +    return ret;  }  int32_t -cli_cmd_volume_add_brick_parse (struct cli_state *state, const char **words, -                                int wordcount, dict_t **options, int *ret_type) +cli_cmd_volume_add_brick_parse(struct cli_state *state, const char **words, +                               int wordcount, dict_t **options, int *ret_type)  { -        dict_t  *dict = NULL; -        char    *volname = NULL; -        int     ret = -1; -        int     brick_count = 0, brick_index = 0; -        char    *bricks = NULL; -        char    *opwords_cl[] = { "replica", "stripe", NULL }; -        gf1_cluster_type type = GF_CLUSTER_TYPE_NONE; -        int     count = 1; -        int     arbiter_count = 0; -        char    *w = NULL; -        int     index; -        gf_boolean_t is_force = _gf_false; -        int wc = wordcount; -        gf_answer_t answer = GF_ANSWER_NO; -        const char *question = NULL; - -        GF_ASSERT (words); -        GF_ASSERT (options); - -        dict = dict_new (); - -        if (!dict) -                goto out; - -        if (wordcount < 3) -                goto out; +    dict_t *dict = NULL; +    char *volname = NULL; +    int ret = -1; +    int brick_count = 0, brick_index = 0; +    char *bricks = NULL; +    char *opwords_cl[] = {"replica", "stripe", NULL}; +    gf1_cluster_type type = GF_CLUSTER_TYPE_NONE; +    int count = 1; +    int arbiter_count = 0; +    char *w = NULL; +    int index; +    gf_boolean_t is_force = _gf_false; +    int wc = wordcount; +    gf_answer_t answer = GF_ANSWER_NO; +    const char *question = NULL; + +    GF_ASSERT(words); +    GF_ASSERT(options); + +    dict = dict_new(); + +    if (!dict) +        goto out; -        volname = (char *)words[2]; +    if (wordcount < 3) +        goto out; -        GF_ASSERT (volname); +    volname = (char *)words[2]; -        ret = dict_set_str (dict, "volname", volname); +    GF_ASSERT(volname); -        if (ret) -                goto out; +    ret = dict_set_str(dict, "volname", volname); -        if (wordcount < 4) { -                ret = -1; -                goto out; -        } -        if (wordcount < 6) { -                /* seems no options are given, go directly to the parse_brick */ -                brick_index = 3; -                type = GF_CLUSTER_TYPE_NONE; -                goto parse_bricks; -        } +    if (ret) +        goto out; -        w = str_getunamb (words[3], opwords_cl); -        if (!w) { -                type = GF_CLUSTER_TYPE_NONE; -                index = 3; -        } else if ((strcmp (w, "replica")) == 0) { -                type = GF_CLUSTER_TYPE_REPLICATE; -                count = strtol (words[4], NULL, 0); -                if (!count || (count < 2)) { -                        cli_err ("replica count should be greater than 1"); -                        ret = -1; -                        goto out; -                } -                ret = dict_set_int32 (dict, "replica-count", count); -                if (ret) -                        goto out; -                index = 5; -                if (words[index] && !strcmp (words[index], "arbiter")) { -                        arbiter_count = strtol (words[6], NULL, 0); -                        if (arbiter_count != 1 || count != 3) { -                                cli_err ("For arbiter configuration, replica " -                                         "count must be 3 and arbiter count " -                                         "must be 1. The 3rd brick of the " -                                         "replica will be the arbiter"); -                                ret = -1; -                                goto out; -                        } -                        ret = dict_set_int32 (dict, "arbiter-count", -                                              arbiter_count); -                        if (ret) -                                goto out; -                        index = 7; -                } +    if (wordcount < 4) { +        ret = -1; +        goto out; +    } +    if (wordcount < 6) { +        /* seems no options are given, go directly to the parse_brick */ +        brick_index = 3; +        type = GF_CLUSTER_TYPE_NONE; +        goto parse_bricks; +    } -                if (count == 2) { -                        if (strcmp (words[wordcount - 1], "force")) { -                                question = "Replica 2 volumes are prone to " -                                           "split-brain. Use Arbiter or " -                                           "Replica 3 to avaoid this. See: " -                                           "http://docs.gluster.org/en/latest/Administrator%20Guide/Split%20brain%20and%20ways%20to%20deal%20with%20it/." -                                           "\nDo you still want to continue?\n"; -                                answer = cli_cmd_get_confirmation (state, -                                                                   question); -                                if (GF_ANSWER_NO == answer) { -                                        gf_log ("cli", GF_LOG_ERROR, "Add brick" -                                                " cancelled, exiting"); -                                        ret = -1; -                                        goto out; -                                } -                        } -                } -        } else if ((strcmp (w, "stripe")) == 0) { -                type = GF_CLUSTER_TYPE_STRIPE; -                count = strtol (words[4], NULL, 0); -                if (!count || (count < 2)) { -                        cli_err ("stripe count should be greater than 1"); -                        ret = -1; -                        goto out; -                } -                ret = dict_set_int32 (dict, "stripe-count", count); -                if (ret) -                        goto out; -                index = 5; -        } else { -                GF_ASSERT (!"opword mismatch"); +    w = str_getunamb(words[3], opwords_cl); +    if (!w) { +        type = GF_CLUSTER_TYPE_NONE; +        index = 3; +    } else if ((strcmp(w, "replica")) == 0) { +        type = GF_CLUSTER_TYPE_REPLICATE; +        count = strtol(words[4], NULL, 0); +        if (!count || (count < 2)) { +            cli_err("replica count should be greater than 1"); +            ret = -1; +            goto out; +        } +        ret = dict_set_int32(dict, "replica-count", count); +        if (ret) +            goto out; +        index = 5; +        if (words[index] && !strcmp(words[index], "arbiter")) { +            arbiter_count = strtol(words[6], NULL, 0); +            if (arbiter_count != 1 || count != 3) { +                cli_err( +                    "For arbiter configuration, replica " +                    "count must be 3 and arbiter count " +                    "must be 1. The 3rd brick of the " +                    "replica will be the arbiter");                  ret = -1;                  goto out; +            } +            ret = dict_set_int32(dict, "arbiter-count", arbiter_count); +            if (ret) +                goto out; +            index = 7;          } -        brick_index = index; +        if (count == 2) { +            if (strcmp(words[wordcount - 1], "force")) { +                question = +                    "Replica 2 volumes are prone to " +                    "split-brain. Use Arbiter or " +                    "Replica 3 to avaoid this. See: " +                    "http://docs.gluster.org/en/latest/Administrator%20Guide/" +                    "Split%20brain%20and%20ways%20to%20deal%20with%20it/." +                    "\nDo you still want to continue?\n"; +                answer = cli_cmd_get_confirmation(state, question); +                if (GF_ANSWER_NO == answer) { +                    gf_log("cli", GF_LOG_ERROR, +                           "Add brick" +                           " cancelled, exiting"); +                    ret = -1; +                    goto out; +                } +            } +        } +    } else if ((strcmp(w, "stripe")) == 0) { +        type = GF_CLUSTER_TYPE_STRIPE; +        count = strtol(words[4], NULL, 0); +        if (!count || (count < 2)) { +            cli_err("stripe count should be greater than 1"); +            ret = -1; +            goto out; +        } +        ret = dict_set_int32(dict, "stripe-count", count); +        if (ret) +            goto out; +        index = 5; +    } else { +        GF_ASSERT(!"opword mismatch"); +        ret = -1; +        goto out; +    } + +    brick_index = index;  parse_bricks: -        if (strcmp (words[wordcount - 1], "force") == 0) { -                is_force = _gf_true; -                wc = wordcount - 1; -        } +    if (strcmp(words[wordcount - 1], "force") == 0) { +        is_force = _gf_true; +        wc = wordcount - 1; +    } -        ret = cli_cmd_bricks_parse (words, wc, brick_index, &bricks, -                                    &brick_count); -        if (ret) -                goto out; +    ret = cli_cmd_bricks_parse(words, wc, brick_index, &bricks, &brick_count); +    if (ret) +        goto out; -        ret = dict_set_dynstr (dict, "bricks", bricks); -        if (ret) -                goto out; +    ret = dict_set_dynstr(dict, "bricks", bricks); +    if (ret) +        goto out; -        ret = dict_set_int32 (dict, "count", brick_count); +    ret = dict_set_int32(dict, "count", brick_count); -        if (ret) -                goto out; +    if (ret) +        goto out; -        ret = dict_set_int32 (dict, "force", is_force); -        if (ret) -                goto out; +    ret = dict_set_int32(dict, "force", is_force); +    if (ret) +        goto out; -        *options = dict; +    *options = dict;  out: -        if (ret_type) -                *ret_type = type; +    if (ret_type) +        *ret_type = type; -        if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Unable to parse add-brick CLI"); -                if (dict) -                        dict_unref (dict); -        } +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, "Unable to parse add-brick CLI"); +        if (dict) +            dict_unref(dict); +    } -        return ret; +    return ret;  }  int32_t -cli_cmd_volume_tier_parse (const char **words, int wordcount, -                           dict_t **options) +cli_cmd_volume_tier_parse(const char **words, int wordcount, dict_t **options)  { -        dict_t  *dict    = NULL; -        char    *volname = NULL; -        int      ret     = -1; -        int32_t  command = GF_DEFRAG_CMD_NONE; -        int32_t  is_force    = 0; +    dict_t *dict = NULL; +    char *volname = NULL; +    int ret = -1; +    int32_t command = GF_DEFRAG_CMD_NONE; +    int32_t is_force = 0; -        GF_ASSERT (words); -        GF_ASSERT (options); +    GF_ASSERT(words); +    GF_ASSERT(options); -        dict = dict_new (); +    dict = dict_new(); -        if (!dict) -                goto out; +    if (!dict) +        goto out; -        if (!(wordcount == 4 || wordcount == 5)) { -                gf_log ("cli", GF_LOG_ERROR, "Invalid Syntax"); -                ret = -1; -                goto out; -        } +    if (!(wordcount == 4 || wordcount == 5)) { +        gf_log("cli", GF_LOG_ERROR, "Invalid Syntax"); +        ret = -1; +        goto out; +    } -        volname = (char *)words[2]; +    volname = (char *)words[2]; -        GF_ASSERT (volname); +    GF_ASSERT(volname); -        ret = cli_cmd_validate_volume (volname); -        if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Failed to validate volume name"); -                goto out; -        } +    ret = cli_cmd_validate_volume(volname); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, "Failed to validate volume name"); +        goto out; +    } -        ret = dict_set_str (dict, "volname", volname); +    ret = dict_set_str(dict, "volname", volname); -        if (ret) -                goto out; +    if (ret) +        goto out; -        volname = (char *)words[2]; -        if (wordcount == 4) { -                if (!strcmp(words[3], "status")) -                        command = GF_DEFRAG_CMD_STATUS_TIER; -                else if (!strcmp(words[3], "start")) -                        command = GF_DEFRAG_CMD_START_TIER; -                else if (!strcmp(words[3], "stop")) -                        command = GF_DEFRAG_CMD_STOP_TIER; -                else { -                        ret = -1; -                        goto out; -                } -        } else if (wordcount == 5) { -                if ((!strcmp (words[3], "start")) && -                    (!strcmp (words[4], "force"))) { -                        command = GF_DEFRAG_CMD_START_TIER; -                        is_force = 1; -                        ret = dict_set_int32 (dict, "force", is_force); -                        if (ret) -                                goto out; -                } else { -                        ret = -1; -                        goto out; -                } +    volname = (char *)words[2]; +    if (wordcount == 4) { +        if (!strcmp(words[3], "status")) +            command = GF_DEFRAG_CMD_STATUS_TIER; +        else if (!strcmp(words[3], "start")) +            command = GF_DEFRAG_CMD_START_TIER; +        else if (!strcmp(words[3], "stop")) +            command = GF_DEFRAG_CMD_STOP_TIER; +        else { +            ret = -1; +            goto out; +        } +    } else if (wordcount == 5) { +        if ((!strcmp(words[3], "start")) && (!strcmp(words[4], "force"))) { +            command = GF_DEFRAG_CMD_START_TIER; +            is_force = 1; +            ret = dict_set_int32(dict, "force", is_force); +            if (ret) +                goto out; +        } else { +            ret = -1; +            goto out;          } +    } -        ret = dict_set_int32 (dict, "rebalance-command", command); -        if (ret) -                goto out; +    ret = dict_set_int32(dict, "rebalance-command", command); +    if (ret) +        goto out; -        *options = dict; +    *options = dict;  out: -        if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Unable to parse tier CLI"); -                if (dict) -                        dict_unref (dict); -        } +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, "Unable to parse tier CLI"); +        if (dict) +            dict_unref(dict); +    } -        return ret; +    return ret;  }  int32_t -cli_cmd_volume_detach_tier_parse (const char **words, int wordcount, -                                  dict_t **options, int *question) +cli_cmd_volume_detach_tier_parse(const char **words, int wordcount, +                                 dict_t **options, int *question)  { -        int      ret = -1; -        char    *word = NULL; -        dict_t  *dict = NULL; -        int32_t  command = GF_DEFRAG_CMD_NONE; - -        dict = dict_new (); -        if (!dict) -                goto out; - -        ret = dict_set_str (dict, "volname", (char *)words[2]); -        if (ret) -                goto out; +    int ret = -1; +    char *word = NULL; +    dict_t *dict = NULL; +    int32_t command = GF_DEFRAG_CMD_NONE; -        if (wordcount == 3 && !strcmp ((char *)words[2], "help")) { -                return -1; -        } +    dict = dict_new(); +    if (!dict) +        goto out; -        if (wordcount != 4) { -                ret = -1; -                goto out; -        } +    ret = dict_set_str(dict, "volname", (char *)words[2]); +    if (ret) +        goto out; -        word = (char *)words[3]; +    if (wordcount == 3 && !strcmp((char *)words[2], "help")) { +        return -1; +    } +    if (wordcount != 4) {          ret = -1; +        goto out; +    } + +    word = (char *)words[3]; + +    ret = -1; + +    if (!strcmp(word, "start")) { +        command = GF_DEFRAG_CMD_DETACH_START; +    } else if (!strcmp(word, "commit")) { +        *question = 1; +        command = GF_DEFRAG_CMD_DETACH_COMMIT; +    } else if (!strcmp(word, "force")) { +        *question = 1; +        command = GF_DEFRAG_CMD_DETACH_COMMIT_FORCE; +    } else if (!strcmp(word, "stop")) +        command = GF_DEFRAG_CMD_DETACH_STOP; +    else if (!strcmp(word, "status")) +        command = GF_DEFRAG_CMD_DETACH_STATUS; +    else +        goto out; -        if (!strcmp(word, "start")) { -                command = GF_DEFRAG_CMD_DETACH_START; -        } else if (!strcmp(word, "commit")) { -                *question = 1; -                command = GF_DEFRAG_CMD_DETACH_COMMIT; -        } else if (!strcmp(word, "force")) { -                *question = 1; -                command = GF_DEFRAG_CMD_DETACH_COMMIT_FORCE; -        } else if (!strcmp(word, "stop")) -                command = GF_DEFRAG_CMD_DETACH_STOP; -        else if (!strcmp(word, "status")) -                command = GF_DEFRAG_CMD_DETACH_STATUS; -        else -                goto out; - -        ret = dict_set_int32 (dict, "command", command); -        if (ret) -                goto out; +    ret = dict_set_int32(dict, "command", command); +    if (ret) +        goto out; -        *options = dict; -        ret = 0; +    *options = dict; +    ret = 0;  out: -        if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Unable to parse detach tier CLI"); -                if (dict) -                        dict_unref (dict); -        } +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, "Unable to parse detach tier CLI"); +        if (dict) +            dict_unref(dict); +    } -        return ret; +    return ret;  }  int32_t -cli_cmd_volume_remove_brick_parse (struct cli_state *state, const char **words, -                                   int wordcount, dict_t **options, -                                   int *question, int *brick_count, -                                   int32_t *comm) +cli_cmd_volume_remove_brick_parse(struct cli_state *state, const char **words, +                                  int wordcount, dict_t **options, +                                  int *question, int *brick_count, +                                  int32_t *comm)  { -        dict_t  *dict = NULL; -        char    *volname = NULL; -        char    *delimiter = NULL; -        int     ret = -1; -        char    key[50]; -        int     brick_index = 0; -        int32_t tmp_index = 0; -        int32_t j = 0; -        char    *tmp_brick = NULL; -        char    *tmp_brick1 = NULL; -        char    *type_opword[] = { "replica", NULL }; -        char    *opwords[] = { "start", "commit", "stop", "status", -                               "force", NULL }; -        char    *w = NULL; -        int32_t  command = GF_OP_CMD_NONE; -        long     count = 0; -        gf_answer_t answer = GF_ANSWER_NO; -        const char *ques = NULL; - -        GF_ASSERT (words); -        GF_ASSERT (options); - -        if (wordcount < 5) -                goto out; - -        dict = dict_new (); -        if (!dict) -                goto out; +    dict_t *dict = NULL; +    char *volname = NULL; +    char *delimiter = NULL; +    int ret = -1; +    char key[50]; +    int brick_index = 0; +    int32_t tmp_index = 0; +    int32_t j = 0; +    char *tmp_brick = NULL; +    char *tmp_brick1 = NULL; +    char *type_opword[] = {"replica", NULL}; +    char *opwords[] = {"start", "commit", "stop", "status", "force", NULL}; +    char *w = NULL; +    int32_t command = GF_OP_CMD_NONE; +    long count = 0; +    gf_answer_t answer = GF_ANSWER_NO; +    const char *ques = NULL; + +    GF_ASSERT(words); +    GF_ASSERT(options); + +    if (wordcount < 5) +        goto out; -        volname = (char *)words[2]; +    dict = dict_new(); +    if (!dict) +        goto out; -        GF_ASSERT (volname); +    volname = (char *)words[2]; -        ret = dict_set_str (dict, "volname", volname); -        if (ret) -                goto out; +    GF_ASSERT(volname); -        brick_index = 3; -        w = str_getunamb (words[3], type_opword); -        if (w && !strcmp ("replica", w)) { -                if (wordcount < 6) { -                        ret = -1; -                        goto out; -                } -                count = strtol (words[4], NULL, 0); -                if (count < 1) { -                        cli_err ("replica count should be greater than 0 in " -                                 "case of remove-brick"); -                        ret = -1; -                        goto out; -                } +    ret = dict_set_str(dict, "volname", volname); +    if (ret) +        goto out; -                if (count == 2) { -                        if (strcmp (words[wordcount - 1], "force")) { -                                ques = "Replica 2 volumes are prone to " -                                       "split-brain. Use Arbiter or Replica 3 " -                                       "to avaoid this. See: " -                                       "http://docs.gluster.org/en/latest/Administrator%20Guide/Split%20brain%20and%20ways%20to%20deal%20with%20it/." -                                       "\nDo you still want to continue?\n"; -                                answer = cli_cmd_get_confirmation (state, -                                                                   ques); -                                if (GF_ANSWER_NO == answer) { -                                        gf_log ("cli", GF_LOG_ERROR, "Remove " -                                                "brick cancelled, exiting"); -                                        ret = -1; -                                        goto out; -                                } -                        } +    brick_index = 3; +    w = str_getunamb(words[3], type_opword); +    if (w && !strcmp("replica", w)) { +        if (wordcount < 6) { +            ret = -1; +            goto out; +        } +        count = strtol(words[4], NULL, 0); +        if (count < 1) { +            cli_err( +                "replica count should be greater than 0 in " +                "case of remove-brick"); +            ret = -1; +            goto out; +        } + +        if (count == 2) { +            if (strcmp(words[wordcount - 1], "force")) { +                ques = +                    "Replica 2 volumes are prone to " +                    "split-brain. Use Arbiter or Replica 3 " +                    "to avaoid this. See: " +                    "http://docs.gluster.org/en/latest/Administrator%20Guide/" +                    "Split%20brain%20and%20ways%20to%20deal%20with%20it/." +                    "\nDo you still want to continue?\n"; +                answer = cli_cmd_get_confirmation(state, ques); +                if (GF_ANSWER_NO == answer) { +                    gf_log("cli", GF_LOG_ERROR, +                           "Remove " +                           "brick cancelled, exiting"); +                    ret = -1; +                    goto out;                  } - -                ret = dict_set_int32 (dict, "replica-count", count); -                if (ret) -                        goto out; -                brick_index = 5; -        } else if (w) { -                GF_ASSERT (!"opword mismatch"); +            }          } -        w = str_getunamb (words[wordcount - 1], opwords); -        if (!w) { -                ret = -1; -                goto out; +        ret = dict_set_int32(dict, "replica-count", count); +        if (ret) +            goto out; +        brick_index = 5; +    } else if (w) { +        GF_ASSERT(!"opword mismatch"); +    } + +    w = str_getunamb(words[wordcount - 1], opwords); +    if (!w) { +        ret = -1; +        goto out; +    } else { +        /* handled this option */ +        wordcount--; +        if (!strcmp("start", w)) { +            command = GF_OP_CMD_START; +            if (question) +                *question = 1; +        } else if (!strcmp("commit", w)) { +            command = GF_OP_CMD_COMMIT; +        } else if (!strcmp("stop", w)) { +            command = GF_OP_CMD_STOP; +        } else if (!strcmp("status", w)) { +            command = GF_OP_CMD_STATUS; +        } else if (!strcmp("force", w)) { +            command = GF_OP_CMD_COMMIT_FORCE; +            if (question) +                *question = 1;          } else { -                /* handled this option */ -                wordcount--; -                if (!strcmp ("start", w)) { -                        command = GF_OP_CMD_START; -                        if (question) -                                *question = 1; -                } else if (!strcmp ("commit", w)) { -                        command = GF_OP_CMD_COMMIT; -                } else if (!strcmp ("stop", w)) { -                        command = GF_OP_CMD_STOP; -                } else if (!strcmp ("status", w)) { -                        command = GF_OP_CMD_STATUS; -                } else if (!strcmp ("force", w)) { -                        command = GF_OP_CMD_COMMIT_FORCE; -                        if (question) -                                *question = 1; -                } else { -                        GF_ASSERT (!"opword mismatch"); -                        ret = -1; -                        goto out; -                } +            GF_ASSERT(!"opword mismatch"); +            ret = -1; +            goto out;          } +    } -        ret = dict_set_int32 (dict, "command", command); -        if (ret) -                gf_log ("cli", GF_LOG_INFO, "failed to set 'command' %d", -                        command); - +    ret = dict_set_int32(dict, "command", command); +    if (ret) +        gf_log("cli", GF_LOG_INFO, "failed to set 'command' %d", command); -        tmp_index = brick_index; -        tmp_brick = GF_MALLOC(2048 * sizeof(*tmp_brick), gf_common_mt_char); +    tmp_index = brick_index; +    tmp_brick = GF_MALLOC(2048 * sizeof(*tmp_brick), gf_common_mt_char); -        if (!tmp_brick) { -                gf_log ("",GF_LOG_ERROR,"cli_cmd_volume_remove_brick_parse: " -                        "Unable to get memory"); -                ret = -1; -                goto out; -        } +    if (!tmp_brick) { +        gf_log("", GF_LOG_ERROR, +               "cli_cmd_volume_remove_brick_parse: " +               "Unable to get memory"); +        ret = -1; +        goto out; +    } -        tmp_brick1 = GF_MALLOC(2048 * sizeof(*tmp_brick1), gf_common_mt_char); +    tmp_brick1 = GF_MALLOC(2048 * sizeof(*tmp_brick1), gf_common_mt_char); -        if (!tmp_brick1) { -                gf_log ("",GF_LOG_ERROR,"cli_cmd_volume_remove_brick_parse: " -                        "Unable to get memory"); +    if (!tmp_brick1) { +        gf_log("", GF_LOG_ERROR, +               "cli_cmd_volume_remove_brick_parse: " +               "Unable to get memory"); +        ret = -1; +        goto out; +    } + +    while (brick_index < wordcount) { +        if (validate_brick_name((char *)words[brick_index])) { +            cli_err( +                "wrong brick type: %s, use <HOSTNAME>:" +                "<export-dir-abs-path>", +                words[brick_index]); +            ret = -1; +            goto out; +        } else { +            delimiter = strrchr(words[brick_index], ':'); +            ret = gf_canonicalize_path(delimiter + 1); +            if (ret) +                goto out; +        } + +        j = tmp_index; +        strcpy(tmp_brick, words[brick_index]); +        while (j < brick_index) { +            strcpy(tmp_brick1, words[j]); +            if (!(strcmp(tmp_brick, tmp_brick1))) { +                gf_log("", GF_LOG_ERROR, +                       "Duplicate bricks" +                       " found %s", +                       words[brick_index]); +                cli_err("Duplicate bricks found %s", words[brick_index]);                  ret = -1;                  goto out; +            } +            j++;          } +        snprintf(key, 50, "brick%d", ++(*brick_count)); +        ret = dict_set_str(dict, key, (char *)words[brick_index++]); -        while (brick_index < wordcount) { -                if (validate_brick_name ((char *)words[brick_index])) { -                        cli_err ("wrong brick type: %s, use <HOSTNAME>:" -                                 "<export-dir-abs-path>", words[brick_index]); -                        ret = -1; -                        goto out; -                } else { -                        delimiter = strrchr(words[brick_index], ':'); -                        ret = gf_canonicalize_path (delimiter + 1); -                        if (ret) -                                goto out; -                } - -                j = tmp_index; -                strcpy(tmp_brick, words[brick_index]); -                while ( j < brick_index) { -                        strcpy(tmp_brick1, words[j]); -                        if (!(strcmp (tmp_brick, tmp_brick1))) { -                                gf_log("",GF_LOG_ERROR, "Duplicate bricks" -                                       " found %s", words[brick_index]); -                                cli_err("Duplicate bricks found %s", -                                        words[brick_index]); -                                ret = -1; -                                goto out; -                        } -                        j++; -                } -                snprintf (key, 50, "brick%d", ++(*brick_count)); -                ret = dict_set_str (dict, key, (char *)words[brick_index++]); - -                if (ret) -                        goto out; -        } +        if (ret) +            goto out; +    } -        if (command != GF_OP_CMD_STATUS && command != GF_OP_CMD_STOP) { -                ret = dict_set_int32 (dict, "count", *brick_count); -                if (ret) -                        goto out; -        } +    if (command != GF_OP_CMD_STATUS && command != GF_OP_CMD_STOP) { +        ret = dict_set_int32(dict, "count", *brick_count); +        if (ret) +            goto out; +    } -        *options = dict; +    *options = dict;  out: -        if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Unable to parse remove-brick CLI"); -                if (dict) -                        dict_unref (dict); -        } +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, "Unable to parse remove-brick CLI"); +        if (dict) +            dict_unref(dict); +    } -        GF_FREE (tmp_brick); -        GF_FREE (tmp_brick1); +    GF_FREE(tmp_brick); +    GF_FREE(tmp_brick1); -        *comm = command; +    *comm = command; -        return ret; +    return ret;  }  int32_t -cli_cmd_brick_op_validate_bricks (const char **words, dict_t *dict, -				  int src, int dst) +cli_cmd_brick_op_validate_bricks(const char **words, dict_t *dict, int src, +                                 int dst)  { -        int             ret = -1; -        char            *delimiter  = NULL; - -        if (validate_brick_name ((char *)words[src])) { -                cli_err ("wrong brick type: %s, use " -                         "<HOSTNAME>:<export-dir-abs-path>", words[3]); -                ret = -1; -                goto out; -        } else { -                delimiter = strrchr ((char *)words[src], '/'); -                ret = gf_canonicalize_path (delimiter); -                if (ret) -                        goto out; -        } - -        ret = dict_set_str (dict, "src-brick", (char *)words[src]); +    int ret = -1; +    char *delimiter = NULL; + +    if (validate_brick_name((char *)words[src])) { +        cli_err( +            "wrong brick type: %s, use " +            "<HOSTNAME>:<export-dir-abs-path>", +            words[3]); +        ret = -1; +        goto out; +    } else { +        delimiter = strrchr((char *)words[src], '/'); +        ret = gf_canonicalize_path(delimiter);          if (ret) -                goto out; +            goto out; +    } -        if (dst == -1) { -                ret = 0; -                goto out; -        } +    ret = dict_set_str(dict, "src-brick", (char *)words[src]); +    if (ret) +        goto out; -        if (validate_brick_name ((char *)words[dst])) { -                cli_err ("wrong brick type: %s, use " -                         "<HOSTNAME>:<export-dir-abs-path>", words[dst]); -                ret = -1; -                goto out; -        } else { -                delimiter = strrchr ((char *)words[dst], '/'); -                ret = gf_canonicalize_path (delimiter); -                if (ret) -                        goto out; -        } +    if (dst == -1) { +        ret = 0; +        goto out; +    } -        ret = dict_set_str (dict, "dst-brick", (char *)words[dst]); +    if (validate_brick_name((char *)words[dst])) { +        cli_err( +            "wrong brick type: %s, use " +            "<HOSTNAME>:<export-dir-abs-path>", +            words[dst]); +        ret = -1; +        goto out; +    } else { +        delimiter = strrchr((char *)words[dst], '/'); +        ret = gf_canonicalize_path(delimiter);          if (ret) -                goto out; -        ret = 0; +            goto out; +    } + +    ret = dict_set_str(dict, "dst-brick", (char *)words[dst]); +    if (ret) +        goto out; +    ret = 0;  out: -	return ret; +    return ret;  }  int32_t -cli_cmd_volume_reset_brick_parse (const char **words, int wordcount, -                                  dict_t **options) +cli_cmd_volume_reset_brick_parse(const char **words, int wordcount, +                                 dict_t **options)  { -        int                   ret        = -1; -        char                 *volname    = NULL; -        dict_t               *dict       = NULL; - -        if (wordcount < 5 || wordcount > 7) -                goto out; - -        dict = dict_new (); +    int ret = -1; +    char *volname = NULL; +    dict_t *dict = NULL; -        if (!dict) -                goto out; +    if (wordcount < 5 || wordcount > 7) +        goto out; -        volname = (char *)words[2]; +    dict = dict_new(); -        ret = dict_set_str (dict, "volname", volname); -        if (ret) -                goto out; +    if (!dict) +        goto out; -        if (wordcount == 5) { -                if (strcmp (words[4], "start")) { -                        cli_err ("Invalid option '%s' for reset-brick. Please " -                                 "enter valid reset-brick command", words[4]); -                        ret = -1; -                        goto out; -                } +    volname = (char *)words[2]; -                ret = cli_cmd_brick_op_validate_bricks (words, dict, 3, -1); -                if (ret) -                        goto out; +    ret = dict_set_str(dict, "volname", volname); +    if (ret) +        goto out; -                ret = dict_set_str (dict, "operation", "GF_RESET_OP_START"); -                if (ret) -                        goto out; -        } else if (wordcount == 6) { -                if (strcmp (words[5], "commit")) { -                        cli_err ("Invalid option '%s' for reset-brick. Please " -                                 "enter valid reset-brick command", words[5]); -                        ret = -1; -                        goto out; -                } +    if (wordcount == 5) { +        if (strcmp(words[4], "start")) { +            cli_err( +                "Invalid option '%s' for reset-brick. Please " +                "enter valid reset-brick command", +                words[4]); +            ret = -1; +            goto out; +        } -                ret = cli_cmd_brick_op_validate_bricks (words, dict, 3, 4); -                if (ret) -                        goto out; +        ret = cli_cmd_brick_op_validate_bricks(words, dict, 3, -1); +        if (ret) +            goto out; -                ret = dict_set_str (dict, "operation", "GF_RESET_OP_COMMIT"); -                if (ret) -                        goto out; -        } else if (wordcount == 7) { -                if (strcmp (words[5], "commit") || strcmp (words[6], "force")) { -                        cli_err ("Invalid option '%s %s' for reset-brick. Please " -                                 "enter valid reset-brick command", -                                  words[5], words[6]); -                        ret = -1; -                        goto out; -                } +        ret = dict_set_str(dict, "operation", "GF_RESET_OP_START"); +        if (ret) +            goto out; +    } else if (wordcount == 6) { +        if (strcmp(words[5], "commit")) { +            cli_err( +                "Invalid option '%s' for reset-brick. Please " +                "enter valid reset-brick command", +                words[5]); +            ret = -1; +            goto out; +        } + +        ret = cli_cmd_brick_op_validate_bricks(words, dict, 3, 4); +        if (ret) +            goto out; -                ret = cli_cmd_brick_op_validate_bricks (words, dict, 3, 4); -                if (ret) -                        goto out; +        ret = dict_set_str(dict, "operation", "GF_RESET_OP_COMMIT"); +        if (ret) +            goto out; +    } else if (wordcount == 7) { +        if (strcmp(words[5], "commit") || strcmp(words[6], "force")) { +            cli_err( +                "Invalid option '%s %s' for reset-brick. Please " +                "enter valid reset-brick command", +                words[5], words[6]); +            ret = -1; +            goto out; +        } + +        ret = cli_cmd_brick_op_validate_bricks(words, dict, 3, 4); +        if (ret) +            goto out; -                ret = dict_set_str (dict, "operation", -                                    "GF_RESET_OP_COMMIT_FORCE"); -                if (ret) -                        goto out; -        } +        ret = dict_set_str(dict, "operation", "GF_RESET_OP_COMMIT_FORCE"); +        if (ret) +            goto out; +    } -        *options = dict; +    *options = dict;  out: -        if (ret) { -                gf_log ("cli", GF_LOG_ERROR, -                        "Unable to parse reset-brick CLI"); -                if (dict) -                        dict_unref (dict); -        } +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, "Unable to parse reset-brick CLI"); +        if (dict) +            dict_unref(dict); +    } -        return ret; +    return ret;  }  int32_t -cli_cmd_volume_replace_brick_parse (const char **words, int wordcount, -                                    dict_t **options) +cli_cmd_volume_replace_brick_parse(const char **words, int wordcount, +                                   dict_t **options)  { -        int                   ret        = -1; -        char                 *volname    = NULL; -        dict_t               *dict       = NULL; +    int ret = -1; +    char *volname = NULL; +    dict_t *dict = NULL; -        GF_ASSERT (words); -        GF_ASSERT (options); +    GF_ASSERT(words); +    GF_ASSERT(options); -        if (wordcount != 7) { -                ret = -1; -                goto out; -        } +    if (wordcount != 7) { +        ret = -1; +        goto out; +    } -        dict = dict_new (); +    dict = dict_new(); -        if (!dict) { -                gf_log ("cli", GF_LOG_ERROR, "Failed to allocate dictionary"); -                goto out; -        } +    if (!dict) { +        gf_log("cli", GF_LOG_ERROR, "Failed to allocate dictionary"); +        goto out; +    } -        volname = (char *)words[2]; +    volname = (char *)words[2]; -        GF_ASSERT (volname); +    GF_ASSERT(volname); -        ret = dict_set_str (dict, "volname", volname); -        if (ret) -                goto out; +    ret = dict_set_str(dict, "volname", volname); +    if (ret) +        goto out; -        ret = cli_cmd_brick_op_validate_bricks (words, dict, 3, 4); -        if (ret) -                goto out; +    ret = cli_cmd_brick_op_validate_bricks(words, dict, 3, 4); +    if (ret) +        goto out; -        /* commit force option */ -        if (strcmp ("commit", words[5]) || strcmp ("force", words[6])) { -                cli_err ("Invalid option '%s' '%s' for replace-brick. Please " -                         "enter valid replace-brick command", words[5], -                         words[6]); -                ret = -1; -                goto out; -        } +    /* commit force option */ +    if (strcmp("commit", words[5]) || strcmp("force", words[6])) { +        cli_err( +            "Invalid option '%s' '%s' for replace-brick. Please " +            "enter valid replace-brick command", +            words[5], words[6]); +        ret = -1; +        goto out; +    } -        ret = dict_set_str (dict, "operation", "GF_REPLACE_OP_COMMIT_FORCE"); -        if (ret) -                goto out; +    ret = dict_set_str(dict, "operation", "GF_REPLACE_OP_COMMIT_FORCE"); +    if (ret) +        goto out; -        *options = dict; +    *options = dict;  out: -        if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Unable to parse reset-brick CLI"); -                if (dict) -                        dict_unref (dict); -        } +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, "Unable to parse reset-brick CLI"); +        if (dict) +            dict_unref(dict); +    } -        return ret; +    return ret;  }  int32_t -cli_cmd_log_filename_parse (const char **words, int wordcount, dict_t **options) +cli_cmd_log_filename_parse(const char **words, int wordcount, dict_t **options)  { -        dict_t  *dict = NULL; -        char    *volname = NULL; -        char    *str = NULL; -        int     ret = -1; -        char    *delimiter = NULL; +    dict_t *dict = NULL; +    char *volname = NULL; +    char *str = NULL; +    int ret = -1; +    char *delimiter = NULL; -        GF_ASSERT (words); -        GF_ASSERT (options); +    GF_ASSERT(words); +    GF_ASSERT(options); -        dict = dict_new (); -        if (!dict) -                goto out; +    dict = dict_new(); +    if (!dict) +        goto out; -        volname = (char *)words[3]; -        GF_ASSERT (volname); +    volname = (char *)words[3]; +    GF_ASSERT(volname); -        ret = dict_set_str (dict, "volname", volname); -        if (ret) -                goto out; +    ret = dict_set_str(dict, "volname", volname); +    if (ret) +        goto out; -        str = (char *)words[4]; -        if (strchr (str, ':')) { -                delimiter = strchr (words[4], ':'); -                if (!delimiter || delimiter == words[4] -                    || *(delimiter+1) != '/') { -                        cli_err ("wrong brick type: %s, use <HOSTNAME>:" -                                 "<export-dir-abs-path>", words[4]); -                        ret = -1; -                        goto out; -                } else { -                        ret = gf_canonicalize_path (delimiter + 1); -                        if (ret) -                                goto out; -                } -                ret = dict_set_str (dict, "brick", str); -                if (ret) -                        goto out; -                /* Path */ -                str = (char *)words[5]; -                ret = dict_set_str (dict, "path", str); -                if (ret) -                        goto out; +    str = (char *)words[4]; +    if (strchr(str, ':')) { +        delimiter = strchr(words[4], ':'); +        if (!delimiter || delimiter == words[4] || *(delimiter + 1) != '/') { +            cli_err( +                "wrong brick type: %s, use <HOSTNAME>:" +                "<export-dir-abs-path>", +                words[4]); +            ret = -1; +            goto out;          } else { -                ret = dict_set_str (dict, "path", str); -                if (ret) -                        goto out; +            ret = gf_canonicalize_path(delimiter + 1); +            if (ret) +                goto out;          } +        ret = dict_set_str(dict, "brick", str); +        if (ret) +            goto out; +        /* Path */ +        str = (char *)words[5]; +        ret = dict_set_str(dict, "path", str); +        if (ret) +            goto out; +    } else { +        ret = dict_set_str(dict, "path", str); +        if (ret) +            goto out; +    } -        *options = dict; +    *options = dict;  out: -        if (ret && dict) -                dict_unref (dict); +    if (ret && dict) +        dict_unref(dict); -        return ret; +    return ret;  }  int32_t -cli_cmd_log_level_parse (const char **words, int worcount, dict_t **options) +cli_cmd_log_level_parse(const char **words, int worcount, dict_t **options)  { -        dict_t *dict            = NULL; -        int     ret             = -1; - -        GF_ASSERT (words); -        GF_ASSERT (options); - -        /* -         * loglevel command format: -         *  > volume log level <VOL> <XLATOR[*]> <LOGLEVEL> -         *  > volume log level colon-o posix WARNING -         *  > volume log level colon-o replicate* DEBUG -         *  > volume log level coon-o * TRACE -         */ - -        GF_ASSERT ((strncmp(words[0], "volume", 6) == 0)); -        GF_ASSERT ((strncmp(words[1], "log", 3) == 0)); -        GF_ASSERT ((strncmp(words[2], "level", 5) == 0)); - -        ret = glusterd_check_log_level(words[5]); -        if (ret == -1) { -                cli_err("Invalid log level [%s] specified", words[5]); -                cli_err("Valid values for loglevel: (DEBUG|WARNING|ERROR" -                        "|CRITICAL|NONE|TRACE)"); -                goto out; -        } +    dict_t *dict = NULL; +    int ret = -1; + +    GF_ASSERT(words); +    GF_ASSERT(options); + +    /* +     * loglevel command format: +     *  > volume log level <VOL> <XLATOR[*]> <LOGLEVEL> +     *  > volume log level colon-o posix WARNING +     *  > volume log level colon-o replicate* DEBUG +     *  > volume log level coon-o * TRACE +     */ + +    GF_ASSERT((strncmp(words[0], "volume", 6) == 0)); +    GF_ASSERT((strncmp(words[1], "log", 3) == 0)); +    GF_ASSERT((strncmp(words[2], "level", 5) == 0)); + +    ret = glusterd_check_log_level(words[5]); +    if (ret == -1) { +        cli_err("Invalid log level [%s] specified", words[5]); +        cli_err( +            "Valid values for loglevel: (DEBUG|WARNING|ERROR" +            "|CRITICAL|NONE|TRACE)"); +        goto out; +    } -        dict = dict_new (); -        if (!dict) -                goto out; +    dict = dict_new(); +    if (!dict) +        goto out; -        GF_ASSERT(words[3]); -        GF_ASSERT(words[4]); +    GF_ASSERT(words[3]); +    GF_ASSERT(words[4]); -        ret = dict_set_str (dict, "volname", (char *)words[3]); -        if (ret) -                goto out; +    ret = dict_set_str(dict, "volname", (char *)words[3]); +    if (ret) +        goto out; -        ret = dict_set_str (dict, "xlator", (char *)words[4]); -        if (ret) -                goto out; +    ret = dict_set_str(dict, "xlator", (char *)words[4]); +    if (ret) +        goto out; -        ret = dict_set_str (dict, "loglevel", (char *)words[5]); -        if (ret) -                goto out; +    ret = dict_set_str(dict, "loglevel", (char *)words[5]); +    if (ret) +        goto out; -        *options = dict; +    *options = dict; - out: -        if (ret && dict) -                dict_unref (dict); +out: +    if (ret && dict) +        dict_unref(dict); -        return ret; +    return ret;  }  int32_t -cli_cmd_log_locate_parse (const char **words, int wordcount, dict_t **options) +cli_cmd_log_locate_parse(const char **words, int wordcount, dict_t **options)  { -        dict_t  *dict = NULL; -        char    *volname = NULL; -        char    *str = NULL; -        int     ret = -1; -        char    *delimiter = NULL; +    dict_t *dict = NULL; +    char *volname = NULL; +    char *str = NULL; +    int ret = -1; +    char *delimiter = NULL; -        GF_ASSERT (words); -        GF_ASSERT (options); +    GF_ASSERT(words); +    GF_ASSERT(options); -        dict = dict_new (); -        if (!dict) -                goto out; +    dict = dict_new(); +    if (!dict) +        goto out; -        volname = (char *)words[3]; -        GF_ASSERT (volname); +    volname = (char *)words[3]; +    GF_ASSERT(volname); -        ret = dict_set_str (dict, "volname", volname); -        if (ret) -                goto out; +    ret = dict_set_str(dict, "volname", volname); +    if (ret) +        goto out; -        if (words[4]) { -                delimiter = strchr (words[4], ':'); -                if (!delimiter || delimiter == words[4] -                    || *(delimiter+1) != '/') { -                        cli_err ("wrong brick type: %s, use <HOSTNAME>:" -                                 "<export-dir-abs-path>", words[4]); -                        ret = -1; -                        goto out; -                } else { -                        ret = gf_canonicalize_path (delimiter + 1); -                        if (ret) -                                goto out; -                } -                str = (char *)words[4]; -                ret = dict_set_str (dict, "brick", str); -                if (ret) -                        goto out; +    if (words[4]) { +        delimiter = strchr(words[4], ':'); +        if (!delimiter || delimiter == words[4] || *(delimiter + 1) != '/') { +            cli_err( +                "wrong brick type: %s, use <HOSTNAME>:" +                "<export-dir-abs-path>", +                words[4]); +            ret = -1; +            goto out; +        } else { +            ret = gf_canonicalize_path(delimiter + 1); +            if (ret) +                goto out;          } +        str = (char *)words[4]; +        ret = dict_set_str(dict, "brick", str); +        if (ret) +            goto out; +    } -        *options = dict; +    *options = dict;  out: -        if (ret && dict) -                dict_unref (dict); +    if (ret && dict) +        dict_unref(dict); -        return ret; +    return ret;  }  int32_t -cli_cmd_log_rotate_parse (const char **words, int wordcount, dict_t **options) +cli_cmd_log_rotate_parse(const char **words, int wordcount, dict_t **options)  { -        dict_t  *dict = NULL; -        char    *volname = NULL; -        char    *str = NULL; -        int     ret = -1; -        char    *delimiter = NULL; +    dict_t *dict = NULL; +    char *volname = NULL; +    char *str = NULL; +    int ret = -1; +    char *delimiter = NULL; -        GF_ASSERT (words); -        GF_ASSERT (options); +    GF_ASSERT(words); +    GF_ASSERT(options); -        dict = dict_new (); -        if (!dict) -                goto out; +    dict = dict_new(); +    if (!dict) +        goto out; -        if (strcmp ("rotate", words[3]) == 0) -                volname = (char *)words[2]; -        else if (strcmp ("rotate", words[2]) == 0) -                volname = (char *)words[3]; -        GF_ASSERT (volname); +    if (strcmp("rotate", words[3]) == 0) +        volname = (char *)words[2]; +    else if (strcmp("rotate", words[2]) == 0) +        volname = (char *)words[3]; +    GF_ASSERT(volname); -        ret = dict_set_str (dict, "volname", volname); -        if (ret) -                goto out; +    ret = dict_set_str(dict, "volname", volname); +    if (ret) +        goto out; -        if (words[4]) { -                delimiter = strchr (words[4], ':'); -                if (!delimiter || delimiter == words[4] -                    || *(delimiter+1) != '/') { -                        cli_err ("wrong brick type: %s, use <HOSTNAME>:" -                                 "<export-dir-abs-path>", words[4]); -                        ret = -1; -                        goto out; -                } else { -                        ret = gf_canonicalize_path (delimiter + 1); -                        if (ret) -                                goto out; -                } -                str = (char *)words[4]; -                ret = dict_set_str (dict, "brick", str); -                if (ret) -                        goto out; +    if (words[4]) { +        delimiter = strchr(words[4], ':'); +        if (!delimiter || delimiter == words[4] || *(delimiter + 1) != '/') { +            cli_err( +                "wrong brick type: %s, use <HOSTNAME>:" +                "<export-dir-abs-path>", +                words[4]); +            ret = -1; +            goto out; +        } else { +            ret = gf_canonicalize_path(delimiter + 1); +            if (ret) +                goto out;          } +        str = (char *)words[4]; +        ret = dict_set_str(dict, "brick", str); +        if (ret) +            goto out; +    } -        *options = dict; +    *options = dict;  out: -        if (ret && dict) -                dict_unref (dict); +    if (ret && dict) +        dict_unref(dict); -        return ret; +    return ret;  }  static gf_boolean_t -gsyncd_url_check (const char *w) +gsyncd_url_check(const char *w)  { -        return !!strpbrk (w, ":/"); +    return !!strpbrk(w, ":/");  }  static gf_boolean_t -gsyncd_glob_check (const char *w) +gsyncd_glob_check(const char *w)  { -        return !!strpbrk (w, "*?["); +    return !!strpbrk(w, "*?[");  }  static int -config_parse (const char **words, int wordcount, dict_t *dict, -              unsigned cmdi, unsigned glob) +config_parse(const char **words, int wordcount, dict_t *dict, unsigned cmdi, +             unsigned glob)  { -        int32_t            ret     = -1; -        int32_t            i       = -1; -        char               *append_str = NULL; -        size_t             append_len = 0; -        char               *subop = NULL; -        char               *ret_chkpt = NULL; -        struct tm           checkpoint_time; -        char                chkpt_buf[20] = ""; - -        switch ((wordcount - 1) - cmdi) { +    int32_t ret = -1; +    int32_t i = -1; +    char *append_str = NULL; +    size_t append_len = 0; +    char *subop = NULL; +    char *ret_chkpt = NULL; +    struct tm checkpoint_time; +    char chkpt_buf[20] = ""; + +    switch ((wordcount - 1) - cmdi) {          case 0: -                subop = gf_strdup ("get-all"); -                break; +            subop = gf_strdup("get-all"); +            break;          case 1: -                if (words[cmdi + 1][0] == '!') { -                        (words[cmdi + 1])++; -                        if (gf_asprintf (&subop, "del%s", -                                         glob ? "-glob" : "") == -1) -                                subop = NULL; -                } else -                        subop = gf_strdup ("get"); +            if (words[cmdi + 1][0] == '!') { +                (words[cmdi + 1])++; +                if (gf_asprintf(&subop, "del%s", glob ? "-glob" : "") == -1) +                    subop = NULL; +            } else +                subop = gf_strdup("get"); -                ret = dict_set_str (dict, "op_name", ((char *)words[cmdi + 1])); -                if (ret < 0) -                        goto out; -                break; +            ret = dict_set_str(dict, "op_name", ((char *)words[cmdi + 1])); +            if (ret < 0) +                goto out; +            break;          default: -                if (gf_asprintf (&subop, "set%s", glob ? "-glob" : "") == -1) -                        subop = NULL; +            if (gf_asprintf(&subop, "set%s", glob ? "-glob" : "") == -1) +                subop = NULL; -                ret = dict_set_str (dict, "op_name", ((char *)words[cmdi + 1])); -                if (ret < 0) -                        goto out; +            ret = dict_set_str(dict, "op_name", ((char *)words[cmdi + 1])); +            if (ret < 0) +                goto out; -                /* join the varargs by spaces to get the op_value */ +            /* join the varargs by spaces to get the op_value */ -                for (i = cmdi + 2; i < wordcount; i++) -                        append_len += (strlen (words[i]) + 1); -                /* trailing strcat will add two bytes, make space for that */ -                append_len++; +            for (i = cmdi + 2; i < wordcount; i++) +                append_len += (strlen(words[i]) + 1); +            /* trailing strcat will add two bytes, make space for that */ +            append_len++; -                append_str = GF_MALLOC (append_len, cli_mt_append_str); -                if (!append_str) { -                        ret = -1; -                        goto out; -                } +            append_str = GF_MALLOC(append_len, cli_mt_append_str); +            if (!append_str) { +                ret = -1; +                goto out; +            } + +            for (i = cmdi + 2; i < wordcount; i++) { +                strcat(append_str, words[i]); +                strcat(append_str, " "); +            } +            append_str[append_len - 2] = '\0'; +            /* "checkpoint now" is special: we resolve that "now" */ +            if ((strcmp(words[cmdi + 1], "checkpoint") == 0) && +                (strcmp(append_str, "now") == 0)) { +                struct timeval tv = { +                    0, +                }; + +                ret = gettimeofday(&tv, NULL); +                if (ret == -1) +                    goto out; -                for (i = cmdi + 2; i < wordcount; i++) { -                        strcat (append_str, words[i]); -                        strcat (append_str, " "); -                } -                append_str[append_len - 2] = '\0'; -                /* "checkpoint now" is special: we resolve that "now" */ -                if ((strcmp (words[cmdi + 1], "checkpoint") == 0) && -                    (strcmp (append_str, "now") == 0)) { -                        struct timeval tv = {0,}; - -                        ret = gettimeofday (&tv, NULL); -                        if (ret == -1) -                                goto out; - -                        GF_FREE (append_str); -                        append_str = GF_MALLOC (300, cli_mt_append_str); -                        if (!append_str) { -                                ret = -1; -                                goto out; -                        } -                        snprintf (append_str, 300, "%" GF_PRI_SECOND, -                                  tv.tv_sec); -                } else if ((strcmp (words[cmdi + 1], "checkpoint") == 0) && -                           (strcmp (append_str, "now") != 0)) { -                        memset(&checkpoint_time, 0, sizeof(struct tm)); -                        ret_chkpt = strptime(append_str, "%Y-%m-%d %H:%M:%S", -                                             &checkpoint_time); - -                        if (ret_chkpt == NULL) { -                                ret = -1; -                                cli_err ("Invalid Checkpoint label. Use format " -                                         "\"Y-m-d H:M:S\", Example: 2016-10-25 15:30:45"); -                                goto out; -                        } -                        GF_FREE (append_str); -                        append_str = GF_MALLOC (300, cli_mt_append_str); -                        if (!append_str) { -                                ret = -1; -                                goto out; -                        } -                        strftime (chkpt_buf, sizeof(chkpt_buf), "%s", -                                  &checkpoint_time); -                        snprintf (append_str, 300, "%s", chkpt_buf); +                GF_FREE(append_str); +                append_str = GF_MALLOC(300, cli_mt_append_str); +                if (!append_str) { +                    ret = -1; +                    goto out; +                } +                snprintf(append_str, 300, "%" GF_PRI_SECOND, tv.tv_sec); +            } else if ((strcmp(words[cmdi + 1], "checkpoint") == 0) && +                       (strcmp(append_str, "now") != 0)) { +                memset(&checkpoint_time, 0, sizeof(struct tm)); +                ret_chkpt = strptime(append_str, "%Y-%m-%d %H:%M:%S", +                                     &checkpoint_time); + +                if (ret_chkpt == NULL) { +                    ret = -1; +                    cli_err( +                        "Invalid Checkpoint label. Use format " +                        "\"Y-m-d H:M:S\", Example: 2016-10-25 15:30:45"); +                    goto out; +                } +                GF_FREE(append_str); +                append_str = GF_MALLOC(300, cli_mt_append_str); +                if (!append_str) { +                    ret = -1; +                    goto out;                  } +                strftime(chkpt_buf, sizeof(chkpt_buf), "%s", &checkpoint_time); +                snprintf(append_str, 300, "%s", chkpt_buf); +            } -                ret = dict_set_dynstr (dict, "op_value", append_str); -                if (ret != 0) { -                        goto out; -                } -                append_str = NULL; -        } +            ret = dict_set_dynstr(dict, "op_value", append_str); +            if (ret != 0) { +                goto out; +            } +            append_str = NULL; +    } -        ret = -1; -        if (subop) { -                ret = dict_set_dynstr (dict, "subop", subop); -                if (!ret) -                      subop = NULL; -        } +    ret = -1; +    if (subop) { +        ret = dict_set_dynstr(dict, "subop", subop); +        if (!ret) +            subop = NULL; +    }  out: -        GF_FREE (append_str); -        GF_FREE (subop); +    GF_FREE(append_str); +    GF_FREE(subop); -        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); -        return ret; +    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret); +    return ret;  }  /* ssh_port_parse: Parses and validates when ssh_port is given. @@ -2755,1529 +2823,1493 @@ out:   */  static int32_t -parse_ssh_port (const char **words, int wordcount, dict_t *dict, -                unsigned *cmdi, int ssh_index, char *type) { - -        int        ret         = 0; -        char      *end_ptr     = NULL; -        int64_t    limit       = 0; - -        if (!strcmp ((char *)words[ssh_index], "ssh-port")) { -                if (strcmp ((char *)words[ssh_index-1], "create")) { -                        ret = -1; -                        goto out; -                } -                (*cmdi)++; -                limit = strtol (words[ssh_index+1], &end_ptr, 10); -                if (errno == ERANGE || errno == EINVAL || limit <= 0 -                                    || strcmp (end_ptr, "") != 0) { -                        ret = -1; -                        cli_err ("Please enter an integer value for ssh_port "); -                        goto out; -                } +parse_ssh_port(const char **words, int wordcount, dict_t *dict, unsigned *cmdi, +               int ssh_index, char *type) +{ +    int ret = 0; +    char *end_ptr = NULL; +    int64_t limit = 0; -                ret = dict_set_int32 (dict, "ssh_port", limit); -                if (ret) -                        goto out; -                (*cmdi)++; -        } else if (strcmp ((char *)words[ssh_index+1], "create")) { -                ret = -1; -                goto out; +    if (!strcmp((char *)words[ssh_index], "ssh-port")) { +        if (strcmp((char *)words[ssh_index - 1], "create")) { +            ret = -1; +            goto out; +        } +        (*cmdi)++; +        limit = strtol(words[ssh_index + 1], &end_ptr, 10); +        if (errno == ERANGE || errno == EINVAL || limit <= 0 || +            strcmp(end_ptr, "") != 0) { +            ret = -1; +            cli_err("Please enter an integer value for ssh_port "); +            goto out;          } -        ret = dict_set_int32 (dict, type, 1); +        ret = dict_set_int32(dict, "ssh_port", limit);          if (ret) -                goto out; +            goto out;          (*cmdi)++; +    } else if (strcmp((char *)words[ssh_index + 1], "create")) { +        ret = -1; +        goto out; +    } - out: -        return ret; +    ret = dict_set_int32(dict, type, 1); +    if (ret) +        goto out; +    (*cmdi)++; + +out: +    return ret;  }  static int32_t -force_push_pem_no_verify_parse (const char **words, int wordcount, -                      dict_t *dict, unsigned *cmdi) +force_push_pem_no_verify_parse(const char **words, int wordcount, dict_t *dict, +                               unsigned *cmdi)  { -        int32_t            ret     = 0; - -        if (!strcmp ((char *)words[wordcount-1], "force")) { -                if ((strcmp ((char *)words[wordcount-2], "start")) && -                    (strcmp ((char *)words[wordcount-2], "stop")) && -                    (strcmp ((char *)words[wordcount-2], "create")) && -                    (strcmp ((char *)words[wordcount-2], "no-verify")) && -                    (strcmp ((char *)words[wordcount-2], "push-pem")) && -                    (strcmp ((char *)words[wordcount-2], "pause")) && -                    (strcmp ((char *)words[wordcount-2], "resume"))) { -                        ret = -1; -                        goto out; -                } -                ret = dict_set_uint32 (dict, "force", -                                       _gf_true); -                if (ret) -                        goto out; -                (*cmdi)++; - -                if (!strcmp ((char *)words[wordcount-2], "push-pem")) { -                        ret = parse_ssh_port (words, wordcount, dict, cmdi, -                                              wordcount-4, "push_pem"); -                        if (ret) -                                goto out; -                } else if (!strcmp ((char *)words[wordcount-2], "no-verify")) { -                        ret = parse_ssh_port (words, wordcount, dict, cmdi, -                                              wordcount-4, "no_verify"); -                        if (ret) -                                goto out; -                } -        } else if (!strcmp ((char *)words[wordcount-1], "push-pem")) { -                ret = parse_ssh_port (words, wordcount, dict, cmdi, wordcount-3, -                                      "push_pem"); -                if (ret) -                        goto out; -        } else if (!strcmp ((char *)words[wordcount-1], "no-verify")) { -                ret = parse_ssh_port (words, wordcount, dict, cmdi, wordcount-3, -                                      "no_verify"); -                if (ret) -                        goto out; +    int32_t ret = 0; + +    if (!strcmp((char *)words[wordcount - 1], "force")) { +        if ((strcmp((char *)words[wordcount - 2], "start")) && +            (strcmp((char *)words[wordcount - 2], "stop")) && +            (strcmp((char *)words[wordcount - 2], "create")) && +            (strcmp((char *)words[wordcount - 2], "no-verify")) && +            (strcmp((char *)words[wordcount - 2], "push-pem")) && +            (strcmp((char *)words[wordcount - 2], "pause")) && +            (strcmp((char *)words[wordcount - 2], "resume"))) { +            ret = -1; +            goto out; +        } +        ret = dict_set_uint32(dict, "force", _gf_true); +        if (ret) +            goto out; +        (*cmdi)++; + +        if (!strcmp((char *)words[wordcount - 2], "push-pem")) { +            ret = parse_ssh_port(words, wordcount, dict, cmdi, wordcount - 4, +                                 "push_pem"); +            if (ret) +                goto out; +        } else if (!strcmp((char *)words[wordcount - 2], "no-verify")) { +            ret = parse_ssh_port(words, wordcount, dict, cmdi, wordcount - 4, +                                 "no_verify"); +            if (ret) +                goto out;          } +    } else if (!strcmp((char *)words[wordcount - 1], "push-pem")) { +        ret = parse_ssh_port(words, wordcount, dict, cmdi, wordcount - 3, +                             "push_pem"); +        if (ret) +            goto out; +    } else if (!strcmp((char *)words[wordcount - 1], "no-verify")) { +        ret = parse_ssh_port(words, wordcount, dict, cmdi, wordcount - 3, +                             "no_verify"); +        if (ret) +            goto out; +    }  out: -        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); -        return ret; +    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret); +    return ret;  } -  int32_t -cli_cmd_gsync_set_parse (const char **words, int wordcount, dict_t **options) +cli_cmd_gsync_set_parse(const char **words, int wordcount, dict_t **options)  { -        int32_t            ret     = -1; -        dict_t             *dict   = NULL; -        gf1_cli_gsync_set  type    = GF_GSYNC_OPTION_TYPE_NONE; -        int                i       = 0; -        unsigned           masteri = 0; -        unsigned           slavei  = 0; -        unsigned           glob    = 0; -        unsigned           cmdi    = 0; -        char               *opwords[] = { "create", "status", "start", "stop", -                                          "config", "force", "delete", -                                          "ssh-port", "no-verify", "push-pem", -                                          "detail", "pause", "resume", NULL }; -        char               *w = NULL; -        char               *save_ptr   = NULL; -        char               *slave_temp = NULL; -        char               *token      = NULL; - -        GF_ASSERT (words); -        GF_ASSERT (options); - -        dict = dict_new (); -        if (!dict) -                goto out; - -        /* new syntax: -         * -         * volume geo-replication $m $s create [[ssh-port n] [[no-verify] | [push-pem]]] [force] -         * volume geo-replication [$m [$s]] status [detail] -         * volume geo-replication [$m] $s config [[!]$opt [$val]] -         * volume geo-replication $m $s start|stop [force] -         * volume geo-replication $m $s delete [reset-sync-time] -         * volume geo-replication $m $s pause [force] -         * volume geo-replication $m $s resume [force] -         */ +    int32_t ret = -1; +    dict_t *dict = NULL; +    gf1_cli_gsync_set type = GF_GSYNC_OPTION_TYPE_NONE; +    int i = 0; +    unsigned masteri = 0; +    unsigned slavei = 0; +    unsigned glob = 0; +    unsigned cmdi = 0; +    char *opwords[] = {"create", "status", "start",    "stop",      "config", +                       "force",  "delete", "ssh-port", "no-verify", "push-pem", +                       "detail", "pause",  "resume",   NULL}; +    char *w = NULL; +    char *save_ptr = NULL; +    char *slave_temp = NULL; +    char *token = NULL; + +    GF_ASSERT(words); +    GF_ASSERT(options); + +    dict = dict_new(); +    if (!dict) +        goto out; -        if (wordcount < 3) -                goto out; +    /* new syntax: +     * +     * volume geo-replication $m $s create [[ssh-port n] [[no-verify] | +     * [push-pem]]] [force] volume geo-replication [$m [$s]] status [detail] +     * volume geo-replication [$m] $s config [[!]$opt [$val]] +     * volume geo-replication $m $s start|stop [force] +     * volume geo-replication $m $s delete [reset-sync-time] +     * volume geo-replication $m $s pause [force] +     * volume geo-replication $m $s resume [force] +     */ + +    if (wordcount < 3) +        goto out; -        for (i = 2; i <= 3 && i < wordcount - 1; i++) { -                if (gsyncd_glob_check (words[i])) -                        glob = i; -                if (gsyncd_url_check (words[i])) { -                        slavei = i; -                        break; -                } +    for (i = 2; i <= 3 && i < wordcount - 1; i++) { +        if (gsyncd_glob_check(words[i])) +            glob = i; +        if (gsyncd_url_check(words[i])) { +            slavei = i; +            break;          } +    } -        if (glob && !slavei) -                /* glob is allowed only for config, thus it implies there is a -                 * slave argument; but that might have not been recognized on -                 * the first scan as it's url characteristics has been covered -                 * by the glob syntax. -                 * -                 * In this case, the slave is perforce the last glob-word -- the -                 * upcoming one is neither glob, nor url, so it's definitely not -                 * the slave. -                 */ -                slavei = glob; -        if (slavei) { -                cmdi = slavei + 1; -                if (slavei == 3) -                        masteri = 2; -        } else if (i <= 4) { -                if (strtail ("detail", (char *)words[wordcount-1])) { -                        cmdi = wordcount - 2; -                        if (i == 4) -                                masteri = 2; -                } else { -                        /* no $s, can only be status cmd -                         * (with either a single $m before it or nothing) -                         * -- these conditions imply that i <= 3 after -                         * the iteration and that i is the successor of -                         * the (0 or 1 length) sequence of $m-s. -                         */ -                        cmdi = i; -                        if (i == 3) -                                masteri = 2; -                } -        } else -                goto out; - -        /* now check if input really complies syntax -         * (in a somewhat redundant way, in favor -         * transparent soundness) +    if (glob && !slavei) +        /* glob is allowed only for config, thus it implies there is a +         * slave argument; but that might have not been recognized on +         * the first scan as it's url characteristics has been covered +         * by the glob syntax. +         * +         * In this case, the slave is perforce the last glob-word -- the +         * upcoming one is neither glob, nor url, so it's definitely not +         * the slave.           */ +        slavei = glob; +    if (slavei) { +        cmdi = slavei + 1; +        if (slavei == 3) +            masteri = 2; +    } else if (i <= 4) { +        if (strtail("detail", (char *)words[wordcount - 1])) { +            cmdi = wordcount - 2; +            if (i == 4) +                masteri = 2; +        } else { +            /* no $s, can only be status cmd +             * (with either a single $m before it or nothing) +             * -- these conditions imply that i <= 3 after +             * the iteration and that i is the successor of +             * the (0 or 1 length) sequence of $m-s. +             */ +            cmdi = i; +            if (i == 3) +                masteri = 2; +        } +    } else +        goto out; -        if (masteri && gsyncd_url_check (words[masteri])) -                goto out; -        if (slavei && !glob && !gsyncd_url_check (words[slavei])) -                goto out; - -        w = str_getunamb (words[cmdi], opwords); -        if (!w) -                goto out; - -        if (strcmp (w, "create") == 0) { -                type = GF_GSYNC_OPTION_TYPE_CREATE; - -                if (!masteri || !slavei) -                        goto out; -        } else if (strcmp (w, "status") == 0) { -                type = GF_GSYNC_OPTION_TYPE_STATUS; - -                if (slavei && !masteri) -                        goto out; -        } else if (strcmp (w, "config") == 0) { -                type = GF_GSYNC_OPTION_TYPE_CONFIG; - -                if (!slavei) -                        goto out; -        } else if (strcmp (w, "start") == 0) { -                type = GF_GSYNC_OPTION_TYPE_START; - -                if (!masteri || !slavei) -                        goto out; -        } else if (strcmp (w, "stop") == 0) { -                type = GF_GSYNC_OPTION_TYPE_STOP; +    /* now check if input really complies syntax +     * (in a somewhat redundant way, in favor +     * transparent soundness) +     */ -                if (!masteri || !slavei) -                        goto out; -        } else if (strcmp (w, "delete") == 0) { -                type = GF_GSYNC_OPTION_TYPE_DELETE; +    if (masteri && gsyncd_url_check(words[masteri])) +        goto out; +    if (slavei && !glob && !gsyncd_url_check(words[slavei])) +        goto out; -                if (!masteri || !slavei) -                        goto out; -        } else if (strcmp (w, "pause") == 0) { -                type = GF_GSYNC_OPTION_TYPE_PAUSE; +    w = str_getunamb(words[cmdi], opwords); +    if (!w) +        goto out; -                if (!masteri || !slavei) -                        goto out; -        } else if (strcmp (w, "resume") == 0) { -                type = GF_GSYNC_OPTION_TYPE_RESUME; +    if (strcmp(w, "create") == 0) { +        type = GF_GSYNC_OPTION_TYPE_CREATE; + +        if (!masteri || !slavei) +            goto out; +    } else if (strcmp(w, "status") == 0) { +        type = GF_GSYNC_OPTION_TYPE_STATUS; + +        if (slavei && !masteri) +            goto out; +    } else if (strcmp(w, "config") == 0) { +        type = GF_GSYNC_OPTION_TYPE_CONFIG; + +        if (!slavei) +            goto out; +    } else if (strcmp(w, "start") == 0) { +        type = GF_GSYNC_OPTION_TYPE_START; + +        if (!masteri || !slavei) +            goto out; +    } else if (strcmp(w, "stop") == 0) { +        type = GF_GSYNC_OPTION_TYPE_STOP; + +        if (!masteri || !slavei) +            goto out; +    } else if (strcmp(w, "delete") == 0) { +        type = GF_GSYNC_OPTION_TYPE_DELETE; + +        if (!masteri || !slavei) +            goto out; +    } else if (strcmp(w, "pause") == 0) { +        type = GF_GSYNC_OPTION_TYPE_PAUSE; + +        if (!masteri || !slavei) +            goto out; +    } else if (strcmp(w, "resume") == 0) { +        type = GF_GSYNC_OPTION_TYPE_RESUME; + +        if (!masteri || !slavei) +            goto out; +    } else +        GF_ASSERT(!"opword mismatch"); + +    ret = force_push_pem_no_verify_parse(words, wordcount, dict, &cmdi); +    if (ret) +        goto out; -                if (!masteri || !slavei) -                        goto out; -        } else -                GF_ASSERT (!"opword mismatch"); +    if (strtail("detail", (char *)words[wordcount - 1])) { +        if (!strtail("status", (char *)words[wordcount - 2])) { +            ret = -1; +            goto out; +        } -        ret = force_push_pem_no_verify_parse (words, wordcount, dict, &cmdi); +        ret = dict_set_uint32(dict, "status-detail", _gf_true);          if (ret) -                goto out; - -        if (strtail ("detail", (char *)words[wordcount-1])) { -                if (!strtail ("status", (char *)words[wordcount-2])) { -                        ret = -1; -                        goto out; -                } - -                ret = dict_set_uint32 (dict, "status-detail", _gf_true); -                if (ret) -                        goto out; -                cmdi++; -        } +            goto out; +        cmdi++; +    } -        if (type == GF_GSYNC_OPTION_TYPE_DELETE && -            !strcmp ((char *)words[wordcount-1], "reset-sync-time")) { -                if (strcmp ((char *)words[wordcount-2], "delete")) { -                        ret = -1; -                        goto out; -                } -                ret = dict_set_uint32 (dict, "reset-sync-time", _gf_true); -                if (ret) -                        goto out; -                cmdi++; +    if (type == GF_GSYNC_OPTION_TYPE_DELETE && +        !strcmp((char *)words[wordcount - 1], "reset-sync-time")) { +        if (strcmp((char *)words[wordcount - 2], "delete")) { +            ret = -1; +            goto out;          } +        ret = dict_set_uint32(dict, "reset-sync-time", _gf_true); +        if (ret) +            goto out; +        cmdi++; +    } -        if (type != GF_GSYNC_OPTION_TYPE_CONFIG && -            (cmdi < wordcount - 1 || glob)) -                goto out; +    if (type != GF_GSYNC_OPTION_TYPE_CONFIG && (cmdi < wordcount - 1 || glob)) +        goto out; -        /* If got so far, input is valid, assemble the message */ +    /* If got so far, input is valid, assemble the message */ -        ret = 0; +    ret = 0; -        if (masteri) { -                ret = dict_set_str (dict, "master", (char *)words[masteri]); -                if (!ret) -                        ret = dict_set_str (dict, "volname", -                                            (char *)words[masteri]); -        } -        if (!ret && slavei) { -                /* If geo-rep is created with root user using the syntax -                 * gluster vol geo-rep <mastervol> root@<slavehost> ... -                 * pass down only <slavehost> else pass as it is. -                 */ -                slave_temp = gf_strdup (words[slavei]); -                if (slave_temp == NULL) { -                        ret = -1; -                        goto out; -                } -                token = strtok_r (slave_temp, "@", &save_ptr); -                if (token && !strcmp (token, "root")) { -                        ret = dict_set_str (dict, "slave", -                                            (char *)words[slavei]+5); -                } else { -                        ret = dict_set_str (dict, "slave", -                                            (char *)words[slavei]); -                } -        } +    if (masteri) { +        ret = dict_set_str(dict, "master", (char *)words[masteri]);          if (!ret) -                ret = dict_set_int32 (dict, "type", type); -        if (!ret && type == GF_GSYNC_OPTION_TYPE_CONFIG) -                ret = config_parse (words, wordcount, dict, cmdi, glob); +            ret = dict_set_str(dict, "volname", (char *)words[masteri]); +    } +    if (!ret && slavei) { +        /* If geo-rep is created with root user using the syntax +         * gluster vol geo-rep <mastervol> root@<slavehost> ... +         * pass down only <slavehost> else pass as it is. +         */ +        slave_temp = gf_strdup(words[slavei]); +        if (slave_temp == NULL) { +            ret = -1; +            goto out; +        } +        token = strtok_r(slave_temp, "@", &save_ptr); +        if (token && !strcmp(token, "root")) { +            ret = dict_set_str(dict, "slave", (char *)words[slavei] + 5); +        } else { +            ret = dict_set_str(dict, "slave", (char *)words[slavei]); +        } +    } +    if (!ret) +        ret = dict_set_int32(dict, "type", type); +    if (!ret && type == GF_GSYNC_OPTION_TYPE_CONFIG) +        ret = config_parse(words, wordcount, dict, cmdi, glob);  out: -        if (slave_temp) -                GF_FREE (slave_temp); -        if (ret) { -                if (dict) -                        dict_unref (dict); -        } else -                *options = dict; - +    if (slave_temp) +        GF_FREE(slave_temp); +    if (ret) { +        if (dict) +            dict_unref(dict); +    } else +        *options = dict; -        return ret; +    return ret;  }  int32_t -cli_cmd_volume_profile_parse (const char **words, int wordcount, -                              dict_t **options) +cli_cmd_volume_profile_parse(const char **words, int wordcount, +                             dict_t **options)  { -        dict_t              *dict       = NULL; -        char                *volname    = NULL; -        int                 ret         = -1; -        gf1_cli_stats_op    op          = GF_CLI_STATS_NONE; -        gf1_cli_info_op     info_op     = GF_CLI_INFO_NONE; -        gf_boolean_t        is_peek     = _gf_false; +    dict_t *dict = NULL; +    char *volname = NULL; +    int ret = -1; +    gf1_cli_stats_op op = GF_CLI_STATS_NONE; +    gf1_cli_info_op info_op = GF_CLI_INFO_NONE; +    gf_boolean_t is_peek = _gf_false; -        char      *opwords[] = { "start", "stop", "info", NULL }; -        char      *w = NULL; +    char *opwords[] = {"start", "stop", "info", NULL}; +    char *w = NULL; -        GF_ASSERT (words); -        GF_ASSERT (options); +    GF_ASSERT(words); +    GF_ASSERT(options); -        dict = dict_new (); -        if (!dict) -                goto out; +    dict = dict_new(); +    if (!dict) +        goto out; -        if (wordcount < 4) -                goto out; +    if (wordcount < 4) +        goto out; -        volname = (char *)words[2]; +    volname = (char *)words[2]; -        ret = dict_set_str (dict, "volname", volname); -        if (ret) -                goto out; +    ret = dict_set_str(dict, "volname", volname); +    if (ret) +        goto out; -        w = str_getunamb (words[3], opwords); -        if (!w) { -                ret = -1; -                goto out; -        } +    w = str_getunamb(words[3], opwords); +    if (!w) { +        ret = -1; +        goto out; +    } -        if ((strcmp (w, "start") == 0 || strcmp (w, "stop") == 0) && -            wordcount > 5) -                goto out; +    if ((strcmp(w, "start") == 0 || strcmp(w, "stop") == 0) && wordcount > 5) +        goto out; -        if (strcmp (w, "info") == 0 && wordcount > 7) -                goto out; +    if (strcmp(w, "info") == 0 && wordcount > 7) +        goto out; -        if (strcmp (w, "start") == 0) { -                op = GF_CLI_STATS_START; -        } else if (strcmp (w, "stop") == 0) { -                op = GF_CLI_STATS_STOP; -        } else if (strcmp (w, "info") == 0) { -                op = GF_CLI_STATS_INFO; -                info_op = GF_CLI_INFO_ALL; -                if (wordcount > 4) { -                        if (strcmp (words[4], "incremental") == 0) { -                                info_op = GF_CLI_INFO_INCREMENTAL; -                                if (wordcount > 5 && -                                    strcmp (words[5], "peek") == 0) { -                                        is_peek = _gf_true; -                                } -                        } else if (strcmp (words[4], "cumulative") == 0) { -                                info_op = GF_CLI_INFO_CUMULATIVE; -                        } else if (strcmp (words[4], "clear") == 0) { -                                info_op = GF_CLI_INFO_CLEAR; -                        } else if (strcmp (words[4], "peek") == 0) { -                                is_peek = _gf_true; -                        } -                } -        } else -                GF_ASSERT (!"opword mismatch"); +    if (strcmp(w, "start") == 0) { +        op = GF_CLI_STATS_START; +    } else if (strcmp(w, "stop") == 0) { +        op = GF_CLI_STATS_STOP; +    } else if (strcmp(w, "info") == 0) { +        op = GF_CLI_STATS_INFO; +        info_op = GF_CLI_INFO_ALL; +        if (wordcount > 4) { +            if (strcmp(words[4], "incremental") == 0) { +                info_op = GF_CLI_INFO_INCREMENTAL; +                if (wordcount > 5 && strcmp(words[5], "peek") == 0) { +                    is_peek = _gf_true; +                } +            } else if (strcmp(words[4], "cumulative") == 0) { +                info_op = GF_CLI_INFO_CUMULATIVE; +            } else if (strcmp(words[4], "clear") == 0) { +                info_op = GF_CLI_INFO_CLEAR; +            } else if (strcmp(words[4], "peek") == 0) { +                is_peek = _gf_true; +            } +        } +    } else +        GF_ASSERT(!"opword mismatch"); + +    ret = dict_set_int32(dict, "op", (int32_t)op); +    if (ret) +        goto out; -        ret = dict_set_int32 (dict, "op", (int32_t)op); -        if (ret) -                goto out; +    ret = dict_set_int32(dict, "info-op", (int32_t)info_op); +    if (ret) +        goto out; -        ret = dict_set_int32 (dict, "info-op", (int32_t)info_op); -        if (ret) -                goto out; +    ret = dict_set_int32(dict, "peek", is_peek); +    if (ret) +        goto out; -        ret = dict_set_int32 (dict, "peek", is_peek); +    if (!strcmp(words[wordcount - 1], "nfs")) { +        ret = dict_set_int32(dict, "nfs", _gf_true);          if (ret) -                goto out; - -        if (!strcmp (words[wordcount - 1], "nfs")) { -                ret = dict_set_int32 (dict, "nfs", _gf_true); -                if (ret) -                        goto out; -        } +            goto out; +    } -        *options = dict; +    *options = dict;  out: -        if (ret && dict) -                dict_unref (dict); -        return ret; +    if (ret && dict) +        dict_unref(dict); +    return ret;  }  int32_t -cli_cmd_volume_top_parse (const char **words, int wordcount, -                              dict_t **options) +cli_cmd_volume_top_parse(const char **words, int wordcount, dict_t **options)  { -        dict_t  *dict           = NULL; -        char    *volname        = NULL; -        char    *value          = NULL; -        char    *key            = NULL; -        int      ret            = -1; -        gf1_cli_stats_op op = GF_CLI_STATS_NONE; -        gf1_cli_top_op    top_op = GF_CLI_TOP_NONE; -        int32_t  list_cnt       = -1; -        int      index          = 0; -        int      perf           = 0; -        int32_t  blk_size       = 0; -        int      count          = 0; -        gf_boolean_t nfs        = _gf_false; -        char    *delimiter      = NULL; -        char    *opwords[]      = { "open", "read", "write", "opendir", -                                    "readdir", "read-perf", "write-perf", -                                    "clear", NULL }; -        char    *w = NULL; - -        GF_ASSERT (words); -        GF_ASSERT (options); - -        dict = dict_new (); -        if (!dict) -                goto out; +    dict_t *dict = NULL; +    char *volname = NULL; +    char *value = NULL; +    char *key = NULL; +    int ret = -1; +    gf1_cli_stats_op op = GF_CLI_STATS_NONE; +    gf1_cli_top_op top_op = GF_CLI_TOP_NONE; +    int32_t list_cnt = -1; +    int index = 0; +    int perf = 0; +    int32_t blk_size = 0; +    int count = 0; +    gf_boolean_t nfs = _gf_false; +    char *delimiter = NULL; +    char *opwords[] = {"open",      "read",       "write", "opendir", "readdir", +                       "read-perf", "write-perf", "clear", NULL}; +    char *w = NULL; + +    GF_ASSERT(words); +    GF_ASSERT(options); + +    dict = dict_new(); +    if (!dict) +        goto out; -        if (wordcount < 4) -                goto out; +    if (wordcount < 4) +        goto out; -        volname = (char *)words[2]; +    volname = (char *)words[2]; -        ret = dict_set_str (dict, "volname", volname); -        if (ret) -                goto out; +    ret = dict_set_str(dict, "volname", volname); +    if (ret) +        goto out; -        op = GF_CLI_STATS_TOP; -        ret = dict_set_int32 (dict, "op", (int32_t)op); -        if (ret) -                goto out; +    op = GF_CLI_STATS_TOP; +    ret = dict_set_int32(dict, "op", (int32_t)op); +    if (ret) +        goto out; -        w = str_getunamb (words[3], opwords); -        if (!w) { -                ret = -1; -                goto out; +    w = str_getunamb(words[3], opwords); +    if (!w) { +        ret = -1; +        goto out; +    } +    if (strcmp(w, "open") == 0) { +        top_op = GF_CLI_TOP_OPEN; +    } else if (strcmp(w, "read") == 0) { +        top_op = GF_CLI_TOP_READ; +    } else if (strcmp(w, "write") == 0) { +        top_op = GF_CLI_TOP_WRITE; +    } else if (strcmp(w, "opendir") == 0) { +        top_op = GF_CLI_TOP_OPENDIR; +    } else if (strcmp(w, "readdir") == 0) { +        top_op = GF_CLI_TOP_READDIR; +    } else if (strcmp(w, "read-perf") == 0) { +        top_op = GF_CLI_TOP_READ_PERF; +        perf = 1; +    } else if (strcmp(w, "write-perf") == 0) { +        top_op = GF_CLI_TOP_WRITE_PERF; +        perf = 1; +    } else if (strcmp(w, "clear") == 0) { +        ret = dict_set_int32(dict, "clear-stats", 1); +        if (ret) { +            gf_log("cli", GF_LOG_ERROR, "Could not set clear-stats in dict"); +            goto out;          } -        if (strcmp (w, "open") == 0) { -                top_op = GF_CLI_TOP_OPEN; -        } else if (strcmp (w, "read") == 0) { -                top_op = GF_CLI_TOP_READ; -        } else if (strcmp (w, "write") == 0) { -                top_op = GF_CLI_TOP_WRITE; -        } else if (strcmp (w, "opendir") == 0) { -                top_op = GF_CLI_TOP_OPENDIR; -        } else if (strcmp (w, "readdir") == 0) { -                top_op = GF_CLI_TOP_READDIR; -        } else if (strcmp (w, "read-perf") == 0) { -                top_op = GF_CLI_TOP_READ_PERF; -                perf = 1; -        } else if (strcmp (w, "write-perf") == 0) { -                top_op = GF_CLI_TOP_WRITE_PERF; -                perf = 1; -        } else if (strcmp (w, "clear") == 0) { -                ret = dict_set_int32 (dict, "clear-stats", 1); -                if (ret) { -                        gf_log ("cli", GF_LOG_ERROR, -                                "Could not set clear-stats in dict"); -                        goto out; -                } -        } else -                GF_ASSERT (!"opword mismatch"); -        ret = dict_set_int32 (dict, "top-op", (int32_t)top_op); +    } else +        GF_ASSERT(!"opword mismatch"); +    ret = dict_set_int32(dict, "top-op", (int32_t)top_op); +    if (ret) +        goto out; + +    if ((wordcount > 4) && !strcmp(words[4], "nfs")) { +        nfs = _gf_true; +        ret = dict_set_int32(dict, "nfs", nfs);          if (ret) +            goto out; +        index = 5; +    } else { +        index = 4; +    } + +    for (; index < wordcount; index += 2) { +        key = (char *)words[index]; +        value = (char *)words[index + 1]; + +        if (!key || !value) { +            ret = -1; +            goto out; +        } +        if (!strcmp(key, "brick")) { +            delimiter = strchr(value, ':'); +            if (!delimiter || delimiter == value || *(delimiter + 1) != '/') { +                cli_err( +                    "wrong brick type: %s, use <HOSTNAME>:" +                    "<export-dir-abs-path>", +                    value); +                ret = -1;                  goto out; - -        if ((wordcount > 4) && !strcmp (words[4], "nfs")) { -                nfs = _gf_true; -                ret = dict_set_int32 (dict, "nfs", nfs); +            } else { +                ret = gf_canonicalize_path(delimiter + 1);                  if (ret) -                        goto out; -                index = 5; -        } else { -                index = 4; -        } - -        for (; index < wordcount; index+=2) { - -                key = (char *) words[index]; -                value = (char *) words[index+1]; - -                if (!key || !value) { -                        ret = -1; -                        goto out; -                } -                if (!strcmp (key, "brick")) { -                        delimiter = strchr (value, ':'); -                        if (!delimiter || delimiter == value -                            || *(delimiter+1) != '/') { -                                cli_err ("wrong brick type: %s, use <HOSTNAME>:" -                                         "<export-dir-abs-path>", value); -                                ret = -1; -                                goto out; -                        } else { -                                ret = gf_canonicalize_path (delimiter + 1); -                                if (ret) -                                        goto out; -                        } -                        ret = dict_set_str (dict, "brick", value); - -                } else if (!strcmp (key, "list-cnt")) { -                        ret = gf_is_str_int (value); -                        if (!ret) -                                list_cnt = atoi (value); -                        if (ret || (list_cnt < 0) || (list_cnt > 100)) { -                                cli_err ("list-cnt should be between 0 to 100"); -                                ret = -1; -                                goto out; -                        } -                } else if (perf && !nfs && !strcmp (key, "bs")) { -                        ret = gf_is_str_int (value); -                        if (!ret) -                                blk_size = atoi (value); -                        if (ret || (blk_size <= 0)) { -                                if (blk_size < 0) -                                        cli_err ("block size is an invalid" -                                                 " number"); -                                else -                                        cli_err ("block size should be an " -                                                 "integer greater than zero"); -                                ret = -1; -                                goto out; -                        } -                        ret = dict_set_uint32 (dict, "blk-size", -                                                        (uint32_t)blk_size); -                } else if (perf && !nfs && !strcmp (key, "count")) { -                        ret = gf_is_str_int (value); -                        if (!ret) -                                count = atoi(value); -                        if (ret || (count <= 0)) { -                                if (count < 0) -                                        cli_err ("count is an invalid number"); -                                else -                                        cli_err ("count should be an integer " -                                                 "greater than zero"); - -                                ret = -1; -                                goto out; -                        } -                        ret = dict_set_uint32 (dict, "blk-cnt", count); -                } else { -                        ret = -1; -                        goto out; -                } -                if (ret) { -                        gf_log ("", GF_LOG_WARNING, "Dict set failed for " -                                "key %s", key); -                        goto out; -                } -        } -        if (list_cnt == -1) -                list_cnt = 100; -        ret = dict_set_int32 (dict, "list-cnt", list_cnt); -        if (ret) { -                gf_log ("", GF_LOG_WARNING, "Dict set failed for list_cnt"); +                    goto out; +            } +            ret = dict_set_str(dict, "brick", value); + +        } else if (!strcmp(key, "list-cnt")) { +            ret = gf_is_str_int(value); +            if (!ret) +                list_cnt = atoi(value); +            if (ret || (list_cnt < 0) || (list_cnt > 100)) { +                cli_err("list-cnt should be between 0 to 100"); +                ret = -1;                  goto out; -        } - -        if ((blk_size > 0) ^ (count > 0)) { -                cli_err ("Need to give both 'bs' and 'count'"); +            } +        } else if (perf && !nfs && !strcmp(key, "bs")) { +            ret = gf_is_str_int(value); +            if (!ret) +                blk_size = atoi(value); +            if (ret || (blk_size <= 0)) { +                if (blk_size < 0) +                    cli_err( +                        "block size is an invalid" +                        " number"); +                else +                    cli_err( +                        "block size should be an " +                        "integer greater than zero");                  ret = -1;                  goto out; -        } else if (((uint64_t)blk_size * count) > (10 * GF_UNIT_GB)) { -                cli_err ("'bs * count' value %"PRIu64" is greater than " -                         "maximum allowed value of 10GB", -                         ((uint64_t)blk_size * count)); +            } +            ret = dict_set_uint32(dict, "blk-size", (uint32_t)blk_size); +        } else if (perf && !nfs && !strcmp(key, "count")) { +            ret = gf_is_str_int(value); +            if (!ret) +                count = atoi(value); +            if (ret || (count <= 0)) { +                if (count < 0) +                    cli_err("count is an invalid number"); +                else +                    cli_err( +                        "count should be an integer " +                        "greater than zero"); +                  ret = -1;                  goto out; +            } +            ret = dict_set_uint32(dict, "blk-cnt", count); +        } else { +            ret = -1; +            goto out;          } +        if (ret) { +            gf_log("", GF_LOG_WARNING, +                   "Dict set failed for " +                   "key %s", +                   key); +            goto out; +        } +    } +    if (list_cnt == -1) +        list_cnt = 100; +    ret = dict_set_int32(dict, "list-cnt", list_cnt); +    if (ret) { +        gf_log("", GF_LOG_WARNING, "Dict set failed for list_cnt"); +        goto out; +    } -        *options = dict; +    if ((blk_size > 0) ^ (count > 0)) { +        cli_err("Need to give both 'bs' and 'count'"); +        ret = -1; +        goto out; +    } else if (((uint64_t)blk_size * count) > (10 * GF_UNIT_GB)) { +        cli_err("'bs * count' value %" PRIu64 +                " is greater than " +                "maximum allowed value of 10GB", +                ((uint64_t)blk_size * count)); +        ret = -1; +        goto out; +    } + +    *options = dict;  out: -        if (ret && dict) -                dict_unref (dict); -        return ret; +    if (ret && dict) +        dict_unref(dict); +    return ret;  }  uint32_t -cli_cmd_get_statusop (const char *arg) +cli_cmd_get_statusop(const char *arg)  { -        int        i         = 0; -        uint32_t   ret       = GF_CLI_STATUS_NONE; -        char      *w         = NULL; -        char      *opwords[] = {"detail", "mem", "clients", "fd", -                                "inode", "callpool", "tasks", "client-list", -                                NULL}; -        struct { -                char      *opname; -                uint32_t   opcode; -        } optable[] = { -                { "detail",   GF_CLI_STATUS_DETAIL   }, -                { "mem",      GF_CLI_STATUS_MEM      }, -                { "clients",  GF_CLI_STATUS_CLIENTS  }, -                { "fd",       GF_CLI_STATUS_FD       }, -                { "inode",    GF_CLI_STATUS_INODE    }, -                { "callpool", GF_CLI_STATUS_CALLPOOL }, -                { "tasks",    GF_CLI_STATUS_TASKS    }, -                { "client-list",  GF_CLI_STATUS_CLIENT_LIST }, -                { NULL } -        }; - -        w = str_getunamb (arg, opwords); -        if (!w) { -                gf_log ("cli", GF_LOG_DEBUG, -                        "Not a status op  %s", arg); -                goto out; -        } +    int i = 0; +    uint32_t ret = GF_CLI_STATUS_NONE; +    char *w = NULL; +    char *opwords[] = {"detail",   "mem",   "clients",     "fd", "inode", +                       "callpool", "tasks", "client-list", NULL}; +    struct { +        char *opname; +        uint32_t opcode; +    } optable[] = {{"detail", GF_CLI_STATUS_DETAIL}, +                   {"mem", GF_CLI_STATUS_MEM}, +                   {"clients", GF_CLI_STATUS_CLIENTS}, +                   {"fd", GF_CLI_STATUS_FD}, +                   {"inode", GF_CLI_STATUS_INODE}, +                   {"callpool", GF_CLI_STATUS_CALLPOOL}, +                   {"tasks", GF_CLI_STATUS_TASKS}, +                   {"client-list", GF_CLI_STATUS_CLIENT_LIST}, +                   {NULL}}; + +    w = str_getunamb(arg, opwords); +    if (!w) { +        gf_log("cli", GF_LOG_DEBUG, "Not a status op  %s", arg); +        goto out; +    } -        for (i = 0; optable[i].opname; i++) { -                if (!strcmp (w, optable[i].opname)) { -                        ret = optable[i].opcode; -                        break; -                } +    for (i = 0; optable[i].opname; i++) { +        if (!strcmp(w, optable[i].opname)) { +            ret = optable[i].opcode; +            break;          } +    } - out: -        return ret; +out: +    return ret;  }  int -cli_cmd_volume_status_parse (const char **words, int wordcount, -                             dict_t **options) +cli_cmd_volume_status_parse(const char **words, int wordcount, dict_t **options)  { -        dict_t    *dict            = NULL; -        int        ret             = -1; -        uint32_t   cmd             = 0; +    dict_t *dict = NULL; +    int ret = -1; +    uint32_t cmd = 0; -        GF_ASSERT (options); +    GF_ASSERT(options); -        dict = dict_new (); -        if (!dict) -                goto out; - -        switch (wordcount) { +    dict = dict_new(); +    if (!dict) +        goto out; +    switch (wordcount) {          case 2: -                cmd = GF_CLI_STATUS_ALL; -                ret = 0; -                break; +            cmd = GF_CLI_STATUS_ALL; +            ret = 0; +            break;          case 3: -                if (!strcmp (words[2], "all")) { -                        cmd = GF_CLI_STATUS_ALL; -                        ret = 0; +            if (!strcmp(words[2], "all")) { +                cmd = GF_CLI_STATUS_ALL; +                ret = 0; -                } else { -                        cmd = GF_CLI_STATUS_VOL; -                        ret = dict_set_str (dict, "volname", (char *)words[2]); -                } +            } else { +                cmd = GF_CLI_STATUS_VOL; +                ret = dict_set_str(dict, "volname", (char *)words[2]); +            } -                break; +            break;          case 4: -                cmd = cli_cmd_get_statusop (words[3]); - -                if (!strcmp (words[2], "all")) { -                        if (cmd == GF_CLI_STATUS_NONE) { -                                cli_err ("%s is not a valid status option", -                                         words[3]); -                                ret = -1; -                                goto out; -                        } -                        cmd |= GF_CLI_STATUS_ALL; -                        ret  = 0; - -                } else { -                        ret = dict_set_str (dict, "volname", -                                            (char *)words[2]); -                        if (ret) -                                goto out; - -                        if (cmd == GF_CLI_STATUS_NONE) { -                                if (!strcmp (words[3], "nfs")) { -                                        cmd |= GF_CLI_STATUS_NFS; -                                } else if (!strcmp (words[3], "shd")) { -                                        cmd |= GF_CLI_STATUS_SHD; -                                } else if (!strcmp (words[3], "quotad")) { -                                        cmd |= GF_CLI_STATUS_QUOTAD; -                                } else if (!strcmp (words[3], "snapd")) { -                                        cmd |= GF_CLI_STATUS_SNAPD; -                                } else if (!strcmp (words[3], "tierd")) { -                                        cmd |= GF_CLI_STATUS_TIERD; -                                } else if (!strcmp (words[3], "bitd")) { -                                        cmd |= GF_CLI_STATUS_BITD; -                                } else if (!strcmp (words[3], "scrub")) { -                                        cmd |= GF_CLI_STATUS_SCRUB; -                                } else { -                                        cmd = GF_CLI_STATUS_BRICK; -                                        ret = dict_set_str (dict, "brick", -                                                            (char *)words[3]); -                                } - -                        } else { -                                cmd |= GF_CLI_STATUS_VOL; -                                ret  = 0; -                        } -                } - -                break; - -        case 5: -                if (!strcmp (words[2], "all")) { -                        cli_err ("Cannot specify brick/nfs for \"all\""); -                        ret = -1; -                        goto out; -                } +            cmd = cli_cmd_get_statusop(words[3]); -                cmd = cli_cmd_get_statusop (words[4]); +            if (!strcmp(words[2], "all")) {                  if (cmd == GF_CLI_STATUS_NONE) { -                        cli_err ("%s is not a valid status option", -                                 words[4]); -                        ret = -1; -                        goto out; +                    cli_err("%s is not a valid status option", words[3]); +                    ret = -1; +                    goto out;                  } +                cmd |= GF_CLI_STATUS_ALL; +                ret = 0; - -                ret = dict_set_str (dict, "volname", (char *)words[2]); +            } else { +                ret = dict_set_str(dict, "volname", (char *)words[2]);                  if (ret) -                        goto out; +                    goto out; -                if (!strcmp (words[3], "nfs")) { -                        if (cmd == GF_CLI_STATUS_FD || -                            cmd == GF_CLI_STATUS_DETAIL || -                            cmd == GF_CLI_STATUS_TASKS) { -                                cli_err ("Detail/FD/Tasks status not available" -                                         " for NFS Servers"); -                                ret = -1; -                                goto out; -                        } +                if (cmd == GF_CLI_STATUS_NONE) { +                    if (!strcmp(words[3], "nfs")) {                          cmd |= GF_CLI_STATUS_NFS; -                } else if (!strcmp (words[3], "shd")){ -                        if (cmd == GF_CLI_STATUS_FD || -                            cmd == GF_CLI_STATUS_CLIENTS || -                            cmd == GF_CLI_STATUS_DETAIL || -                            cmd == GF_CLI_STATUS_TASKS) { -                                cli_err ("Detail/FD/Clients/Tasks status not " -                                         "available for Self-heal Daemons"); -                                ret = -1; -                                goto out; -                        } +                    } else if (!strcmp(words[3], "shd")) {                          cmd |= GF_CLI_STATUS_SHD; -                } else if (!strcmp (words[3], "quotad")) { -                        if (cmd == GF_CLI_STATUS_FD || -                            cmd == GF_CLI_STATUS_CLIENTS || -                            cmd == GF_CLI_STATUS_DETAIL || -                            cmd == GF_CLI_STATUS_INODE) { -                                cli_err ("Detail/FD/Clients/Inode status not " -                                         "available for Quota Daemon"); -                                ret = -1; -                                goto out; -                        } +                    } else if (!strcmp(words[3], "quotad")) {                          cmd |= GF_CLI_STATUS_QUOTAD; -                } else if  (!strcmp (words[3], "snapd")) { -                        if (cmd == GF_CLI_STATUS_FD || -                            cmd == GF_CLI_STATUS_CLIENTS || -                            cmd == GF_CLI_STATUS_DETAIL || -                            cmd == GF_CLI_STATUS_INODE) { -                                cli_err ("Detail/FD/Clients/Inode status not " -                                         "available for snap daemon"); -                                ret = -1; -                                goto out; -                        } +                    } else if (!strcmp(words[3], "snapd")) {                          cmd |= GF_CLI_STATUS_SNAPD; -                } else if  (!strcmp (words[3], "tierd")) { -                        if (cmd == GF_CLI_STATUS_FD || -                            cmd == GF_CLI_STATUS_CLIENTS || -                            cmd == GF_CLI_STATUS_DETAIL || -                            cmd == GF_CLI_STATUS_INODE) { -                                cli_err ("Detail/FD/Clients/Inode status not " -                                         "available for tier daemon"); -                                ret = -1; -                                goto out; -                        } +                    } else if (!strcmp(words[3], "tierd")) {                          cmd |= GF_CLI_STATUS_TIERD; +                    } else if (!strcmp(words[3], "bitd")) { +                        cmd |= GF_CLI_STATUS_BITD; +                    } else if (!strcmp(words[3], "scrub")) { +                        cmd |= GF_CLI_STATUS_SCRUB; +                    } else { +                        cmd = GF_CLI_STATUS_BRICK; +                        ret = dict_set_str(dict, "brick", (char *)words[3]); +                    } +                  } else { -                        if (cmd == GF_CLI_STATUS_TASKS) { -                                cli_err ("Tasks status not available for " -                                         "bricks"); -                                ret = -1; -                                goto out; -                        } -                        cmd |= GF_CLI_STATUS_BRICK; -                        ret = dict_set_str (dict, "brick", (char *)words[3]); +                    cmd |= GF_CLI_STATUS_VOL; +                    ret = 0;                  } -                break; +            } -        default: -                goto out; -        } +            break; -        if (ret) +        case 5: +            if (!strcmp(words[2], "all")) { +                cli_err("Cannot specify brick/nfs for \"all\""); +                ret = -1;                  goto out; +            } -        ret = dict_set_int32 (dict, "cmd", cmd); -        if (ret) +            cmd = cli_cmd_get_statusop(words[4]); +            if (cmd == GF_CLI_STATUS_NONE) { +                cli_err("%s is not a valid status option", words[4]); +                ret = -1;                  goto out; +            } + +            ret = dict_set_str(dict, "volname", (char *)words[2]); +            if (ret) +                goto out; + +            if (!strcmp(words[3], "nfs")) { +                if (cmd == GF_CLI_STATUS_FD || cmd == GF_CLI_STATUS_DETAIL || +                    cmd == GF_CLI_STATUS_TASKS) { +                    cli_err( +                        "Detail/FD/Tasks status not available" +                        " for NFS Servers"); +                    ret = -1; +                    goto out; +                } +                cmd |= GF_CLI_STATUS_NFS; +            } else if (!strcmp(words[3], "shd")) { +                if (cmd == GF_CLI_STATUS_FD || cmd == GF_CLI_STATUS_CLIENTS || +                    cmd == GF_CLI_STATUS_DETAIL || cmd == GF_CLI_STATUS_TASKS) { +                    cli_err( +                        "Detail/FD/Clients/Tasks status not " +                        "available for Self-heal Daemons"); +                    ret = -1; +                    goto out; +                } +                cmd |= GF_CLI_STATUS_SHD; +            } else if (!strcmp(words[3], "quotad")) { +                if (cmd == GF_CLI_STATUS_FD || cmd == GF_CLI_STATUS_CLIENTS || +                    cmd == GF_CLI_STATUS_DETAIL || cmd == GF_CLI_STATUS_INODE) { +                    cli_err( +                        "Detail/FD/Clients/Inode status not " +                        "available for Quota Daemon"); +                    ret = -1; +                    goto out; +                } +                cmd |= GF_CLI_STATUS_QUOTAD; +            } else if (!strcmp(words[3], "snapd")) { +                if (cmd == GF_CLI_STATUS_FD || cmd == GF_CLI_STATUS_CLIENTS || +                    cmd == GF_CLI_STATUS_DETAIL || cmd == GF_CLI_STATUS_INODE) { +                    cli_err( +                        "Detail/FD/Clients/Inode status not " +                        "available for snap daemon"); +                    ret = -1; +                    goto out; +                } +                cmd |= GF_CLI_STATUS_SNAPD; +            } else if (!strcmp(words[3], "tierd")) { +                if (cmd == GF_CLI_STATUS_FD || cmd == GF_CLI_STATUS_CLIENTS || +                    cmd == GF_CLI_STATUS_DETAIL || cmd == GF_CLI_STATUS_INODE) { +                    cli_err( +                        "Detail/FD/Clients/Inode status not " +                        "available for tier daemon"); +                    ret = -1; +                    goto out; +                } +                cmd |= GF_CLI_STATUS_TIERD; +            } else { +                if (cmd == GF_CLI_STATUS_TASKS) { +                    cli_err( +                        "Tasks status not available for " +                        "bricks"); +                    ret = -1; +                    goto out; +                } +                cmd |= GF_CLI_STATUS_BRICK; +                ret = dict_set_str(dict, "brick", (char *)words[3]); +            } +            break; -        *options = dict; +        default: +            goto out; +    } + +    if (ret) +        goto out; + +    ret = dict_set_int32(dict, "cmd", cmd); +    if (ret) +        goto out; - out: -        if (ret && dict) -                dict_unref (dict); +    *options = dict; -        return ret; +out: +    if (ret && dict) +        dict_unref(dict); + +    return ret;  }  gf_boolean_t -cli_cmd_validate_dumpoption (const char *arg, char **option) +cli_cmd_validate_dumpoption(const char *arg, char **option)  { -        char    *opwords[] = {"all", "nfs", "mem", "iobuf", "callpool", "priv", -                              "fd", "inode", "history", "inodectx", "fdctx", -                              "quotad", NULL}; -        char    *w = NULL; - -        w = str_getunamb (arg, opwords); -        if (!w) { -                gf_log ("cli", GF_LOG_DEBUG, "Unknown statedump option  %s", -                        arg); -                return _gf_false; -        } -        *option = w; -        return _gf_true; +    char *opwords[] = {"all",   "nfs",    "mem",   "iobuf",   "callpool", +                       "priv",  "fd",     "inode", "history", "inodectx", +                       "fdctx", "quotad", NULL}; +    char *w = NULL; + +    w = str_getunamb(arg, opwords); +    if (!w) { +        gf_log("cli", GF_LOG_DEBUG, "Unknown statedump option  %s", arg); +        return _gf_false; +    } +    *option = w; +    return _gf_true;  }  int -cli_cmd_volume_statedump_options_parse (const char **words, int wordcount, -                                        dict_t **options) +cli_cmd_volume_statedump_options_parse(const char **words, int wordcount, +                                       dict_t **options)  { -        int     ret = 0; -        int     i = 0; -        dict_t  *dict = NULL; -        int     option_cnt = 0; -        char    *option = NULL; -        char    *option_str = NULL; -        char    *tmp_str = NULL; -        char    *tmp = NULL; -        char    *ip_addr = NULL; -        char    *pid = NULL; - -        if ((wordcount >= 5) && ((strcmp (words[3], "client")) == 0)) { -                tmp = gf_strdup(words[4]); -                if (!tmp) { -                        ret = -1; -                        goto out; -                } -                ip_addr = strtok(tmp, ":"); -                pid = strtok(NULL, ":"); -                if (valid_internet_address (ip_addr, _gf_true) -                   && pid && gf_valid_pid (pid, strlen(pid))) { -                        ret = gf_asprintf(&option_str, "%s %s %s", words[3], -                                          ip_addr, pid); -                        if (ret < 0) { -                                goto out; -                        } -                        option_cnt = 3; -                } else { -                        ret = -1; -                        goto out; -                } +    int ret = 0; +    int i = 0; +    dict_t *dict = NULL; +    int option_cnt = 0; +    char *option = NULL; +    char *option_str = NULL; +    char *tmp_str = NULL; +    char *tmp = NULL; +    char *ip_addr = NULL; +    char *pid = NULL; + +    if ((wordcount >= 5) && ((strcmp(words[3], "client")) == 0)) { +        tmp = gf_strdup(words[4]); +        if (!tmp) { +            ret = -1; +            goto out; +        } +        ip_addr = strtok(tmp, ":"); +        pid = strtok(NULL, ":"); +        if (valid_internet_address(ip_addr, _gf_true) && pid && +            gf_valid_pid(pid, strlen(pid))) { +            ret = gf_asprintf(&option_str, "%s %s %s", words[3], ip_addr, pid); +            if (ret < 0) { +                goto out; +            } +            option_cnt = 3;          } else { -                for (i = 3; i < wordcount; i++, option_cnt++) { -                        if (!cli_cmd_validate_dumpoption (words[i], &option)) { -                                ret = -1; -                                goto out; -                        } -                        tmp_str = option_str; -                        option_str = NULL; -                        ret = gf_asprintf(&option_str, "%s%s ", -                                          tmp_str ? tmp_str : "", option); -                        GF_FREE(tmp_str); -                        if (ret < 0) { -                                goto out; -                        } -                } -                if (option_str && -                    (strstr (option_str, "nfs")) && -                     strstr (option_str, "quotad")) { -                        ret = -1; -                        goto out; -                } +            ret = -1; +            goto out;          } - -        dict = dict_new (); -        if (!dict) { +    } else { +        for (i = 3; i < wordcount; i++, option_cnt++) { +            if (!cli_cmd_validate_dumpoption(words[i], &option)) {                  ret = -1;                  goto out; +            } +            tmp_str = option_str; +            option_str = NULL; +            ret = gf_asprintf(&option_str, "%s%s ", tmp_str ? tmp_str : "", +                              option); +            GF_FREE(tmp_str); +            if (ret < 0) { +                goto out; +            } +        } +        if (option_str && (strstr(option_str, "nfs")) && +            strstr(option_str, "quotad")) { +            ret = -1; +            goto out;          } +    } -        /* dynamic string in dict is freed up when dict is freed up, and hence -        if option_str is NULL pass in an duplicate empty string to the same */ -        ret = dict_set_dynstr (dict, "options", -                               (option_str ? option_str : gf_strdup(""))); -        if (ret) -                goto out; -        option_str = NULL; +    dict = dict_new(); +    if (!dict) { +        ret = -1; +        goto out; +    } -        ret = dict_set_int32 (dict, "option_cnt", option_cnt); -        if (ret) -                goto out; +    /* dynamic string in dict is freed up when dict is freed up, and hence +    if option_str is NULL pass in an duplicate empty string to the same */ +    ret = dict_set_dynstr(dict, "options", +                          (option_str ? option_str : gf_strdup(""))); +    if (ret) +        goto out; +    option_str = NULL; -        *options = dict; +    ret = dict_set_int32(dict, "option_cnt", option_cnt); +    if (ret) +        goto out; + +    *options = dict;  out: -        GF_FREE (tmp); -        GF_FREE (option_str); -        if (ret && dict) -                dict_unref (dict); -        if (ret) -                gf_log ("cli", GF_LOG_ERROR, "Error parsing dumpoptions"); -        return ret; +    GF_FREE(tmp); +    GF_FREE(option_str); +    if (ret && dict) +        dict_unref(dict); +    if (ret) +        gf_log("cli", GF_LOG_ERROR, "Error parsing dumpoptions"); +    return ret;  }  int -cli_cmd_volume_clrlks_opts_parse (const char **words, int wordcount, -                                  dict_t **options) +cli_cmd_volume_clrlks_opts_parse(const char **words, int wordcount, +                                 dict_t **options)  { -        int     ret = -1; -        int     i = 0; -        dict_t  *dict = NULL; -        char    *kind_opts[4] = {"blocked", "granted", "all", NULL}; -        char    *types[4] = {"inode", "entry", "posix", NULL}; -        char    *free_ptr = NULL; - -        dict = dict_new (); -        if (!dict) -                goto out; +    int ret = -1; +    int i = 0; +    dict_t *dict = NULL; +    char *kind_opts[4] = {"blocked", "granted", "all", NULL}; +    char *types[4] = {"inode", "entry", "posix", NULL}; +    char *free_ptr = NULL; + +    dict = dict_new(); +    if (!dict) +        goto out; -        if (strcmp (words[4], "kind")) -                goto out; +    if (strcmp(words[4], "kind")) +        goto out; -        for (i = 0; kind_opts[i]; i++) { -               if (!strcmp (words[5], kind_opts[i])) { -                       free_ptr = gf_strdup (words[5]); -                       ret = dict_set_dynstr (dict, "kind", free_ptr); -                       if (ret) -                               goto out; -                       free_ptr = NULL; -                       break; -               } -        } -        if (i == 3) +    for (i = 0; kind_opts[i]; i++) { +        if (!strcmp(words[5], kind_opts[i])) { +            free_ptr = gf_strdup(words[5]); +            ret = dict_set_dynstr(dict, "kind", free_ptr); +            if (ret)                  goto out; +            free_ptr = NULL; +            break; +        } +    } +    if (i == 3) +        goto out; -        ret = -1; -        for (i = 0; types[i]; i++) { -               if (!strcmp (words[6], types[i])) { -                       free_ptr = gf_strdup (words[6]); -                       ret = dict_set_dynstr (dict, "type", free_ptr); -                       if (ret) -                               goto out; -                       free_ptr = NULL; -                       break; -               } -        } -        if (i == 3) +    ret = -1; +    for (i = 0; types[i]; i++) { +        if (!strcmp(words[6], types[i])) { +            free_ptr = gf_strdup(words[6]); +            ret = dict_set_dynstr(dict, "type", free_ptr); +            if (ret)                  goto out; - -        if (wordcount == 8) { -                free_ptr = gf_strdup (words[7]); -                ret = dict_set_dynstr (dict, "opts", free_ptr); -                if (ret) -                        goto out; -                free_ptr = NULL; +            free_ptr = NULL; +            break;          } +    } +    if (i == 3) +        goto out; -        ret = 0; -        *options = dict; +    if (wordcount == 8) { +        free_ptr = gf_strdup(words[7]); +        ret = dict_set_dynstr(dict, "opts", free_ptr); +        if (ret) +            goto out; +        free_ptr = NULL; +    } + +    ret = 0; +    *options = dict;  out: -       if (ret) { -               GF_FREE (free_ptr); -               dict_unref (dict); -       } +    if (ret) { +        GF_FREE(free_ptr); +        dict_unref(dict); +    } -       return ret; +    return ret;  }  static int -extract_hostname_path_from_token (const char *tmp_words, char **hostname, -                                  char **path) +extract_hostname_path_from_token(const char *tmp_words, char **hostname, +                                 char **path)  { -        int ret = 0; -        char *delimiter = NULL; -        char *tmp_host = NULL; -        char *host_name = NULL; -        char *words = NULL; -        int str_len = 0; -        *hostname = NULL; -        *path = NULL; - -        str_len = strlen (tmp_words) + 1; -        words = GF_MALLOC (str_len, gf_common_mt_char); -        if (!words){ -                ret = -1; -                goto out; -        } +    int ret = 0; +    char *delimiter = NULL; +    char *tmp_host = NULL; +    char *host_name = NULL; +    char *words = NULL; +    int str_len = 0; +    *hostname = NULL; +    *path = NULL; + +    str_len = strlen(tmp_words) + 1; +    words = GF_MALLOC(str_len, gf_common_mt_char); +    if (!words) { +        ret = -1; +        goto out; +    } -        snprintf (words, str_len, "%s", tmp_words); +    snprintf(words, str_len, "%s", tmp_words); -        if (validate_brick_name (words)) { -                cli_err ("Wrong brick type: %s, use <HOSTNAME>:" -                        "<export-dir-abs-path>", words); -                ret = -1; -                goto out; +    if (validate_brick_name(words)) { +        cli_err( +            "Wrong brick type: %s, use <HOSTNAME>:" +            "<export-dir-abs-path>", +            words); +        ret = -1; +        goto out; +    } else { +        delimiter = strrchr(words, ':'); +        ret = gf_canonicalize_path(delimiter + 1); +        if (ret) { +            goto out;          } else { -                delimiter = strrchr (words, ':'); -                ret = gf_canonicalize_path (delimiter + 1); -                if (ret) { -                        goto out; -                } else { -                        str_len = strlen (delimiter + 1) + 1; -                        *path = GF_MALLOC (str_len, -                                           gf_common_mt_char); -                        if (!*path) { -                           ret = -1; -                                goto out; - -                        } -                        snprintf (*path, str_len, "%s", delimiter +1); -                } -        } - -        tmp_host = gf_strdup (words); -        if (!tmp_host) { -                gf_log ("cli", GF_LOG_ERROR, "Out of memory"); -                ret = -1; -                goto out; -        } -        get_host_name (tmp_host, &host_name); -        if (!host_name) { -                ret = -1; -                gf_log("cli",GF_LOG_ERROR, "Unable to allocate " -                        "memory"); -                goto out; -        } -        if (!(strcmp (host_name, "localhost") && -            strcmp (host_name, "127.0.0.1") && -            strncmp (host_name, "0.", 2))) { -                cli_err ("Please provide a valid hostname/ip other " -                         "than localhost, 127.0.0.1 or loopback " -                         "address (0.0.0.0 to 0.255.255.255)."); -                ret = -1; -                goto out; -        } -        if (!valid_internet_address (host_name, _gf_false)) { -                cli_err ("internet address '%s' does not conform to " -                          "standards", host_name); +            str_len = strlen(delimiter + 1) + 1; +            *path = GF_MALLOC(str_len, gf_common_mt_char); +            if (!*path) {                  ret = -1;                  goto out; +            } +            snprintf(*path, str_len, "%s", delimiter + 1);          } +    } -        str_len = strlen (host_name) + 1; -        *hostname = GF_MALLOC (str_len, gf_common_mt_char); -        if (!*hostname) { -                ret = -1; -                goto out; -        } -        snprintf (*hostname, str_len, "%s", host_name); -        ret = 0; +    tmp_host = gf_strdup(words); +    if (!tmp_host) { +        gf_log("cli", GF_LOG_ERROR, "Out of memory"); +        ret = -1; +        goto out; +    } +    get_host_name(tmp_host, &host_name); +    if (!host_name) { +        ret = -1; +        gf_log("cli", GF_LOG_ERROR, +               "Unable to allocate " +               "memory"); +        goto out; +    } +    if (!(strcmp(host_name, "localhost") && strcmp(host_name, "127.0.0.1") && +          strncmp(host_name, "0.", 2))) { +        cli_err( +            "Please provide a valid hostname/ip other " +            "than localhost, 127.0.0.1 or loopback " +            "address (0.0.0.0 to 0.255.255.255)."); +        ret = -1; +        goto out; +    } +    if (!valid_internet_address(host_name, _gf_false)) { +        cli_err( +            "internet address '%s' does not conform to " +            "standards", +            host_name); +        ret = -1; +        goto out; +    } + +    str_len = strlen(host_name) + 1; +    *hostname = GF_MALLOC(str_len, gf_common_mt_char); +    if (!*hostname) { +        ret = -1; +        goto out; +    } +    snprintf(*hostname, str_len, "%s", host_name); +    ret = 0;  out: -        GF_FREE (words); -        GF_FREE (tmp_host); -        return ret; +    GF_FREE(words); +    GF_FREE(tmp_host); +    return ret;  }  static int -set_hostname_path_in_dict (const char *token, dict_t *dict, int heal_op) +set_hostname_path_in_dict(const char *token, dict_t *dict, int heal_op)  { -        char *hostname = NULL; -        char *path     = NULL; -        int   ret      = 0; +    char *hostname = NULL; +    char *path = NULL; +    int ret = 0; -        ret = extract_hostname_path_from_token (token, &hostname, &path); -        if (ret) -                goto out; +    ret = extract_hostname_path_from_token(token, &hostname, &path); +    if (ret) +        goto out; -        switch (heal_op) { +    switch (heal_op) {          case GF_SHD_OP_SBRAIN_HEAL_FROM_BRICK: -                ret = dict_set_dynstr (dict, "heal-source-hostname", -                                       hostname); -                if (ret) -                        goto out; -                hostname = NULL; -                ret = dict_set_dynstr (dict, "heal-source-brickpath", -                                       path); -                if (ret) { -                        goto out; -                } -                path = NULL; -                break; +            ret = dict_set_dynstr(dict, "heal-source-hostname", hostname); +            if (ret) +                goto out; +            hostname = NULL; +            ret = dict_set_dynstr(dict, "heal-source-brickpath", path); +            if (ret) { +                goto out; +            } +            path = NULL; +            break;          case GF_SHD_OP_STATISTICS_HEAL_COUNT_PER_REPLICA: -                ret = dict_set_dynstr (dict, "per-replica-cmd-hostname", -                                       hostname); -                if (ret) -                        goto out; -                hostname = NULL; -                ret = dict_set_dynstr (dict, "per-replica-cmd-path", -                                       path); -                if (ret) { -                        goto out; -                } -                path = NULL; -                break; +            ret = dict_set_dynstr(dict, "per-replica-cmd-hostname", hostname); +            if (ret) +                goto out; +            hostname = NULL; +            ret = dict_set_dynstr(dict, "per-replica-cmd-path", path); +            if (ret) { +                goto out; +            } +            path = NULL; +            break;          default: -                ret = -1; -                break; -        } +            ret = -1; +            break; +    }  out: -        GF_FREE(hostname); -        GF_FREE(path); -        return ret; +    GF_FREE(hostname); +    GF_FREE(path); +    return ret;  }  static int -heal_command_type_get (const char *command) +heal_command_type_get(const char *command)  { -        int     i = 0; -        /* subcommands are set as NULL */ -        char    *heal_cmds[GF_SHD_OP_HEAL_DISABLE + 1] = { -                [GF_SHD_OP_INVALID]                            = NULL, -                [GF_SHD_OP_HEAL_INDEX]                         = NULL, -                [GF_SHD_OP_HEAL_FULL]                          = "full", -                [GF_SHD_OP_INDEX_SUMMARY]                      = "info", -                [GF_SHD_OP_HEALED_FILES]                       = NULL, -                [GF_SHD_OP_HEAL_FAILED_FILES]                  = NULL, -                [GF_SHD_OP_SPLIT_BRAIN_FILES]                  = NULL, -                [GF_SHD_OP_STATISTICS]                         = "statistics", -                [GF_SHD_OP_STATISTICS_HEAL_COUNT]              = NULL, -                [GF_SHD_OP_STATISTICS_HEAL_COUNT_PER_REPLICA]  = NULL, -                [GF_SHD_OP_SBRAIN_HEAL_FROM_BIGGER_FILE]       = NULL, -                [GF_SHD_OP_SBRAIN_HEAL_FROM_BRICK]             = NULL, -                [GF_SHD_OP_HEAL_ENABLE]                        = "enable", -                [GF_SHD_OP_HEAL_DISABLE]                       = "disable", -        }; - -        for (i = 0; i <= GF_SHD_OP_HEAL_DISABLE; i++) { -                if (heal_cmds[i] && (strcmp (heal_cmds[i], command) == 0)) -                        return i; -        } - -        return GF_SHD_OP_INVALID; +    int i = 0; +    /* subcommands are set as NULL */ +    char *heal_cmds[GF_SHD_OP_HEAL_DISABLE + 1] = { +        [GF_SHD_OP_INVALID] = NULL, +        [GF_SHD_OP_HEAL_INDEX] = NULL, +        [GF_SHD_OP_HEAL_FULL] = "full", +        [GF_SHD_OP_INDEX_SUMMARY] = "info", +        [GF_SHD_OP_HEALED_FILES] = NULL, +        [GF_SHD_OP_HEAL_FAILED_FILES] = NULL, +        [GF_SHD_OP_SPLIT_BRAIN_FILES] = NULL, +        [GF_SHD_OP_STATISTICS] = "statistics", +        [GF_SHD_OP_STATISTICS_HEAL_COUNT] = NULL, +        [GF_SHD_OP_STATISTICS_HEAL_COUNT_PER_REPLICA] = NULL, +        [GF_SHD_OP_SBRAIN_HEAL_FROM_BIGGER_FILE] = NULL, +        [GF_SHD_OP_SBRAIN_HEAL_FROM_BRICK] = NULL, +        [GF_SHD_OP_HEAL_ENABLE] = "enable", +        [GF_SHD_OP_HEAL_DISABLE] = "disable", +    }; + +    for (i = 0; i <= GF_SHD_OP_HEAL_DISABLE; i++) { +        if (heal_cmds[i] && (strcmp(heal_cmds[i], command) == 0)) +            return i; +    } + +    return GF_SHD_OP_INVALID;  }  int -cli_cmd_volume_heal_options_parse (const char **words, int wordcount, -                                   dict_t **options) +cli_cmd_volume_heal_options_parse(const char **words, int wordcount, +                                  dict_t **options)  { -        int     ret = 0; -        dict_t  *dict = NULL; -        gf_xl_afr_op_t op = GF_SHD_OP_INVALID; +    int ret = 0; +    dict_t *dict = NULL; +    gf_xl_afr_op_t op = GF_SHD_OP_INVALID; -        dict = dict_new (); -        if (!dict) -                goto out; +    dict = dict_new(); +    if (!dict) +        goto out; -        ret = dict_set_str (dict, "volname", (char *) words[2]); -        if (ret) { -                gf_log (THIS->name, GF_LOG_ERROR, "failed to set volname"); -                goto out; -        } +    ret = dict_set_str(dict, "volname", (char *)words[2]); +    if (ret) { +        gf_log(THIS->name, GF_LOG_ERROR, "failed to set volname"); +        goto out; +    } -        if (wordcount == 3) { -                ret = dict_set_int32 (dict, "heal-op", GF_SHD_OP_HEAL_INDEX); -                goto done; +    if (wordcount == 3) { +        ret = dict_set_int32(dict, "heal-op", GF_SHD_OP_HEAL_INDEX); +        goto done; +    } + +    if (wordcount == 4) { +        op = heal_command_type_get(words[3]); +        if (op == GF_SHD_OP_INVALID) { +            ret = -1; +            goto out;          } -        if (wordcount == 4) { -                op = heal_command_type_get (words[3]); -                if (op == GF_SHD_OP_INVALID) { -                        ret = -1; -                        goto out; -                } +        ret = dict_set_int32(dict, "heal-op", op); +        goto done; +    } -                ret = dict_set_int32 (dict, "heal-op", op); -                goto done; +    if (wordcount == 5) { +        if (strcmp(words[3], "info") && strcmp(words[3], "statistics") && +            strcmp(words[3], "granular-entry-heal")) { +            ret = -1; +            goto out;          } -        if (wordcount == 5) { -                if (strcmp (words[3], "info") && -                    strcmp (words[3], "statistics") && -                    strcmp (words[3], "granular-entry-heal")) { -                        ret = -1; -                        goto out; -                } - -                if (!strcmp (words[3], "info")) { -                        if (!strcmp (words[4], "split-brain")) { -                                ret = dict_set_int32 (dict, "heal-op", -                                                   GF_SHD_OP_SPLIT_BRAIN_FILES); -                                goto done; -                        } -                        if (!strcmp (words[4], "summary")) { -                                ret = dict_set_int32 (dict, "heal-op", -                                                   GF_SHD_OP_HEAL_SUMMARY); -                                goto done; -                        } -                } +        if (!strcmp(words[3], "info")) { +            if (!strcmp(words[4], "split-brain")) { +                ret = dict_set_int32(dict, "heal-op", +                                     GF_SHD_OP_SPLIT_BRAIN_FILES); +                goto done; +            } +            if (!strcmp(words[4], "summary")) { +                ret = dict_set_int32(dict, "heal-op", GF_SHD_OP_HEAL_SUMMARY); +                goto done; +            } +        } -                if (!strcmp (words[3], "statistics")) { -                        if (!strcmp (words[4], "heal-count")) { -                                ret = dict_set_int32 (dict, "heal-op", -                                               GF_SHD_OP_STATISTICS_HEAL_COUNT); -                                goto done; -                        } -                } +        if (!strcmp(words[3], "statistics")) { +            if (!strcmp(words[4], "heal-count")) { +                ret = dict_set_int32(dict, "heal-op", +                                     GF_SHD_OP_STATISTICS_HEAL_COUNT); +                goto done; +            } +        } -                if (!strcmp (words[3], "granular-entry-heal")) { -                        if (!strcmp (words[4], "enable")) { -                                ret = dict_set_int32 (dict, "heal-op", -                                          GF_SHD_OP_GRANULAR_ENTRY_HEAL_ENABLE); -                                goto done; -                        } else if (!strcmp (words[4], "disable")) { -                                ret = dict_set_int32 (dict, "heal-op", -                                         GF_SHD_OP_GRANULAR_ENTRY_HEAL_DISABLE); -                                goto done; -                        } -                } +        if (!strcmp(words[3], "granular-entry-heal")) { +            if (!strcmp(words[4], "enable")) { +                ret = dict_set_int32(dict, "heal-op", +                                     GF_SHD_OP_GRANULAR_ENTRY_HEAL_ENABLE); +                goto done; +            } else if (!strcmp(words[4], "disable")) { +                ret = dict_set_int32(dict, "heal-op", +                                     GF_SHD_OP_GRANULAR_ENTRY_HEAL_DISABLE); +                goto done; +            } +        } -                ret = -1; +        ret = -1; +        goto out; +    } +    if (wordcount == 6) { +        if (strcmp(words[3], "split-brain")) { +            ret = -1; +            goto out; +        } +        if (!strcmp(words[4], "bigger-file")) { +            ret = dict_set_int32(dict, "heal-op", +                                 GF_SHD_OP_SBRAIN_HEAL_FROM_BIGGER_FILE); +            if (ret)                  goto out; +            ret = dict_set_str(dict, "file", (char *)words[5]); +            if (ret) +                goto out; +            goto done;          } -        if (wordcount == 6) { -                if (strcmp (words[3], "split-brain")) { -                        ret = -1; -                        goto out; -                } -                if (!strcmp (words[4], "bigger-file")) { -                        ret = dict_set_int32 (dict, "heal-op", -                                        GF_SHD_OP_SBRAIN_HEAL_FROM_BIGGER_FILE); -                        if (ret) -                                goto out; -                        ret = dict_set_str (dict, "file", (char *)words[5]); -                        if (ret) -                                goto out; -                        goto done; -                } -                if (!strcmp (words[4], "latest-mtime")) { -                        ret = dict_set_int32 (dict, "heal-op", -                                       GF_SHD_OP_SBRAIN_HEAL_FROM_LATEST_MTIME); -                        if (ret) -                                goto out; -                        ret = dict_set_str (dict, "file", (char *)words[5]); -                        if (ret) -                                goto out; -                        goto done; -                } -                if (!strcmp (words[4], "source-brick")) { -                        ret = dict_set_int32 (dict, "heal-op", -                                              GF_SHD_OP_SBRAIN_HEAL_FROM_BRICK); -                        if (ret) -                                goto out; -                        ret = set_hostname_path_in_dict (words[5], dict, -                                              GF_SHD_OP_SBRAIN_HEAL_FROM_BRICK); -                        if (ret) -                                goto out; -                        goto done; -                } -                ret = -1; +        if (!strcmp(words[4], "latest-mtime")) { +            ret = dict_set_int32(dict, "heal-op", +                                 GF_SHD_OP_SBRAIN_HEAL_FROM_LATEST_MTIME); +            if (ret)                  goto out; +            ret = dict_set_str(dict, "file", (char *)words[5]); +            if (ret) +                goto out; +            goto done;          } -        if (wordcount == 7) { -                if (!strcmp (words[3], "statistics") -                    && !strcmp (words[4], "heal-count") -                    && !strcmp (words[5], "replica")) { - -                        ret = dict_set_int32 (dict, "heal-op", -                                   GF_SHD_OP_STATISTICS_HEAL_COUNT_PER_REPLICA); -                        if (ret) -                                goto out; -                        ret = set_hostname_path_in_dict (words[6], dict, -                                   GF_SHD_OP_STATISTICS_HEAL_COUNT_PER_REPLICA); -                        if (ret) -                                goto out; -                        goto done; - -                } -                if (!strcmp (words[3], "split-brain") && -                    !strcmp (words[4], "source-brick")) { -                        ret = dict_set_int32 (dict, "heal-op", -                                              GF_SHD_OP_SBRAIN_HEAL_FROM_BRICK); -                        ret = set_hostname_path_in_dict (words[5], dict, -                                              GF_SHD_OP_SBRAIN_HEAL_FROM_BRICK); -                        if (ret) -                                goto out; -                        ret = dict_set_str (dict, "file", -                                            (char *) words[6]); -                        if (ret) -                                goto out; -                        goto done; -                } +        if (!strcmp(words[4], "source-brick")) { +            ret = dict_set_int32(dict, "heal-op", +                                 GF_SHD_OP_SBRAIN_HEAL_FROM_BRICK); +            if (ret) +                goto out; +            ret = set_hostname_path_in_dict(words[5], dict, +                                            GF_SHD_OP_SBRAIN_HEAL_FROM_BRICK); +            if (ret) +                goto out; +            goto done;          }          ret = -1;          goto out; +    } +    if (wordcount == 7) { +        if (!strcmp(words[3], "statistics") && +            !strcmp(words[4], "heal-count") && !strcmp(words[5], "replica")) { +            ret = dict_set_int32(dict, "heal-op", +                                 GF_SHD_OP_STATISTICS_HEAL_COUNT_PER_REPLICA); +            if (ret) +                goto out; +            ret = set_hostname_path_in_dict( +                words[6], dict, GF_SHD_OP_STATISTICS_HEAL_COUNT_PER_REPLICA); +            if (ret) +                goto out; +            goto done; +        } +        if (!strcmp(words[3], "split-brain") && +            !strcmp(words[4], "source-brick")) { +            ret = dict_set_int32(dict, "heal-op", +                                 GF_SHD_OP_SBRAIN_HEAL_FROM_BRICK); +            ret = set_hostname_path_in_dict(words[5], dict, +                                            GF_SHD_OP_SBRAIN_HEAL_FROM_BRICK); +            if (ret) +                goto out; +            ret = dict_set_str(dict, "file", (char *)words[6]); +            if (ret) +                goto out; +            goto done; +        } +    } +    ret = -1; +    goto out;  done: -        *options = dict; +    *options = dict;  out: -        if (ret && dict) { -                dict_unref (dict); -                *options = NULL; -        } +    if (ret && dict) { +        dict_unref(dict); +        *options = NULL; +    } -        return ret; +    return ret;  }  int -cli_cmd_volume_old_tier_parse (const char **words, int wordcount, -                             dict_t **options) +cli_cmd_volume_old_tier_parse(const char **words, int wordcount, +                              dict_t **options)  { -        dict_t                 *dict = NULL; -        int                      ret = -1; -        char                *volname = NULL; -        gf_cli_defrag_type       cmd = 0; +    dict_t *dict = NULL; +    int ret = -1; +    char *volname = NULL; +    gf_cli_defrag_type cmd = 0; -        GF_ASSERT (words); -        GF_ASSERT (options); +    GF_ASSERT(words); +    GF_ASSERT(options); -        dict = dict_new (); -        if (!dict) -                goto out; +    dict = dict_new(); +    if (!dict) +        goto out; -        if (wordcount != 4) -                goto out; +    if (wordcount != 4) +        goto out; -        if ((strcmp (words[1], "tier") == 0) && -            (strcmp (words[3], "start") == 0)) { -                cmd = GF_DEFRAG_CMD_START_TIER; -        } else -                goto out; +    if ((strcmp(words[1], "tier") == 0) && (strcmp(words[3], "start") == 0)) { +        cmd = GF_DEFRAG_CMD_START_TIER; +    } else +        goto out; -        volname = (char *) words[2]; +    volname = (char *)words[2]; -        ret = dict_set_str (dict, "volname", volname); +    ret = dict_set_str(dict, "volname", volname); -        if (ret) { -                gf_log (THIS->name, GF_LOG_ERROR, "failed to set dict"); -                goto out; -        } +    if (ret) { +        gf_log(THIS->name, GF_LOG_ERROR, "failed to set dict"); +        goto out; +    } -        ret = dict_set_int32 (dict, "rebalance-command", (int32_t) cmd); +    ret = dict_set_int32(dict, "rebalance-command", (int32_t)cmd); -        if (ret) { -                gf_log (THIS->name, GF_LOG_ERROR, "failed to set dict"); -                goto out; -        } +    if (ret) { +        gf_log(THIS->name, GF_LOG_ERROR, "failed to set dict"); +        goto out; +    } -        *options = dict; +    *options = dict;  out: -        if (ret && dict) -                dict_unref (dict); +    if (ret && dict) +        dict_unref(dict); -        return ret; +    return ret;  }  int -cli_cmd_volume_defrag_parse (const char **words, int wordcount, -                             dict_t **options) +cli_cmd_volume_defrag_parse(const char **words, int wordcount, dict_t **options)  { -        dict_t                 *dict = NULL; -        int                      ret = -1; -        char                *option  = NULL; -        char                *volname = NULL; -        char                *command = NULL; -        gf_cli_defrag_type       cmd = 0; - -        GF_ASSERT (words); -        GF_ASSERT (options); - -        dict = dict_new (); -        if (!dict) -                goto out; - -        if (!((wordcount == 4) || (wordcount == 5))) -                goto out; - -        if (wordcount == 4) { -                if (strcmp (words[3], "start") && strcmp (words[3], "stop") && -                    strcmp (words[3], "status")) -                            goto out; -        } else { -                if (strcmp (words[3], "fix-layout") && -                    strcmp (words[3], "start")) -                        goto out; -        } - -        volname = (char *) words[2]; - -        if (wordcount == 4) { -                command = (char *) words[3]; -        } -        if (wordcount == 5) { -               if ((strcmp (words[3], "fix-layout") || -                    strcmp (words[4], "start")) && -                    (strcmp (words[3], "start") || -                    strcmp (words[4], "force"))) { -                        ret = -1; -                        goto out; -                } -                command = (char *) words[3]; -                option = (char *) words[4]; -        } +    dict_t *dict = NULL; +    int ret = -1; +    char *option = NULL; +    char *volname = NULL; +    char *command = NULL; +    gf_cli_defrag_type cmd = 0; + +    GF_ASSERT(words); +    GF_ASSERT(options); + +    dict = dict_new(); +    if (!dict) +        goto out; -        if (strcmp (command, "start") == 0) { -                cmd = GF_DEFRAG_CMD_START; -                if (option && strcmp (option, "force") == 0) { -                                cmd = GF_DEFRAG_CMD_START_FORCE; -                        } -                goto done; -        } +    if (!((wordcount == 4) || (wordcount == 5))) +        goto out; -        if (strcmp (command, "fix-layout") == 0) { -                cmd = GF_DEFRAG_CMD_START_LAYOUT_FIX; -                goto done; -        } -        if (strcmp (command, "stop") == 0) { -                cmd = GF_DEFRAG_CMD_STOP; -                goto done; -        } -        if (strcmp (command, "status") == 0) { -                cmd = GF_DEFRAG_CMD_STATUS; -        } +    if (wordcount == 4) { +        if (strcmp(words[3], "start") && strcmp(words[3], "stop") && +            strcmp(words[3], "status")) +            goto out; +    } else { +        if (strcmp(words[3], "fix-layout") && strcmp(words[3], "start")) +            goto out; +    } + +    volname = (char *)words[2]; + +    if (wordcount == 4) { +        command = (char *)words[3]; +    } +    if (wordcount == 5) { +        if ((strcmp(words[3], "fix-layout") || strcmp(words[4], "start")) && +            (strcmp(words[3], "start") || strcmp(words[4], "force"))) { +            ret = -1; +            goto out; +        } +        command = (char *)words[3]; +        option = (char *)words[4]; +    } + +    if (strcmp(command, "start") == 0) { +        cmd = GF_DEFRAG_CMD_START; +        if (option && strcmp(option, "force") == 0) { +            cmd = GF_DEFRAG_CMD_START_FORCE; +        } +        goto done; +    } + +    if (strcmp(command, "fix-layout") == 0) { +        cmd = GF_DEFRAG_CMD_START_LAYOUT_FIX; +        goto done; +    } +    if (strcmp(command, "stop") == 0) { +        cmd = GF_DEFRAG_CMD_STOP; +        goto done; +    } +    if (strcmp(command, "status") == 0) { +        cmd = GF_DEFRAG_CMD_STATUS; +    }  done: -        ret = dict_set_str (dict, "volname", volname); +    ret = dict_set_str(dict, "volname", volname); -        if (ret) { -                gf_log (THIS->name, GF_LOG_ERROR, "failed to set dict"); -                goto out; -        } +    if (ret) { +        gf_log(THIS->name, GF_LOG_ERROR, "failed to set dict"); +        goto out; +    } -        ret = dict_set_int32 (dict, "rebalance-command", (int32_t) cmd); +    ret = dict_set_int32(dict, "rebalance-command", (int32_t)cmd); -        if (ret) { -                gf_log (THIS->name, GF_LOG_ERROR, "failed to set dict"); -                goto out; -        } +    if (ret) { +        gf_log(THIS->name, GF_LOG_ERROR, "failed to set dict"); +        goto out; +    } -        *options = dict; +    *options = dict;  out: -        if (ret && dict) -                dict_unref (dict); +    if (ret && dict) +        dict_unref(dict); -        return ret; +    return ret;  }  int32_t -cli_snap_create_desc_parse (dict_t *dict, const char **words, -                            size_t wordcount, int32_t desc_opt_loc) +cli_snap_create_desc_parse(dict_t *dict, const char **words, size_t wordcount, +                           int32_t desc_opt_loc)  { -        int32_t        ret      = -1; -        char          *desc     = NULL; -        int32_t        desc_len = 0; -        int            len; - -        desc = GF_MALLOC (MAX_SNAP_DESCRIPTION_LEN + 1, -                          gf_common_mt_char); -        if (!desc) { -                ret = -1; -                goto out; -        } - - -        len = strlen (words[desc_opt_loc]); -        if (len >= MAX_SNAP_DESCRIPTION_LEN) { -                cli_out ("snapshot create: description truncated: " -                         "Description provided is longer than 1024 characters"); -                desc_len = MAX_SNAP_DESCRIPTION_LEN; -        } else { -                desc_len = len; -        } +    int32_t ret = -1; +    char *desc = NULL; +    int32_t desc_len = 0; +    int len; -        snprintf (desc, desc_len + 1, "%s", words[desc_opt_loc]); -        /* Calculating the size of the description as given by the user */ - -        ret = dict_set_dynstr (dict, "description", desc); -        if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Unable to save snap " -                        "description"); -                goto out; -        } +    desc = GF_MALLOC(MAX_SNAP_DESCRIPTION_LEN + 1, gf_common_mt_char); +    if (!desc) { +        ret = -1; +        goto out; +    } + +    len = strlen(words[desc_opt_loc]); +    if (len >= MAX_SNAP_DESCRIPTION_LEN) { +        cli_out( +            "snapshot create: description truncated: " +            "Description provided is longer than 1024 characters"); +        desc_len = MAX_SNAP_DESCRIPTION_LEN; +    } else { +        desc_len = len; +    } + +    snprintf(desc, desc_len + 1, "%s", words[desc_opt_loc]); +    /* Calculating the size of the description as given by the user */ + +    ret = dict_set_dynstr(dict, "description", desc); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, +               "Unable to save snap " +               "description"); +        goto out; +    } -        ret = 0; +    ret = 0;  out: -        if (ret && desc) -                GF_FREE (desc); +    if (ret && desc) +        GF_FREE(desc); -        return ret; +    return ret;  }  /* Function to check whether the Volume name is repeated */  int -cli_check_if_volname_repeated (const char **words, unsigned int start_index, -                           uint64_t cur_index) { -        uint64_t        i       =       -1; -        int             ret     =        0; +cli_check_if_volname_repeated(const char **words, unsigned int start_index, +                              uint64_t cur_index) +{ +    uint64_t i = -1; +    int ret = 0; -        GF_ASSERT (words); +    GF_ASSERT(words); -        for (i = start_index ; i < cur_index ; i++) { -                if (strcmp (words[i], words[cur_index]) == 0) { -                        ret = -1; -                        goto out; -                } +    for (i = start_index; i < cur_index; i++) { +        if (strcmp(words[i], words[cur_index]) == 0) { +            ret = -1; +            goto out;          } +    }  out: -        return ret; +    return ret;  }  /* snapshot clone <clonename> <snapname> @@ -4289,72 +4321,77 @@ out:   *                 0 on success   */  int -cli_snap_clone_parse (dict_t *dict, const char **words, int wordcount) { -        uint64_t        i               =       0; -        int             ret             =       -1; -        char            *clonename      =       NULL; -        unsigned int    cmdi            =       2; -        /* cmdi is command index, here cmdi is "2" (gluster snapshot clone)*/ - -        GF_ASSERT (words); -        GF_ASSERT (dict); - -        if (wordcount == cmdi + 1) { -                cli_err ("Invalid Syntax."); -                gf_log ("cli", GF_LOG_ERROR, -                        "Invalid number of  words for snap clone command"); -                goto out; -        } - -        if (strlen(words[cmdi]) >= GLUSTERD_MAX_SNAP_NAME) { -                cli_err ("snapshot clone: failed: clonename cannot exceed " -                         "255 characters."); -                gf_log ("cli", GF_LOG_ERROR, "Clone name too long"); - -                goto out; -        } - -        clonename = (char *) words[cmdi]; -        for (i = 0 ; i < strlen (clonename); i++) { -                /* Following volume name convention */ -                if (!isalnum (clonename[i]) && (clonename[i] != '_' -                                           && (clonename[i] != '-'))) { -                        /* TODO : Is this message enough?? */ -                        cli_err ("Clonename can contain only alphanumeric, " -                                 "\"-\" and \"_\" characters"); -                        goto out; -                } -        } - -        ret = dict_set_int32 (dict, "volcount", 1); -        if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Could not save volcount"); -                goto out; -        } - -        ret = dict_set_str (dict, "clonename", (char *)words[cmdi]); -        if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Could not save clone " -                        "name(%s)", (char *)words[cmdi]); -                goto out; -        } +cli_snap_clone_parse(dict_t *dict, const char **words, int wordcount) +{ +    uint64_t i = 0; +    int ret = -1; +    char *clonename = NULL; +    unsigned int cmdi = 2; +    /* cmdi is command index, here cmdi is "2" (gluster snapshot clone)*/ + +    GF_ASSERT(words); +    GF_ASSERT(dict); + +    if (wordcount == cmdi + 1) { +        cli_err("Invalid Syntax."); +        gf_log("cli", GF_LOG_ERROR, +               "Invalid number of  words for snap clone command"); +        goto out; +    } -        /* Filling snap name in the dictionary */ -        ret = dict_set_str (dict, "snapname", (char *)words[cmdi+1]); -        if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Could not " -                        "save snap name(%s)", (char *)words[cmdi+1]); -                goto out; -        } +    if (strlen(words[cmdi]) >= GLUSTERD_MAX_SNAP_NAME) { +        cli_err( +            "snapshot clone: failed: clonename cannot exceed " +            "255 characters."); +        gf_log("cli", GF_LOG_ERROR, "Clone name too long"); +        goto out; +    } + +    clonename = (char *)words[cmdi]; +    for (i = 0; i < strlen(clonename); i++) { +        /* Following volume name convention */ +        if (!isalnum(clonename[i]) && +            (clonename[i] != '_' && (clonename[i] != '-'))) { +            /* TODO : Is this message enough?? */ +            cli_err( +                "Clonename can contain only alphanumeric, " +                "\"-\" and \"_\" characters"); +            goto out; +        } +    } + +    ret = dict_set_int32(dict, "volcount", 1); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, "Could not save volcount"); +        goto out; +    } + +    ret = dict_set_str(dict, "clonename", (char *)words[cmdi]); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, +               "Could not save clone " +               "name(%s)", +               (char *)words[cmdi]); +        goto out; +    } + +    /* Filling snap name in the dictionary */ +    ret = dict_set_str(dict, "snapname", (char *)words[cmdi + 1]); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, +               "Could not " +               "save snap name(%s)", +               (char *)words[cmdi + 1]); +        goto out; +    } -        ret = 0; +    ret = 0;  out: -        return ret; +    return ret;  } -  /* snapshot create <snapname> <vol-name(s)> [description <description>]   *                                           [force]   * @arg-0, dict     : Request Dictionary to be sent to server side. @@ -4365,172 +4402,181 @@ out:   *                 0 on success   */  int -cli_snap_create_parse (dict_t *dict, const char **words, int wordcount) { -        uint64_t        i               =       0; -        int             ret             =       -1; -        uint64_t        volcount        =       0; -        char            key[PATH_MAX]   =       ""; -        char            *snapname       =       NULL; -        unsigned int    cmdi            =       2; -        int             flags           =       0; -        /* cmdi is command index, here cmdi is "2" (gluster snapshot create)*/ - -        GF_ASSERT (words); -        GF_ASSERT (dict); - -        if (wordcount <= cmdi + 1) { -                cli_err ("Invalid Syntax."); -                gf_log ("cli", GF_LOG_ERROR, -                        "Too less words for snap create command"); -                goto out; -        } +cli_snap_create_parse(dict_t *dict, const char **words, int wordcount) +{ +    uint64_t i = 0; +    int ret = -1; +    uint64_t volcount = 0; +    char key[PATH_MAX] = ""; +    char *snapname = NULL; +    unsigned int cmdi = 2; +    int flags = 0; +    /* cmdi is command index, here cmdi is "2" (gluster snapshot create)*/ + +    GF_ASSERT(words); +    GF_ASSERT(dict); + +    if (wordcount <= cmdi + 1) { +        cli_err("Invalid Syntax."); +        gf_log("cli", GF_LOG_ERROR, "Too less words for snap create command"); +        goto out; +    } -        if (strlen(words[cmdi]) >= GLUSTERD_MAX_SNAP_NAME) { -                cli_err ("snapshot create: failed: snapname cannot exceed " -                         "255 characters."); -                gf_log ("cli", GF_LOG_ERROR, "Snapname too long"); +    if (strlen(words[cmdi]) >= GLUSTERD_MAX_SNAP_NAME) { +        cli_err( +            "snapshot create: failed: snapname cannot exceed " +            "255 characters."); +        gf_log("cli", GF_LOG_ERROR, "Snapname too long"); -                goto out; +        goto out; +    } + +    snapname = (char *)words[cmdi]; +    for (i = 0; i < strlen(snapname); i++) { +        /* Following volume name convention */ +        if (!isalnum(snapname[i]) && +            (snapname[i] != '_' && (snapname[i] != '-'))) { +            /* TODO : Is this message enough?? */ +            cli_err( +                "Snapname can contain only alphanumeric, " +                "\"-\" and \"_\" characters"); +            goto out; +        } +    } + +    ret = dict_set_str(dict, "snapname", (char *)words[cmdi]); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, +               "Could not save snap " +               "name(%s)", +               (char *)words[cmdi]); +        goto out; +    } + +    /* Filling volume name in the dictionary */ +    for (i = cmdi + 1; +         i < wordcount && (strcmp(words[i], "description")) != 0 && +         (strcmp(words[i], "force") != 0) && +         (strcmp(words[i], "no-timestamp") != 0); +         i++) { +        volcount++; +        /* volume index starts from 1 */ +        ret = snprintf(key, sizeof(key), "volname%" PRIu64, volcount); +        if (ret < 0) { +            goto out;          } -        snapname = (char *) words[cmdi]; -        for (i = 0 ; i < strlen (snapname); i++) { -                /* Following volume name convention */ -                if (!isalnum (snapname[i]) && (snapname[i] != '_' -                                           && (snapname[i] != '-'))) { -                        /* TODO : Is this message enough?? */ -                        cli_err ("Snapname can contain only alphanumeric, " -                                 "\"-\" and \"_\" characters"); -                        goto out; -                } +        ret = dict_set_str(dict, key, (char *)words[i]); +        if (ret) { +            gf_log("cli", GF_LOG_ERROR, +                   "Could not " +                   "save volume name(%s)", +                   (char *)words[i]); +            goto out;          } -        ret = dict_set_str (dict, "snapname", (char *)words[cmdi]); -        if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Could not save snap " -                        "name(%s)", (char *)words[cmdi]); -                goto out; +        if (i >= cmdi + 2) { +            ret = -1; +            cli_err( +                "Creating multiple volume snapshot is not " +                "supported as of now"); +            goto out;          } +        /* TODO : remove this above condition check once +         * multiple volume snapshot is supported */ +    } -        /* Filling volume name in the dictionary */ -        for (i = cmdi + 1 ; i < wordcount -                            && (strcmp (words[i], "description")) != 0 -                            && (strcmp (words[i], "force") != 0) -                            && (strcmp (words[i], "no-timestamp") != 0); -                            i++) { -                volcount++; -                /* volume index starts from 1 */ -                ret = snprintf (key, sizeof (key), "volname%"PRIu64, volcount); -                if (ret < 0) { -                        goto out; -                } +    if (volcount == 0) { +        ret = -1; +        cli_err("Please provide the volume name"); +        gf_log("cli", GF_LOG_ERROR, "Invalid Syntax"); +        goto out; +    } -                ret = dict_set_str (dict, key, (char *)words[i]); -                if (ret) { -                        gf_log ("cli", GF_LOG_ERROR, "Could not " -                                "save volume name(%s)", (char *)words[i]); -                        goto out; -                } +    ret = dict_set_int32(dict, "volcount", volcount); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, "Could not save volcount"); +        goto out; +    } + +    /* Verify how we got out of "for" loop, +     * if it is by reaching wordcount limit then goto "out", +     * because we need not parse for "description","force" and +     * "no-timestamp" after this. +     */ +    if (i == wordcount) { +        goto out; +    } -                if (i >= cmdi + 2) { -                        ret = -1; -                        cli_err("Creating multiple volume snapshot is not " -                                "supported as of now"); -                        goto out; -                } -                /* TODO : remove this above condition check once -                 * multiple volume snapshot is supported */ +    if (strcmp(words[i], "no-timestamp") == 0) { +        ret = dict_set_str(dict, "no-timestamp", "true"); +        if (ret) { +            gf_log("cli", GF_LOG_ERROR, +                   "Could not save " +                   "time-stamp option");          } +        if (i == (wordcount - 1)) +            goto out; +        i++; +    } -        if (volcount == 0) { -                ret = -1; -                cli_err ("Please provide the volume name"); -                gf_log ("cli", GF_LOG_ERROR, "Invalid Syntax"); -                goto out; +    if ((strcmp(words[i], "description")) == 0) { +        ++i; +        if (i > (wordcount - 1)) { +            ret = -1; +            cli_err("Please provide a description"); +            gf_log("cli", GF_LOG_ERROR, "Description not provided"); +            goto out;          } -        ret = dict_set_int32 (dict, "volcount", volcount); +        ret = cli_snap_create_desc_parse(dict, words, wordcount, i);          if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Could not save volcount"); -                goto out; -        } - -        /* Verify how we got out of "for" loop, -         * if it is by reaching wordcount limit then goto "out", -         * because we need not parse for "description","force" and -         * "no-timestamp" after this. +            gf_log("cli", GF_LOG_ERROR, +                   "Could not save snap " +                   "description"); +            goto out; +        } + +        if (i == (wordcount - 1)) +            goto out; +        i++; +        /* point the index to next word. +         * As description might be follwed by force option. +         * Before that, check if wordcount limit is reached           */ -        if (i == wordcount) { -                goto out; -        } - -        if (strcmp (words[i], "no-timestamp") == 0) { -                ret = dict_set_str (dict, "no-timestamp", "true"); -                if (ret) { -                        gf_log ("cli", GF_LOG_ERROR, "Could not save " -                                "time-stamp option"); -                } -                if (i == (wordcount-1)) -                        goto out; -                i++; -        } - -        if ((strcmp (words[i], "description")) == 0) { -                ++i; -                if (i > (wordcount - 1)) { -                        ret = -1; -                        cli_err ("Please provide a description"); -                        gf_log ("cli", GF_LOG_ERROR, -                                "Description not provided"); -                        goto out; -                } - -                ret = cli_snap_create_desc_parse(dict, words, wordcount, i); -                if (ret) { -                        gf_log ("cli", GF_LOG_ERROR, "Could not save snap " -                                "description"); -                        goto out; -                } - -                if (i == (wordcount - 1)) -                        goto out; -                i++; -                /* point the index to next word. -                 * As description might be follwed by force option. -                 * Before that, check if wordcount limit is reached -                 */ -        } +    } -        if (strcmp (words[i], "force") == 0) { -                flags = GF_CLI_FLAG_OP_FORCE; +    if (strcmp(words[i], "force") == 0) { +        flags = GF_CLI_FLAG_OP_FORCE; -        } else { -                ret = -1; -                cli_err ("Invalid Syntax."); -                gf_log ("cli", GF_LOG_ERROR, "Invalid Syntax"); -                goto out; -        } +    } else { +        ret = -1; +        cli_err("Invalid Syntax."); +        gf_log("cli", GF_LOG_ERROR, "Invalid Syntax"); +        goto out; +    } -        /* Check if the command has anything after "force" keyword */ -        if (++i < wordcount) { -                ret = -1; -                gf_log ("cli", GF_LOG_ERROR, "Invalid Syntax"); -                goto out; -        } +    /* Check if the command has anything after "force" keyword */ +    if (++i < wordcount) { +        ret = -1; +        gf_log("cli", GF_LOG_ERROR, "Invalid Syntax"); +        goto out; +    } -        ret = 0; +    ret = 0;  out: -        if(ret == 0) { -                /*Adding force flag in either of the case i.e force set -                 * or unset*/ -                ret = dict_set_int32 (dict, "flags", flags); -                if (ret) { -                        gf_log ("cli", GF_LOG_ERROR, "Could not save " -                                "snap force option"); -                } +    if (ret == 0) { +        /*Adding force flag in either of the case i.e force set +         * or unset*/ +        ret = dict_set_int32(dict, "flags", flags); +        if (ret) { +            gf_log("cli", GF_LOG_ERROR, +                   "Could not save " +                   "snap force option");          } -        return ret; +    } +    return ret;  }  /* snapshot list [volname] @@ -4542,30 +4588,30 @@ out:   *                 0 on success   */  int -cli_snap_list_parse (dict_t *dict, const char **words, int wordcount) { -        int             ret     =       -1; +cli_snap_list_parse(dict_t *dict, const char **words, int wordcount) +{ +    int ret = -1; -        GF_ASSERT (words); -        GF_ASSERT (dict); +    GF_ASSERT(words); +    GF_ASSERT(dict); -        if (wordcount < 2 || wordcount > 3) { -                gf_log ("cli", GF_LOG_ERROR, "Invalid Syntax"); -                goto out; -        } +    if (wordcount < 2 || wordcount > 3) { +        gf_log("cli", GF_LOG_ERROR, "Invalid Syntax"); +        goto out; +    } -        if (wordcount == 2) { -                ret = 0; -                goto out; -        } +    if (wordcount == 2) { +        ret = 0; +        goto out; +    } -        ret = dict_set_str (dict, "volname", (char *)words[2]); -        if (ret) { -                gf_log ("cli", GF_LOG_ERROR, -                        "Failed to save volname in dictionary"); -                goto out; -        } +    ret = dict_set_str(dict, "volname", (char *)words[2]); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, "Failed to save volname in dictionary"); +        goto out; +    }  out: -        return ret; +    return ret;  }  /* snapshot info [(snapname |  volume <volname>)] @@ -4577,87 +4623,88 @@ out:   *                 0 on success   */  int -cli_snap_info_parse (dict_t *dict, const char **words, int wordcount) +cli_snap_info_parse(dict_t *dict, const char **words, int wordcount)  { +    int ret = -1; +    int32_t cmd = GF_SNAP_INFO_TYPE_ALL; +    unsigned int cmdi = 2; +    /* cmdi is command index, here cmdi is "2" (gluster snapshot info)*/ -        int             ret             =       -1; -        int32_t         cmd             =       GF_SNAP_INFO_TYPE_ALL; -        unsigned int    cmdi            =        2; -        /* cmdi is command index, here cmdi is "2" (gluster snapshot info)*/ +    GF_ASSERT(words); +    GF_ASSERT(dict); -        GF_ASSERT (words); -        GF_ASSERT (dict); +    if (wordcount > 4 || wordcount < cmdi) { +        gf_log("cli", GF_LOG_ERROR, "Invalid syntax"); +        goto out; +    } -        if (wordcount > 4 || wordcount < cmdi) { -                gf_log ("cli", GF_LOG_ERROR, "Invalid syntax"); -                goto out; -        } +    if (wordcount == cmdi) { +        ret = 0; +        goto out; +    } -        if (wordcount == cmdi) { -                ret = 0; -                goto out; +    /* If 3rd word is not "volume", then it must +     * be snapname. +     */ +    if (strcmp(words[cmdi], "volume") != 0) { +        ret = dict_set_str(dict, "snapname", (char *)words[cmdi]); +        if (ret) { +            gf_log("cli", GF_LOG_ERROR, +                   "Unable to save " +                   "snapname %s", +                   words[cmdi]); +            goto out;          } -        /* If 3rd word is not "volume", then it must -         * be snapname. +        /* Once snap name is parsed, if we encounter any other +         * word then fail it. Invalid Syntax. +         * example : snapshot info <snapname> word           */ -        if (strcmp (words[cmdi], "volume") != 0) { -                ret = dict_set_str (dict, "snapname", -                                   (char *)words[cmdi]); -                if (ret) { -                        gf_log ("cli", GF_LOG_ERROR, "Unable to save " -                                "snapname %s", words[cmdi]); -                        goto out; -                } - -                /* Once snap name is parsed, if we encounter any other -                 * word then fail it. Invalid Syntax. -                 * example : snapshot info <snapname> word -                 */ -                if ((cmdi + 1) != wordcount) { -                        ret = -1; -                        gf_log ("cli", GF_LOG_ERROR, "Invalid Syntax"); -                        goto out; -                } - -                cmd = GF_SNAP_INFO_TYPE_SNAP; -                ret = 0; -                goto out; -                /* No need to continue the parsing once we -                 * get the snapname -                 */ +        if ((cmdi + 1) != wordcount) { +            ret = -1; +            gf_log("cli", GF_LOG_ERROR, "Invalid Syntax"); +            goto out;          } -        /* If 3rd word is "volume", then check if next word -         * is present. As, "snapshot info volume" is an -         * invalid command. +        cmd = GF_SNAP_INFO_TYPE_SNAP; +        ret = 0; +        goto out; +        /* No need to continue the parsing once we +         * get the snapname           */ -        if ((cmdi + 1) == wordcount) { -                ret = -1; -                gf_log ("cli", GF_LOG_ERROR, "Invalid Syntax"); -                goto out; -        } +    } -        ret = dict_set_str (dict, "volname", (char *)words[wordcount - 1]); -        if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Could not save " -                        "volume name %s", words[wordcount - 1]); -                goto out; -        } -        cmd = GF_SNAP_INFO_TYPE_VOL; +    /* If 3rd word is "volume", then check if next word +     * is present. As, "snapshot info volume" is an +     * invalid command. +     */ +    if ((cmdi + 1) == wordcount) { +        ret = -1; +        gf_log("cli", GF_LOG_ERROR, "Invalid Syntax"); +        goto out; +    } + +    ret = dict_set_str(dict, "volname", (char *)words[wordcount - 1]); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, +               "Could not save " +               "volume name %s", +               words[wordcount - 1]); +        goto out; +    } +    cmd = GF_SNAP_INFO_TYPE_VOL;  out: -        if (ret == 0) { -                ret = dict_set_int32 (dict, "sub-cmd", cmd); -                if (ret) { -                        gf_log ("cli", GF_LOG_ERROR, "Could not save " -                                "type of snapshot info"); -                } +    if (ret == 0) { +        ret = dict_set_int32(dict, "sub-cmd", cmd); +        if (ret) { +            gf_log("cli", GF_LOG_ERROR, +                   "Could not save " +                   "type of snapshot info");          } -        return ret; +    } +    return ret;  } - -  /* snapshot restore <snapname>   * @arg-0, dict     : Request Dictionary to be sent to server side.   * @arg-1, words    : Contains individual words of CLI command. @@ -4667,42 +4714,43 @@ out:   *                 0 on success   */  int -cli_snap_restore_parse (dict_t *dict, const char **words, int wordcount, -                        struct cli_state *state) +cli_snap_restore_parse(dict_t *dict, const char **words, int wordcount, +                       struct cli_state *state)  { +    int ret = -1; +    const char *question = NULL; +    gf_answer_t answer = GF_ANSWER_NO; -        int             ret             =       -1; -        const char      *question       =       NULL; -        gf_answer_t     answer          =       GF_ANSWER_NO; - -        GF_ASSERT (words); -        GF_ASSERT (dict); - -        if (wordcount != 3) { -                gf_log ("cli", GF_LOG_ERROR, "Invalid Syntax"); -                goto out; -        } - -        ret = dict_set_str (dict, "snapname", (char *)words[2]); -        if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Unable to save snap-name %s", -                        words[2]); -                goto out; -        } +    GF_ASSERT(words); +    GF_ASSERT(dict); -        question = "Restore operation will replace the " -                   "original volume with the snapshotted volume. " -                   "Do you still want to continue?"; +    if (wordcount != 3) { +        gf_log("cli", GF_LOG_ERROR, "Invalid Syntax"); +        goto out; +    } -        answer = cli_cmd_get_confirmation (state, question); -        if (GF_ANSWER_NO == answer) { -                ret = 1; -                gf_log ("cli", GF_LOG_ERROR, "User cancelled a snapshot " -                        "restore operation for snap %s", (char *)words[2]); -                goto out; -        } +    ret = dict_set_str(dict, "snapname", (char *)words[2]); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, "Unable to save snap-name %s", words[2]); +        goto out; +    } + +    question = +        "Restore operation will replace the " +        "original volume with the snapshotted volume. " +        "Do you still want to continue?"; + +    answer = cli_cmd_get_confirmation(state, question); +    if (GF_ANSWER_NO == answer) { +        ret = 1; +        gf_log("cli", GF_LOG_ERROR, +               "User cancelled a snapshot " +               "restore operation for snap %s", +               (char *)words[2]); +        goto out; +    }  out: -        return ret; +    return ret;  }  /* snapshot activate <snapname> [force] @@ -4714,43 +4762,41 @@ out:   *                 0 on success   */  int -cli_snap_activate_parse (dict_t *dict, const char **words, int wordcount) +cli_snap_activate_parse(dict_t *dict, const char **words, int wordcount)  { +    int ret = -1; +    int flags = 0; -        int ret = -1; -        int flags = 0; - -        GF_ASSERT (words); -        GF_ASSERT (dict); +    GF_ASSERT(words); +    GF_ASSERT(dict); -        if ((wordcount < 3) || (wordcount > 4)) { -                gf_log ("cli", GF_LOG_ERROR, "Invalid Syntax"); -                goto out; -        } +    if ((wordcount < 3) || (wordcount > 4)) { +        gf_log("cli", GF_LOG_ERROR, "Invalid Syntax"); +        goto out; +    } -        ret = dict_set_str (dict, "snapname", (char *)words[2]); -        if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Unable to save snap-name %s", -                        words[2]); -                goto out; -        } +    ret = dict_set_str(dict, "snapname", (char *)words[2]); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, "Unable to save snap-name %s", words[2]); +        goto out; +    } -        if (wordcount == 4) { -                if (!strcmp("force", (char *)words[3])) { -                        flags = GF_CLI_FLAG_OP_FORCE; -                } else { -                        gf_log ("cli", GF_LOG_ERROR, "Invalid option"); -                        ret = -1; -                        goto out; -                } -        } -        ret = dict_set_int32 (dict, "flags", flags); -        if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Unable to save force option"); -                goto out; -        } +    if (wordcount == 4) { +        if (!strcmp("force", (char *)words[3])) { +            flags = GF_CLI_FLAG_OP_FORCE; +        } else { +            gf_log("cli", GF_LOG_ERROR, "Invalid option"); +            ret = -1; +            goto out; +        } +    } +    ret = dict_set_int32(dict, "flags", flags); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, "Unable to save force option"); +        goto out; +    }  out: -        return ret; +    return ret;  }  /* snapshot deactivate <snapname> @@ -4763,42 +4809,41 @@ out:   *                 1 if user cancelled the request   */  int -cli_snap_deactivate_parse (dict_t *dict, const char **words, int wordcount, -                        struct cli_state *state) +cli_snap_deactivate_parse(dict_t *dict, const char **words, int wordcount, +                          struct cli_state *state)  { +    int ret = -1; +    gf_answer_t answer = GF_ANSWER_NO; +    const char *question = +        "Deactivating snap will make its " +        "data inaccessible. Do you want to " +        "continue?"; + +    GF_ASSERT(words); +    GF_ASSERT(dict); + +    if ((wordcount != 3)) { +        gf_log("cli", GF_LOG_ERROR, "Invalid Syntax"); +        goto out; +    } -        int             ret             = -1; -        gf_answer_t     answer          = GF_ANSWER_NO; -        const char     *question        = "Deactivating snap will make its " -                                          "data inaccessible. Do you want to " -                                          "continue?"; - - -        GF_ASSERT (words); -        GF_ASSERT (dict); - -        if ((wordcount != 3)) { -                gf_log ("cli", GF_LOG_ERROR, "Invalid Syntax"); -                goto out; -        } - -        ret = dict_set_str (dict, "snapname", (char *)words[2]); -        if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Unable to save snap-name %s", -                        words[2]); -                goto out; -        } - -        answer = cli_cmd_get_confirmation (state, question); -        if (GF_ANSWER_NO == answer) { -                ret = 1; -                gf_log ("cli", GF_LOG_DEBUG, "User cancelled " -                        "snapshot deactivate operation"); -                goto out; -        } +    ret = dict_set_str(dict, "snapname", (char *)words[2]); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, "Unable to save snap-name %s", words[2]); +        goto out; +    } + +    answer = cli_cmd_get_confirmation(state, question); +    if (GF_ANSWER_NO == answer) { +        ret = 1; +        gf_log("cli", GF_LOG_DEBUG, +               "User cancelled " +               "snapshot deactivate operation"); +        goto out; +    }  out: -        return ret; +    return ret;  }  /* snapshot delete (all | snapname | volume <volname>) @@ -4811,78 +4856,84 @@ out:   *                 1 if user cancel the operation   */  int -cli_snap_delete_parse (dict_t *dict, const char **words, int wordcount, -                       struct cli_state *state) { - -        int             ret             =       -1; -        const char      *question       =       NULL; -        int32_t         cmd             =       -1; -        unsigned int    cmdi            =       2; -        gf_answer_t     answer          =       GF_ANSWER_NO; - -        GF_ASSERT (words); -        GF_ASSERT (dict); +cli_snap_delete_parse(dict_t *dict, const char **words, int wordcount, +                      struct cli_state *state) +{ +    int ret = -1; +    const char *question = NULL; +    int32_t cmd = -1; +    unsigned int cmdi = 2; +    gf_answer_t answer = GF_ANSWER_NO; -        if (wordcount > 4 || wordcount <= cmdi) { -                gf_log ("cli", GF_LOG_ERROR, "Invalid Syntax"); -                goto out; -        } +    GF_ASSERT(words); +    GF_ASSERT(dict); -        question = "Deleting snap will erase all the information about " -                   "the snap. Do you still want to continue?"; +    if (wordcount > 4 || wordcount <= cmdi) { +        gf_log("cli", GF_LOG_ERROR, "Invalid Syntax"); +        goto out; +    } -        if (strcmp (words [cmdi], "all") == 0) { -                ret = 0; -                cmd = GF_SNAP_DELETE_TYPE_ALL; -        } else if (strcmp (words [cmdi], "volume") == 0) { -                if (++cmdi == wordcount) { -                        ret = -1; -                        gf_log ("cli", GF_LOG_ERROR, "Invalid Syntax"); -                        goto out; -                } +    question = +        "Deleting snap will erase all the information about " +        "the snap. Do you still want to continue?"; -                ret = dict_set_str (dict, "volname", -                                    (char *)words[cmdi]); -                if (ret) { -                        gf_log ("cli", GF_LOG_ERROR, "Could not save " -                                "volume name %s", words[wordcount - 1]); -                        goto out; -                } -                cmd = GF_SNAP_DELETE_TYPE_VOL; -        } else { -                ret = dict_set_str (dict, "snapname", (char *)words[cmdi]); -                if (ret) { -                        gf_log ("cli", GF_LOG_ERROR, "Unable to save " -                                "snapname %s", words[2]); -                        goto out; -                } -                cmd = GF_SNAP_DELETE_TYPE_SNAP; +    if (strcmp(words[cmdi], "all") == 0) { +        ret = 0; +        cmd = GF_SNAP_DELETE_TYPE_ALL; +    } else if (strcmp(words[cmdi], "volume") == 0) { +        if (++cmdi == wordcount) { +            ret = -1; +            gf_log("cli", GF_LOG_ERROR, "Invalid Syntax"); +            goto out;          } -        if ((cmdi + 1) != wordcount) { -                ret = -1; -                gf_log ("cli", GF_LOG_ERROR, "Invalid Syntax"); -                goto out; +        ret = dict_set_str(dict, "volname", (char *)words[cmdi]); +        if (ret) { +            gf_log("cli", GF_LOG_ERROR, +                   "Could not save " +                   "volume name %s", +                   words[wordcount - 1]); +            goto out; +        } +        cmd = GF_SNAP_DELETE_TYPE_VOL; +    } else { +        ret = dict_set_str(dict, "snapname", (char *)words[cmdi]); +        if (ret) { +            gf_log("cli", GF_LOG_ERROR, +                   "Unable to save " +                   "snapname %s", +                   words[2]); +            goto out;          } +        cmd = GF_SNAP_DELETE_TYPE_SNAP; +    } -        if (cmd == GF_SNAP_DELETE_TYPE_SNAP) { -                answer = cli_cmd_get_confirmation (state, question); -                if (GF_ANSWER_NO == answer) { -                        ret = 1; -                        gf_log ("cli", GF_LOG_DEBUG, "User cancelled " -                                "snapshot delete operation for snap %s", -                                (char *)words[2]); -                        goto out; -                } -        } +    if ((cmdi + 1) != wordcount) { +        ret = -1; +        gf_log("cli", GF_LOG_ERROR, "Invalid Syntax"); +        goto out; +    } -        ret = dict_set_int32 (dict, "sub-cmd", cmd); -        if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Could not save " -                        "type of snapshot delete"); -        } +    if (cmd == GF_SNAP_DELETE_TYPE_SNAP) { +        answer = cli_cmd_get_confirmation(state, question); +        if (GF_ANSWER_NO == answer) { +            ret = 1; +            gf_log("cli", GF_LOG_DEBUG, +                   "User cancelled " +                   "snapshot delete operation for snap %s", +                   (char *)words[2]); +            goto out; +        } +    } + +    ret = dict_set_int32(dict, "sub-cmd", cmd); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, +               "Could not save " +               "type of snapshot delete"); +    }  out: -        return ret; +    return ret;  }  /* snapshot status [(snapname | volume <volname>)] @@ -4894,132 +4945,138 @@ out:   *                 0 on success   */  int -cli_snap_status_parse (dict_t *dict, const char **words, int wordcount) +cli_snap_status_parse(dict_t *dict, const char **words, int wordcount)  { +    int ret = -1; +    int32_t cmd = GF_SNAP_STATUS_TYPE_ALL; +    unsigned int cmdi = 2; +    /* cmdi is command index, here cmdi is "2" (gluster snapshot status)*/ -        int             ret  =        -1; -        int32_t         cmd  =       GF_SNAP_STATUS_TYPE_ALL; -        unsigned int    cmdi =        2; -        /* cmdi is command index, here cmdi is "2" (gluster snapshot status)*/ +    GF_ASSERT(words); +    GF_ASSERT(dict); -        GF_ASSERT (words); -        GF_ASSERT (dict); +    if (wordcount > 4 || wordcount < cmdi) { +        gf_log("cli", GF_LOG_ERROR, "Invalid Syntax"); +        goto out; +    } -        if (wordcount > 4 || wordcount < cmdi) { -                gf_log ("cli", GF_LOG_ERROR, "Invalid Syntax"); -                goto out; -        } +    if (wordcount == cmdi) { +        ret = 0; +        goto out; +    } -        if (wordcount == cmdi) { -                ret = 0; -                goto out; +    /* if 3rd word is not "volume", then it must be "snapname" +     */ +    if (strcmp(words[cmdi], "volume") != 0) { +        ret = dict_set_str(dict, "snapname", (char *)words[cmdi]); +        if (ret) { +            gf_log("cli", GF_LOG_ERROR, +                   "Count not save " +                   "snap name %s", +                   words[cmdi]); +            goto out;          } -        /* if 3rd word is not "volume", then it must be "snapname" -        */ -        if (strcmp (words[cmdi], "volume") != 0) { -                ret = dict_set_str (dict, "snapname", -                                   (char *)words[cmdi]); -                if (ret) { -                        gf_log ("cli", GF_LOG_ERROR, "Count not save " -                                "snap name %s", words[cmdi]); -                        goto out; -                } - -                if ((cmdi + 1) != wordcount) { -                        ret = -1; -                        gf_log ("cli", GF_LOG_ERROR, "Invalid Syntax"); -                        goto out; -                } - -                ret = 0; -                cmd = GF_SNAP_STATUS_TYPE_SNAP; -                goto out; +        if ((cmdi + 1) != wordcount) { +            ret = -1; +            gf_log("cli", GF_LOG_ERROR, "Invalid Syntax"); +            goto out;          } -        /* If 3rd word is "volume", then check if next word is present. -         * As, "snapshot info volume" is an invalid command -         */ -        if ((cmdi + 1) == wordcount) { -                ret = -1; -                gf_log ("cli", GF_LOG_ERROR, "Invalid Syntax"); -                goto out; -        } +        ret = 0; +        cmd = GF_SNAP_STATUS_TYPE_SNAP; +        goto out; +    } -        ret = dict_set_str (dict, "volname", (char *)words [wordcount - 1]); -        if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Count not save " -                        "volume name %s", words[wordcount - 1]); -                goto out; -        } -        cmd = GF_SNAP_STATUS_TYPE_VOL; +    /* If 3rd word is "volume", then check if next word is present. +     * As, "snapshot info volume" is an invalid command +     */ +    if ((cmdi + 1) == wordcount) { +        ret = -1; +        gf_log("cli", GF_LOG_ERROR, "Invalid Syntax"); +        goto out; +    } + +    ret = dict_set_str(dict, "volname", (char *)words[wordcount - 1]); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, +               "Count not save " +               "volume name %s", +               words[wordcount - 1]); +        goto out; +    } +    cmd = GF_SNAP_STATUS_TYPE_VOL;  out: -        if (ret == 0) { -                ret = dict_set_int32 (dict, "sub-cmd", cmd); -                if (ret) { -                        gf_log ("cli", GF_LOG_ERROR, "Could not save cmd " -                                "of snapshot status"); -                } +    if (ret == 0) { +        ret = dict_set_int32(dict, "sub-cmd", cmd); +        if (ret) { +            gf_log("cli", GF_LOG_ERROR, +                   "Could not save cmd " +                   "of snapshot status");          } +    } -        return ret; +    return ret;  } -  /* return value:   *      -1  in case of failure.   *       0  in case of success.   */  int32_t -cli_snap_config_limit_parse (const char **words, dict_t *dict, -                             unsigned int wordcount, unsigned int index, -                             char *key) +cli_snap_config_limit_parse(const char **words, dict_t *dict, +                            unsigned int wordcount, unsigned int index, +                            char *key)  { -        int             ret             = -1; -        int             limit           = 0; -        char            *end_ptr        = NULL; - -        GF_ASSERT (words); -        GF_ASSERT (dict); -        GF_ASSERT (key); +    int ret = -1; +    int limit = 0; +    char *end_ptr = NULL; -        if (index >= wordcount) { -                ret = -1; -                cli_err ("Please provide a value for %s.", key); -                gf_log ("cli", GF_LOG_ERROR, "Value not provided for %s", key); -                goto out; -        } +    GF_ASSERT(words); +    GF_ASSERT(dict); +    GF_ASSERT(key); -        limit = strtol (words[index], &end_ptr, 10); +    if (index >= wordcount) { +        ret = -1; +        cli_err("Please provide a value for %s.", key); +        gf_log("cli", GF_LOG_ERROR, "Value not provided for %s", key); +        goto out; +    } -        if (limit <= 0 || strcmp (end_ptr, "") != 0) { -                ret = -1; -                cli_err("Please enter an integer value " -                        "greater than zero for %s", key); -                goto out; -        } +    limit = strtol(words[index], &end_ptr, 10); -        ret = dict_set_int32 (dict, key, limit); -        if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Could not set " -                        "%s in dictionary", key); -                goto out; -        } +    if (limit <= 0 || strcmp(end_ptr, "") != 0) { +        ret = -1; +        cli_err( +            "Please enter an integer value " +            "greater than zero for %s", +            key); +        goto out; +    } + +    ret = dict_set_int32(dict, key, limit); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, +               "Could not set " +               "%s in dictionary", +               key); +        goto out; +    } -        ret = dict_set_dynstr_with_alloc (dict, "globalname", "All"); -        if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Could not set global key"); -                goto out; -        } -        ret = dict_set_int32 (dict, "hold_global_locks", _gf_true); -        if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Could not set global locks"); -                goto out; -        } +    ret = dict_set_dynstr_with_alloc(dict, "globalname", "All"); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, "Could not set global key"); +        goto out; +    } +    ret = dict_set_int32(dict, "hold_global_locks", _gf_true); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, "Could not set global locks"); +        goto out; +    }  out: -        return ret; +    return ret;  }  /* function cli_snap_config_parse @@ -5035,775 +5092,787 @@ out:    NOTE : snap-max-soft-limit can only be set for system.  */  int32_t -cli_snap_config_parse (const char **words, int wordcount, dict_t *dict, -                       struct cli_state *state) +cli_snap_config_parse(const char **words, int wordcount, dict_t *dict, +                      struct cli_state *state)  { -        int                            ret                 = -1; -        gf_answer_t                    answer              = GF_ANSWER_NO; -        gf_boolean_t                   vol_presence        = _gf_false; -        struct snap_config_opt_vals_  *conf_vals           = NULL; -        int8_t                         hard_limit          = 0; -        int8_t                         soft_limit          = 0; -        int8_t                         config_type         = -1; -        const char                    *question            = NULL; -        unsigned int                   cmdi                = 2; -        /* cmdi is command index, here cmdi is "2" (gluster snapshot config)*/ - -        GF_ASSERT (words); -        GF_ASSERT (dict); -        GF_ASSERT (state); - -        if ((wordcount < 2) || (wordcount > 7)) { -                gf_log ("cli", GF_LOG_ERROR, -                        "Invalid wordcount(%d)", wordcount); -                goto out; -        } +    int ret = -1; +    gf_answer_t answer = GF_ANSWER_NO; +    gf_boolean_t vol_presence = _gf_false; +    struct snap_config_opt_vals_ *conf_vals = NULL; +    int8_t hard_limit = 0; +    int8_t soft_limit = 0; +    int8_t config_type = -1; +    const char *question = NULL; +    unsigned int cmdi = 2; +    /* cmdi is command index, here cmdi is "2" (gluster snapshot config)*/ + +    GF_ASSERT(words); +    GF_ASSERT(dict); +    GF_ASSERT(state); + +    if ((wordcount < 2) || (wordcount > 7)) { +        gf_log("cli", GF_LOG_ERROR, "Invalid wordcount(%d)", wordcount); +        goto out; +    } -        if (wordcount == 2) { -                config_type = GF_SNAP_CONFIG_DISPLAY; -                ret = 0; -                goto set; +    if (wordcount == 2) { +        config_type = GF_SNAP_CONFIG_DISPLAY; +        ret = 0; +        goto set; +    } + +    /* auto-delete cannot be a volume name */ +    /* Check whether the 3rd word is volname */ +    if (strcmp(words[cmdi], "snap-max-hard-limit") != 0 && +        strcmp(words[cmdi], "snap-max-soft-limit") != 0 && +        strcmp(words[cmdi], "auto-delete") != 0 && +        strcmp(words[cmdi], "activate-on-create") != 0) { +        ret = dict_set_str(dict, "volname", (char *)words[cmdi]); +        if (ret) { +            gf_log("cli", GF_LOG_ERROR, "Failed to set volname"); +            goto out;          } +        cmdi++; +        vol_presence = _gf_true; -        /* auto-delete cannot be a volume name */ -        /* Check whether the 3rd word is volname */ -        if (strcmp (words[cmdi], "snap-max-hard-limit") != 0 -             && strcmp (words[cmdi], "snap-max-soft-limit") != 0 -             && strcmp (words[cmdi], "auto-delete") != 0 -             && strcmp (words[cmdi], "activate-on-create") != 0) { -                ret = dict_set_str (dict, "volname", (char *)words[cmdi]); -                if (ret) { -                        gf_log ("cli", GF_LOG_ERROR, "Failed to set volname"); -                        goto out; -                } -                cmdi++; -                vol_presence = _gf_true; - -                if (cmdi == wordcount) { -                        config_type = GF_SNAP_CONFIG_DISPLAY; -                        ret = 0; -                        goto set; -                } +        if (cmdi == wordcount) { +            config_type = GF_SNAP_CONFIG_DISPLAY; +            ret = 0; +            goto set;          } +    } -        config_type = GF_SNAP_CONFIG_TYPE_SET; +    config_type = GF_SNAP_CONFIG_TYPE_SET; -        if (strcmp (words[cmdi], "snap-max-hard-limit") == 0) { -                ret = cli_snap_config_limit_parse (words, dict, wordcount, -                                                ++cmdi, "snap-max-hard-limit"); -                if (ret) { -                        gf_log ("cli", GF_LOG_ERROR, "Failed to parse snap " -                                "config hard limit"); -                        goto out; -                } -                hard_limit = 1; - -                if (++cmdi == wordcount) { -                        ret = 0; -                        goto set; -                } +    if (strcmp(words[cmdi], "snap-max-hard-limit") == 0) { +        ret = cli_snap_config_limit_parse(words, dict, wordcount, ++cmdi, +                                          "snap-max-hard-limit"); +        if (ret) { +            gf_log("cli", GF_LOG_ERROR, +                   "Failed to parse snap " +                   "config hard limit"); +            goto out;          } +        hard_limit = 1; -        if (strcmp (words[cmdi], "snap-max-soft-limit") == 0) { -                if (vol_presence == 1) { -                        ret = -1; -                        cli_err ("Soft limit cannot be set to individual " -                                  "volumes."); -                        gf_log ("cli", GF_LOG_ERROR, "Soft limit cannot be " -                                "set to volumes"); -                        goto out; -                } - -                ret = cli_snap_config_limit_parse (words, dict, wordcount, -                                                ++cmdi, "snap-max-soft-limit"); -                if (ret) { -                        gf_log ("cli", GF_LOG_ERROR, "Failed to parse snap " -                                "config soft limit"); -                        goto out; -                } - -                if (++cmdi != wordcount) { -                        ret = -1; -                        gf_log ("cli", GF_LOG_ERROR, "Invalid Syntax"); -                        goto out; -                } -                soft_limit = 1; +        if (++cmdi == wordcount) { +            ret = 0; +            goto set;          } +    } -        if (hard_limit || soft_limit) -                goto set; +    if (strcmp(words[cmdi], "snap-max-soft-limit") == 0) { +        if (vol_presence == 1) { +            ret = -1; +            cli_err( +                "Soft limit cannot be set to individual " +                "volumes."); +            gf_log("cli", GF_LOG_ERROR, +                   "Soft limit cannot be " +                   "set to volumes"); +            goto out; +        } -        if (strcmp(words[cmdi], "auto-delete") == 0) { -                if (vol_presence == 1) { -                        ret = -1; -                        cli_err ("As of now, auto-delete option cannot be set " -                                "to volumes"); -                        gf_log ("cli", GF_LOG_ERROR, "auto-delete option " -                                "cannot be set to volumes"); -                        goto out; -                } +        ret = cli_snap_config_limit_parse(words, dict, wordcount, ++cmdi, +                                          "snap-max-soft-limit"); +        if (ret) { +            gf_log("cli", GF_LOG_ERROR, +                   "Failed to parse snap " +                   "config soft limit"); +            goto out; +        } -                if (++cmdi >= wordcount) { -                        ret = -1; -                        gf_log ("cli", GF_LOG_ERROR, "Invalid Syntax"); -                        goto out; -                } +        if (++cmdi != wordcount) { +            ret = -1; +            gf_log("cli", GF_LOG_ERROR, "Invalid Syntax"); +            goto out; +        } +        soft_limit = 1; +    } -                ret = dict_set_str (dict, "auto-delete", (char *)words[cmdi]); -                if (ret) { -                        gf_log ("cli", GF_LOG_ERROR, "Failed to set " -                                "value of auto-delete in request " -                                "dictionary"); -                        goto out; -                } +    if (hard_limit || soft_limit) +        goto set; -                if (++cmdi != wordcount) { -                        ret = -1; -                        gf_log ("cli", GF_LOG_ERROR, "Invalid Syntax"); -                        goto out; -                } -        } else if (strcmp(words[cmdi], "activate-on-create") == 0) { -                if (vol_presence == 1) { -                        ret = -1; -                        cli_err ("As of now, activate-on-create option " -                                 "cannot be set to volumes"); -                        gf_log ("cli", GF_LOG_ERROR, "activate-on-create " -                                "option cannot be set to volumes"); -                        goto out; -                } +    if (strcmp(words[cmdi], "auto-delete") == 0) { +        if (vol_presence == 1) { +            ret = -1; +            cli_err( +                "As of now, auto-delete option cannot be set " +                "to volumes"); +            gf_log("cli", GF_LOG_ERROR, +                   "auto-delete option " +                   "cannot be set to volumes"); +            goto out; +        } -                if (++cmdi >= wordcount) { -                        ret = -1; -                        gf_log ("cli", GF_LOG_ERROR, "Invalid Syntax"); -                        goto out; -                } +        if (++cmdi >= wordcount) { +            ret = -1; +            gf_log("cli", GF_LOG_ERROR, "Invalid Syntax"); +            goto out; +        } -                ret = dict_set_str (dict, "snap-activate-on-create", -                                    (char *)words[cmdi]); -                if (ret) { -                        gf_log ("cli", GF_LOG_ERROR, "Failed to set value " -                                "of activate-on-create in request dictionary"); -                        goto out; -                } +        ret = dict_set_str(dict, "auto-delete", (char *)words[cmdi]); +        if (ret) { +            gf_log("cli", GF_LOG_ERROR, +                   "Failed to set " +                   "value of auto-delete in request " +                   "dictionary"); +            goto out; +        } + +        if (++cmdi != wordcount) { +            ret = -1; +            gf_log("cli", GF_LOG_ERROR, "Invalid Syntax"); +            goto out; +        } +    } else if (strcmp(words[cmdi], "activate-on-create") == 0) { +        if (vol_presence == 1) { +            ret = -1; +            cli_err( +                "As of now, activate-on-create option " +                "cannot be set to volumes"); +            gf_log("cli", GF_LOG_ERROR, +                   "activate-on-create " +                   "option cannot be set to volumes"); +            goto out; +        } + +        if (++cmdi >= wordcount) { +            ret = -1; +            gf_log("cli", GF_LOG_ERROR, "Invalid Syntax"); +            goto out; +        } + +        ret = dict_set_str(dict, "snap-activate-on-create", +                           (char *)words[cmdi]); +        if (ret) { +            gf_log("cli", GF_LOG_ERROR, +                   "Failed to set value " +                   "of activate-on-create in request dictionary"); +            goto out; +        } -                if (++cmdi != wordcount) { -                        ret = -1; -                        gf_log ("cli", GF_LOG_ERROR, "Invalid Syntax"); -                        goto out; -                } -        } else { -                ret = -1; -                gf_log ("cli", GF_LOG_ERROR, "Invalid Syntax"); -                goto out; +        if (++cmdi != wordcount) { +            ret = -1; +            gf_log("cli", GF_LOG_ERROR, "Invalid Syntax"); +            goto out;          } +    } else { +        ret = -1; +        gf_log("cli", GF_LOG_ERROR, "Invalid Syntax"); +        goto out; +    } -        ret = 0; /* Success */ +    ret = 0; /* Success */  set: -        ret = dict_set_int32 (dict, "config-command", config_type); -        if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Unable to set " -                        "config-command"); -                goto out; -        } +    ret = dict_set_int32(dict, "config-command", config_type); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, +               "Unable to set " +               "config-command"); +        goto out; +    } -        if (config_type == GF_SNAP_CONFIG_TYPE_SET && -           (hard_limit || soft_limit)) { -                conf_vals = snap_confopt_vals; -                if (hard_limit && soft_limit) { -                        question = conf_vals[GF_SNAP_CONFIG_SET_BOTH].question; -                } else if (soft_limit) { -                        question = conf_vals[GF_SNAP_CONFIG_SET_SOFT].question; -                } else if (hard_limit) { -                        question = conf_vals[GF_SNAP_CONFIG_SET_HARD].question; -                } +    if (config_type == GF_SNAP_CONFIG_TYPE_SET && (hard_limit || soft_limit)) { +        conf_vals = snap_confopt_vals; +        if (hard_limit && soft_limit) { +            question = conf_vals[GF_SNAP_CONFIG_SET_BOTH].question; +        } else if (soft_limit) { +            question = conf_vals[GF_SNAP_CONFIG_SET_SOFT].question; +        } else if (hard_limit) { +            question = conf_vals[GF_SNAP_CONFIG_SET_HARD].question; +        } -                answer = cli_cmd_get_confirmation (state, question); -                if (GF_ANSWER_NO == answer) { -                        ret = 1; -                        gf_log ("cli", GF_LOG_DEBUG, "User cancelled " -                        "snapshot config operation"); -                } +        answer = cli_cmd_get_confirmation(state, question); +        if (GF_ANSWER_NO == answer) { +            ret = 1; +            gf_log("cli", GF_LOG_DEBUG, +                   "User cancelled " +                   "snapshot config operation");          } +    }  out: -        return ret; +    return ret;  }  int -validate_op_name (const char *op, const char *opname, char **opwords) { -        int     ret     =       -1; -        int     i       =       0; +validate_op_name(const char *op, const char *opname, char **opwords) +{ +    int ret = -1; +    int i = 0; -        GF_ASSERT (opname); -        GF_ASSERT (opwords); +    GF_ASSERT(opname); +    GF_ASSERT(opwords); -        for (i = 0 ; opwords[i] != NULL; i++) { -                if (strcmp (opwords[i], opname) == 0) { -                        cli_out ("\"%s\" cannot be a %s", opname, op); -                        goto out; -                } +    for (i = 0; opwords[i] != NULL; i++) { +        if (strcmp(opwords[i], opname) == 0) { +            cli_out("\"%s\" cannot be a %s", opname, op); +            goto out;          } -        ret = 0; +    } +    ret = 0;  out: -        return ret; +    return ret;  }  int32_t -cli_cmd_snapshot_parse (const char **words, int wordcount, dict_t **options, -                        struct cli_state *state) +cli_cmd_snapshot_parse(const char **words, int wordcount, dict_t **options, +                       struct cli_state *state)  { -        int32_t            ret        = -1; -        dict_t             *dict      = NULL; -        gf1_cli_snapshot   type       = GF_SNAP_OPTION_TYPE_NONE; -        char               *w         = NULL; -        char               *opwords[] = {"create", "delete", "restore", -                                        "activate", "deactivate", "list", -                                        "status", "config", "info", "clone", -                                        NULL}; -        char               *invalid_snapnames[] = {"description", "force", -                                                  "volume", "all", NULL}; -        char               *invalid_volnames[]  = {"volume", "type", -                                                   "subvolumes", "option", -                                                   "end-volume", "all", -                                                   "volume_not_in_ring", -                                                   "description", "force", -                                                   "snap-max-hard-limit", -                                                   "snap-max-soft-limit", -                                                   "auto-delete", -                                                   "activate-on-create", NULL}; - -        GF_ASSERT (words); -        GF_ASSERT (options); -        GF_ASSERT (state); - -        dict = dict_new (); -        if (!dict) -                goto out; +    int32_t ret = -1; +    dict_t *dict = NULL; +    gf1_cli_snapshot type = GF_SNAP_OPTION_TYPE_NONE; +    char *w = NULL; +    char *opwords[] = {"create",     "delete", "restore", "activate", +                       "deactivate", "list",   "status",  "config", +                       "info",       "clone",  NULL}; +    char *invalid_snapnames[] = {"description", "force", "volume", "all", NULL}; +    char *invalid_volnames[] = {"volume", +                                "type", +                                "subvolumes", +                                "option", +                                "end-volume", +                                "all", +                                "volume_not_in_ring", +                                "description", +                                "force", +                                "snap-max-hard-limit", +                                "snap-max-soft-limit", +                                "auto-delete", +                                "activate-on-create", +                                NULL}; -        /* Lowest wordcount possible */ -        if (wordcount < 2) { -                gf_log ("", GF_LOG_ERROR, -                        "Invalid command: Not enough arguments"); -                goto out; -        } +    GF_ASSERT(words); +    GF_ASSERT(options); +    GF_ASSERT(state); -        w = str_getunamb (words[1], opwords); -        if (!w) { -                /* Checks if the operation is a valid operation */ -                gf_log ("", GF_LOG_ERROR, "Opword Mismatch"); -                goto out; -        } +    dict = dict_new(); +    if (!dict) +        goto out; -        if (!strcmp (w, "create")) { -                type = GF_SNAP_OPTION_TYPE_CREATE; -        } else if (!strcmp (w, "list")) { -                type = GF_SNAP_OPTION_TYPE_LIST; -        } else if (!strcmp (w, "info")) { -                type = GF_SNAP_OPTION_TYPE_INFO; -        } else if (!strcmp (w, "delete")) { -                type = GF_SNAP_OPTION_TYPE_DELETE; -        } else if (!strcmp (w, "config")) { -                type = GF_SNAP_OPTION_TYPE_CONFIG; -        } else if (!strcmp (w, "restore")) { -                type = GF_SNAP_OPTION_TYPE_RESTORE; -        } else if (!strcmp (w, "status")) { -                type = GF_SNAP_OPTION_TYPE_STATUS; -        } else if (!strcmp (w, "activate")) { -                type = GF_SNAP_OPTION_TYPE_ACTIVATE; -        } else if (!strcmp (w, "deactivate")) { -                type = GF_SNAP_OPTION_TYPE_DEACTIVATE; -        } else if (!strcmp(w, "clone")) { -                type = GF_SNAP_OPTION_TYPE_CLONE; -        } - -        if (type != GF_SNAP_OPTION_TYPE_CONFIG && -            type != GF_SNAP_OPTION_TYPE_STATUS) { -                ret = dict_set_int32 (dict, "hold_snap_locks", _gf_true); -                if (ret) { -                        gf_log ("cli", GF_LOG_ERROR, -                                "Unable to set hold-snap-locks value " -                                "as _gf_true"); -                        goto out; -                } -        } +    /* Lowest wordcount possible */ +    if (wordcount < 2) { +        gf_log("", GF_LOG_ERROR, "Invalid command: Not enough arguments"); +        goto out; +    } -        /* Following commands does not require volume locks  */ -        if (type == GF_SNAP_OPTION_TYPE_STATUS || -            type == GF_SNAP_OPTION_TYPE_ACTIVATE || -            type == GF_SNAP_OPTION_TYPE_DEACTIVATE) { -                ret = dict_set_int32 (dict, "hold_vol_locks", _gf_false); -                if (ret) { -                        gf_log ("cli", GF_LOG_ERROR, "Setting volume lock " -                                "flag failed"); -                        goto out; -                } +    w = str_getunamb(words[1], opwords); +    if (!w) { +        /* Checks if the operation is a valid operation */ +        gf_log("", GF_LOG_ERROR, "Opword Mismatch"); +        goto out; +    } + +    if (!strcmp(w, "create")) { +        type = GF_SNAP_OPTION_TYPE_CREATE; +    } else if (!strcmp(w, "list")) { +        type = GF_SNAP_OPTION_TYPE_LIST; +    } else if (!strcmp(w, "info")) { +        type = GF_SNAP_OPTION_TYPE_INFO; +    } else if (!strcmp(w, "delete")) { +        type = GF_SNAP_OPTION_TYPE_DELETE; +    } else if (!strcmp(w, "config")) { +        type = GF_SNAP_OPTION_TYPE_CONFIG; +    } else if (!strcmp(w, "restore")) { +        type = GF_SNAP_OPTION_TYPE_RESTORE; +    } else if (!strcmp(w, "status")) { +        type = GF_SNAP_OPTION_TYPE_STATUS; +    } else if (!strcmp(w, "activate")) { +        type = GF_SNAP_OPTION_TYPE_ACTIVATE; +    } else if (!strcmp(w, "deactivate")) { +        type = GF_SNAP_OPTION_TYPE_DEACTIVATE; +    } else if (!strcmp(w, "clone")) { +        type = GF_SNAP_OPTION_TYPE_CLONE; +    } + +    if (type != GF_SNAP_OPTION_TYPE_CONFIG && +        type != GF_SNAP_OPTION_TYPE_STATUS) { +        ret = dict_set_int32(dict, "hold_snap_locks", _gf_true); +        if (ret) { +            gf_log("cli", GF_LOG_ERROR, +                   "Unable to set hold-snap-locks value " +                   "as _gf_true"); +            goto out; +        } +    } + +    /* Following commands does not require volume locks  */ +    if (type == GF_SNAP_OPTION_TYPE_STATUS || +        type == GF_SNAP_OPTION_TYPE_ACTIVATE || +        type == GF_SNAP_OPTION_TYPE_DEACTIVATE) { +        ret = dict_set_int32(dict, "hold_vol_locks", _gf_false); +        if (ret) { +            gf_log("cli", GF_LOG_ERROR, +                   "Setting volume lock " +                   "flag failed"); +            goto out;          } +    } -        /* Check which op is intended */ -        switch (type) { +    /* Check which op is intended */ +    switch (type) {          case GF_SNAP_OPTION_TYPE_CREATE: -                /* Syntax : -                 * gluster snapshot create <snapname> <vol-name(s)> -                 *                         [no-timestamp] -                 *                         [description <description>] -                 *                         [force] -                 */ -                /* In cases where the snapname is not given then -                 * parsing fails & snapname cannot be "description", -                 * "force" and "volume", that check is made here -                 */ -                if (wordcount == 2){ -                        ret = -1; -                        gf_log ("cli", GF_LOG_ERROR, "Invalid Syntax"); -                        goto out; -                } +            /* Syntax : +             * gluster snapshot create <snapname> <vol-name(s)> +             *                         [no-timestamp] +             *                         [description <description>] +             *                         [force] +             */ +            /* In cases where the snapname is not given then +             * parsing fails & snapname cannot be "description", +             * "force" and "volume", that check is made here +             */ +            if (wordcount == 2) { +                ret = -1; +                gf_log("cli", GF_LOG_ERROR, "Invalid Syntax"); +                goto out; +            } -                ret = validate_op_name ("snapname", words[2], -                                        invalid_snapnames); -                if (ret) { -                        goto out; -                } +            ret = validate_op_name("snapname", words[2], invalid_snapnames); +            if (ret) { +                goto out; +            } -                ret = cli_snap_create_parse (dict, words, wordcount); -                if (ret) { -                        gf_log ("cli", GF_LOG_ERROR, -                                "create command parsing failed."); -                        goto out; -                } -                break; +            ret = cli_snap_create_parse(dict, words, wordcount); +            if (ret) { +                gf_log("cli", GF_LOG_ERROR, "create command parsing failed."); +                goto out; +            } +            break;          case GF_SNAP_OPTION_TYPE_CLONE: -                /* Syntax : -                 * gluster snapshot clone <clonename> <snapname> -                 */ -                /* In cases where the clonename is not given then -                 * parsing fails & snapname cannot be "description", -                 * "force" and "volume", that check is made here -                 */ -                if (wordcount == 2) { -                        ret = -1; -                        gf_log ("cli", GF_LOG_ERROR, "Invalid Syntax"); -                        goto out; -                } - -                ret = validate_op_name ("clonename", words[2], -                                        invalid_volnames); -                if (ret) { -                        goto out; -                } +            /* Syntax : +             * gluster snapshot clone <clonename> <snapname> +             */ +            /* In cases where the clonename is not given then +             * parsing fails & snapname cannot be "description", +             * "force" and "volume", that check is made here +             */ +            if (wordcount == 2) { +                ret = -1; +                gf_log("cli", GF_LOG_ERROR, "Invalid Syntax"); +                goto out; +            } -                ret = cli_snap_clone_parse (dict, words, wordcount); -                if (ret) { -                        gf_log ("cli", GF_LOG_ERROR, -                                "clone command parsing failed."); -                        goto out; -                } -                break; +            ret = validate_op_name("clonename", words[2], invalid_volnames); +            if (ret) { +                goto out; +            } +            ret = cli_snap_clone_parse(dict, words, wordcount); +            if (ret) { +                gf_log("cli", GF_LOG_ERROR, "clone command parsing failed."); +                goto out; +            } +            break;          case GF_SNAP_OPTION_TYPE_INFO: -                /* Syntax : -                 * gluster snapshot info [(snapname] | [vol <volname>)] -                 */ -                ret = cli_snap_info_parse (dict, words, wordcount); -                if (ret) { -                        gf_log ("cli", GF_LOG_ERROR, "Failed to parse " -                                "snapshot info command"); -                        goto out; -                } -                break; +            /* Syntax : +             * gluster snapshot info [(snapname] | [vol <volname>)] +             */ +            ret = cli_snap_info_parse(dict, words, wordcount); +            if (ret) { +                gf_log("cli", GF_LOG_ERROR, +                       "Failed to parse " +                       "snapshot info command"); +                goto out; +            } +            break;          case GF_SNAP_OPTION_TYPE_LIST: -                /* Syntax : -                 * gluster snaphsot list [volname] -                 */ +            /* Syntax : +             * gluster snaphsot list [volname] +             */ -                ret = cli_snap_list_parse (dict, words, wordcount); -                if (ret) { -                        gf_log ("cli", GF_LOG_ERROR, "Failed to parse " -                                "snapshot list command"); -                        goto out; -                } -                break; +            ret = cli_snap_list_parse(dict, words, wordcount); +            if (ret) { +                gf_log("cli", GF_LOG_ERROR, +                       "Failed to parse " +                       "snapshot list command"); +                goto out; +            } +            break;          case GF_SNAP_OPTION_TYPE_DELETE: -                /* Syntax : -                 * snapshot delete (all | snapname | volume <volname>) -                 */ -                ret = cli_snap_delete_parse (dict, words, wordcount, state); -                if (ret) { -                        /* A positive ret value means user cancelled -                        * the command */ -                        if (ret < 0) { -                                gf_log ("cli", GF_LOG_ERROR, "Failed to parse " -                                        "snapshot delete command"); -                        } -                        goto out; +            /* Syntax : +             * snapshot delete (all | snapname | volume <volname>) +             */ +            ret = cli_snap_delete_parse(dict, words, wordcount, state); +            if (ret) { +                /* A positive ret value means user cancelled +                 * the command */ +                if (ret < 0) { +                    gf_log("cli", GF_LOG_ERROR, +                           "Failed to parse " +                           "snapshot delete command");                  } -                break; +                goto out; +            } +            break;          case GF_SNAP_OPTION_TYPE_CONFIG: -                /* snapshot config [volname]  [snap-max-hard-limit <count>] -                 *                            [snap-max-soft-limit <percent>] */ -                ret = cli_snap_config_parse (words, wordcount, dict, state); -                if (ret) { -                        if (ret < 0) -                                gf_log ("cli", GF_LOG_ERROR, -                                        "config command parsing failed."); -                        goto out; -                } +            /* snapshot config [volname]  [snap-max-hard-limit <count>] +             *                            [snap-max-soft-limit <percent>] */ +            ret = cli_snap_config_parse(words, wordcount, dict, state); +            if (ret) { +                if (ret < 0) +                    gf_log("cli", GF_LOG_ERROR, +                           "config command parsing failed."); +                goto out; +            } -                ret = dict_set_int32 (dict, "type", GF_SNAP_OPTION_TYPE_CONFIG); -                if (ret) { -                        gf_log ("cli", GF_LOG_ERROR, "Unable to set " -                                "config type"); -                        ret = -1; -                        goto out; -                } -                break; - -        case GF_SNAP_OPTION_TYPE_STATUS: -                { -                        /* Syntax : -                         * gluster snapshot status [(snapname | -                         *                         volume <volname>)] -                         */ -                        ret = cli_snap_status_parse (dict, words, wordcount); -                        if (ret) { -                                gf_log ("cli", GF_LOG_ERROR, "Failed to parse " -                                        "snapshot status command"); -                                goto out; -                        } -                        break; -                } +            ret = dict_set_int32(dict, "type", GF_SNAP_OPTION_TYPE_CONFIG); +            if (ret) { +                gf_log("cli", GF_LOG_ERROR, +                       "Unable to set " +                       "config type"); +                ret = -1; +                goto out; +            } +            break; + +        case GF_SNAP_OPTION_TYPE_STATUS: { +            /* Syntax : +             * gluster snapshot status [(snapname | +             *                         volume <volname>)] +             */ +            ret = cli_snap_status_parse(dict, words, wordcount); +            if (ret) { +                gf_log("cli", GF_LOG_ERROR, +                       "Failed to parse " +                       "snapshot status command"); +                goto out; +            } +            break; +        }          case GF_SNAP_OPTION_TYPE_RESTORE: -                /* Syntax: -                 * snapshot restore <snapname> -                 */ -                ret = cli_snap_restore_parse (dict, words, wordcount, state); -                if (ret) { -                        gf_log ("cli", GF_LOG_ERROR, "Failed to parse " -                                "restore command"); -                        goto out; +            /* Syntax: +             * snapshot restore <snapname> +             */ +            ret = cli_snap_restore_parse(dict, words, wordcount, state); +            if (ret) { +                gf_log("cli", GF_LOG_ERROR, +                       "Failed to parse " +                       "restore command"); +                goto out; +            } +            break; + +        case GF_SNAP_OPTION_TYPE_ACTIVATE: +            /* Syntax: +             * snapshot activate <snapname> [force] +             */ +            ret = cli_snap_activate_parse(dict, words, wordcount); +            if (ret) { +                gf_log("cli", GF_LOG_ERROR, +                       "Failed to parse " +                       "start command"); +                goto out; +            } +            break; +        case GF_SNAP_OPTION_TYPE_DEACTIVATE: +            /* Syntax: +             * snapshot deactivate <snapname> +             */ +            ret = cli_snap_deactivate_parse(dict, words, wordcount, state); +            if (ret) { +                /* A positive ret value means user cancelled +                 * the command */ +                if (ret < 0) { +                    gf_log("cli", GF_LOG_ERROR, +                           "Failed to parse deactivate " +                           "command");                  } -                break; - -                case GF_SNAP_OPTION_TYPE_ACTIVATE: -                        /* Syntax: -                        * snapshot activate <snapname> [force] -                        */ -                        ret = cli_snap_activate_parse (dict, words, wordcount); -                        if (ret) { -                                gf_log ("cli", GF_LOG_ERROR, "Failed to parse " -                                        "start command"); -                                goto out; -                        } -                        break; -                case GF_SNAP_OPTION_TYPE_DEACTIVATE: -                        /* Syntax: -                        * snapshot deactivate <snapname> -                        */ -                        ret = cli_snap_deactivate_parse (dict, words, wordcount, -                                state); -                        if (ret) { -                                /* A positive ret value means user cancelled -                                 * the command */ -                                if (ret < 0) { -                                        gf_log ("cli", GF_LOG_ERROR, -                                                "Failed to parse deactivate " -                                                "command"); -                                } -                                goto out; -                        } -                        break; +                goto out; +            } +            break;          default: -                gf_log ("", GF_LOG_ERROR, "Opword Mismatch"); -                goto out; -        } +            gf_log("", GF_LOG_ERROR, "Opword Mismatch"); +            goto out; +    } -        ret = dict_set_int32 (dict, "type", type); -        if (ret) { -                gf_log ("", GF_LOG_ERROR, -                        "Failed to set type."); -                goto out; -        } -        /* If you got so far, input is valid */ -        ret = 0; +    ret = dict_set_int32(dict, "type", type); +    if (ret) { +        gf_log("", GF_LOG_ERROR, "Failed to set type."); +        goto out; +    } +    /* If you got so far, input is valid */ +    ret = 0;  out: -        if (ret) { -                if (dict) -                        dict_unref (dict); -        } else -                *options = dict; +    if (ret) { +        if (dict) +            dict_unref(dict); +    } else +        *options = dict; -        return ret; +    return ret;  }  int -cli_cmd_validate_volume (char *volname) +cli_cmd_validate_volume(char *volname)  { -        int       i        =  0; -        int       ret      = -1; -        int       volname_len; +    int i = 0; +    int ret = -1; +    int volname_len; +    if (volname[0] == '-') +        return ret; -        if (volname[0] == '-') -                return ret; +    if (!strcmp(volname, "all")) { +        cli_err("\"all\" cannot be the name of a volume."); +        return ret; +    } -        if (!strcmp (volname, "all")) { -                cli_err ("\"all\" cannot be the name of a volume."); -                return ret; -        } +    if (strchr(volname, '/')) { +        cli_err("Volume name should not contain \"/\" character."); +        return ret; +    } -        if (strchr (volname, '/')) { -                cli_err ("Volume name should not contain \"/\" character."); -                return ret; -        } +    volname_len = strlen(volname); +    if (volname_len > GD_VOLUME_NAME_MAX) { +        cli_err("Volname can not exceed %d characters.", GD_VOLUME_NAME_MAX); +        return ret; +    } -        volname_len = strlen (volname); -        if (volname_len > GD_VOLUME_NAME_MAX) { -                cli_err ("Volname can not exceed %d characters.", -                        GD_VOLUME_NAME_MAX); -                return ret; +    for (i = 0; i < volname_len; i++) +        if (!isalnum(volname[i]) && (volname[i] != '_') && +            (volname[i] != '-')) { +            cli_err( +                "Volume name should not contain \"%c\"" +                " character.\nVolume names can only" +                "contain alphanumeric, '-' and '_' " +                "characters.", +                volname[i]); +            return ret;          } -        for (i = 0; i < volname_len ; i++) -                if (!isalnum (volname[i]) && (volname[i] != '_') && -                    (volname[i] != '-')) { -                        cli_err ("Volume name should not contain \"%c\"" -                                 " character.\nVolume names can only" -                                 "contain alphanumeric, '-' and '_' " -                                 "characters.", volname[i]); -                        return ret; -                } - -        ret = 0; +    ret = 0; -        return ret; +    return ret;  }  int32_t -cli_cmd_bitrot_parse (const char **words, int wordcount, dict_t **options) +cli_cmd_bitrot_parse(const char **words, int wordcount, dict_t **options)  { -        int32_t            ret                    = -1; -        char               *w                     = NULL; -        char               *volname               = NULL; -        char               *opwords[]             = {"enable", "disable", -                                                     "scrub-throttle", -                                                     "scrub-frequency", "scrub", -                                                     "signing-time", NULL}; -        char               *scrub_throt_values[]  = {"lazy", "normal", -                                                     "aggressive", NULL}; -        char               *scrub_freq_values[]   = {"hourly", -                                                     "daily", "weekly", -                                                     "biweekly", "monthly", -                                                     "minute",  NULL}; -        char               *scrub_values[]        = {"pause", "resume", -                                                     "status", "ondemand", -                                                     NULL}; -        dict_t             *dict                  = NULL; -        gf_bitrot_type     type                   = GF_BITROT_OPTION_TYPE_NONE; -        int32_t            expiry_time            = 0; - -        GF_ASSERT (words); -        GF_ASSERT (options); - - -        /* Hack to print out bitrot help properly */ -        if ((wordcount == 3) && !(strcmp (words[2], "help"))) { -                ret = 1; -                return ret; -        } - -        if (wordcount < 4 || wordcount > 5) { -                gf_log ("cli", GF_LOG_ERROR, "Invalid syntax"); -                goto out; -        } +    int32_t ret = -1; +    char *w = NULL; +    char *volname = NULL; +    char *opwords[] = { +        "enable",       "disable", "scrub-throttle", "scrub-frequency", "scrub", +        "signing-time", NULL}; +    char *scrub_throt_values[] = {"lazy", "normal", "aggressive", NULL}; +    char *scrub_freq_values[] = {"hourly",  "daily",  "weekly", "biweekly", +                                 "monthly", "minute", NULL}; +    char *scrub_values[] = {"pause", "resume", "status", "ondemand", NULL}; +    dict_t *dict = NULL; +    gf_bitrot_type type = GF_BITROT_OPTION_TYPE_NONE; +    int32_t expiry_time = 0; + +    GF_ASSERT(words); +    GF_ASSERT(options); + +    /* Hack to print out bitrot help properly */ +    if ((wordcount == 3) && !(strcmp(words[2], "help"))) { +        ret = 1; +        return ret; +    } -        dict = dict_new (); -        if (!dict) -                goto out; +    if (wordcount < 4 || wordcount > 5) { +        gf_log("cli", GF_LOG_ERROR, "Invalid syntax"); +        goto out; +    } -        volname = (char *)words[2]; -        if (!volname) { -                ret = -1; -                goto out; -        } +    dict = dict_new(); +    if (!dict) +        goto out; -        ret = cli_cmd_validate_volume (volname); -        if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Failed to validate volume name"); -                goto out; -        } +    volname = (char *)words[2]; +    if (!volname) { +        ret = -1; +        goto out; +    } -        ret = dict_set_str (dict, "volname", volname); -        if (ret) { -                cli_out ("Failed to set volume name in dictionary "); -                goto out; -        } +    ret = cli_cmd_validate_volume(volname); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, "Failed to validate volume name"); +        goto out; +    } -        w = str_getunamb (words[3], opwords); -        if (!w) { -                cli_out ("Invalid bit rot option : %s", words[3]); -                ret = -1; -                goto out; -        } +    ret = dict_set_str(dict, "volname", volname); +    if (ret) { +        cli_out("Failed to set volume name in dictionary "); +        goto out; +    } -        if (strcmp (w, "enable") == 0) { -                if (wordcount == 4) { -                        type = GF_BITROT_OPTION_TYPE_ENABLE; -                        ret = 0; -                        goto set_type; -                } else { -                        ret = -1; -                        goto out; -                } -        } +    w = str_getunamb(words[3], opwords); +    if (!w) { +        cli_out("Invalid bit rot option : %s", words[3]); +        ret = -1; +        goto out; +    } -        if (strcmp (w, "disable") == 0) { -                if (wordcount == 4) { -                        type = GF_BITROT_OPTION_TYPE_DISABLE; -                        ret = 0; -                        goto set_type; -                } else { -                        ret = -1; -                        goto out; -                } +    if (strcmp(w, "enable") == 0) { +        if (wordcount == 4) { +            type = GF_BITROT_OPTION_TYPE_ENABLE; +            ret = 0; +            goto set_type; +        } else { +            ret = -1; +            goto out;          } +    } -        if (!strcmp (w, "scrub-throttle")) { -                if (!words[4]) { -                        cli_err ("Missing scrub-throttle value for bitrot " -                                 "option"); -                        ret = -1; -                        goto out; -                } else { -                        w = str_getunamb (words[4], scrub_throt_values); -                        if (!w) { -                                cli_err ("Invalid scrub-throttle option for " -                                         "bitrot"); -                                ret = -1; -                                goto out; -                        } else { -                                type = GF_BITROT_OPTION_TYPE_SCRUB_THROTTLE; -                                ret =  dict_set_str (dict, -                                                     "scrub-throttle-value", -                                                     (char *) words[4]); -                                if (ret) { -                                        cli_out ("Failed to set scrub-throttle " -                                                 "value in the dict"); -                                        goto out; -                                } -                                goto set_type; -                        } +    if (strcmp(w, "disable") == 0) { +        if (wordcount == 4) { +            type = GF_BITROT_OPTION_TYPE_DISABLE; +            ret = 0; +            goto set_type; +        } else { +            ret = -1; +            goto out; +        } +    } + +    if (!strcmp(w, "scrub-throttle")) { +        if (!words[4]) { +            cli_err( +                "Missing scrub-throttle value for bitrot " +                "option"); +            ret = -1; +            goto out; +        } else { +            w = str_getunamb(words[4], scrub_throt_values); +            if (!w) { +                cli_err( +                    "Invalid scrub-throttle option for " +                    "bitrot"); +                ret = -1; +                goto out; +            } else { +                type = GF_BITROT_OPTION_TYPE_SCRUB_THROTTLE; +                ret = dict_set_str(dict, "scrub-throttle-value", +                                   (char *)words[4]); +                if (ret) { +                    cli_out( +                        "Failed to set scrub-throttle " +                        "value in the dict"); +                    goto out;                  } +                goto set_type; +            }          } +    } -        if (!strcmp (words[3], "scrub-frequency")) { -                if (!words[4]) { -                        cli_err ("Missing scrub-frequency value"); -                        ret = -1; -                        goto out; -                } else { -                        w = str_getunamb (words[4], scrub_freq_values); -                        if (!w) { -                                cli_err ("Invalid frequency option for bitrot"); -                                ret = -1; -                                goto out; -                        } else { -                                type = GF_BITROT_OPTION_TYPE_SCRUB_FREQ; -                                ret = dict_set_str (dict, -                                                    "scrub-frequency-value", -                                                    (char *) words[4]); -                                if (ret) { -                                        cli_out ("Failed to set dict for " -                                                 "bitrot"); -                                        goto out; -                                } -                                goto set_type; -                        } +    if (!strcmp(words[3], "scrub-frequency")) { +        if (!words[4]) { +            cli_err("Missing scrub-frequency value"); +            ret = -1; +            goto out; +        } else { +            w = str_getunamb(words[4], scrub_freq_values); +            if (!w) { +                cli_err("Invalid frequency option for bitrot"); +                ret = -1; +                goto out; +            } else { +                type = GF_BITROT_OPTION_TYPE_SCRUB_FREQ; +                ret = dict_set_str(dict, "scrub-frequency-value", +                                   (char *)words[4]); +                if (ret) { +                    cli_out( +                        "Failed to set dict for " +                        "bitrot"); +                    goto out;                  } +                goto set_type; +            }          } +    } -        if (!strcmp (words[3], "scrub")) { -                if (!words[4]) { -                        cli_err ("Missing scrub value for bitrot option"); -                        ret = -1; -                        goto out; +    if (!strcmp(words[3], "scrub")) { +        if (!words[4]) { +            cli_err("Missing scrub value for bitrot option"); +            ret = -1; +            goto out; +        } else { +            w = str_getunamb(words[4], scrub_values); +            if (!w) { +                cli_err("Invalid scrub option for bitrot"); +                ret = -1; +                goto out; +            } else { +                if (strcmp(words[4], "status") == 0) { +                    type = GF_BITROT_CMD_SCRUB_STATUS; +                } else if (strcmp(words[4], "ondemand") == 0) { +                    type = GF_BITROT_CMD_SCRUB_ONDEMAND;                  } else { -                        w = str_getunamb (words[4], scrub_values); -                        if (!w) { -                                cli_err ("Invalid scrub option for bitrot"); -                                ret = -1; -                                goto out; -                        } else { -                                if (strcmp (words[4], "status") == 0) { -                                        type = GF_BITROT_CMD_SCRUB_STATUS; -                                } else if (strcmp (words[4], "ondemand") == 0) { -                                        type = GF_BITROT_CMD_SCRUB_ONDEMAND; -                                } else { -                                        type = GF_BITROT_OPTION_TYPE_SCRUB; -                                } -                                ret =  dict_set_str (dict, "scrub-value", -                                                    (char *) words[4]); -                                if (ret) { -                                        cli_out ("Failed to set dict for " -                                                 "bitrot"); -                                        goto out; -                                } -                                goto set_type; -                        } +                    type = GF_BITROT_OPTION_TYPE_SCRUB;                  } +                ret = dict_set_str(dict, "scrub-value", (char *)words[4]); +                if (ret) { +                    cli_out( +                        "Failed to set dict for " +                        "bitrot"); +                    goto out; +                } +                goto set_type; +            }          } +    } -        if (!strcmp (words[3], "signing-time")) { -                if (!words[4]) { -                        cli_err ("Missing signing-time value for bitrot " -                                 "option"); -                        ret = -1; -                        goto out; -                } else { -                        type = GF_BITROT_OPTION_TYPE_EXPIRY_TIME; - -                        expiry_time = strtol (words[4], NULL, 0); -                        if (expiry_time < 1) { -                                cli_err ("Expiry time  value should not be less" -                                         " than 1"); -                                ret = -1; -                                goto out; -                        } - -                        ret = dict_set_uint32 (dict, "expiry-time", -                                               (unsigned int) expiry_time); -                        if (ret) { -                                cli_out ("Failed to set dict for bitrot"); -                                goto out; -                        } -                        goto set_type; -                } +    if (!strcmp(words[3], "signing-time")) { +        if (!words[4]) { +            cli_err( +                "Missing signing-time value for bitrot " +                "option"); +            ret = -1; +            goto out;          } else { -                cli_err ("Invalid option %s for bitrot. Please enter valid " -                         "bitrot option", words[3]); +            type = GF_BITROT_OPTION_TYPE_EXPIRY_TIME; + +            expiry_time = strtol(words[4], NULL, 0); +            if (expiry_time < 1) { +                cli_err( +                    "Expiry time  value should not be less" +                    " than 1");                  ret = -1;                  goto out; +            } + +            ret = dict_set_uint32(dict, "expiry-time", +                                  (unsigned int)expiry_time); +            if (ret) { +                cli_out("Failed to set dict for bitrot"); +                goto out; +            } +            goto set_type;          } +    } else { +        cli_err( +            "Invalid option %s for bitrot. Please enter valid " +            "bitrot option", +            words[3]); +        ret = -1; +        goto out; +    }  set_type: -        ret = dict_set_int32 (dict, "type", type); -        if (ret < 0) -                goto out; +    ret = dict_set_int32(dict, "type", type); +    if (ret < 0) +        goto out; -        *options = dict; +    *options = dict;  out: -        if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Unable to parse bitrot command"); -                if (dict) -                        dict_unref (dict); -        } +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, "Unable to parse bitrot command"); +        if (dict) +            dict_unref(dict); +    } -        return ret; +    return ret;  } diff --git a/cli/src/cli-cmd-peer.c b/cli/src/cli-cmd-peer.c index a50ea7c66b5..e0a38904a81 100644 --- a/cli/src/cli-cmd-peer.c +++ b/cli/src/cli-cmd-peer.c @@ -24,292 +24,282 @@ extern struct rpc_clnt *global_rpc;  extern rpc_clnt_prog_t *cli_rpc_prog; -int cli_cmd_peer_help_cbk (struct cli_state *state, struct cli_cmd_word *in_word, +int +cli_cmd_peer_help_cbk(struct cli_state *state, struct cli_cmd_word *in_word,                        const char **words, int wordcount);  int -cli_cmd_peer_probe_cbk (struct cli_state *state, struct cli_cmd_word *word, -                   const char **words, int wordcount) +cli_cmd_peer_probe_cbk(struct cli_state *state, struct cli_cmd_word *word, +                       const char **words, int wordcount)  { -        int                     ret = -1; -        rpc_clnt_procedure_t    *proc = NULL; -        call_frame_t            *frame = NULL; -        dict_t                  *dict = NULL; -        int                     sent = 0; -        int                     parse_error = 0; -        cli_local_t             *local = NULL; - -        if (!(wordcount == 3)) { -                cli_usage_out (word->pattern); -                parse_error = 1; -                goto out; -        } - -        proc = &cli_rpc_prog->proctable[GLUSTER_CLI_PROBE]; - -        frame = create_frame (THIS, THIS->ctx->pool); -        if (!frame) -                goto out; - -        dict = dict_new (); -        if (!dict) -                goto out; - -        ret = dict_set_str (dict, "hostname", (char *)words[2]); -        if (ret) -                goto out; - -        ret = valid_internet_address ((char *) words[2], _gf_false); -        if (ret == 1) { -                ret = 0; -        } else { -                cli_out ("%s is an invalid address", words[2]); -                cli_usage_out (word->pattern); -                parse_error = 1; -                ret = -1; -                goto out; -        } -/*        if (words[3]) { -                ret = dict_set_str (dict, "port", (char *)words[3]); -                if (ret) -                        goto out; -        } -*/ - -        CLI_LOCAL_INIT (local, words, frame, dict); - -        if (proc->fn) { -                ret = proc->fn (frame, THIS, dict); -        } +    int ret = -1; +    rpc_clnt_procedure_t *proc = NULL; +    call_frame_t *frame = NULL; +    dict_t *dict = NULL; +    int sent = 0; +    int parse_error = 0; +    cli_local_t *local = NULL; + +    if (!(wordcount == 3)) { +        cli_usage_out(word->pattern); +        parse_error = 1; +        goto out; +    } + +    proc = &cli_rpc_prog->proctable[GLUSTER_CLI_PROBE]; + +    frame = create_frame(THIS, THIS->ctx->pool); +    if (!frame) +        goto out; + +    dict = dict_new(); +    if (!dict) +        goto out; + +    ret = dict_set_str(dict, "hostname", (char *)words[2]); +    if (ret) +        goto out; + +    ret = valid_internet_address((char *)words[2], _gf_false); +    if (ret == 1) { +        ret = 0; +    } else { +        cli_out("%s is an invalid address", words[2]); +        cli_usage_out(word->pattern); +        parse_error = 1; +        ret = -1; +        goto out; +    } +    /*        if (words[3]) { +                    ret = dict_set_str (dict, "port", (char *)words[3]); +                    if (ret) +                            goto out; +            } +    */ + +    CLI_LOCAL_INIT(local, words, frame, dict); + +    if (proc->fn) { +        ret = proc->fn(frame, THIS, dict); +    }  out: -        if (ret) { -                cli_cmd_sent_status_get (&sent); -                if ((sent == 0) && (parse_error == 0)) -                        cli_out ("Peer probe failed"); -        } +    if (ret) { +        cli_cmd_sent_status_get(&sent); +        if ((sent == 0) && (parse_error == 0)) +            cli_out("Peer probe failed"); +    } -        CLI_STACK_DESTROY (frame); +    CLI_STACK_DESTROY(frame); -        if (ret == 0) { -                gf_event (EVENT_PEER_ATTACH, "host=%s", (char *)words[2]); -        } +    if (ret == 0) { +        gf_event(EVENT_PEER_ATTACH, "host=%s", (char *)words[2]); +    } -        return ret; +    return ret;  } -  int -cli_cmd_peer_deprobe_cbk (struct cli_state *state, struct cli_cmd_word *word, -                          const char **words, int wordcount) +cli_cmd_peer_deprobe_cbk(struct cli_state *state, struct cli_cmd_word *word, +                         const char **words, int wordcount)  { -        int                   ret   = -1; -        rpc_clnt_procedure_t *proc  = NULL; -        call_frame_t         *frame = NULL; -        dict_t               *dict  = NULL; -        int                  flags = 0; -        int                  sent = 0; -        int                  parse_error = 0; -        cli_local_t          *local = NULL; - -        if ((wordcount < 3) || (wordcount > 4)) { -                cli_usage_out (word->pattern); -                parse_error = 1; -                goto out; +    int ret = -1; +    rpc_clnt_procedure_t *proc = NULL; +    call_frame_t *frame = NULL; +    dict_t *dict = NULL; +    int flags = 0; +    int sent = 0; +    int parse_error = 0; +    cli_local_t *local = NULL; + +    if ((wordcount < 3) || (wordcount > 4)) { +        cli_usage_out(word->pattern); +        parse_error = 1; +        goto out; +    } + +    proc = &cli_rpc_prog->proctable[GLUSTER_CLI_DEPROBE]; + +    frame = create_frame(THIS, THIS->ctx->pool); +    if (!frame) +        goto out; + +    dict = dict_new(); + +    ret = dict_set_str(dict, "hostname", (char *)words[2]); +    if (ret) +        goto out; + +    /*        if (words[3]) { +                    ret = dict_set_str (dict, "port", (char *)words[3]); +                    if (ret) +                            goto out; +            } +    */ +    if (wordcount == 4) { +        if (!strcmp("force", words[3])) +            flags |= GF_CLI_FLAG_OP_FORCE; +        else { +            ret = -1; +            cli_usage_out(word->pattern); +            parse_error = 1; +            goto out;          } +    } +    ret = dict_set_int32(dict, "flags", flags); +    if (ret) +        goto out; -        proc = &cli_rpc_prog->proctable[GLUSTER_CLI_DEPROBE]; +    CLI_LOCAL_INIT(local, words, frame, dict); -        frame = create_frame (THIS, THIS->ctx->pool); -        if (!frame) -                goto out; - -        dict = dict_new (); - -        ret = dict_set_str (dict, "hostname", (char *)words[2]); -        if (ret) -                goto out; - -/*        if (words[3]) { -                ret = dict_set_str (dict, "port", (char *)words[3]); -                if (ret) -                        goto out; -        } -*/ -        if (wordcount == 4) { -                if (!strcmp("force", words[3])) -                        flags |= GF_CLI_FLAG_OP_FORCE; -                else { -                        ret = -1; -                        cli_usage_out (word->pattern); -                        parse_error = 1; -                        goto out; -                } -        } -        ret = dict_set_int32 (dict, "flags", flags); -        if (ret) -                goto out; - -        CLI_LOCAL_INIT (local, words, frame, dict); - -        if (proc->fn) { -                ret = proc->fn (frame, THIS, dict); -        } +    if (proc->fn) { +        ret = proc->fn(frame, THIS, dict); +    }  out: -        if (ret) { -                cli_cmd_sent_status_get (&sent); -                if ((sent == 0) && (parse_error == 0)) -                        cli_out ("Peer detach failed"); -        } +    if (ret) { +        cli_cmd_sent_status_get(&sent); +        if ((sent == 0) && (parse_error == 0)) +            cli_out("Peer detach failed"); +    } -        CLI_STACK_DESTROY (frame); +    CLI_STACK_DESTROY(frame); -        if (ret == 0) { -                gf_event (EVENT_PEER_DETACH, "host=%s", (char *)words[2]); -        } +    if (ret == 0) { +        gf_event(EVENT_PEER_DETACH, "host=%s", (char *)words[2]); +    } -        return ret; +    return ret;  }  int -cli_cmd_peer_status_cbk (struct cli_state *state, struct cli_cmd_word *word, +cli_cmd_peer_status_cbk(struct cli_state *state, struct cli_cmd_word *word,                          const char **words, int wordcount)  { -        int                     ret = -1; -        rpc_clnt_procedure_t    *proc = NULL; -        call_frame_t            *frame = NULL; -        int                     sent = 0; -        int                     parse_error = 0; - -        if (wordcount != 2) { -                cli_usage_out (word->pattern); -                parse_error = 1; -                goto out; -        } +    int ret = -1; +    rpc_clnt_procedure_t *proc = NULL; +    call_frame_t *frame = NULL; +    int sent = 0; +    int parse_error = 0; -        proc = &cli_rpc_prog->proctable[GLUSTER_CLI_LIST_FRIENDS]; +    if (wordcount != 2) { +        cli_usage_out(word->pattern); +        parse_error = 1; +        goto out; +    } -        frame = create_frame (THIS, THIS->ctx->pool); -        if (!frame) -                goto out; +    proc = &cli_rpc_prog->proctable[GLUSTER_CLI_LIST_FRIENDS]; -        if (proc->fn) { -                ret = proc->fn (frame, THIS, (void *)GF_CLI_LIST_PEERS); -        } +    frame = create_frame(THIS, THIS->ctx->pool); +    if (!frame) +        goto out; + +    if (proc->fn) { +        ret = proc->fn(frame, THIS, (void *)GF_CLI_LIST_PEERS); +    }  out: -        if (ret) { -                cli_cmd_sent_status_get (&sent); -                if ((sent == 0) && (parse_error == 0)) -                        cli_out ("Peer status failed"); -        } +    if (ret) { +        cli_cmd_sent_status_get(&sent); +        if ((sent == 0) && (parse_error == 0)) +            cli_out("Peer status failed"); +    } -        CLI_STACK_DESTROY (frame); +    CLI_STACK_DESTROY(frame); -        return ret; +    return ret;  }  int -cli_cmd_pool_list_cbk (struct cli_state *state, struct cli_cmd_word *word, -                       const char **words, int wordcount) +cli_cmd_pool_list_cbk(struct cli_state *state, struct cli_cmd_word *word, +                      const char **words, int wordcount)  { -        int                     ret = -1; -        rpc_clnt_procedure_t    *proc = NULL; -        call_frame_t            *frame = NULL; -        int                     sent = 0; -        int                     parse_error = 0; - -        if (wordcount != 2) { -                cli_usage_out (word->pattern); -                parse_error = 1; -                goto out; -        } +    int ret = -1; +    rpc_clnt_procedure_t *proc = NULL; +    call_frame_t *frame = NULL; +    int sent = 0; +    int parse_error = 0; -        proc = &cli_rpc_prog->proctable[GLUSTER_CLI_LIST_FRIENDS]; +    if (wordcount != 2) { +        cli_usage_out(word->pattern); +        parse_error = 1; +        goto out; +    } -        frame = create_frame (THIS, THIS->ctx->pool); -        if (!frame) -                goto out; +    proc = &cli_rpc_prog->proctable[GLUSTER_CLI_LIST_FRIENDS]; -        if (proc->fn) { -                ret = proc->fn (frame, THIS, -                                (void *)GF_CLI_LIST_POOL_NODES); -        } +    frame = create_frame(THIS, THIS->ctx->pool); +    if (!frame) +        goto out; + +    if (proc->fn) { +        ret = proc->fn(frame, THIS, (void *)GF_CLI_LIST_POOL_NODES); +    }  out: -        if (ret) { -                cli_cmd_sent_status_get (&sent); -                if ((sent == 0) && (parse_error == 0)) -                        cli_err ("pool list: command execution failed"); -        } +    if (ret) { +        cli_cmd_sent_status_get(&sent); +        if ((sent == 0) && (parse_error == 0)) +            cli_err("pool list: command execution failed"); +    } -        CLI_STACK_DESTROY (frame); +    CLI_STACK_DESTROY(frame); -        return ret; +    return ret;  }  struct cli_cmd cli_probe_cmds[] = { -        { "peer probe { <HOSTNAME> | <IP-address> }", -          cli_cmd_peer_probe_cbk, -          "probe peer specified by <HOSTNAME>"}, +    {"peer probe { <HOSTNAME> | <IP-address> }", cli_cmd_peer_probe_cbk, +     "probe peer specified by <HOSTNAME>"}, -        { "peer detach { <HOSTNAME> | <IP-address> } [force]", -          cli_cmd_peer_deprobe_cbk, -          "detach peer specified by <HOSTNAME>"}, +    {"peer detach { <HOSTNAME> | <IP-address> } [force]", +     cli_cmd_peer_deprobe_cbk, "detach peer specified by <HOSTNAME>"}, -        { "peer status", -          cli_cmd_peer_status_cbk, -          "list status of peers"}, +    {"peer status", cli_cmd_peer_status_cbk, "list status of peers"}, -	{ "peer help", -           cli_cmd_peer_help_cbk, -           "display help for peer commands"}, +    {"peer help", cli_cmd_peer_help_cbk, "display help for peer commands"}, -        { "pool list", -          cli_cmd_pool_list_cbk, -          "list all the nodes in the pool (including localhost)"}, +    {"pool list", cli_cmd_pool_list_cbk, +     "list all the nodes in the pool (including localhost)"}, -        { NULL, NULL, NULL } -}; +    {NULL, NULL, NULL}};  int -cli_cmd_peer_help_cbk (struct cli_state *state, struct cli_cmd_word *in_word, +cli_cmd_peer_help_cbk(struct cli_state *state, struct cli_cmd_word *in_word,                        const char **words, int wordcount)  { -        struct cli_cmd        *cmd = NULL; -        struct cli_cmd        *probe_cmd = NULL; -        int                   count     = 0; +    struct cli_cmd *cmd = NULL; +    struct cli_cmd *probe_cmd = NULL; +    int count = 0; -        cli_out ("\ngluster peer commands"); -        cli_out ("======================\n"); +    cli_out("\ngluster peer commands"); +    cli_out("======================\n"); -        cmd = GF_MALLOC (sizeof (cli_probe_cmds), cli_mt_cli_cmd); -        memcpy (cmd, cli_probe_cmds, sizeof (cli_probe_cmds)); -        count = (sizeof (cli_probe_cmds) / sizeof (struct cli_cmd)); -        cli_cmd_sort (cmd, count); +    cmd = GF_MALLOC(sizeof(cli_probe_cmds), cli_mt_cli_cmd); +    memcpy(cmd, cli_probe_cmds, sizeof(cli_probe_cmds)); +    count = (sizeof(cli_probe_cmds) / sizeof(struct cli_cmd)); +    cli_cmd_sort(cmd, count); -        for (probe_cmd = cmd; probe_cmd->pattern; probe_cmd++) -                cli_out ("%s - %s", probe_cmd->pattern, probe_cmd->desc); +    for (probe_cmd = cmd; probe_cmd->pattern; probe_cmd++) +        cli_out("%s - %s", probe_cmd->pattern, probe_cmd->desc); -        GF_FREE (cmd); +    GF_FREE(cmd); -        cli_out ("\n"); -        return 0; +    cli_out("\n"); +    return 0;  }  int -cli_cmd_probe_register (struct cli_state *state) +cli_cmd_probe_register(struct cli_state *state)  { -        int  ret = 0; -        struct cli_cmd *cmd = NULL; - -        for (cmd = cli_probe_cmds; cmd->pattern; cmd++) { +    int ret = 0; +    struct cli_cmd *cmd = NULL; -                ret = cli_cmd_register (&state->tree, cmd); -                if (ret) -                        goto out; -        } +    for (cmd = cli_probe_cmds; cmd->pattern; cmd++) { +        ret = cli_cmd_register(&state->tree, cmd); +        if (ret) +            goto out; +    }  out: -        return ret; +    return ret;  } diff --git a/cli/src/cli-cmd-snapshot.c b/cli/src/cli-cmd-snapshot.c index 64cbd42ce5a..814ab82f6eb 100644 --- a/cli/src/cli-cmd-snapshot.c +++ b/cli/src/cli-cmd-snapshot.c @@ -20,146 +20,118 @@  extern rpc_clnt_prog_t *cli_rpc_prog;  int -cli_cmd_snapshot_help_cbk (struct cli_state *state, struct cli_cmd_word *in_word, -                           const char **words, int wordcount); +cli_cmd_snapshot_help_cbk(struct cli_state *state, struct cli_cmd_word *in_word, +                          const char **words, int wordcount);  int -cli_cmd_snapshot_cbk (struct cli_state *state, struct cli_cmd_word *word, -                      const char **words, int wordcount) +cli_cmd_snapshot_cbk(struct cli_state *state, struct cli_cmd_word *word, +                     const char **words, int wordcount)  { -        int                      ret       = 0; -        int                      parse_err = 0; -        dict_t                  *options   = NULL; -        rpc_clnt_procedure_t    *proc      = NULL; -        call_frame_t            *frame     = NULL; -        cli_local_t             *local     = NULL; - -        proc = &cli_rpc_prog->proctable [GLUSTER_CLI_SNAP]; - -        frame = create_frame (THIS, THIS->ctx->pool); -        if (frame == NULL) { -                ret = -1; -                goto out; +    int ret = 0; +    int parse_err = 0; +    dict_t *options = NULL; +    rpc_clnt_procedure_t *proc = NULL; +    call_frame_t *frame = NULL; +    cli_local_t *local = NULL; + +    proc = &cli_rpc_prog->proctable[GLUSTER_CLI_SNAP]; + +    frame = create_frame(THIS, THIS->ctx->pool); +    if (frame == NULL) { +        ret = -1; +        goto out; +    } + +    /* Parses the command entered by the user */ +    ret = cli_cmd_snapshot_parse(words, wordcount, &options, state); +    if (ret) { +        if (ret < 0) { +            cli_usage_out(word->pattern); +            parse_err = 1; +        } else { +            /* User might have cancelled the snapshot operation */ +            ret = 0;          } +        goto out; +    } -        /* Parses the command entered by the user */ -        ret = cli_cmd_snapshot_parse (words, wordcount, &options, state); -        if (ret) { -                if (ret < 0) { -                        cli_usage_out (word->pattern); -                        parse_err = 1; -                } else { -                        /* User might have cancelled the snapshot operation */ -                        ret = 0; -                } -                goto out; -        } - -        CLI_LOCAL_INIT (local, words, frame, options); +    CLI_LOCAL_INIT(local, words, frame, options); -        if (proc->fn) -                ret = proc->fn (frame, THIS, options); +    if (proc->fn) +        ret = proc->fn(frame, THIS, options);  out: -        if (ret && parse_err == 0) -                cli_out ("Snapshot command failed"); +    if (ret && parse_err == 0) +        cli_out("Snapshot command failed"); -        CLI_STACK_DESTROY (frame); +    CLI_STACK_DESTROY(frame); -        return ret; +    return ret;  }  struct cli_cmd snapshot_cmds[] = { -        { "snapshot help", -          cli_cmd_snapshot_help_cbk, -          "display help for snapshot commands" -        }, -        { "snapshot create <snapname> <volname> [no-timestamp] " -                "[description <description>] [force]", -          cli_cmd_snapshot_cbk, -          "Snapshot Create." -        }, -        { "snapshot clone <clonename> <snapname>", -          cli_cmd_snapshot_cbk, -          "Snapshot Clone." -        }, -        { "snapshot restore <snapname>", -          cli_cmd_snapshot_cbk, -          "Snapshot Restore." -        }, -        { "snapshot status [(snapname | volume <volname>)]", -          cli_cmd_snapshot_cbk, -          "Snapshot Status." -        }, -        { "snapshot info [(snapname | volume <volname>)]", -          cli_cmd_snapshot_cbk, -          "Snapshot Info." -        }, -        { "snapshot list [volname]", -          cli_cmd_snapshot_cbk, -          "Snapshot List." -        }, -        {"snapshot config [volname] ([snap-max-hard-limit <count>] " -         "[snap-max-soft-limit <percent>]) " -         "| ([auto-delete <enable|disable>])" -         "| ([activate-on-create <enable|disable>])", -          cli_cmd_snapshot_cbk, -          "Snapshot Config." -        }, -        {"snapshot delete (all | snapname | volume <volname>)", -          cli_cmd_snapshot_cbk, -          "Snapshot Delete." -        }, -        {"snapshot activate <snapname> [force]", -          cli_cmd_snapshot_cbk, -          "Activate snapshot volume." -        }, -        {"snapshot deactivate <snapname>", -          cli_cmd_snapshot_cbk, -          "Deactivate snapshot volume." -        }, -        { NULL, NULL, NULL } -}; +    {"snapshot help", cli_cmd_snapshot_help_cbk, +     "display help for snapshot commands"}, +    {"snapshot create <snapname> <volname> [no-timestamp] " +     "[description <description>] [force]", +     cli_cmd_snapshot_cbk, "Snapshot Create."}, +    {"snapshot clone <clonename> <snapname>", cli_cmd_snapshot_cbk, +     "Snapshot Clone."}, +    {"snapshot restore <snapname>", cli_cmd_snapshot_cbk, "Snapshot Restore."}, +    {"snapshot status [(snapname | volume <volname>)]", cli_cmd_snapshot_cbk, +     "Snapshot Status."}, +    {"snapshot info [(snapname | volume <volname>)]", cli_cmd_snapshot_cbk, +     "Snapshot Info."}, +    {"snapshot list [volname]", cli_cmd_snapshot_cbk, "Snapshot List."}, +    {"snapshot config [volname] ([snap-max-hard-limit <count>] " +     "[snap-max-soft-limit <percent>]) " +     "| ([auto-delete <enable|disable>])" +     "| ([activate-on-create <enable|disable>])", +     cli_cmd_snapshot_cbk, "Snapshot Config."}, +    {"snapshot delete (all | snapname | volume <volname>)", +     cli_cmd_snapshot_cbk, "Snapshot Delete."}, +    {"snapshot activate <snapname> [force]", cli_cmd_snapshot_cbk, +     "Activate snapshot volume."}, +    {"snapshot deactivate <snapname>", cli_cmd_snapshot_cbk, +     "Deactivate snapshot volume."}, +    {NULL, NULL, NULL}};  int -cli_cmd_snapshot_help_cbk (struct cli_state *state, -                           struct cli_cmd_word *in_word, -                           const char **words, -                           int wordcount) +cli_cmd_snapshot_help_cbk(struct cli_state *state, struct cli_cmd_word *in_word, +                          const char **words, int wordcount)  { -        struct cli_cmd        *cmd      = NULL; -        struct cli_cmd        *snap_cmd = NULL; -        int                   count     = 0; +    struct cli_cmd *cmd = NULL; +    struct cli_cmd *snap_cmd = NULL; +    int count = 0; -        cmd = GF_MALLOC (sizeof (snapshot_cmds), cli_mt_cli_cmd); -        memcpy (cmd, snapshot_cmds, sizeof (snapshot_cmds)); -        count = (sizeof (snapshot_cmds) / sizeof (struct cli_cmd)); -        cli_cmd_sort (cmd, count); +    cmd = GF_MALLOC(sizeof(snapshot_cmds), cli_mt_cli_cmd); +    memcpy(cmd, snapshot_cmds, sizeof(snapshot_cmds)); +    count = (sizeof(snapshot_cmds) / sizeof(struct cli_cmd)); +    cli_cmd_sort(cmd, count); -        cli_out ("\ngluster snapshot commands"); -        cli_out ("=========================\n"); +    cli_out("\ngluster snapshot commands"); +    cli_out("=========================\n"); -        for (snap_cmd = cmd; snap_cmd->pattern; snap_cmd++) -                if (_gf_false == snap_cmd->disable) -                        cli_out ("%s - %s", snap_cmd->pattern, snap_cmd->desc); -        cli_out ("\n"); +    for (snap_cmd = cmd; snap_cmd->pattern; snap_cmd++) +        if (_gf_false == snap_cmd->disable) +            cli_out("%s - %s", snap_cmd->pattern, snap_cmd->desc); +    cli_out("\n"); -        GF_FREE (cmd); -        return 0; +    GF_FREE(cmd); +    return 0;  }  int -cli_cmd_snapshot_register (struct cli_state *state) +cli_cmd_snapshot_register(struct cli_state *state)  { -        int  ret = 0; -        struct cli_cmd *cmd = NULL; - -        for (cmd = snapshot_cmds; cmd->pattern; cmd++) { - -                ret = cli_cmd_register (&state->tree, cmd); -                if (ret) -                        goto out; -        } +    int ret = 0; +    struct cli_cmd *cmd = NULL; + +    for (cmd = snapshot_cmds; cmd->pattern; cmd++) { +        ret = cli_cmd_register(&state->tree, cmd); +        if (ret) +            goto out; +    }  out: -        return ret; +    return ret;  } diff --git a/cli/src/cli-cmd-system.c b/cli/src/cli-cmd-system.c index 995e1b1ad5c..96b229582fb 100644 --- a/cli/src/cli-cmd-system.c +++ b/cli/src/cli-cmd-system.c @@ -18,604 +18,587 @@  #include "cli-mem-types.h"  #include "protocol-common.h" -  extern struct rpc_clnt *global_rpc;  extern rpc_clnt_prog_t *cli_rpc_prog; -int cli_cmd_system_help_cbk (struct cli_state *state, struct cli_cmd_word *in_word, -                             const char **words, int wordcount); +int +cli_cmd_system_help_cbk(struct cli_state *state, struct cli_cmd_word *in_word, +                        const char **words, int wordcount); -int cli_cmd_copy_file_cbk (struct cli_state *state, struct cli_cmd_word *word, -                           const char **words, int wordcount); +int +cli_cmd_copy_file_cbk(struct cli_state *state, struct cli_cmd_word *word, +                      const char **words, int wordcount); -int cli_cmd_sys_exec_cbk (struct cli_state *state, struct cli_cmd_word *word, -                          const char **words, int wordcount); +int +cli_cmd_sys_exec_cbk(struct cli_state *state, struct cli_cmd_word *word, +                     const char **words, int wordcount);  int -cli_cmd_getspec_cbk (struct cli_state *state, struct cli_cmd_word *word, -                     const char **words, int wordcount) +cli_cmd_getspec_cbk(struct cli_state *state, struct cli_cmd_word *word, +                    const char **words, int wordcount)  { -        int                     ret = -1; -        rpc_clnt_procedure_t    *proc = NULL; -        call_frame_t            *frame = NULL; -        dict_t                  *dict = NULL; +    int ret = -1; +    rpc_clnt_procedure_t *proc = NULL; +    call_frame_t *frame = NULL; +    dict_t *dict = NULL; -        frame = create_frame (THIS, THIS->ctx->pool); -        if (!frame) -                goto out; +    frame = create_frame(THIS, THIS->ctx->pool); +    if (!frame) +        goto out; -        dict = dict_new (); -        if (!dict) -                goto out; +    dict = dict_new(); +    if (!dict) +        goto out; -        if (wordcount != 3) { -                cli_usage_out (word->pattern); -                goto out; -        } +    if (wordcount != 3) { +        cli_usage_out(word->pattern); +        goto out; +    } -        ret = dict_set_str (dict, "volid", (char *)words[2]); -        if (ret) -                goto out; +    ret = dict_set_str(dict, "volid", (char *)words[2]); +    if (ret) +        goto out; -        proc = &cli_rpc_prog->proctable[GLUSTER_CLI_GETSPEC]; -        if (proc->fn) { -                ret = proc->fn (frame, THIS, dict); -        } +    proc = &cli_rpc_prog->proctable[GLUSTER_CLI_GETSPEC]; +    if (proc->fn) { +        ret = proc->fn(frame, THIS, dict); +    }  out: -        if (!proc && ret) { -                if (dict) -                        dict_unref (dict); -                if (wordcount > 1) -                        cli_out ("Fetching spec for volume %s failed", -                                 (char *)words[2]); -        } +    if (!proc && ret) { +        if (dict) +            dict_unref(dict); +        if (wordcount > 1) +            cli_out("Fetching spec for volume %s failed", (char *)words[2]); +    } -        return ret; +    return ret;  }  int -cli_cmd_pmap_b2p_cbk (struct cli_state *state, struct cli_cmd_word *word, -                 const char **words, int wordcount) +cli_cmd_pmap_b2p_cbk(struct cli_state *state, struct cli_cmd_word *word, +                     const char **words, int wordcount)  { -        int                     ret = -1; -        rpc_clnt_procedure_t    *proc = NULL; -        call_frame_t            *frame = NULL; -        dict_t                  *dict = NULL; +    int ret = -1; +    rpc_clnt_procedure_t *proc = NULL; +    call_frame_t *frame = NULL; +    dict_t *dict = NULL; -        frame = create_frame (THIS, THIS->ctx->pool); -        if (!frame) -                goto out; +    frame = create_frame(THIS, THIS->ctx->pool); +    if (!frame) +        goto out; -        dict = dict_new (); -        if (!dict) -                goto out; +    dict = dict_new(); +    if (!dict) +        goto out; -        if (wordcount != 4) { -                cli_usage_out (word->pattern); -                goto out; -        } +    if (wordcount != 4) { +        cli_usage_out(word->pattern); +        goto out; +    } -        ret = dict_set_str (dict, "brick", (char *)words[3]); -        if (ret) -                goto out; +    ret = dict_set_str(dict, "brick", (char *)words[3]); +    if (ret) +        goto out; -        proc = &cli_rpc_prog->proctable[GLUSTER_CLI_PMAP_PORTBYBRICK]; -        if (proc->fn) { -                ret = proc->fn (frame, THIS, dict); -        } +    proc = &cli_rpc_prog->proctable[GLUSTER_CLI_PMAP_PORTBYBRICK]; +    if (proc->fn) { +        ret = proc->fn(frame, THIS, dict); +    }  out: -        if (!proc && ret) { -                if (dict) -                        dict_unref (dict); -                if (wordcount > 1) -                        cli_out ("Fetching spec for volume %s failed", -                                 (char *)words[3]); -        } +    if (!proc && ret) { +        if (dict) +            dict_unref(dict); +        if (wordcount > 1) +            cli_out("Fetching spec for volume %s failed", (char *)words[3]); +    } -        return ret; +    return ret;  }  int -cli_cmd_fsm_log_cbk (struct cli_state *state, struct cli_cmd_word *word, -                     const char **words, int wordcount) +cli_cmd_fsm_log_cbk(struct cli_state *state, struct cli_cmd_word *word, +                    const char **words, int wordcount)  { -        int                             ret = -1; -        rpc_clnt_procedure_t            *proc = NULL; -        call_frame_t                    *frame = NULL; -        char                            *name = ""; - -        if ((wordcount != 4) && (wordcount != 3)) { -                cli_usage_out (word->pattern); -                goto out; -        } - -        if (wordcount == 4) -                name = (char*)words[3]; -        proc = &cli_rpc_prog->proctable[GLUSTER_CLI_FSM_LOG]; -        if (proc && proc->fn) { -                frame = create_frame (THIS, THIS->ctx->pool); -                if (!frame) -                        goto out; -                ret = proc->fn (frame, THIS, (void*)name); -        } +    int ret = -1; +    rpc_clnt_procedure_t *proc = NULL; +    call_frame_t *frame = NULL; +    char *name = ""; + +    if ((wordcount != 4) && (wordcount != 3)) { +        cli_usage_out(word->pattern); +        goto out; +    } + +    if (wordcount == 4) +        name = (char *)words[3]; +    proc = &cli_rpc_prog->proctable[GLUSTER_CLI_FSM_LOG]; +    if (proc && proc->fn) { +        frame = create_frame(THIS, THIS->ctx->pool); +        if (!frame) +            goto out; +        ret = proc->fn(frame, THIS, (void *)name); +    }  out: -        return ret; +    return ret;  }  int -cli_cmd_getwd_cbk (struct cli_state *state, struct cli_cmd_word *word, -                   const char **words, int wordcount) +cli_cmd_getwd_cbk(struct cli_state *state, struct cli_cmd_word *word, +                  const char **words, int wordcount)  { -        int                             ret = -1; -        rpc_clnt_procedure_t            *proc = NULL; -        call_frame_t                    *frame = NULL; - -        if (wordcount != 2) { -                cli_usage_out (word->pattern); -                goto out; -        } - -        proc = &cli_rpc_prog->proctable[GLUSTER_CLI_GETWD]; -        if (proc && proc->fn) { -                frame = create_frame (THIS, THIS->ctx->pool); -                if (!frame) -                        goto out; -                ret = proc->fn (frame, THIS, NULL); -        } +    int ret = -1; +    rpc_clnt_procedure_t *proc = NULL; +    call_frame_t *frame = NULL; + +    if (wordcount != 2) { +        cli_usage_out(word->pattern); +        goto out; +    } + +    proc = &cli_rpc_prog->proctable[GLUSTER_CLI_GETWD]; +    if (proc && proc->fn) { +        frame = create_frame(THIS, THIS->ctx->pool); +        if (!frame) +            goto out; +        ret = proc->fn(frame, THIS, NULL); +    }  out: -        return ret; +    return ret;  }  static dict_t * -make_seq_dict (int argc, char **argv) +make_seq_dict(int argc, char **argv)  { -        char index[] = "4294967296"; // 1<<32 -        int i        = 0; -        int ret      = 0; -        dict_t *dict = dict_new (); - -        if (!dict) -                return NULL; - -        for (i = 0; i < argc; i++) { -                snprintf(index, sizeof(index), "%d", i); -                ret = dict_set_str (dict, index, argv[i]); -                if (ret == -1) -                        break; -        } - -        if (ret) { -                dict_unref (dict); -                dict = NULL; -        } - -        return dict; +    char index[] = "4294967296";  // 1<<32 +    int i = 0; +    int ret = 0; +    dict_t *dict = dict_new(); + +    if (!dict) +        return NULL; + +    for (i = 0; i < argc; i++) { +        snprintf(index, sizeof(index), "%d", i); +        ret = dict_set_str(dict, index, argv[i]); +        if (ret == -1) +            break; +    } + +    if (ret) { +        dict_unref(dict); +        dict = NULL; +    } + +    return dict;  }  int -cli_cmd_mount_cbk (struct cli_state *state, struct cli_cmd_word *word, -                   const char **words, int wordcount) +cli_cmd_mount_cbk(struct cli_state *state, struct cli_cmd_word *word, +                  const char **words, int wordcount)  { -        rpc_clnt_procedure_t *proc = NULL; -        call_frame_t *frame        = NULL; -        int ret                    = -1; -        dict_t *dict               = NULL; -        void *dataa[]              = {NULL, NULL}; - -        if (wordcount < 4) { -                cli_usage_out (word->pattern); -                goto out; -        } - -        dict = make_seq_dict (wordcount - 3, (char **)words + 3); -        if (!dict) -                goto out; - -        dataa[0] = (void *)words[2]; -        dataa[1] = dict; - -        proc = &cli_rpc_prog->proctable[GLUSTER_CLI_MOUNT]; -        if (proc && proc->fn) { -                frame = create_frame (THIS, THIS->ctx->pool); -                if (!frame) -                        goto out; -                ret = proc->fn (frame, THIS, dataa); -        } +    rpc_clnt_procedure_t *proc = NULL; +    call_frame_t *frame = NULL; +    int ret = -1; +    dict_t *dict = NULL; +    void *dataa[] = {NULL, NULL}; + +    if (wordcount < 4) { +        cli_usage_out(word->pattern); +        goto out; +    } + +    dict = make_seq_dict(wordcount - 3, (char **)words + 3); +    if (!dict) +        goto out; + +    dataa[0] = (void *)words[2]; +    dataa[1] = dict; + +    proc = &cli_rpc_prog->proctable[GLUSTER_CLI_MOUNT]; +    if (proc && proc->fn) { +        frame = create_frame(THIS, THIS->ctx->pool); +        if (!frame) +            goto out; +        ret = proc->fn(frame, THIS, dataa); +    } - out: -        if (dict) -                dict_unref (dict); +out: +    if (dict) +        dict_unref(dict); -        if (!proc && ret) -                cli_out ("Mount command failed"); +    if (!proc && ret) +        cli_out("Mount command failed"); -        return ret; +    return ret;  }  int -cli_cmd_umount_cbk (struct cli_state *state, struct cli_cmd_word *word, +cli_cmd_umount_cbk(struct cli_state *state, struct cli_cmd_word *word,                     const char **words, int wordcount)  { -        rpc_clnt_procedure_t *proc = NULL; -        call_frame_t *frame        = NULL; -        int ret                    = -1; -        dict_t *dict               = NULL; - -        if (!(wordcount == 3 || -              (wordcount == 4 && strcmp (words[3], "lazy") == 0))) { -                cli_usage_out (word->pattern); -                goto out; -        } - -        dict = dict_new (); -        if (!dict) -                goto out; - -        ret = dict_set_str (dict, "path", (char *)words[2]); -        if (ret != 0) -                goto out; -        ret = dict_set_int32 (dict, "lazy", wordcount == 4); -        if (ret != 0) -                goto out; - -        proc = &cli_rpc_prog->proctable[GLUSTER_CLI_UMOUNT]; -        if (proc && proc->fn) { -                frame = create_frame (THIS, THIS->ctx->pool); -                if (!frame) -                        goto out; -                ret = proc->fn (frame, THIS, dict); -        } +    rpc_clnt_procedure_t *proc = NULL; +    call_frame_t *frame = NULL; +    int ret = -1; +    dict_t *dict = NULL; + +    if (!(wordcount == 3 || +          (wordcount == 4 && strcmp(words[3], "lazy") == 0))) { +        cli_usage_out(word->pattern); +        goto out; +    } + +    dict = dict_new(); +    if (!dict) +        goto out; + +    ret = dict_set_str(dict, "path", (char *)words[2]); +    if (ret != 0) +        goto out; +    ret = dict_set_int32(dict, "lazy", wordcount == 4); +    if (ret != 0) +        goto out; + +    proc = &cli_rpc_prog->proctable[GLUSTER_CLI_UMOUNT]; +    if (proc && proc->fn) { +        frame = create_frame(THIS, THIS->ctx->pool); +        if (!frame) +            goto out; +        ret = proc->fn(frame, THIS, dict); +    } - out: -        if (dict) -                dict_unref (dict); +out: +    if (dict) +        dict_unref(dict); -        if (!proc && ret) -                cli_out ("Umount command failed"); +    if (!proc && ret) +        cli_out("Umount command failed"); -        return ret; +    return ret;  }  int -cli_cmd_uuid_get_cbk (struct cli_state *state, struct cli_cmd_word *word, -                      const char **words, int wordcount) +cli_cmd_uuid_get_cbk(struct cli_state *state, struct cli_cmd_word *word, +                     const char **words, int wordcount)  { -        int                     ret = -1; -        int                     sent = 0; -        int                     parse_error = 0; -        dict_t                  *dict  = NULL; -        rpc_clnt_procedure_t    *proc = NULL; -        call_frame_t            *frame = NULL; -        cli_local_t             *local = NULL; -        xlator_t                *this  = NULL; - -        this = THIS; -        if (wordcount != 3) { -                cli_usage_out (word->pattern); -                parse_error = 1; -                goto out; -        } - -        proc = &cli_rpc_prog->proctable[GLUSTER_CLI_UUID_GET]; -        frame = create_frame (this, this->ctx->pool); -        if (!frame) -                goto out; - -        dict = dict_new (); -        if (!dict) -                goto out; - -        CLI_LOCAL_INIT (local, words, frame, dict); -        if (proc->fn) -                ret = proc->fn (frame, this, dict); +    int ret = -1; +    int sent = 0; +    int parse_error = 0; +    dict_t *dict = NULL; +    rpc_clnt_procedure_t *proc = NULL; +    call_frame_t *frame = NULL; +    cli_local_t *local = NULL; +    xlator_t *this = NULL; + +    this = THIS; +    if (wordcount != 3) { +        cli_usage_out(word->pattern); +        parse_error = 1; +        goto out; +    } + +    proc = &cli_rpc_prog->proctable[GLUSTER_CLI_UUID_GET]; +    frame = create_frame(this, this->ctx->pool); +    if (!frame) +        goto out; + +    dict = dict_new(); +    if (!dict) +        goto out; + +    CLI_LOCAL_INIT(local, words, frame, dict); +    if (proc->fn) +        ret = proc->fn(frame, this, dict);  out: -        if (ret) { -                cli_cmd_sent_status_get (&sent); -                if ((sent == 0) && (parse_error == 0)) -                        cli_out ("uuid get failed"); -        } - -        CLI_STACK_DESTROY (frame); -        return ret; +    if (ret) { +        cli_cmd_sent_status_get(&sent); +        if ((sent == 0) && (parse_error == 0)) +            cli_out("uuid get failed"); +    } + +    CLI_STACK_DESTROY(frame); +    return ret;  }  int -cli_cmd_uuid_reset_cbk (struct cli_state *state, struct cli_cmd_word *word, -                        const char **words, int wordcount) +cli_cmd_uuid_reset_cbk(struct cli_state *state, struct cli_cmd_word *word, +                       const char **words, int wordcount)  { -        int                     ret = -1; -        rpc_clnt_procedure_t    *proc = NULL; -        call_frame_t            *frame = NULL; -        int                     sent = 0; -        int                     parse_error = 0; -        gf_answer_t             answer = GF_ANSWER_NO; -        char                    *question = NULL; -        cli_local_t             *local = NULL; -        dict_t                  *dict  = NULL; -        xlator_t                *this  = NULL; - -        question = "Resetting uuid changes the uuid of local glusterd. " -                   "Do you want to continue?"; - -        if (wordcount != 3) { -                cli_usage_out (word->pattern); -                parse_error = 1; -                goto out; -        } - -        proc = &cli_rpc_prog->proctable[GLUSTER_CLI_UUID_RESET]; - -        this = THIS; -        frame = create_frame (this, this->ctx->pool); -        if (!frame) -                goto out; - -        dict = dict_new (); -        if (!dict) { -                ret = -1; -                goto out; -        } -        CLI_LOCAL_INIT (local, words, frame, dict); -        answer = cli_cmd_get_confirmation (state, question); - -        if (GF_ANSWER_NO == answer) { -                ret = 0; -                goto out; -        } - -        //send NULL as argument since no dictionary is sent to glusterd -        if (proc->fn) { -                ret = proc->fn (frame, this, dict); -        } +    int ret = -1; +    rpc_clnt_procedure_t *proc = NULL; +    call_frame_t *frame = NULL; +    int sent = 0; +    int parse_error = 0; +    gf_answer_t answer = GF_ANSWER_NO; +    char *question = NULL; +    cli_local_t *local = NULL; +    dict_t *dict = NULL; +    xlator_t *this = NULL; + +    question = +        "Resetting uuid changes the uuid of local glusterd. " +        "Do you want to continue?"; + +    if (wordcount != 3) { +        cli_usage_out(word->pattern); +        parse_error = 1; +        goto out; +    } + +    proc = &cli_rpc_prog->proctable[GLUSTER_CLI_UUID_RESET]; + +    this = THIS; +    frame = create_frame(this, this->ctx->pool); +    if (!frame) +        goto out; + +    dict = dict_new(); +    if (!dict) { +        ret = -1; +        goto out; +    } +    CLI_LOCAL_INIT(local, words, frame, dict); +    answer = cli_cmd_get_confirmation(state, question); + +    if (GF_ANSWER_NO == answer) { +        ret = 0; +        goto out; +    } + +    // send NULL as argument since no dictionary is sent to glusterd +    if (proc->fn) { +        ret = proc->fn(frame, this, dict); +    }  out: -        if (ret) { -                cli_cmd_sent_status_get (&sent); -                if ((sent == 0) && (parse_error == 0)) -                        cli_out ("uuid reset failed"); -        } +    if (ret) { +        cli_cmd_sent_status_get(&sent); +        if ((sent == 0) && (parse_error == 0)) +            cli_out("uuid reset failed"); +    } -        CLI_STACK_DESTROY (frame); +    CLI_STACK_DESTROY(frame); -        return ret; +    return ret;  }  struct cli_cmd cli_system_cmds[] = { -        { "system:: getspec <VOLNAME>", -          cli_cmd_getspec_cbk, -          "fetch the volume file for the volume <VOLNAME>"}, +    {"system:: getspec <VOLNAME>", cli_cmd_getspec_cbk, +     "fetch the volume file for the volume <VOLNAME>"}, -        { "system:: portmap brick2port <BRICK>", -          cli_cmd_pmap_b2p_cbk, -          "query which port <BRICK> listens on"}, +    {"system:: portmap brick2port <BRICK>", cli_cmd_pmap_b2p_cbk, +     "query which port <BRICK> listens on"}, -        { "system:: fsm log [<peer-name>]", -          cli_cmd_fsm_log_cbk, -          "display fsm transitions"}, +    {"system:: fsm log [<peer-name>]", cli_cmd_fsm_log_cbk, +     "display fsm transitions"}, -        { "system:: getwd", -          cli_cmd_getwd_cbk, -          "query glusterd work directory"}, +    {"system:: getwd", cli_cmd_getwd_cbk, "query glusterd work directory"}, -        { "system:: mount <label> <args...>", -          cli_cmd_mount_cbk, -          "request a mount"}, +    {"system:: mount <label> <args...>", cli_cmd_mount_cbk, "request a mount"}, -        { "system:: umount <path> [lazy]", -          cli_cmd_umount_cbk, -          "request an umount"}, +    {"system:: umount <path> [lazy]", cli_cmd_umount_cbk, "request an umount"}, -        { "system:: uuid get", -          cli_cmd_uuid_get_cbk, -          "get uuid of glusterd"}, +    {"system:: uuid get", cli_cmd_uuid_get_cbk, "get uuid of glusterd"}, -        { "system:: uuid reset", -          cli_cmd_uuid_reset_cbk, -          "reset the uuid of glusterd"}, +    {"system:: uuid reset", cli_cmd_uuid_reset_cbk, +     "reset the uuid of glusterd"}, -        { "system:: help", -           cli_cmd_system_help_cbk, -           "display help for system commands"}, +    {"system:: help", cli_cmd_system_help_cbk, +     "display help for system commands"}, -        { "system:: copy file [<filename>]", -           cli_cmd_copy_file_cbk, -           "Copy file from current node's $working_dir to " -           "$working_dir of all cluster nodes"}, +    {"system:: copy file [<filename>]", cli_cmd_copy_file_cbk, +     "Copy file from current node's $working_dir to " +     "$working_dir of all cluster nodes"}, -        { "system:: execute <command> <args>", -           cli_cmd_sys_exec_cbk, -           "Execute the command on all the nodes " -           "in the cluster and display their output."}, +    {"system:: execute <command> <args>", cli_cmd_sys_exec_cbk, +     "Execute the command on all the nodes " +     "in the cluster and display their output."}, -        { NULL, NULL, NULL } -}; +    {NULL, NULL, NULL}};  int -cli_cmd_sys_exec_cbk (struct cli_state *state, struct cli_cmd_word *word, -                      const char **words, int wordcount) +cli_cmd_sys_exec_cbk(struct cli_state *state, struct cli_cmd_word *word, +                     const char **words, int wordcount)  { -        char                   cmd_arg_name[PATH_MAX] = ""; -        char                  *command                = NULL; -        char                  *saveptr                = NULL; -        char                  *tmp                    = NULL; -        int                    ret                    = -1; -        int                    i                      = -1; -        int                    cmd_args_count         = 0; -        int                    in_cmd_args_count      = 0; -        rpc_clnt_procedure_t  *proc                   = NULL; -        call_frame_t          *frame                  = NULL; -        dict_t                *dict                   = NULL; -        cli_local_t           *local                  = NULL; - -        if (wordcount < 3) { -                cli_usage_out (word->pattern); +    char cmd_arg_name[PATH_MAX] = ""; +    char *command = NULL; +    char *saveptr = NULL; +    char *tmp = NULL; +    int ret = -1; +    int i = -1; +    int cmd_args_count = 0; +    int in_cmd_args_count = 0; +    rpc_clnt_procedure_t *proc = NULL; +    call_frame_t *frame = NULL; +    dict_t *dict = NULL; +    cli_local_t *local = NULL; + +    if (wordcount < 3) { +        cli_usage_out(word->pattern); +        goto out; +    } + +    dict = dict_new(); +    if (!dict) +        goto out; + +    command = strtok_r((char *)words[2], " ", &saveptr); +    if (command == NULL) { +        gf_log("cli", GF_LOG_ERROR, "Failed to parse command"); +        goto out; +    } +    do { +        tmp = strtok_r(NULL, " ", &saveptr); +        if (tmp) { +            in_cmd_args_count++; +            snprintf(cmd_arg_name, sizeof(cmd_arg_name), "cmd_arg_%d", +                     in_cmd_args_count); +            ret = dict_set_str(dict, cmd_arg_name, tmp); +            if (ret) { +                gf_log("", GF_LOG_ERROR, +                       "Unable to set " +                       "%s in dict", +                       cmd_arg_name);                  goto out; +            }          } +    } while (tmp); -        dict = dict_new (); -        if (!dict) -                goto out; +    cmd_args_count = wordcount - 3; -        command = strtok_r ((char *)words[2], " ", &saveptr); -        if (command == NULL) { -                gf_log("cli", GF_LOG_ERROR, "Failed to parse command"); -                goto out; -        } -        do { -                tmp = strtok_r (NULL, " ", &saveptr); -                if (tmp) { -                        in_cmd_args_count++; -                        snprintf (cmd_arg_name, sizeof(cmd_arg_name), -                                  "cmd_arg_%d", in_cmd_args_count); -                        ret = dict_set_str (dict, cmd_arg_name, tmp); -                        if (ret) { -                                gf_log ("", GF_LOG_ERROR, "Unable to set " -                                        "%s in dict", cmd_arg_name); -                                goto out; -                        } -                } -        } while (tmp); - -        cmd_args_count = wordcount - 3; - -        ret = dict_set_str (dict, "command", command); -        if (ret) { -                gf_log ("", GF_LOG_ERROR, "Unable to set command in dict"); -                goto out; -        } +    ret = dict_set_str(dict, "command", command); +    if (ret) { +        gf_log("", GF_LOG_ERROR, "Unable to set command in dict"); +        goto out; +    } -        for (i=1; i <= cmd_args_count; i++) { -                in_cmd_args_count++; -                snprintf (cmd_arg_name, sizeof(cmd_arg_name), -                          "cmd_arg_%d", in_cmd_args_count); -                ret = dict_set_str (dict, cmd_arg_name, -                                    (char *)words[2+i]); -                if (ret) { -                        gf_log ("", GF_LOG_ERROR, "Unable to set %s in dict", -                               cmd_arg_name); -                        goto out; -                } -        } - -        ret = dict_set_int32 (dict, "cmd_args_count", in_cmd_args_count); +    for (i = 1; i <= cmd_args_count; i++) { +        in_cmd_args_count++; +        snprintf(cmd_arg_name, sizeof(cmd_arg_name), "cmd_arg_%d", +                 in_cmd_args_count); +        ret = dict_set_str(dict, cmd_arg_name, (char *)words[2 + i]);          if (ret) { -                gf_log ("", GF_LOG_ERROR, -                        "Unable to set cmd_args_count in dict"); -                goto out; -        } - -        ret = dict_set_str (dict, "volname", "N/A"); -        if (ret) { -                gf_log ("", GF_LOG_ERROR, "Unable to set volname in dict"); -                goto out; -        } - -        proc = &cli_rpc_prog->proctable[GLUSTER_CLI_SYS_EXEC]; -        if (proc->fn) { -                frame = create_frame (THIS, THIS->ctx->pool); -                if (!frame) -                        goto out; -                CLI_LOCAL_INIT (local, words, frame, dict); -                ret = proc->fn (frame, THIS, (void*)dict); - -                /* proc->fn is processed synchronously, which means that the -                 * execution flow won't return here until the operation is -                 * fully processed, including any related callback. For this -                 * reason, it's safe to destroy the stack here, since no one -                 * can still be using it. Additionally, it's not easy to move -                 * the stack destroy to the callback executed after completion -                 * of the operation because there are multiple things than can -                 * fail even before having queued the callback, so we would -                 * still need to destroy the stack if proc->fn returns an -                 * error. */ -                CLI_STACK_DESTROY(frame); -                dict = NULL; -        } +            gf_log("", GF_LOG_ERROR, "Unable to set %s in dict", cmd_arg_name); +            goto out; +        } +    } + +    ret = dict_set_int32(dict, "cmd_args_count", in_cmd_args_count); +    if (ret) { +        gf_log("", GF_LOG_ERROR, "Unable to set cmd_args_count in dict"); +        goto out; +    } + +    ret = dict_set_str(dict, "volname", "N/A"); +    if (ret) { +        gf_log("", GF_LOG_ERROR, "Unable to set volname in dict"); +        goto out; +    } + +    proc = &cli_rpc_prog->proctable[GLUSTER_CLI_SYS_EXEC]; +    if (proc->fn) { +        frame = create_frame(THIS, THIS->ctx->pool); +        if (!frame) +            goto out; +        CLI_LOCAL_INIT(local, words, frame, dict); +        ret = proc->fn(frame, THIS, (void *)dict); + +        /* proc->fn is processed synchronously, which means that the +         * execution flow won't return here until the operation is +         * fully processed, including any related callback. For this +         * reason, it's safe to destroy the stack here, since no one +         * can still be using it. Additionally, it's not easy to move +         * the stack destroy to the callback executed after completion +         * of the operation because there are multiple things than can +         * fail even before having queued the callback, so we would +         * still need to destroy the stack if proc->fn returns an +         * error. */ +        CLI_STACK_DESTROY(frame); +        dict = NULL; +    }  out: -        if (dict != NULL) { -                dict_unref(dict); -        } +    if (dict != NULL) { +        dict_unref(dict); +    } -        return ret; +    return ret;  }  int -cli_cmd_copy_file_cbk (struct cli_state *state, struct cli_cmd_word *word, -                       const char **words, int wordcount) +cli_cmd_copy_file_cbk(struct cli_state *state, struct cli_cmd_word *word, +                      const char **words, int wordcount)  { -        int                    ret      = -1; -        rpc_clnt_procedure_t  *proc     = NULL; -        call_frame_t          *frame    = NULL; -        char                  *filename = ""; -        dict_t                *dict     = NULL; -        cli_local_t           *local    = NULL; - -        if (wordcount != 4) { -                cli_usage_out (word->pattern); -                goto out; -        } - -        dict = dict_new (); -        if (!dict) -                goto out; - -        filename = (char*)words[3]; -        ret = dict_set_str (dict, "source", filename); -        if (ret) -                 gf_log ("", GF_LOG_ERROR, "Unable to set filename in dict"); - -        ret = dict_set_str (dict, "volname", "N/A"); -        if (ret) -                 gf_log ("", GF_LOG_ERROR, "Unable to set volname in dict"); - -        proc = &cli_rpc_prog->proctable[GLUSTER_CLI_COPY_FILE]; -        if (proc && proc->fn) { -                frame = create_frame (THIS, THIS->ctx->pool); -                if (!frame) -                        goto out; -                CLI_LOCAL_INIT (local, words, frame, dict); -                ret = proc->fn (frame, THIS, (void*)dict); -        } +    int ret = -1; +    rpc_clnt_procedure_t *proc = NULL; +    call_frame_t *frame = NULL; +    char *filename = ""; +    dict_t *dict = NULL; +    cli_local_t *local = NULL; + +    if (wordcount != 4) { +        cli_usage_out(word->pattern); +        goto out; +    } + +    dict = dict_new(); +    if (!dict) +        goto out; + +    filename = (char *)words[3]; +    ret = dict_set_str(dict, "source", filename); +    if (ret) +        gf_log("", GF_LOG_ERROR, "Unable to set filename in dict"); + +    ret = dict_set_str(dict, "volname", "N/A"); +    if (ret) +        gf_log("", GF_LOG_ERROR, "Unable to set volname in dict"); + +    proc = &cli_rpc_prog->proctable[GLUSTER_CLI_COPY_FILE]; +    if (proc && proc->fn) { +        frame = create_frame(THIS, THIS->ctx->pool); +        if (!frame) +            goto out; +        CLI_LOCAL_INIT(local, words, frame, dict); +        ret = proc->fn(frame, THIS, (void *)dict); +    }  out: -        return ret; +    return ret;  }  int -cli_cmd_system_help_cbk (struct cli_state *state, struct cli_cmd_word *in_word, -                         const char **words, int wordcount) +cli_cmd_system_help_cbk(struct cli_state *state, struct cli_cmd_word *in_word, +                        const char **words, int wordcount)  { -        struct cli_cmd        *cmd = NULL; -        struct cli_cmd        *system_cmd = NULL; -        int                   count     = 0; +    struct cli_cmd *cmd = NULL; +    struct cli_cmd *system_cmd = NULL; +    int count = 0; -        cmd = GF_MALLOC (sizeof (cli_system_cmds), cli_mt_cli_cmd); -        memcpy (cmd, cli_system_cmds, sizeof (cli_system_cmds)); -        count = (sizeof (cli_system_cmds) / sizeof (struct cli_cmd)); -        cli_cmd_sort (cmd, count); +    cmd = GF_MALLOC(sizeof(cli_system_cmds), cli_mt_cli_cmd); +    memcpy(cmd, cli_system_cmds, sizeof(cli_system_cmds)); +    count = (sizeof(cli_system_cmds) / sizeof(struct cli_cmd)); +    cli_cmd_sort(cmd, count); -        for (system_cmd = cmd; system_cmd->pattern; system_cmd++) -                cli_out ("%s - %s", system_cmd->pattern, system_cmd->desc); +    for (system_cmd = cmd; system_cmd->pattern; system_cmd++) +        cli_out("%s - %s", system_cmd->pattern, system_cmd->desc); -        GF_FREE (cmd); -        return 0; +    GF_FREE(cmd); +    return 0;  }  int -cli_cmd_system_register (struct cli_state *state) +cli_cmd_system_register(struct cli_state *state)  { -        int  ret = 0; -        struct cli_cmd *cmd = NULL; - -        for (cmd = cli_system_cmds; cmd->pattern; cmd++) { +    int ret = 0; +    struct cli_cmd *cmd = NULL; -                ret = cli_cmd_register (&state->tree, cmd); -                if (ret) -                        goto out; -        } +    for (cmd = cli_system_cmds; cmd->pattern; cmd++) { +        ret = cli_cmd_register(&state->tree, cmd); +        if (ret) +            goto out; +    }  out: -        return ret; +    return ret;  } diff --git a/cli/src/cli-cmd-volume.c b/cli/src/cli-cmd-volume.c index 3d075a326bf..ab17729d182 100644 --- a/cli/src/cli-cmd-volume.c +++ b/cli/src/cli-cmd-volume.c @@ -35,1433 +35,1431 @@ extern rpc_clnt_prog_t *cli_rpc_prog;  extern rpc_clnt_prog_t cli_quotad_clnt;  int -cli_cmd_volume_help_cbk (struct cli_state *state, struct cli_cmd_word *in_word, -                         const char **words, int wordcount); - -int -cli_cmd_bitrot_help_cbk (struct cli_state *state, struct cli_cmd_word *in_word, -                         const char **words, int wordcount); +cli_cmd_volume_help_cbk(struct cli_state *state, struct cli_cmd_word *in_word, +                        const char **words, int wordcount);  int -cli_cmd_quota_help_cbk (struct cli_state *state, struct cli_cmd_word *in_word, +cli_cmd_bitrot_help_cbk(struct cli_state *state, struct cli_cmd_word *in_word,                          const char **words, int wordcount);  int -cli_cmd_tier_help_cbk (struct cli_state *state, struct cli_cmd_word *in_word, +cli_cmd_quota_help_cbk(struct cli_state *state, struct cli_cmd_word *in_word,                         const char **words, int wordcount);  int -cli_cmd_volume_info_cbk (struct cli_state *state, struct cli_cmd_word *word, -                         const char **words, int wordcount) -{ -        int                             ret = -1; -        rpc_clnt_procedure_t            *proc = NULL; -        call_frame_t                    *frame = NULL; -        cli_cmd_volume_get_ctx_t        ctx = {0,}; -        cli_local_t                     *local = NULL; -        int                             sent = 0; -        int                             parse_error = 0; - -        proc = &cli_rpc_prog->proctable[GLUSTER_CLI_GET_VOLUME]; +cli_cmd_tier_help_cbk(struct cli_state *state, struct cli_cmd_word *in_word, +                      const char **words, int wordcount); -        frame = create_frame (THIS, THIS->ctx->pool); -        if (!frame) -                goto out; +int +cli_cmd_volume_info_cbk(struct cli_state *state, struct cli_cmd_word *word, +                        const char **words, int wordcount) +{ +    int ret = -1; +    rpc_clnt_procedure_t *proc = NULL; +    call_frame_t *frame = NULL; +    cli_cmd_volume_get_ctx_t ctx = { +        0, +    }; +    cli_local_t *local = NULL; +    int sent = 0; +    int parse_error = 0; + +    proc = &cli_rpc_prog->proctable[GLUSTER_CLI_GET_VOLUME]; + +    frame = create_frame(THIS, THIS->ctx->pool); +    if (!frame) +        goto out; -        if ((wordcount == 2)  || (wordcount == 3 && -                                  !strcmp (words[2], "all"))) { -                ctx.flags = GF_CLI_GET_NEXT_VOLUME; -                proc = &cli_rpc_prog->proctable[GLUSTER_CLI_GET_NEXT_VOLUME]; -        } else if (wordcount == 3) { -                ctx.flags = GF_CLI_GET_VOLUME; -                ctx.volname = (char *)words[2]; -                if (strlen (ctx.volname) > GD_VOLUME_NAME_MAX) { -                        cli_out ("Invalid volume name"); -                        goto out; -                } -                proc = &cli_rpc_prog->proctable[GLUSTER_CLI_GET_VOLUME]; -        } else { -                cli_usage_out (word->pattern); -                parse_error = 1; -                return -1; +    if ((wordcount == 2) || (wordcount == 3 && !strcmp(words[2], "all"))) { +        ctx.flags = GF_CLI_GET_NEXT_VOLUME; +        proc = &cli_rpc_prog->proctable[GLUSTER_CLI_GET_NEXT_VOLUME]; +    } else if (wordcount == 3) { +        ctx.flags = GF_CLI_GET_VOLUME; +        ctx.volname = (char *)words[2]; +        if (strlen(ctx.volname) > GD_VOLUME_NAME_MAX) { +            cli_out("Invalid volume name"); +            goto out;          } +        proc = &cli_rpc_prog->proctable[GLUSTER_CLI_GET_VOLUME]; +    } else { +        cli_usage_out(word->pattern); +        parse_error = 1; +        return -1; +    } -        local = cli_local_get (); +    local = cli_local_get(); -        if (!local) -                goto out; +    if (!local) +        goto out; -        local->get_vol.flags = ctx.flags; -        if (ctx.volname) -                local->get_vol.volname = gf_strdup (ctx.volname); +    local->get_vol.flags = ctx.flags; +    if (ctx.volname) +        local->get_vol.volname = gf_strdup(ctx.volname); -        frame->local = local; +    frame->local = local; -        if (proc->fn) { -                ret = proc->fn (frame, THIS, &ctx); -        } +    if (proc->fn) { +        ret = proc->fn(frame, THIS, &ctx); +    }  out: -        if (ret) { -                cli_cmd_sent_status_get (&sent); -                if ((sent == 0) && (parse_error == 0)) -                        cli_out ("Getting Volume information failed!"); -        } - -        CLI_STACK_DESTROY (frame); +    if (ret) { +        cli_cmd_sent_status_get(&sent); +        if ((sent == 0) && (parse_error == 0)) +            cli_out("Getting Volume information failed!"); +    } -        return ret; +    CLI_STACK_DESTROY(frame); +    return ret;  }  int -cli_cmd_sync_volume_cbk (struct cli_state *state, struct cli_cmd_word *word, -                         const char **words, int wordcount) +cli_cmd_sync_volume_cbk(struct cli_state *state, struct cli_cmd_word *word, +                        const char **words, int wordcount)  { -        int                     ret = -1; -        rpc_clnt_procedure_t    *proc = NULL; -        call_frame_t            *frame = NULL; -        int                     sent = 0; -        int                     parse_error = 0; -        dict_t                  *dict = NULL; -        cli_local_t             *local = NULL; -        gf_answer_t             answer = GF_ANSWER_NO; -        const char              *question = "Sync volume may make data " -                                            "inaccessible while the sync " -                                            "is in progress. Do you want " -                                            "to continue?"; - -        if ((wordcount < 3) || (wordcount > 4)) { -                cli_usage_out (word->pattern); -                parse_error = 1; -                goto out; -        } +    int ret = -1; +    rpc_clnt_procedure_t *proc = NULL; +    call_frame_t *frame = NULL; +    int sent = 0; +    int parse_error = 0; +    dict_t *dict = NULL; +    cli_local_t *local = NULL; +    gf_answer_t answer = GF_ANSWER_NO; +    const char *question = +        "Sync volume may make data " +        "inaccessible while the sync " +        "is in progress. Do you want " +        "to continue?"; + +    if ((wordcount < 3) || (wordcount > 4)) { +        cli_usage_out(word->pattern); +        parse_error = 1; +        goto out; +    } -        dict = dict_new (); -        if (!dict) -                goto out; +    dict = dict_new(); +    if (!dict) +        goto out; -        if ((wordcount == 3) || !strcmp(words[3], "all")) { -                ret = dict_set_int32 (dict, "flags", (int32_t) -                                      GF_CLI_SYNC_ALL); -                if (ret) { -                        gf_log (THIS->name, GF_LOG_ERROR, "failed to set" -                                "flag"); -                        goto out; -                } -        } else { -                ret = dict_set_str (dict, "volname", (char *) words[3]); -                if (ret) { -                        gf_log (THIS->name, GF_LOG_ERROR, "failed to set " -                                "volume"); -                        goto out; -                } +    if ((wordcount == 3) || !strcmp(words[3], "all")) { +        ret = dict_set_int32(dict, "flags", (int32_t)GF_CLI_SYNC_ALL); +        if (ret) { +            gf_log(THIS->name, GF_LOG_ERROR, +                   "failed to set" +                   "flag"); +            goto out;          } - -        ret = dict_set_str (dict, "hostname", (char *) words[2]); +    } else { +        ret = dict_set_str(dict, "volname", (char *)words[3]);          if (ret) { -                gf_log (THIS->name, GF_LOG_ERROR, "failed to set hostname"); -                goto out; +            gf_log(THIS->name, GF_LOG_ERROR, +                   "failed to set " +                   "volume"); +            goto out;          } +    } -        if (!(state->mode & GLUSTER_MODE_SCRIPT)) { -                answer = cli_cmd_get_confirmation (state, question); -                if (GF_ANSWER_NO == answer) { -                        ret = 0; -                        goto out; -                } +    ret = dict_set_str(dict, "hostname", (char *)words[2]); +    if (ret) { +        gf_log(THIS->name, GF_LOG_ERROR, "failed to set hostname"); +        goto out; +    } + +    if (!(state->mode & GLUSTER_MODE_SCRIPT)) { +        answer = cli_cmd_get_confirmation(state, question); +        if (GF_ANSWER_NO == answer) { +            ret = 0; +            goto out;          } +    } -        proc = &cli_rpc_prog->proctable[GLUSTER_CLI_SYNC_VOLUME]; +    proc = &cli_rpc_prog->proctable[GLUSTER_CLI_SYNC_VOLUME]; -        frame = create_frame (THIS, THIS->ctx->pool); -        if (!frame) -                goto out; +    frame = create_frame(THIS, THIS->ctx->pool); +    if (!frame) +        goto out; -        CLI_LOCAL_INIT (local, words, frame, dict); +    CLI_LOCAL_INIT(local, words, frame, dict); -        if (proc->fn) { -                ret = proc->fn (frame, THIS, dict); -        } +    if (proc->fn) { +        ret = proc->fn(frame, THIS, dict); +    }  out: -        if (ret) { -                cli_cmd_sent_status_get (&sent); -                if ((sent == 0) && (parse_error == 0)) -                        cli_out ("Volume sync failed"); -        } +    if (ret) { +        cli_cmd_sent_status_get(&sent); +        if ((sent == 0) && (parse_error == 0)) +            cli_out("Volume sync failed"); +    } -        CLI_STACK_DESTROY (frame); +    CLI_STACK_DESTROY(frame); -        return ret; +    return ret;  }  int -cli_cmd_volume_create_cbk (struct cli_state *state, struct cli_cmd_word *word, -                           const char **words, int wordcount) +cli_cmd_volume_create_cbk(struct cli_state *state, struct cli_cmd_word *word, +                          const char **words, int wordcount)  { -        int                     ret = -1; -        rpc_clnt_procedure_t    *proc = NULL; -        call_frame_t            *frame = NULL; -        dict_t                  *options = NULL; -        int                     sent = 0; -        int                     parse_error = 0; -        cli_local_t             *local = NULL; -        char                    *trans_type = NULL; -        char                    *bricks = NULL; - -        proc = &cli_rpc_prog->proctable[GLUSTER_CLI_CREATE_VOLUME]; - -        frame = create_frame (THIS, THIS->ctx->pool); -        if (!frame) -                goto out; +    int ret = -1; +    rpc_clnt_procedure_t *proc = NULL; +    call_frame_t *frame = NULL; +    dict_t *options = NULL; +    int sent = 0; +    int parse_error = 0; +    cli_local_t *local = NULL; +    char *trans_type = NULL; +    char *bricks = NULL; + +    proc = &cli_rpc_prog->proctable[GLUSTER_CLI_CREATE_VOLUME]; + +    frame = create_frame(THIS, THIS->ctx->pool); +    if (!frame) +        goto out; -        ret = cli_cmd_volume_create_parse (state, words, wordcount, &options, -                                           &bricks); +    ret = cli_cmd_volume_create_parse(state, words, wordcount, &options, +                                      &bricks); -        if (ret) { -                cli_usage_out (word->pattern); -                parse_error = 1; -                goto out; -        } +    if (ret) { +        cli_usage_out(word->pattern); +        parse_error = 1; +        goto out; +    } -        ret = dict_get_str (options, "transport", &trans_type); -        if (ret) { -                gf_log("cli", GF_LOG_ERROR, "Unable to get transport type"); -                goto out; -        } +    ret = dict_get_str(options, "transport", &trans_type); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, "Unable to get transport type"); +        goto out; +    } -        if (state->mode & GLUSTER_MODE_WIGNORE) { -                ret = dict_set_int32 (options, "force", _gf_true); -                if (ret) { -                        gf_log ("cli", GF_LOG_ERROR, "Failed to set force " -                                "option"); -                        goto out; -                } +    if (state->mode & GLUSTER_MODE_WIGNORE) { +        ret = dict_set_int32(options, "force", _gf_true); +        if (ret) { +            gf_log("cli", GF_LOG_ERROR, +                   "Failed to set force " +                   "option"); +            goto out;          } +    } -        CLI_LOCAL_INIT (local, words, frame, options); +    CLI_LOCAL_INIT(local, words, frame, options); -        if (proc->fn) { -                ret = proc->fn (frame, THIS, options); -        } +    if (proc->fn) { +        ret = proc->fn(frame, THIS, options); +    }  out: -        if (ret) { -                cli_cmd_sent_status_get (&sent); -                if ((sent == 0) && (parse_error == 0)) -                        cli_out ("Volume create failed"); -        } - -        if (ret == 0) { -                gf_event (EVENT_VOLUME_CREATE, "name=%s;bricks=%s", -                          (char *)words[2], bricks); -        } - -        CLI_STACK_DESTROY (frame); -        return ret; +    if (ret) { +        cli_cmd_sent_status_get(&sent); +        if ((sent == 0) && (parse_error == 0)) +            cli_out("Volume create failed"); +    } + +    if (ret == 0) { +        gf_event(EVENT_VOLUME_CREATE, "name=%s;bricks=%s", (char *)words[2], +                 bricks); +    } + +    CLI_STACK_DESTROY(frame); +    return ret;  } -  int -cli_cmd_volume_delete_cbk (struct cli_state *state, struct cli_cmd_word *word, -                           const char **words, int wordcount) +cli_cmd_volume_delete_cbk(struct cli_state *state, struct cli_cmd_word *word, +                          const char **words, int wordcount)  { -        int                     ret = -1; -        rpc_clnt_procedure_t    *proc = NULL; -        call_frame_t            *frame = NULL; -        char                    *volname = NULL; -        gf_answer_t             answer = GF_ANSWER_NO; -        const char              *question = NULL; -        int                     sent = 0; -        int                     parse_error = 0; -        cli_local_t             *local = NULL; -        dict_t                  *dict = NULL; - -        question = "Deleting volume will erase all information about the volume. " -                   "Do you want to continue?"; -        proc = &cli_rpc_prog->proctable[GLUSTER_CLI_DELETE_VOLUME]; - -        frame = create_frame (THIS, THIS->ctx->pool); -        if (!frame) -                goto out; - -        dict = dict_new (); -        if (!dict) -                goto out; +    int ret = -1; +    rpc_clnt_procedure_t *proc = NULL; +    call_frame_t *frame = NULL; +    char *volname = NULL; +    gf_answer_t answer = GF_ANSWER_NO; +    const char *question = NULL; +    int sent = 0; +    int parse_error = 0; +    cli_local_t *local = NULL; +    dict_t *dict = NULL; + +    question = +        "Deleting volume will erase all information about the volume. " +        "Do you want to continue?"; +    proc = &cli_rpc_prog->proctable[GLUSTER_CLI_DELETE_VOLUME]; + +    frame = create_frame(THIS, THIS->ctx->pool); +    if (!frame) +        goto out; -        if (wordcount != 3) { -                cli_usage_out (word->pattern); -                parse_error = 1; -                goto out; -        } +    dict = dict_new(); +    if (!dict) +        goto out; -        volname = (char *)words[2]; +    if (wordcount != 3) { +        cli_usage_out(word->pattern); +        parse_error = 1; +        goto out; +    } -        ret = dict_set_str (dict, "volname", volname); -        if (ret) { -                gf_log (THIS->name, GF_LOG_WARNING, "dict set failed"); -                goto out; -        } +    volname = (char *)words[2]; -        if (!strcmp (volname, GLUSTER_SHARED_STORAGE)) { -                question = "Deleting the shared storage volume" -                           "(gluster_shared_storage), will affect features " -                           "like snapshot scheduler, geo-replication " -                           "and NFS-Ganesha. Do you still want to " -                           "continue?"; -        } +    ret = dict_set_str(dict, "volname", volname); +    if (ret) { +        gf_log(THIS->name, GF_LOG_WARNING, "dict set failed"); +        goto out; +    } + +    if (!strcmp(volname, GLUSTER_SHARED_STORAGE)) { +        question = +            "Deleting the shared storage volume" +            "(gluster_shared_storage), will affect features " +            "like snapshot scheduler, geo-replication " +            "and NFS-Ganesha. Do you still want to " +            "continue?"; +    } + +    answer = cli_cmd_get_confirmation(state, question); +    if (GF_ANSWER_NO == answer) { +        ret = 0; +        goto out; +    } -        answer = cli_cmd_get_confirmation (state, question); -        if (GF_ANSWER_NO == answer) { -                ret = 0; -                goto out; -        } +    CLI_LOCAL_INIT(local, words, frame, dict); -        CLI_LOCAL_INIT (local, words, frame, dict); - -        if (proc->fn) { -                ret = proc->fn (frame, THIS, dict); -        } +    if (proc->fn) { +        ret = proc->fn(frame, THIS, dict); +    }  out: -        if (ret) { -                cli_cmd_sent_status_get (&sent); -                if ((sent == 0) && (parse_error == 0)) -                        cli_out ("Volume delete failed"); -        } +    if (ret) { +        cli_cmd_sent_status_get(&sent); +        if ((sent == 0) && (parse_error == 0)) +            cli_out("Volume delete failed"); +    } -        CLI_STACK_DESTROY (frame); +    CLI_STACK_DESTROY(frame); -        if (ret == 0 && GF_ANSWER_YES == answer) { -                gf_event (EVENT_VOLUME_DELETE, "name=%s", (char *)words[2]); -        } +    if (ret == 0 && GF_ANSWER_YES == answer) { +        gf_event(EVENT_VOLUME_DELETE, "name=%s", (char *)words[2]); +    } -        return ret; +    return ret;  }  int -cli_cmd_volume_start_cbk (struct cli_state *state, struct cli_cmd_word *word, -                          const char **words, int wordcount) +cli_cmd_volume_start_cbk(struct cli_state *state, struct cli_cmd_word *word, +                         const char **words, int wordcount)  { -        int                     ret = -1; -        rpc_clnt_procedure_t    *proc = NULL; -        call_frame_t            *frame = NULL; -        int                     sent = 0; -        int                     parse_error = 0; -        dict_t                  *dict = NULL; -        int                     flags = 0; -        cli_local_t             *local = NULL; - -        frame = create_frame (THIS, THIS->ctx->pool); -        if (!frame) -                goto out; +    int ret = -1; +    rpc_clnt_procedure_t *proc = NULL; +    call_frame_t *frame = NULL; +    int sent = 0; +    int parse_error = 0; +    dict_t *dict = NULL; +    int flags = 0; +    cli_local_t *local = NULL; + +    frame = create_frame(THIS, THIS->ctx->pool); +    if (!frame) +        goto out; -        if (wordcount < 3 || wordcount > 4) { -               cli_usage_out (word->pattern); -                parse_error = 1; -               goto out; -        } +    if (wordcount < 3 || wordcount > 4) { +        cli_usage_out(word->pattern); +        parse_error = 1; +        goto out; +    } -        dict = dict_new (); -        if (!dict) { -                goto out; -        } +    dict = dict_new(); +    if (!dict) { +        goto out; +    } -        if (!words[2]) -                goto out; +    if (!words[2]) +        goto out; -        ret = dict_set_str (dict, "volname", (char *)words[2]); -        if (ret) { -                gf_log (THIS->name, GF_LOG_ERROR, "dict set failed"); -                goto out; -        } +    ret = dict_set_str(dict, "volname", (char *)words[2]); +    if (ret) { +        gf_log(THIS->name, GF_LOG_ERROR, "dict set failed"); +        goto out; +    } -        if (wordcount == 4) { -                if (!strcmp("force", words[3])) { -                        flags |= GF_CLI_FLAG_OP_FORCE; -                } else { -                        ret = -1; -                        cli_usage_out (word->pattern); -                        parse_error = 1; -                        goto out; -                } -        } -        ret = dict_set_int32 (dict, "flags", flags); -        if (ret) { -                 gf_log (THIS->name, GF_LOG_ERROR, -                         "dict set failed"); -                 goto out; -        } +    if (wordcount == 4) { +        if (!strcmp("force", words[3])) { +            flags |= GF_CLI_FLAG_OP_FORCE; +        } else { +            ret = -1; +            cli_usage_out(word->pattern); +            parse_error = 1; +            goto out; +        } +    } +    ret = dict_set_int32(dict, "flags", flags); +    if (ret) { +        gf_log(THIS->name, GF_LOG_ERROR, "dict set failed"); +        goto out; +    } -        proc = &cli_rpc_prog->proctable[GLUSTER_CLI_START_VOLUME]; +    proc = &cli_rpc_prog->proctable[GLUSTER_CLI_START_VOLUME]; -        CLI_LOCAL_INIT (local, words, frame, dict); +    CLI_LOCAL_INIT(local, words, frame, dict); -        if (proc->fn) { -                ret = proc->fn (frame, THIS, dict); -        } +    if (proc->fn) { +        ret = proc->fn(frame, THIS, dict); +    }  out: -        if (ret) { -                cli_cmd_sent_status_get (&sent); -                if ((sent == 0) && (parse_error == 0)) -                        cli_out ("Volume start failed"); -        } +    if (ret) { +        cli_cmd_sent_status_get(&sent); +        if ((sent == 0) && (parse_error == 0)) +            cli_out("Volume start failed"); +    } -        CLI_STACK_DESTROY (frame); +    CLI_STACK_DESTROY(frame); -        if (ret == 0) { -                gf_event (EVENT_VOLUME_START, "name=%s;force=%d", -                          (char *)words[2], (flags & GF_CLI_FLAG_OP_FORCE)); -        } +    if (ret == 0) { +        gf_event(EVENT_VOLUME_START, "name=%s;force=%d", (char *)words[2], +                 (flags & GF_CLI_FLAG_OP_FORCE)); +    } -        return ret; +    return ret;  }  gf_answer_t -cli_cmd_get_confirmation (struct cli_state *state, const char *question) +cli_cmd_get_confirmation(struct cli_state *state, const char *question)  { -        char                    answer[5] = {'\0', }; -        int                     flush = '\0'; -        size_t			len; +    char answer[5] = { +        '\0', +    }; +    int flush = '\0'; +    size_t len; -        if (state->mode & GLUSTER_MODE_SCRIPT) -                return GF_ANSWER_YES; +    if (state->mode & GLUSTER_MODE_SCRIPT) +        return GF_ANSWER_YES; -	printf ("%s (y/n) ", question); +    printf("%s (y/n) ", question); -        if (fgets (answer, 4, stdin) == NULL) { -                cli_out("gluster cli read error"); -                goto out; -        } +    if (fgets(answer, 4, stdin) == NULL) { +        cli_out("gluster cli read error"); +        goto out; +    } -	len = strlen (answer); +    len = strlen(answer); -	if (len && answer [len - 1] == '\n'){ -		answer [--len] = '\0'; -	} else { -		do{ -			flush = getchar (); -		}while (flush != '\n'); -	} +    if (len && answer[len - 1] == '\n') { +        answer[--len] = '\0'; +    } else { +        do { +            flush = getchar(); +        } while (flush != '\n'); +    } -	if (len > 3) -		goto out; +    if (len > 3) +        goto out; -	if (!strcasecmp (answer, "y") || !strcasecmp (answer, "yes")) -		return GF_ANSWER_YES; +    if (!strcasecmp(answer, "y") || !strcasecmp(answer, "yes")) +        return GF_ANSWER_YES; -	else if (!strcasecmp (answer, "n") || !strcasecmp (answer, "no")) -		return GF_ANSWER_NO; +    else if (!strcasecmp(answer, "n") || !strcasecmp(answer, "no")) +        return GF_ANSWER_NO;  out: -	cli_out ("Invalid input, please enter y/n"); +    cli_out("Invalid input, please enter y/n"); -	return GF_ANSWER_NO; +    return GF_ANSWER_NO;  }  int -cli_cmd_volume_stop_cbk (struct cli_state *state, struct cli_cmd_word *word, -                           const char **words, int wordcount) +cli_cmd_volume_stop_cbk(struct cli_state *state, struct cli_cmd_word *word, +                        const char **words, int wordcount)  { -        int                     ret = -1; -        rpc_clnt_procedure_t    *proc = NULL; -        call_frame_t            *frame = NULL; -        int                     flags   = 0; -        gf_answer_t             answer = GF_ANSWER_NO; -        int                     sent = 0; -        int                     parse_error = 0; -        dict_t                  *dict = NULL; -        char                    *volname = NULL; -        cli_local_t             *local = NULL; - -        const char *question = "Stopping volume will make its data inaccessible. " -                               "Do you want to continue?"; - -        frame = create_frame (THIS, THIS->ctx->pool); -        if (!frame) -                goto out; - -        if (wordcount < 3 || wordcount > 4) { -                cli_usage_out (word->pattern); -                parse_error = 1; -                goto out; -        } - -        volname = (char*) words[2]; +    int ret = -1; +    rpc_clnt_procedure_t *proc = NULL; +    call_frame_t *frame = NULL; +    int flags = 0; +    gf_answer_t answer = GF_ANSWER_NO; +    int sent = 0; +    int parse_error = 0; +    dict_t *dict = NULL; +    char *volname = NULL; +    cli_local_t *local = NULL; + +    const char *question = +        "Stopping volume will make its data inaccessible. " +        "Do you want to continue?"; + +    frame = create_frame(THIS, THIS->ctx->pool); +    if (!frame) +        goto out; -        dict = dict_new (); -        ret = dict_set_str (dict, "volname", volname); -        if (ret) { -                gf_log (THIS->name, GF_LOG_ERROR, "dict set failed"); -                goto out; -        } +    if (wordcount < 3 || wordcount > 4) { +        cli_usage_out(word->pattern); +        parse_error = 1; +        goto out; +    } -        if (!strcmp (volname, GLUSTER_SHARED_STORAGE)) { -                question = "Stopping the shared storage volume" -                           "(gluster_shared_storage), will affect features " -                           "like snapshot scheduler, geo-replication " -                           "and NFS-Ganesha. Do you still want to " -                           "continue?"; -        } +    volname = (char *)words[2]; -        if (wordcount == 4) { -                if (!strcmp("force", words[3])) { -                        flags |= GF_CLI_FLAG_OP_FORCE; -                } else { -                        ret = -1; -                        cli_usage_out (word->pattern); -                        parse_error = 1; -                        goto out; -                } +    dict = dict_new(); +    ret = dict_set_str(dict, "volname", volname); +    if (ret) { +        gf_log(THIS->name, GF_LOG_ERROR, "dict set failed"); +        goto out; +    } + +    if (!strcmp(volname, GLUSTER_SHARED_STORAGE)) { +        question = +            "Stopping the shared storage volume" +            "(gluster_shared_storage), will affect features " +            "like snapshot scheduler, geo-replication " +            "and NFS-Ganesha. Do you still want to " +            "continue?"; +    } + +    if (wordcount == 4) { +        if (!strcmp("force", words[3])) { +            flags |= GF_CLI_FLAG_OP_FORCE; +        } else { +            ret = -1; +            cli_usage_out(word->pattern); +            parse_error = 1; +            goto out;          } +    } -        ret = dict_set_int32 (dict, "flags", flags); -        if (ret) { -                gf_log (THIS->name, GF_LOG_ERROR, -                        "dict set failed"); -                goto out; -        } +    ret = dict_set_int32(dict, "flags", flags); +    if (ret) { +        gf_log(THIS->name, GF_LOG_ERROR, "dict set failed"); +        goto out; +    } -        answer = cli_cmd_get_confirmation (state, question); +    answer = cli_cmd_get_confirmation(state, question); -        if (GF_ANSWER_NO == answer) { -                ret = 0; -                goto out; -        } +    if (GF_ANSWER_NO == answer) { +        ret = 0; +        goto out; +    } -        proc = &cli_rpc_prog->proctable[GLUSTER_CLI_STOP_VOLUME]; +    proc = &cli_rpc_prog->proctable[GLUSTER_CLI_STOP_VOLUME]; -        CLI_LOCAL_INIT (local, words, frame, dict); +    CLI_LOCAL_INIT(local, words, frame, dict); -        if (proc->fn) { -                ret = proc->fn (frame, THIS, dict); -        } +    if (proc->fn) { +        ret = proc->fn(frame, THIS, dict); +    }  out: -        if (ret) { -                cli_cmd_sent_status_get (&sent); -                if ((sent == 0) && (parse_error == 0)) -                        cli_out ("Volume stop on '%s' failed", volname); -        } +    if (ret) { +        cli_cmd_sent_status_get(&sent); +        if ((sent == 0) && (parse_error == 0)) +            cli_out("Volume stop on '%s' failed", volname); +    } -        CLI_STACK_DESTROY (frame); +    CLI_STACK_DESTROY(frame); -        if (ret == 0 && GF_ANSWER_YES == answer) { -                gf_event (EVENT_VOLUME_STOP, "name=%s;force=%d", -                          (char *)words[2], (flags & GF_CLI_FLAG_OP_FORCE)); -        } +    if (ret == 0 && GF_ANSWER_YES == answer) { +        gf_event(EVENT_VOLUME_STOP, "name=%s;force=%d", (char *)words[2], +                 (flags & GF_CLI_FLAG_OP_FORCE)); +    } -        return ret; +    return ret;  } -  int -cli_cmd_volume_rename_cbk (struct cli_state *state, struct cli_cmd_word *word, -                           const char **words, int wordcount) +cli_cmd_volume_rename_cbk(struct cli_state *state, struct cli_cmd_word *word, +                          const char **words, int wordcount)  { -        int                     ret = -1; -        rpc_clnt_procedure_t    *proc = NULL; -        call_frame_t            *frame = NULL; -        dict_t                  *dict = NULL; -        int                     sent = 0; -        int                     parse_error = 0; - - -        frame = create_frame (THIS, THIS->ctx->pool); -        if (!frame) -                goto out; +    int ret = -1; +    rpc_clnt_procedure_t *proc = NULL; +    call_frame_t *frame = NULL; +    dict_t *dict = NULL; +    int sent = 0; +    int parse_error = 0; + +    frame = create_frame(THIS, THIS->ctx->pool); +    if (!frame) +        goto out; -        dict = dict_new (); -        if (!dict) -                goto out; +    dict = dict_new(); +    if (!dict) +        goto out; -        if (wordcount != 4) { -                cli_usage_out (word->pattern); -                parse_error = 1; -                goto out; -        } +    if (wordcount != 4) { +        cli_usage_out(word->pattern); +        parse_error = 1; +        goto out; +    } -        ret = dict_set_str (dict, "old-volname", (char *)words[2]); +    ret = dict_set_str(dict, "old-volname", (char *)words[2]); -        if (ret) -                goto out; +    if (ret) +        goto out; -        ret = dict_set_str (dict, "new-volname", (char *)words[3]); +    ret = dict_set_str(dict, "new-volname", (char *)words[3]); -        if (ret) -                goto out; +    if (ret) +        goto out; -        proc = &cli_rpc_prog->proctable[GLUSTER_CLI_RENAME_VOLUME]; +    proc = &cli_rpc_prog->proctable[GLUSTER_CLI_RENAME_VOLUME]; -        if (proc->fn) { -                ret = proc->fn (frame, THIS, dict); -        } +    if (proc->fn) { +        ret = proc->fn(frame, THIS, dict); +    }  out: -        if (dict) -                dict_unref (dict); +    if (dict) +        dict_unref(dict); -        if (ret) { -                cli_cmd_sent_status_get (&sent); -                if ((sent == 0) && (parse_error == 0)) -                        cli_out ("Volume rename on '%s' failed", (char *)words[2]); -        } +    if (ret) { +        cli_cmd_sent_status_get(&sent); +        if ((sent == 0) && (parse_error == 0)) +            cli_out("Volume rename on '%s' failed", (char *)words[2]); +    } -        CLI_STACK_DESTROY (frame); +    CLI_STACK_DESTROY(frame); -        return ret; +    return ret;  }  int -cli_cmd_volume_defrag_cbk (struct cli_state *state, struct cli_cmd_word *word, -                           const char **words, int wordcount) +cli_cmd_volume_defrag_cbk(struct cli_state *state, struct cli_cmd_word *word, +                          const char **words, int wordcount)  { -        int                   ret     = -1; -        rpc_clnt_procedure_t *proc    = NULL; -        call_frame_t         *frame   = NULL; -        dict_t               *dict = NULL; -        int                     sent = 0; -        int                     parse_error = 0; -        cli_local_t          *local = NULL; +    int ret = -1; +    rpc_clnt_procedure_t *proc = NULL; +    call_frame_t *frame = NULL; +    dict_t *dict = NULL; +    int sent = 0; +    int parse_error = 0; +    cli_local_t *local = NULL;  #if (USE_EVENTS) -        eventtypes_t         event = EVENT_LAST; +    eventtypes_t event = EVENT_LAST;  #endif  #ifdef GF_SOLARIS_HOST_OS -        cli_out ("Command not supported on Solaris"); -        goto out; +    cli_out("Command not supported on Solaris"); +    goto out;  #endif -        frame = create_frame (THIS, THIS->ctx->pool); -        if (!frame) -                goto out; +    frame = create_frame(THIS, THIS->ctx->pool); +    if (!frame) +        goto out; -        ret = cli_cmd_volume_defrag_parse (words, wordcount, &dict); +    ret = cli_cmd_volume_defrag_parse(words, wordcount, &dict); -        if (ret) { -                cli_usage_out (word->pattern); -                parse_error = 1; -        } +    if (ret) { +        cli_usage_out(word->pattern); +        parse_error = 1; +    } -        proc = &cli_rpc_prog->proctable[GLUSTER_CLI_DEFRAG_VOLUME]; +    proc = &cli_rpc_prog->proctable[GLUSTER_CLI_DEFRAG_VOLUME]; -        CLI_LOCAL_INIT (local, words, frame, dict); +    CLI_LOCAL_INIT(local, words, frame, dict); -        if (proc->fn) { -                ret = proc->fn (frame, THIS, dict); -        } +    if (proc->fn) { +        ret = proc->fn(frame, THIS, dict); +    }  out: -        if (ret) { -                cli_cmd_sent_status_get (&sent); -                if ((sent == 0) && (parse_error == 0)) -                        cli_out ("Volume rebalance failed"); -        } else { - +    if (ret) { +        cli_cmd_sent_status_get(&sent); +        if ((sent == 0) && (parse_error == 0)) +            cli_out("Volume rebalance failed"); +    } else {  #if (USE_EVENTS) -                if (!(strcmp (words[wordcount-1], "start")) || -                        !(strcmp (words[wordcount-1], "force")))  { -                        event = EVENT_VOLUME_REBALANCE_START; -                } else if (!strcmp (words[wordcount-1], "stop")) { -                        event = EVENT_VOLUME_REBALANCE_STOP; -                } +        if (!(strcmp(words[wordcount - 1], "start")) || +            !(strcmp(words[wordcount - 1], "force"))) { +            event = EVENT_VOLUME_REBALANCE_START; +        } else if (!strcmp(words[wordcount - 1], "stop")) { +            event = EVENT_VOLUME_REBALANCE_STOP; +        } -                if (event != EVENT_LAST) -                        gf_event (event, "volume=%s", (char *)words[2]); +        if (event != EVENT_LAST) +            gf_event(event, "volume=%s", (char *)words[2]);  #endif -        } +    } -        CLI_STACK_DESTROY (frame); +    CLI_STACK_DESTROY(frame); -        return ret; +    return ret;  }  int -cli_cmd_volume_reset_cbk (struct cli_state *state, struct cli_cmd_word *word, -                          const char **words, int wordcount) +cli_cmd_volume_reset_cbk(struct cli_state *state, struct cli_cmd_word *word, +                         const char **words, int wordcount)  { -        int                     sent = 0; -        int                     parse_error = 0; -        int                     ret = -1; -        rpc_clnt_procedure_t    *proc = NULL; -        call_frame_t            *frame = NULL; -        dict_t                  *options = NULL; -        cli_local_t             *local = NULL; +    int sent = 0; +    int parse_error = 0; +    int ret = -1; +    rpc_clnt_procedure_t *proc = NULL; +    call_frame_t *frame = NULL; +    dict_t *options = NULL; +    cli_local_t *local = NULL;  #if (USE_EVENTS) -        int                      ret1    = -1; -        char                    *tmp_opt = NULL; +    int ret1 = -1; +    char *tmp_opt = NULL;  #endif -        proc = &cli_rpc_prog->proctable[GLUSTER_CLI_RESET_VOLUME]; +    proc = &cli_rpc_prog->proctable[GLUSTER_CLI_RESET_VOLUME]; -        frame = create_frame (THIS, THIS->ctx->pool); -        if (!frame) -                goto out; +    frame = create_frame(THIS, THIS->ctx->pool); +    if (!frame) +        goto out; -        ret = cli_cmd_volume_reset_parse (words, wordcount, &options); -        if (ret) { -                cli_usage_out (word->pattern); -                parse_error = 1; -                goto out; -        } +    ret = cli_cmd_volume_reset_parse(words, wordcount, &options); +    if (ret) { +        cli_usage_out(word->pattern); +        parse_error = 1; +        goto out; +    } -        CLI_LOCAL_INIT (local, words, frame, options); +    CLI_LOCAL_INIT(local, words, frame, options); -        if (proc->fn) { -                ret = proc->fn (frame, THIS, options); -        } +    if (proc->fn) { +        ret = proc->fn(frame, THIS, options); +    }  out: -        if (ret) { -                cli_cmd_sent_status_get (&sent); -                if ((sent == 0) && (parse_error == 0)) -                        cli_out ("Volume reset failed"); -        } +    if (ret) { +        cli_cmd_sent_status_get(&sent); +        if ((sent == 0) && (parse_error == 0)) +            cli_out("Volume reset failed"); +    }  #if (USE_EVENTS) -        if (ret == 0) { -                ret1 = dict_get_str (options, "key", &tmp_opt); -                if (ret1) -                        tmp_opt = ""; - -                gf_event (EVENT_VOLUME_RESET, "name=%s;option=%s", -                          (char *)words[2], -                          tmp_opt); -        } +    if (ret == 0) { +        ret1 = dict_get_str(options, "key", &tmp_opt); +        if (ret1) +            tmp_opt = ""; + +        gf_event(EVENT_VOLUME_RESET, "name=%s;option=%s", (char *)words[2], +                 tmp_opt); +    }  #endif -        CLI_STACK_DESTROY (frame); - -        return ret; +    CLI_STACK_DESTROY(frame); +    return ret;  }  int -cli_cmd_volume_profile_cbk (struct cli_state *state, struct cli_cmd_word *word, -                          const char **words, int wordcount) +cli_cmd_volume_profile_cbk(struct cli_state *state, struct cli_cmd_word *word, +                           const char **words, int wordcount)  { -        int                     sent = 0; -        int                     parse_error = 0; +    int sent = 0; +    int parse_error = 0; -        int                     ret      = -1; -        rpc_clnt_procedure_t    *proc    = NULL; -        call_frame_t            *frame   = NULL; -        dict_t                  *options = NULL; -        cli_local_t             *local = NULL; +    int ret = -1; +    rpc_clnt_procedure_t *proc = NULL; +    call_frame_t *frame = NULL; +    dict_t *options = NULL; +    cli_local_t *local = NULL; -        ret = cli_cmd_volume_profile_parse (words, wordcount, &options); +    ret = cli_cmd_volume_profile_parse(words, wordcount, &options); -        if (ret) { -                cli_usage_out (word->pattern); -                parse_error = 1; -                goto out; -        } +    if (ret) { +        cli_usage_out(word->pattern); +        parse_error = 1; +        goto out; +    } -        proc = &cli_rpc_prog->proctable[GLUSTER_CLI_PROFILE_VOLUME]; +    proc = &cli_rpc_prog->proctable[GLUSTER_CLI_PROFILE_VOLUME]; -        frame = create_frame (THIS, THIS->ctx->pool); -        if (!frame) -                goto out; +    frame = create_frame(THIS, THIS->ctx->pool); +    if (!frame) +        goto out; -        CLI_LOCAL_INIT (local, words, frame, options); +    CLI_LOCAL_INIT(local, words, frame, options); -        if (proc->fn) { -                ret = proc->fn (frame, THIS, options); -        } +    if (proc->fn) { +        ret = proc->fn(frame, THIS, options); +    }  out: -        if (ret) { -                cli_cmd_sent_status_get (&sent); -                if ((sent == 0) && (parse_error == 0)) -                        cli_out ("Volume profile failed"); -        } - -        CLI_STACK_DESTROY (frame); +    if (ret) { +        cli_cmd_sent_status_get(&sent); +        if ((sent == 0) && (parse_error == 0)) +            cli_out("Volume profile failed"); +    } -        return ret; +    CLI_STACK_DESTROY(frame); +    return ret;  }  int -cli_cmd_volume_set_cbk (struct cli_state *state, struct cli_cmd_word *word, -                        const char **words, int wordcount) +cli_cmd_volume_set_cbk(struct cli_state *state, struct cli_cmd_word *word, +                       const char **words, int wordcount)  { -        int                     sent = 0; -        int                     parse_error = 0; +    int sent = 0; +    int parse_error = 0; -        int                     ret = -1; -        rpc_clnt_procedure_t    *proc = NULL; -        call_frame_t            *frame = NULL; -        dict_t                  *options = NULL; -        cli_local_t             *local = NULL; -        char                    *op_errstr = NULL; +    int ret = -1; +    rpc_clnt_procedure_t *proc = NULL; +    call_frame_t *frame = NULL; +    dict_t *options = NULL; +    cli_local_t *local = NULL; +    char *op_errstr = NULL;  #if (USE_EVENTS) -        int                      ret1          = -1; -        int                      i             = 1; -        char                     dict_key[50]  = {0,}; -        char                    *tmp_opt       = NULL; -        char                    *opts_str      = NULL; -        int                      num_options   = 0; +    int ret1 = -1; +    int i = 1; +    char dict_key[50] = { +        0, +    }; +    char *tmp_opt = NULL; +    char *opts_str = NULL; +    int num_options = 0;  #endif -        proc = &cli_rpc_prog->proctable[GLUSTER_CLI_SET_VOLUME]; +    proc = &cli_rpc_prog->proctable[GLUSTER_CLI_SET_VOLUME]; -        frame = create_frame (THIS, THIS->ctx->pool); -        if (!frame) -                goto out; +    frame = create_frame(THIS, THIS->ctx->pool); +    if (!frame) +        goto out; -        ret = cli_cmd_volume_set_parse (state, words, wordcount, -                                        &options, &op_errstr); -        if (ret) { -                if (op_errstr) { -                    cli_err ("%s", op_errstr); -                    GF_FREE (op_errstr); -                } else -                    cli_usage_out (word->pattern); +    ret = cli_cmd_volume_set_parse(state, words, wordcount, &options, +                                   &op_errstr); +    if (ret) { +        if (op_errstr) { +            cli_err("%s", op_errstr); +            GF_FREE(op_errstr); +        } else +            cli_usage_out(word->pattern); -                parse_error = 1; -                goto out; -        } +        parse_error = 1; +        goto out; +    } -        CLI_LOCAL_INIT (local, words, frame, options); +    CLI_LOCAL_INIT(local, words, frame, options); -        if (proc->fn) { -                ret = proc->fn (frame, THIS, options); -        } +    if (proc->fn) { +        ret = proc->fn(frame, THIS, options); +    }  out: -        if (ret) { -                cli_cmd_sent_status_get (&sent); -                if ((sent == 0) && (parse_error == 0)) -                        cli_out ("Volume set failed"); -        } +    if (ret) { +        cli_cmd_sent_status_get(&sent); +        if ((sent == 0) && (parse_error == 0)) +            cli_out("Volume set failed"); +    }  #if (USE_EVENTS) -        if (ret == 0 && strcmp(words[2], "help") != 0) { -                ret1 = dict_get_int32 (options, "count", &num_options); -                if (ret1) -                        num_options = 0; -                else -                        num_options = num_options/2; +    if (ret == 0 && strcmp(words[2], "help") != 0) { +        ret1 = dict_get_int32(options, "count", &num_options); +        if (ret1) +            num_options = 0; +        else +            num_options = num_options / 2; -                /* Initialize opts_str */ -                opts_str = gf_strdup (""); +        /* Initialize opts_str */ +        opts_str = gf_strdup(""); -                /* Prepare String in format options=KEY1,VALUE1,KEY2,VALUE2 */ -                for (i = 1; i <= num_options; i++) { -                        sprintf (dict_key, "key%d", i); -                        ret1 = dict_get_str (options, dict_key, &tmp_opt); -                        if (ret1) -                                tmp_opt = ""; +        /* Prepare String in format options=KEY1,VALUE1,KEY2,VALUE2 */ +        for (i = 1; i <= num_options; i++) { +            sprintf(dict_key, "key%d", i); +            ret1 = dict_get_str(options, dict_key, &tmp_opt); +            if (ret1) +                tmp_opt = ""; -                        gf_asprintf (&opts_str, "%s,%s", opts_str, tmp_opt); +            gf_asprintf(&opts_str, "%s,%s", opts_str, tmp_opt); -                        sprintf (dict_key, "value%d", i); -                        ret1 = dict_get_str (options, dict_key, &tmp_opt); -                        if (ret1) -                                tmp_opt = ""; +            sprintf(dict_key, "value%d", i); +            ret1 = dict_get_str(options, dict_key, &tmp_opt); +            if (ret1) +                tmp_opt = ""; -                        gf_asprintf (&opts_str, "%s,%s", opts_str, tmp_opt); -                } +            gf_asprintf(&opts_str, "%s,%s", opts_str, tmp_opt); +        } -                gf_event (EVENT_VOLUME_SET, "name=%s;options=%s", -                          (char *)words[2], -                          opts_str); +        gf_event(EVENT_VOLUME_SET, "name=%s;options=%s", (char *)words[2], +                 opts_str); -                /* Allocated by gf_strdup and gf_asprintf */ -                GF_FREE (opts_str); -        } +        /* Allocated by gf_strdup and gf_asprintf */ +        GF_FREE(opts_str); +    }  #endif -        CLI_STACK_DESTROY (frame); - -        return ret; +    CLI_STACK_DESTROY(frame); +    return ret;  } -static -int -cli_event_remove_brick_str (dict_t *options, char **event_str, -                            eventtypes_t *event) +static int +cli_event_remove_brick_str(dict_t *options, char **event_str, +                           eventtypes_t *event)  { -        int           ret             = -1; -        char          *bricklist      = NULL; -        char          *brick          = NULL; -        char          *volname        = NULL; -        char           key[256]       = {0,}; -        const char    *eventstrformat = "volume=%s;bricks=%s"; -        int32_t        command        = 0; -        int32_t        i              = 1; -        int32_t        count          = 0; -        int32_t        eventstrlen    = 1; -        int            bricklen      = 0; -        char          *tmp_ptr        = NULL; - -        if (!options || !event_str || !event) -                goto out; +    int ret = -1; +    char *bricklist = NULL; +    char *brick = NULL; +    char *volname = NULL; +    char key[256] = { +        0, +    }; +    const char *eventstrformat = "volume=%s;bricks=%s"; +    int32_t command = 0; +    int32_t i = 1; +    int32_t count = 0; +    int32_t eventstrlen = 1; +    int bricklen = 0; +    char *tmp_ptr = NULL; + +    if (!options || !event_str || !event) +        goto out; -        ret = dict_get_str (options, "volname", &volname); -        if (ret || !volname) { -                gf_log ("cli", GF_LOG_ERROR, "Failed to fetch volname"); -                ret = -1; -                goto out; -        } -        /* Get the list of bricks for the event */ -        ret = dict_get_int32 (options, "command", &command); -        if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Failed to fetch command"); -                ret = -1; -                goto out; -        } +    ret = dict_get_str(options, "volname", &volname); +    if (ret || !volname) { +        gf_log("cli", GF_LOG_ERROR, "Failed to fetch volname"); +        ret = -1; +        goto out; +    } +    /* Get the list of bricks for the event */ +    ret = dict_get_int32(options, "command", &command); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, "Failed to fetch command"); +        ret = -1; +        goto out; +    } -        switch (command) { +    switch (command) {          case GF_OP_CMD_START: -                *event = EVENT_VOLUME_REMOVE_BRICK_START; -                break; +            *event = EVENT_VOLUME_REMOVE_BRICK_START; +            break;          case GF_OP_CMD_COMMIT: -                *event = EVENT_VOLUME_REMOVE_BRICK_COMMIT; -                break; +            *event = EVENT_VOLUME_REMOVE_BRICK_COMMIT; +            break;          case GF_OP_CMD_COMMIT_FORCE: -                *event = EVENT_VOLUME_REMOVE_BRICK_FORCE; -                break; +            *event = EVENT_VOLUME_REMOVE_BRICK_FORCE; +            break;          case GF_OP_CMD_STOP: -                *event = EVENT_VOLUME_REMOVE_BRICK_STOP; -                break; +            *event = EVENT_VOLUME_REMOVE_BRICK_STOP; +            break;          default: -                *event = EVENT_LAST; -                break; -        } +            *event = EVENT_LAST; +            break; +    } -        ret = -1; +    ret = -1; -        if (*event == EVENT_LAST) { -                goto out; -        } +    if (*event == EVENT_LAST) { +        goto out; +    } -        /* I could just get this from words[] but this is cleaner in case the -         * format changes  */ -        while (i) { -                snprintf (key, sizeof (key), "brick%d", i); -                ret = dict_get_str (options, key, &brick); -                if (ret) { -                        break; -                } -                eventstrlen += strlen (brick) + 1; -                i++; +    /* I could just get this from words[] but this is cleaner in case the +     * format changes  */ +    while (i) { +        snprintf(key, sizeof(key), "brick%d", i); +        ret = dict_get_str(options, key, &brick); +        if (ret) { +            break;          } +        eventstrlen += strlen(brick) + 1; +        i++; +    } -        count = --i; +    count = --i; -        eventstrlen += 1; +    eventstrlen += 1; -        bricklist = GF_CALLOC (eventstrlen, sizeof (char), gf_common_mt_char); -        if (!bricklist) { -                goto out; -        } +    bricklist = GF_CALLOC(eventstrlen, sizeof(char), gf_common_mt_char); +    if (!bricklist) { +        goto out; +    } -        tmp_ptr = bricklist; +    tmp_ptr = bricklist; -        i = 1; -        while (i <= count) { -                snprintf (key, sizeof (key), "brick%d", i); -                ret = dict_get_str (options, key, &brick); -                if (ret) { -                        break; -                } -                snprintf (tmp_ptr, eventstrlen, "%s ", brick); -                bricklen = strlen (brick); -                eventstrlen -= (bricklen + 1); -                tmp_ptr += (bricklen + 1); -                i++; +    i = 1; +    while (i <= count) { +        snprintf(key, sizeof(key), "brick%d", i); +        ret = dict_get_str(options, key, &brick); +        if (ret) { +            break;          } +        snprintf(tmp_ptr, eventstrlen, "%s ", brick); +        bricklen = strlen(brick); +        eventstrlen -= (bricklen + 1); +        tmp_ptr += (bricklen + 1); +        i++; +    } -        if (!ret) { -                gf_asprintf (event_str, eventstrformat, volname, -                             bricklist); -        } else { -                gf_asprintf (event_str, eventstrformat, volname, -                             "<unavailable>"); -        } +    if (!ret) { +        gf_asprintf(event_str, eventstrformat, volname, bricklist); +    } else { +        gf_asprintf(event_str, eventstrformat, volname, "<unavailable>"); +    } -        ret = 0; +    ret = 0;  out: -        GF_FREE (bricklist); -        return ret; +    GF_FREE(bricklist); +    return ret;  } -  int -cli_cmd_volume_add_brick_cbk (struct cli_state *state, -                              struct cli_cmd_word *word, const char **words, -                              int wordcount) +cli_cmd_volume_add_brick_cbk(struct cli_state *state, struct cli_cmd_word *word, +                             const char **words, int wordcount)  { -        int                     ret = -1; -        rpc_clnt_procedure_t    *proc = NULL; -        call_frame_t            *frame = NULL; -        dict_t                  *options = NULL; -        int                     sent = 0; -        int                     parse_error = 0; -        gf_answer_t             answer = GF_ANSWER_NO; -        cli_local_t             *local = NULL; +    int ret = -1; +    rpc_clnt_procedure_t *proc = NULL; +    call_frame_t *frame = NULL; +    dict_t *options = NULL; +    int sent = 0; +    int parse_error = 0; +    gf_answer_t answer = GF_ANSWER_NO; +    cli_local_t *local = NULL;  #if (USE_EVENTS) -        char                    *event_str = NULL; -        char                    *bricks = NULL; -        const char              *eventstrformat = "volume=%s;bricks=%s"; +    char *event_str = NULL; +    char *bricks = NULL; +    const char *eventstrformat = "volume=%s;bricks=%s";  #endif -        const char *question = "Changing the 'stripe count' of the volume is " -                "not a supported feature. In some cases it may result in data " -                "loss on the volume. Also there may be issues with regular " -                "filesystem operations on the volume after the change. Do you " -                "really want to continue with 'stripe' count option ? "; +    const char *question = +        "Changing the 'stripe count' of the volume is " +        "not a supported feature. In some cases it may result in data " +        "loss on the volume. Also there may be issues with regular " +        "filesystem operations on the volume after the change. Do you " +        "really want to continue with 'stripe' count option ? "; -        frame = create_frame (THIS, THIS->ctx->pool); -        if (!frame) -                goto out; +    frame = create_frame(THIS, THIS->ctx->pool); +    if (!frame) +        goto out; -        ret = cli_cmd_volume_add_brick_parse (state, words, wordcount, &options, -                                              0); -        if (ret) { -                cli_usage_out (word->pattern); -                parse_error = 1; -                goto out; -        } +    ret = cli_cmd_volume_add_brick_parse(state, words, wordcount, &options, 0); +    if (ret) { +        cli_usage_out(word->pattern); +        parse_error = 1; +        goto out; +    } -        /* TODO: there are challenges in supporting changing of -           stripe-count, until it is properly supported give warning to user */ -        if (dict_get (options, "stripe-count")) { -                answer = cli_cmd_get_confirmation (state, question); +    /* TODO: there are challenges in supporting changing of +       stripe-count, until it is properly supported give warning to user */ +    if (dict_get(options, "stripe-count")) { +        answer = cli_cmd_get_confirmation(state, question); -                if (GF_ANSWER_NO == answer) { -                        ret = 0; -                        goto out; -                } +        if (GF_ANSWER_NO == answer) { +            ret = 0; +            goto out;          } +    }  #if (USE_EVENTS) -        /* Get the list of bricks for the event */ +    /* Get the list of bricks for the event */ -        ret = dict_get_str (options, "bricks", &bricks); +    ret = dict_get_str(options, "bricks", &bricks); -        if (!ret) { -                gf_asprintf (&event_str, eventstrformat, (char *)words[2], -                            &bricks[1] /*Skip leading space*/); -        } else { -                gf_asprintf (&event_str, eventstrformat, (char *)words[2], -                            "<unavailable>"); -        } +    if (!ret) { +        gf_asprintf(&event_str, eventstrformat, (char *)words[2], +                    &bricks[1] /*Skip leading space*/); +    } else { +        gf_asprintf(&event_str, eventstrformat, (char *)words[2], +                    "<unavailable>"); +    }  #endif -        if (state->mode & GLUSTER_MODE_WIGNORE) { -                ret = dict_set_int32 (options, "force", _gf_true); -                if (ret) { -                        gf_log ("cli", GF_LOG_ERROR, "Failed to set force " -                                "option"); -                        goto out; -                } +    if (state->mode & GLUSTER_MODE_WIGNORE) { +        ret = dict_set_int32(options, "force", _gf_true); +        if (ret) { +            gf_log("cli", GF_LOG_ERROR, +                   "Failed to set force " +                   "option"); +            goto out;          } +    } -        proc = &cli_rpc_prog->proctable[GLUSTER_CLI_ADD_BRICK]; +    proc = &cli_rpc_prog->proctable[GLUSTER_CLI_ADD_BRICK]; -        CLI_LOCAL_INIT (local, words, frame, options); +    CLI_LOCAL_INIT(local, words, frame, options); -        if (proc->fn) { -                ret = proc->fn (frame, THIS, options); -        } +    if (proc->fn) { +        ret = proc->fn(frame, THIS, options); +    }  out: -        if (ret) { -                cli_cmd_sent_status_get (&sent); -                if ((sent == 0) && (parse_error == 0)) -                        cli_out ("Volume add-brick failed"); -        } else { +    if (ret) { +        cli_cmd_sent_status_get(&sent); +        if ((sent == 0) && (parse_error == 0)) +            cli_out("Volume add-brick failed"); +    } else {  #if (USE_EVENTS) -                gf_event (EVENT_VOLUME_ADD_BRICK, "%s", event_str); +        gf_event(EVENT_VOLUME_ADD_BRICK, "%s", event_str);  #endif -        } +    }  #if (USE_EVENTS) -        GF_FREE(event_str); +    GF_FREE(event_str);  #endif -        CLI_STACK_DESTROY (frame); -        return ret; +    CLI_STACK_DESTROY(frame); +    return ret;  }  int -cli_tier_validate_replica_type (dict_t *dict, int type) +cli_tier_validate_replica_type(dict_t *dict, int type)  { +    int brick_count = -1; +    int replica_count = 1; +    int ret = -1; -        int             brick_count             = -1; -        int             replica_count           = 1; -        int             ret                     = -1; - -        ret = dict_get_int32 (dict, "count", &brick_count); -        if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Failed to get brick count"); -                goto out; -        } - -        ret = dict_get_int32 (dict, "replica-count", &replica_count); -        if (ret) { -                gf_log ("cli", GF_LOG_DEBUG, "Failed to get replica count. " -                        "Defaulting to one"); -                replica_count = 1; -        } +    ret = dict_get_int32(dict, "count", &brick_count); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, "Failed to get brick count"); +        goto out; +    } + +    ret = dict_get_int32(dict, "replica-count", &replica_count); +    if (ret) { +        gf_log("cli", GF_LOG_DEBUG, +               "Failed to get replica count. " +               "Defaulting to one"); +        replica_count = 1; +    } + +    /* +     * Change the calculation of sub_count once attach-tier support +     * disperse volume. +     * sub_count = disperse_count for disperse volume +     * */ + +    if (brick_count % replica_count) { +        if (type == GF_CLUSTER_TYPE_REPLICATE) +            cli_err( +                "number of bricks is not a multiple of " +                "replica count"); +        else if (type == GF_CLUSTER_TYPE_DISPERSE) +            cli_err( +                "number of bricks is not a multiple of " +                "disperse count"); +        else +            cli_err( +                "number of bricks given doesn't match " +                "required count"); -        /* -         * Change the calculation of sub_count once attach-tier support -         * disperse volume. -         * sub_count = disperse_count for disperse volume -         * */ - - -        if (brick_count % replica_count) { -             if (type == GF_CLUSTER_TYPE_REPLICATE) -                     cli_err ("number of bricks is not a multiple of " -                              "replica count"); -             else if (type == GF_CLUSTER_TYPE_DISPERSE) -                     cli_err ("number of bricks is not a multiple of " -                              "disperse count"); -             else -                     cli_err ("number of bricks given doesn't match " -                              "required count"); - -             ret = -1; -             goto out; -     } -        ret = 0; +        ret = -1; +        goto out; +    } +    ret = 0;  out: -        return ret; +    return ret;  }  int -do_cli_cmd_volume_attach_tier (struct cli_state *state, -                                struct cli_cmd_word *word, const char **words, -                                int wordcount) +do_cli_cmd_volume_attach_tier(struct cli_state *state, +                              struct cli_cmd_word *word, const char **words, +                              int wordcount)  { -        int                     ret = -1; -        rpc_clnt_procedure_t    *proc = NULL; -        call_frame_t            *frame = NULL; -        dict_t                  *options = NULL; -        int                     sent = 0; -        int                     parse_error = 0; -        cli_local_t             *local = NULL; -        int                     type = 0; - -        frame = create_frame (THIS, THIS->ctx->pool); -        if (!frame) -                goto out; +    int ret = -1; +    rpc_clnt_procedure_t *proc = NULL; +    call_frame_t *frame = NULL; +    dict_t *options = NULL; +    int sent = 0; +    int parse_error = 0; +    cli_local_t *local = NULL; +    int type = 0; + +    frame = create_frame(THIS, THIS->ctx->pool); +    if (!frame) +        goto out; -        ret = cli_cmd_volume_add_brick_parse (state, words, wordcount, &options, -                                              &type); -        if (ret) { -                cli_usage_out (word->pattern); -                parse_error = 1; -                goto out; -        } +    ret = cli_cmd_volume_add_brick_parse(state, words, wordcount, &options, +                                         &type); +    if (ret) { +        cli_usage_out(word->pattern); +        parse_error = 1; +        goto out; +    } + +    /* +     * Merge this check when attach-tier has it's own cli parse function. +     */ +    ret = cli_tier_validate_replica_type(options, type); +    if (ret) { +        cli_usage_out(word->pattern); +        parse_error = 1; +        goto out; +    } -        /* -         * Merge this check when attach-tier has it's own cli parse function. -         */ -        ret = cli_tier_validate_replica_type (options, type); +    if (state->mode & GLUSTER_MODE_WIGNORE) { +        ret = dict_set_int32(options, "force", _gf_true);          if (ret) { -                cli_usage_out (word->pattern); -                parse_error = 1; -                goto out; +            gf_log("cli", GF_LOG_ERROR, +                   "Failed to set force " +                   "option"); +            goto out;          } +    } -        if (state->mode & GLUSTER_MODE_WIGNORE) { -                ret = dict_set_int32 (options, "force", _gf_true); -                if (ret) { -                        gf_log ("cli", GF_LOG_ERROR, "Failed to set force " -                                "option"); -                        goto out; -                } -        } - -        ret = dict_set_int32 (options, "attach-tier", 1); -        if (ret) -                goto out; +    ret = dict_set_int32(options, "attach-tier", 1); +    if (ret) +        goto out; -        ret = dict_set_int32 (options, "hot-type", type); -        if (ret) -                goto out; +    ret = dict_set_int32(options, "hot-type", type); +    if (ret) +        goto out; -        proc = &cli_rpc_prog->proctable[GLUSTER_CLI_ADD_TIER_BRICK]; +    proc = &cli_rpc_prog->proctable[GLUSTER_CLI_ADD_TIER_BRICK]; -        CLI_LOCAL_INIT (local, words, frame, options); +    CLI_LOCAL_INIT(local, words, frame, options); -        if (proc->fn) { -                ret = proc->fn (frame, THIS, options); -        } +    if (proc->fn) { +        ret = proc->fn(frame, THIS, options); +    }  out: -        if (ret) { -                cli_cmd_sent_status_get (&sent); -                if ((sent == 0) && (parse_error == 0)) -                        cli_out ("attach-tier failed"); -        } +    if (ret) { +        cli_cmd_sent_status_get(&sent); +        if ((sent == 0) && (parse_error == 0)) +            cli_out("attach-tier failed"); +    } -        CLI_STACK_DESTROY (frame); +    CLI_STACK_DESTROY(frame); -        return ret; +    return ret;  }  int -do_cli_cmd_volume_detach_tier (struct cli_state *state, +do_cli_cmd_volume_detach_tier(struct cli_state *state,                                struct cli_cmd_word *word, const char **words,                                int wordcount, gf_boolean_t *aborted)  { -        int                     ret = -1; -        rpc_clnt_procedure_t    *proc = NULL; -        call_frame_t            *frame = NULL; -        dict_t                  *options = NULL; -        int                     sent = 0; -        int                     parse_error = 0; -        gf_answer_t             answer = GF_ANSWER_NO; -        cli_local_t             *local = NULL; -        int                     need_question = 0; - -        const char *question = "Removing tier can result in data loss. " -                               "Do you want to Continue?"; - -        frame = create_frame (THIS, THIS->ctx->pool); -        if (!frame) -                goto out; +    int ret = -1; +    rpc_clnt_procedure_t *proc = NULL; +    call_frame_t *frame = NULL; +    dict_t *options = NULL; +    int sent = 0; +    int parse_error = 0; +    gf_answer_t answer = GF_ANSWER_NO; +    cli_local_t *local = NULL; +    int need_question = 0; + +    const char *question = +        "Removing tier can result in data loss. " +        "Do you want to Continue?"; + +    frame = create_frame(THIS, THIS->ctx->pool); +    if (!frame) +        goto out; -        ret = cli_cmd_volume_detach_tier_parse(words, wordcount, &options, -                                               &need_question); -        if (ret) { -                cli_usage_out (word->pattern); -                parse_error = 1; -                goto out; -        } +    ret = cli_cmd_volume_detach_tier_parse(words, wordcount, &options, +                                           &need_question); +    if (ret) { +        cli_usage_out(word->pattern); +        parse_error = 1; +        goto out; +    } -        ret = dict_set_int32 (options, "force", 1); -        if (ret) -                goto out; +    ret = dict_set_int32(options, "force", 1); +    if (ret) +        goto out; -        ret = dict_set_int32 (options, "count", 0); -        if (ret) -                goto out; +    ret = dict_set_int32(options, "count", 0); +    if (ret) +        goto out; -        *aborted = _gf_false; +    *aborted = _gf_false; -        if (!(state->mode & GLUSTER_MODE_SCRIPT) && need_question) { -                /* we need to ask question only in case of 'commit or force' */ -                answer = cli_cmd_get_confirmation (state, question); -                if (GF_ANSWER_NO == answer) { -                        ret = 0; -                        *aborted = _gf_true; -                        goto out; -                } +    if (!(state->mode & GLUSTER_MODE_SCRIPT) && need_question) { +        /* we need to ask question only in case of 'commit or force' */ +        answer = cli_cmd_get_confirmation(state, question); +        if (GF_ANSWER_NO == answer) { +            ret = 0; +            *aborted = _gf_true; +            goto out;          } +    } -        proc = &cli_rpc_prog->proctable[GLUSTER_CLI_REMOVE_TIER_BRICK]; +    proc = &cli_rpc_prog->proctable[GLUSTER_CLI_REMOVE_TIER_BRICK]; -        CLI_LOCAL_INIT (local, words, frame, options); +    CLI_LOCAL_INIT(local, words, frame, options); -        if (proc->fn) { -                ret = proc->fn (frame, THIS, options); -        } +    if (proc->fn) { +        ret = proc->fn(frame, THIS, options); +    }  out: -        if (ret) { -                cli_cmd_sent_status_get (&sent); -                if ((sent == 0) && (parse_error == 0)) -                        cli_out ("Volume detach tier failed"); -        } +    if (ret) { +        cli_cmd_sent_status_get(&sent); +        if ((sent == 0) && (parse_error == 0)) +            cli_out("Volume detach tier failed"); +    } -        CLI_STACK_DESTROY (frame); +    CLI_STACK_DESTROY(frame); -        return ret; +    return ret;  }  int -cli_cmd_volume_tier_cbk (struct cli_state *state, -                         struct cli_cmd_word *word, const char **words, -                         int wordcount) +cli_cmd_volume_tier_cbk(struct cli_state *state, struct cli_cmd_word *word, +                        const char **words, int wordcount)  { -        int                      ret     = -1; -        call_frame_t            *frame   = NULL; -        dict_t                  *options = NULL; -        rpc_clnt_procedure_t    *proc    = NULL; -        cli_local_t             *local   = NULL; -        int                      i       = 0; -        eventtypes_t            event    = EVENT_LAST; -        gf_boolean_t            aborted  = _gf_false; -        gf_answer_t             answer   = GF_ANSWER_NO; - -        const char *detach_question = "gluster volume detach-tier <VOLNAME> " -                               "<start|stop|status|commit|force> is " -                               "deprecated. Use the new command \'" -                               "gluster volume tier <VOLNAME> detach <start|" -                               "stop|status|commit|force>\'\n" -                               "Do you want to Continue?"; - -        const char *attach_question = "gluster volume attach-tier <VOLNAME> " -                               "[<replica COUNT>] <NEW-BRICK>... is " -                               "deprecated. Use the new command \'" -                               "gluster volume tier <VOLNAME> attach [<replica" -                               " COUNT>] <NEW-BRICK>... [force]\'\n" -                               "Do you want to Continue?"; - - -        if (wordcount < 4) { -                if (wordcount == 3 && !strcmp(words[2], "help")) { -                        cli_cmd_tier_help_cbk (state, word, words, wordcount); -                        ret = 0; -                } else { -                        cli_usage_out (word->pattern); -                } -                goto out; +    int ret = -1; +    call_frame_t *frame = NULL; +    dict_t *options = NULL; +    rpc_clnt_procedure_t *proc = NULL; +    cli_local_t *local = NULL; +    int i = 0; +    eventtypes_t event = EVENT_LAST; +    gf_boolean_t aborted = _gf_false; +    gf_answer_t answer = GF_ANSWER_NO; + +    const char *detach_question = +        "gluster volume detach-tier <VOLNAME> " +        "<start|stop|status|commit|force> is " +        "deprecated. Use the new command \'" +        "gluster volume tier <VOLNAME> detach <start|" +        "stop|status|commit|force>\'\n" +        "Do you want to Continue?"; + +    const char *attach_question = +        "gluster volume attach-tier <VOLNAME> " +        "[<replica COUNT>] <NEW-BRICK>... is " +        "deprecated. Use the new command \'" +        "gluster volume tier <VOLNAME> attach [<replica" +        " COUNT>] <NEW-BRICK>... [force]\'\n" +        "Do you want to Continue?"; + +    if (wordcount < 4) { +        if (wordcount == 3 && !strcmp(words[2], "help")) { +            cli_cmd_tier_help_cbk(state, word, words, wordcount); +            ret = 0; +        } else { +            cli_usage_out(word->pattern);          } +        goto out; +    } -        if (!strcmp(words[1], "detach-tier")) { -                /* we need to ask question when older command is used */ -                answer = cli_cmd_get_confirmation (state, detach_question); -                if (GF_ANSWER_NO == answer) { -                        ret = 0; -                        goto out; -                } -                ret = do_cli_cmd_volume_detach_tier (state, word, -                                                     words, wordcount, -                                                     &aborted); -                goto out; -        } else if (!strcmp(words[3], "detach")) { -                for (i = 3; i < wordcount; i++) -                        words[i] = words[i+1]; - -                ret = do_cli_cmd_volume_detach_tier (state, word, -                                                     words, wordcount-1, -                                                     &aborted); -                if (!aborted) { -                        if (!strcmp (words[wordcount-2], "commit")) { -                                event = EVENT_TIER_DETACH_COMMIT; -                        } else if (!strcmp (words[wordcount-2], "start")) { -                                event = EVENT_TIER_DETACH_START; -                        } else if (!strcmp (words[wordcount-2], "stop")) { -                                event = EVENT_TIER_DETACH_STOP; -                        } else if (!strcmp (words[wordcount-2], "force")) { -                                event = EVENT_TIER_DETACH_FORCE; -                        } -                } -                goto out; - -        } else if (!strcmp(words[1], "attach-tier")) { -                /* we need to ask question when the older command is used */ -                answer = cli_cmd_get_confirmation (state, attach_question); -                if (GF_ANSWER_NO == answer) { -                        ret = 0; -                        goto out; -                } -                ret = do_cli_cmd_volume_attach_tier (state, word, -                                                     words, wordcount); -                goto out; -        } else if (!strcmp(words[3], "attach")) { -                for (i = 3; i < wordcount; i++) -                        words[i] = words[i+1]; - -                ret = do_cli_cmd_volume_attach_tier (state, word, -                                                     words, wordcount-1); -                if (!strcmp (words[wordcount-2], "force")) { -                        event = EVENT_TIER_ATTACH_FORCE; -                } else { -                        event = EVENT_TIER_ATTACH; -                } -                goto out; +    if (!strcmp(words[1], "detach-tier")) { +        /* we need to ask question when older command is used */ +        answer = cli_cmd_get_confirmation(state, detach_question); +        if (GF_ANSWER_NO == answer) { +            ret = 0; +            goto out;          } +        ret = do_cli_cmd_volume_detach_tier(state, word, words, wordcount, +                                            &aborted); +        goto out; +    } else if (!strcmp(words[3], "detach")) { +        for (i = 3; i < wordcount; i++) +            words[i] = words[i + 1]; + +        ret = do_cli_cmd_volume_detach_tier(state, word, words, wordcount - 1, +                                            &aborted); +        if (!aborted) { +            if (!strcmp(words[wordcount - 2], "commit")) { +                event = EVENT_TIER_DETACH_COMMIT; +            } else if (!strcmp(words[wordcount - 2], "start")) { +                event = EVENT_TIER_DETACH_START; +            } else if (!strcmp(words[wordcount - 2], "stop")) { +                event = EVENT_TIER_DETACH_STOP; +            } else if (!strcmp(words[wordcount - 2], "force")) { +                event = EVENT_TIER_DETACH_FORCE; +            } +        } +        goto out; -        ret = cli_cmd_volume_tier_parse (words, wordcount, &options); -        if (ret) { -                cli_usage_out (word->pattern); -                goto out; +    } else if (!strcmp(words[1], "attach-tier")) { +        /* we need to ask question when the older command is used */ +        answer = cli_cmd_get_confirmation(state, attach_question); +        if (GF_ANSWER_NO == answer) { +            ret = 0; +            goto out;          } +        ret = do_cli_cmd_volume_attach_tier(state, word, words, wordcount); +        goto out; +    } else if (!strcmp(words[3], "attach")) { +        for (i = 3; i < wordcount; i++) +            words[i] = words[i + 1]; -        if (!strcmp (words[wordcount-1], "start")) { -                event = EVENT_TIER_START; +        ret = do_cli_cmd_volume_attach_tier(state, word, words, wordcount - 1); +        if (!strcmp(words[wordcount - 2], "force")) { +            event = EVENT_TIER_ATTACH_FORCE;          } else { -                if (!strcmp (words[wordcount-2], "start") && -                    !strcmp (words[wordcount-1], "force")) { -                        event = EVENT_TIER_START_FORCE; -                } +            event = EVENT_TIER_ATTACH;          } +        goto out; +    } -        proc = &cli_rpc_prog->proctable[GLUSTER_CLI_TIER]; +    ret = cli_cmd_volume_tier_parse(words, wordcount, &options); +    if (ret) { +        cli_usage_out(word->pattern); +        goto out; +    } -        frame = create_frame (THIS, THIS->ctx->pool); -        if (!frame) -                goto out; +    if (!strcmp(words[wordcount - 1], "start")) { +        event = EVENT_TIER_START; +    } else { +        if (!strcmp(words[wordcount - 2], "start") && +            !strcmp(words[wordcount - 1], "force")) { +            event = EVENT_TIER_START_FORCE; +        } +    } -        CLI_LOCAL_INIT (local, words, frame, options); +    proc = &cli_rpc_prog->proctable[GLUSTER_CLI_TIER]; -        if (proc->fn) { -                ret = proc->fn (frame, THIS, options); -        } +    frame = create_frame(THIS, THIS->ctx->pool); +    if (!frame) +        goto out; + +    CLI_LOCAL_INIT(local, words, frame, options); + +    if (proc->fn) { +        ret = proc->fn(frame, THIS, options); +    }  out: -        if (ret) { -                cli_out ("Tier command failed"); -        } else { -                if (event != EVENT_LAST) { -                        gf_event (event, "vol=%s", words[2]); -                } +    if (ret) { +        cli_out("Tier command failed"); +    } else { +        if (event != EVENT_LAST) { +            gf_event(event, "vol=%s", words[2]);          } -        if (options) -                dict_unref (options); +    } +    if (options) +        dict_unref(options); -        return ret; +    return ret;  }  int -cli_get_soft_limit (dict_t *options, const char **words, dict_t *xdata) +cli_get_soft_limit(dict_t *options, const char **words, dict_t *xdata)  { -        call_frame_t            *frame          = NULL; -        cli_local_t             *local          = NULL; -        rpc_clnt_procedure_t    *proc           = NULL; -        char                    *default_sl     = NULL; -        char                    *default_sl_dup = NULL; -        int                      ret  = -1; - -        frame = create_frame (THIS, THIS->ctx->pool); -        if (!frame) { -                ret = -1; -                goto out; -        } - -        //We need a ref on @options to prevent CLI_STACK_DESTROY -        //from destroying it prematurely. -        dict_ref (options); -        CLI_LOCAL_INIT (local, words, frame, options); -        proc = &cli_rpc_prog->proctable[GLUSTER_CLI_QUOTA]; -        ret = proc->fn (frame, THIS, options); - -        ret = dict_get_str (options, "default-soft-limit", &default_sl); -        if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Failed to get default soft limit"); -                goto out; -        } +    call_frame_t *frame = NULL; +    cli_local_t *local = NULL; +    rpc_clnt_procedure_t *proc = NULL; +    char *default_sl = NULL; +    char *default_sl_dup = NULL; +    int ret = -1; + +    frame = create_frame(THIS, THIS->ctx->pool); +    if (!frame) { +        ret = -1; +        goto out; +    } + +    // We need a ref on @options to prevent CLI_STACK_DESTROY +    // from destroying it prematurely. +    dict_ref(options); +    CLI_LOCAL_INIT(local, words, frame, options); +    proc = &cli_rpc_prog->proctable[GLUSTER_CLI_QUOTA]; +    ret = proc->fn(frame, THIS, options); + +    ret = dict_get_str(options, "default-soft-limit", &default_sl); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, "Failed to get default soft limit"); +        goto out; +    } -        default_sl_dup = gf_strdup (default_sl); -        if (!default_sl_dup) { -                ret = -1; -                goto out; -        } +    default_sl_dup = gf_strdup(default_sl); +    if (!default_sl_dup) { +        ret = -1; +        goto out; +    } -        ret = dict_set_dynstr (xdata, "default-soft-limit", default_sl_dup); -        if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Failed to set default soft limit"); -                GF_FREE (default_sl_dup); -                goto out; -        } +    ret = dict_set_dynstr(xdata, "default-soft-limit", default_sl_dup); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, "Failed to set default soft limit"); +        GF_FREE(default_sl_dup); +        goto out; +    }  out: -        CLI_STACK_DESTROY (frame); -        return ret; +    CLI_STACK_DESTROY(frame); +    return ret;  }  /* Checks if at least one limit has been set on the volume @@ -1469,1743 +1467,1728 @@ out:   * Returns true if at least one limit is set. Returns false otherwise.   */  gf_boolean_t -_limits_set_on_volume (char *volname, int type) { -        gf_boolean_t    limits_set                = _gf_false; -        int             ret                       = -1; -        char            quota_conf_file[PATH_MAX] = {0,}; -        int             fd                        = -1; -        char            buf[16]                   = {0,}; -        float           version                   = 0.0f; -        char            gfid_type_stored          = 0; -        char            gfid_type                 = 0; - -        /* TODO: fix hardcoding; Need to perform an RPC call to glusterd -         * to fetch working directory -         */ -        snprintf (quota_conf_file, sizeof quota_conf_file, -                  "%s/vols/%s/quota.conf", -                  GLUSTERD_DEFAULT_WORKDIR, -                  volname); -        fd = open (quota_conf_file, O_RDONLY); -        if (fd == -1) -                goto out; +_limits_set_on_volume(char *volname, int type) +{ +    gf_boolean_t limits_set = _gf_false; +    int ret = -1; +    char quota_conf_file[PATH_MAX] = { +        0, +    }; +    int fd = -1; +    char buf[16] = { +        0, +    }; +    float version = 0.0f; +    char gfid_type_stored = 0; +    char gfid_type = 0; + +    /* TODO: fix hardcoding; Need to perform an RPC call to glusterd +     * to fetch working directory +     */ +    snprintf(quota_conf_file, sizeof quota_conf_file, "%s/vols/%s/quota.conf", +             GLUSTERD_DEFAULT_WORKDIR, volname); +    fd = open(quota_conf_file, O_RDONLY); +    if (fd == -1) +        goto out; -        ret = quota_conf_read_version (fd, &version); -        if (ret) -                goto out; +    ret = quota_conf_read_version(fd, &version); +    if (ret) +        goto out; -        if (type == GF_QUOTA_OPTION_TYPE_LIST) -                gfid_type = GF_QUOTA_CONF_TYPE_USAGE; -        else -                gfid_type = GF_QUOTA_CONF_TYPE_OBJECTS; - -        /* Try to read at least one gfid  of type 'gfid_type' */ -        while (1) { -                ret = quota_conf_read_gfid (fd, buf, &gfid_type_stored, -                                            version); -                if (ret <= 0) -                        break; - -                if (gfid_type_stored == gfid_type) { -                        limits_set = _gf_true; -                        break; -                } +    if (type == GF_QUOTA_OPTION_TYPE_LIST) +        gfid_type = GF_QUOTA_CONF_TYPE_USAGE; +    else +        gfid_type = GF_QUOTA_CONF_TYPE_OBJECTS; + +    /* Try to read at least one gfid  of type 'gfid_type' */ +    while (1) { +        ret = quota_conf_read_gfid(fd, buf, &gfid_type_stored, version); +        if (ret <= 0) +            break; + +        if (gfid_type_stored == gfid_type) { +            limits_set = _gf_true; +            break;          } +    }  out: -        if (fd != -1) -                sys_close (fd); +    if (fd != -1) +        sys_close(fd); -        return limits_set; +    return limits_set;  }  int -cli_cmd_quota_handle_list_all (const char **words, dict_t *options) +cli_cmd_quota_handle_list_all(const char **words, dict_t *options)  { -        int                      all_failed = 1; -        int                      count      = 0; -        int                      ret        = -1; -        rpc_clnt_procedure_t    *proc       = NULL; -        cli_local_t             *local      = NULL; -        call_frame_t            *frame      = NULL; -        dict_t                  *xdata      = NULL; -        char                    *gfid_str   = NULL; -        char                    *volname    = NULL; -        char                    *volname_dup = NULL; -        unsigned char            buf[16]   = {0}; -        int                      fd        = -1; -        char                     quota_conf_file[PATH_MAX] = {0}; -        gf_boolean_t             xml_err_flag   = _gf_false; -        char                     err_str[NAME_MAX] = {0,}; -        int32_t                  type       = 0; -        char                     gfid_type  = 0; -        float                    version    = 0.0f; -        int32_t                  max_count  = 0; - -        xdata = dict_new (); -        if (!xdata) { -                ret = -1; -                goto out; -        } +    int all_failed = 1; +    int count = 0; +    int ret = -1; +    rpc_clnt_procedure_t *proc = NULL; +    cli_local_t *local = NULL; +    call_frame_t *frame = NULL; +    dict_t *xdata = NULL; +    char *gfid_str = NULL; +    char *volname = NULL; +    char *volname_dup = NULL; +    unsigned char buf[16] = {0}; +    int fd = -1; +    char quota_conf_file[PATH_MAX] = {0}; +    gf_boolean_t xml_err_flag = _gf_false; +    char err_str[NAME_MAX] = { +        0, +    }; +    int32_t type = 0; +    char gfid_type = 0; +    float version = 0.0f; +    int32_t max_count = 0; + +    xdata = dict_new(); +    if (!xdata) { +        ret = -1; +        goto out; +    } -        ret = dict_get_str (options, "volname", &volname); -        if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Failed to get volume name"); -                goto out; -        } +    ret = dict_get_str(options, "volname", &volname); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, "Failed to get volume name"); +        goto out; +    } -        ret = dict_get_int32 (options, "type", &type); -        if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Failed to get quota option type"); -                goto out; -        } +    ret = dict_get_int32(options, "type", &type); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, "Failed to get quota option type"); +        goto out; +    } -        ret = dict_set_int32 (xdata, "type", type); -        if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Failed to set type in xdata"); -                goto out; -        } +    ret = dict_set_int32(xdata, "type", type); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, "Failed to set type in xdata"); +        goto out; +    } -        ret = cli_get_soft_limit (options, words, xdata); -        if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Failed to fetch default " -                        "soft-limit"); -                goto out; +    ret = cli_get_soft_limit(options, words, xdata); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, +               "Failed to fetch default " +               "soft-limit"); +        goto out; +    } + +    /* Check if at least one limit is set on volume. No need to check for +     * quota enabled as cli_get_soft_limit() handles that +     */ +    if (!_limits_set_on_volume(volname, type)) { +        snprintf(err_str, sizeof(err_str), +                 "No%s quota configured on" +                 " volume %s", +                 (type == GF_QUOTA_OPTION_TYPE_LIST) ? "" : " inode", volname); +        if (global_state->mode & GLUSTER_MODE_XML) { +            xml_err_flag = _gf_true; +        } else { +            cli_out("quota: %s", err_str);          } +        ret = 0; +        goto out; +    } -        /* Check if at least one limit is set on volume. No need to check for -         * quota enabled as cli_get_soft_limit() handles that -         */ -        if (!_limits_set_on_volume (volname, type)) { -                snprintf (err_str, sizeof (err_str), "No%s quota configured on" -                          " volume %s", -                          (type == GF_QUOTA_OPTION_TYPE_LIST) ? "" : " inode", -                          volname); -                if (global_state->mode & GLUSTER_MODE_XML) { -                        xml_err_flag = _gf_true; -                } else { -                        cli_out ("quota: %s", err_str); -                } -                ret = 0; -                goto out; -        } +    frame = create_frame(THIS, THIS->ctx->pool); +    if (!frame) { +        ret = -1; +        goto out; +    } -        frame = create_frame (THIS, THIS->ctx->pool); -        if (!frame) { -                ret = -1; -                goto out; -        } +    volname_dup = gf_strdup(volname); +    if (!volname_dup) { +        ret = -1; +        goto out; +    } -        volname_dup = gf_strdup (volname); -        if (!volname_dup) { -                ret = -1; -                goto out; -        } +    ret = dict_set_dynstr(xdata, "volume-uuid", volname_dup); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, "Failed to set volume-uuid"); +        GF_FREE(volname_dup); +        goto out; +    } + +    // TODO: fix hardcoding; Need to perform an RPC call to glusterd +    // to fetch working directory +    snprintf(quota_conf_file, sizeof quota_conf_file, "%s/vols/%s/quota.conf", +             GLUSTERD_DEFAULT_WORKDIR, volname); +    fd = open(quota_conf_file, O_RDONLY); +    if (fd == -1) { +        // This may because no limits were yet set on the volume +        gf_log("cli", GF_LOG_TRACE, +               "Unable to open " +               "quota.conf"); +        ret = 0; +        goto out; +    } -        ret = dict_set_dynstr (xdata, "volume-uuid", volname_dup); -        if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Failed to set volume-uuid"); -                GF_FREE (volname_dup); -                goto out; -        } +    ret = quota_conf_read_version(fd, &version); +    if (ret) +        goto out; -        //TODO: fix hardcoding; Need to perform an RPC call to glusterd -        //to fetch working directory -        snprintf (quota_conf_file, sizeof quota_conf_file, -                  "%s/vols/%s/quota.conf", -                  GLUSTERD_DEFAULT_WORKDIR, -                  volname); -        fd = open (quota_conf_file, O_RDONLY); -        if (fd == -1) { -                //This may because no limits were yet set on the volume -                gf_log ("cli", GF_LOG_TRACE, "Unable to open " -                        "quota.conf"); -                ret = 0; -                goto out; -         } +    CLI_LOCAL_INIT(local, words, frame, xdata); +    proc = &cli_quotad_clnt.proctable[GF_AGGREGATOR_GETLIMIT]; -        ret = quota_conf_read_version (fd, &version); -        if (ret) -                goto out; +    gfid_str = GF_CALLOC(1, gf_common_mt_char, 64); +    if (!gfid_str) { +        ret = -1; +        goto out; +    } -        CLI_LOCAL_INIT (local, words, frame, xdata); -        proc = &cli_quotad_clnt.proctable[GF_AGGREGATOR_GETLIMIT]; +    for (count = 0;; count++) { +        ret = quota_conf_read_gfid(fd, buf, &gfid_type, version); +        if (ret == 0) { +            break; +        } else if (ret < 0) { +            gf_log(THIS->name, GF_LOG_CRITICAL, +                   "Quota " +                   "configuration store may be corrupt."); +            goto out; +        } + +        if ((type == GF_QUOTA_OPTION_TYPE_LIST && +             gfid_type == GF_QUOTA_CONF_TYPE_OBJECTS) || +            (type == GF_QUOTA_OPTION_TYPE_LIST_OBJECTS && +             gfid_type == GF_QUOTA_CONF_TYPE_USAGE)) +            continue; + +        max_count++; +    } +    ret = dict_set_int32(xdata, "max_count", max_count); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, "Failed to set max_count"); +        goto out; +    } + +    ret = sys_lseek(fd, 0L, SEEK_SET); +    if (ret < 0) { +        gf_log(THIS->name, GF_LOG_ERROR, +               "failed to move offset to " +               "the beginning: %s", +               strerror(errno)); +        goto out; +    } +    ret = quota_conf_read_version(fd, &version); +    if (ret) +        goto out; -        gfid_str = GF_CALLOC (1, gf_common_mt_char, 64); -        if (!gfid_str) { -                ret = -1; -                goto out; +    for (count = 0;; count++) { +        ret = quota_conf_read_gfid(fd, buf, &gfid_type, version); +        if (ret == 0) { +            break; +        } else if (ret < 0) { +            gf_log(THIS->name, GF_LOG_CRITICAL, +                   "Quota " +                   "configuration store may be corrupt."); +            goto out;          } -        for (count = 0;; count++) { -                ret = quota_conf_read_gfid (fd, buf, &gfid_type, version); -                if (ret == 0) { -                        break; -                } else if (ret < 0) { -                        gf_log (THIS->name, GF_LOG_CRITICAL, "Quota " -                                "configuration store may be corrupt."); -                        goto out; -                } - -                if ((type == GF_QUOTA_OPTION_TYPE_LIST && -                     gfid_type == GF_QUOTA_CONF_TYPE_OBJECTS) || -                    (type == GF_QUOTA_OPTION_TYPE_LIST_OBJECTS && -                     gfid_type == GF_QUOTA_CONF_TYPE_USAGE)) -                        continue; +        if ((type == GF_QUOTA_OPTION_TYPE_LIST && +             gfid_type == GF_QUOTA_CONF_TYPE_OBJECTS) || +            (type == GF_QUOTA_OPTION_TYPE_LIST_OBJECTS && +             gfid_type == GF_QUOTA_CONF_TYPE_USAGE)) +            continue; -                max_count++; -        } -        ret = dict_set_int32 (xdata, "max_count", max_count); +        uuid_utoa_r(buf, gfid_str); +        ret = dict_set_str(xdata, "gfid", gfid_str);          if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Failed to set max_count"); -                goto out; +            gf_log("cli", GF_LOG_ERROR, "Failed to set gfid"); +            goto out;          } -        ret = sys_lseek (fd, 0L, SEEK_SET); -        if (ret < 0) { -                gf_log (THIS->name, GF_LOG_ERROR, "failed to move offset to " -                        "the beginning: %s", strerror (errno)); -                goto out; +        ret = proc->fn(frame, THIS, xdata); +        if (ret) { +            gf_log("cli", GF_LOG_ERROR, +                   "Failed to get quota " +                   "limits for %s", +                   uuid_utoa((unsigned char *)buf));          } -        ret = quota_conf_read_version (fd, &version); -        if (ret) -                goto out; -        for (count = 0;; count++) { -                ret = quota_conf_read_gfid (fd, buf, &gfid_type, version); -                if (ret == 0) { -                        break; -                } else if (ret < 0) { -                        gf_log (THIS->name, GF_LOG_CRITICAL, "Quota " -                                "configuration store may be corrupt."); -                        goto out; -                } +        dict_del(xdata, "gfid"); +        all_failed = all_failed && ret; +    } -                if ((type == GF_QUOTA_OPTION_TYPE_LIST && -                     gfid_type == GF_QUOTA_CONF_TYPE_OBJECTS) || -                    (type == GF_QUOTA_OPTION_TYPE_LIST_OBJECTS && -                     gfid_type == GF_QUOTA_CONF_TYPE_USAGE)) -                        continue; - -                uuid_utoa_r (buf, gfid_str); -                ret = dict_set_str (xdata, "gfid", gfid_str); -                if (ret) { -                        gf_log ("cli", GF_LOG_ERROR, "Failed to set gfid"); -                        goto out; -                } - -                ret = proc->fn (frame, THIS, xdata); -                if (ret) { -                        gf_log ("cli", GF_LOG_ERROR, "Failed to get quota " -                                "limits for %s", uuid_utoa ((unsigned char*)buf)); -                } - -                dict_del (xdata, "gfid"); -                all_failed = all_failed && ret; -        } - -        if (global_state->mode & GLUSTER_MODE_XML) { -                ret = cli_xml_output_vol_quota_limit_list_end (local); -                if (ret) { -                        gf_log ("cli", GF_LOG_ERROR, "Error in printing " -                                "xml output"); -                        goto out; -                } -        } - -        if (count > 0) { -                ret = all_failed? -1: 0; -        } else { -                ret = 0; +    if (global_state->mode & GLUSTER_MODE_XML) { +        ret = cli_xml_output_vol_quota_limit_list_end(local); +        if (ret) { +            gf_log("cli", GF_LOG_ERROR, +                   "Error in printing " +                   "xml output"); +            goto out;          } +    } +    if (count > 0) { +        ret = all_failed ? -1 : 0; +    } else { +        ret = 0; +    }  out: -        if (xml_err_flag) { -                ret = cli_xml_output_str ("volQuota", NULL, -1, 0, err_str); -                if (ret) { -                        gf_log ("cli", GF_LOG_ERROR, "Error outputting in " -                                "xml format"); -                } -        } - -        if (fd != -1) { -                sys_close (fd); -        } - -        GF_FREE (gfid_str); -        if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Could not fetch and display quota" -                        " limits"); -        } -        CLI_STACK_DESTROY (frame); -        return ret; +    if (xml_err_flag) { +        ret = cli_xml_output_str("volQuota", NULL, -1, 0, err_str); +        if (ret) { +            gf_log("cli", GF_LOG_ERROR, +                   "Error outputting in " +                   "xml format"); +        } +    } + +    if (fd != -1) { +        sys_close(fd); +    } + +    GF_FREE(gfid_str); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, +               "Could not fetch and display quota" +               " limits"); +    } +    CLI_STACK_DESTROY(frame); +    return ret;  } - -  int -cli_cmd_bitrot_cbk (struct cli_state *state, struct cli_cmd_word *word, -                    const char **words, int wordcount) +cli_cmd_bitrot_cbk(struct cli_state *state, struct cli_cmd_word *word, +                   const char **words, int wordcount)  { - -        int                     ret        = -1; -        int                     parse_err  = 0; -        call_frame_t            *frame     = NULL; -        dict_t                  *options   = NULL; -        cli_local_t             *local     = NULL; -        rpc_clnt_procedure_t    *proc      = NULL; -        int                     sent       = 0; +    int ret = -1; +    int parse_err = 0; +    call_frame_t *frame = NULL; +    dict_t *options = NULL; +    cli_local_t *local = NULL; +    rpc_clnt_procedure_t *proc = NULL; +    int sent = 0;  #if (USE_EVENTS) -        int                     cmd_type        = -1; -        int                     ret1            = -1; -        int                     event_type      = -1; -        char                    *tmp            = NULL; -        char                    *events_str     = NULL; +    int cmd_type = -1; +    int ret1 = -1; +    int event_type = -1; +    char *tmp = NULL; +    char *events_str = NULL;  #endif -        ret = cli_cmd_bitrot_parse (words, wordcount, &options); -        if (ret < 0) { -                cli_usage_out (word->pattern); -                parse_err = 1; -                goto out; -        } +    ret = cli_cmd_bitrot_parse(words, wordcount, &options); +    if (ret < 0) { +        cli_usage_out(word->pattern); +        parse_err = 1; +        goto out; +    } -        if (ret == 1) { -                /* this is 'volume bitrot help' */ -                cli_cmd_bitrot_help_cbk (state, word, words, wordcount); -                ret = 0; -                goto out2; -        } +    if (ret == 1) { +        /* this is 'volume bitrot help' */ +        cli_cmd_bitrot_help_cbk(state, word, words, wordcount); +        ret = 0; +        goto out2; +    } -        frame = create_frame (THIS, THIS->ctx->pool); -        if (!frame) { -                ret = -1; -                goto out; -        } +    frame = create_frame(THIS, THIS->ctx->pool); +    if (!frame) { +        ret = -1; +        goto out; +    } -        proc = &cli_rpc_prog->proctable[GLUSTER_CLI_BITROT]; +    proc = &cli_rpc_prog->proctable[GLUSTER_CLI_BITROT]; -        CLI_LOCAL_INIT (local, words, frame, options); +    CLI_LOCAL_INIT(local, words, frame, options); -        if (proc->fn) { -                ret = proc->fn (frame, THIS, options); -        } +    if (proc->fn) { +        ret = proc->fn(frame, THIS, options); +    }  out: -        if (ret) { -                cli_cmd_sent_status_get (&sent); -                if ((sent == 0) && (parse_err == 0)) -                    cli_err ("Bit rot command failed. Please check the cli " -                             "logs for more details"); - -        } +    if (ret) { +        cli_cmd_sent_status_get(&sent); +        if ((sent == 0) && (parse_err == 0)) +            cli_err( +                "Bit rot command failed. Please check the cli " +                "logs for more details"); +    }  #if (USE_EVENTS) -        if (ret == 0) { -                ret1 = dict_get_int32 (options, "type", &cmd_type); +    if (ret == 0) { +        ret1 = dict_get_int32(options, "type", &cmd_type); +        if (ret1) +            cmd_type = -1; +        else { +            ret1 = dict_get_str(options, "volname", &tmp); +            if (ret1) +                tmp = ""; +            gf_asprintf(&events_str, "name=%s", tmp); +        } + +        switch (cmd_type) { +            case GF_BITROT_OPTION_TYPE_ENABLE: +                event_type = EVENT_BITROT_ENABLE; +                break; +            case GF_BITROT_OPTION_TYPE_DISABLE: +                event_type = EVENT_BITROT_DISABLE; +                break; +            case GF_BITROT_CMD_SCRUB_ONDEMAND: +                event_type = EVENT_BITROT_SCRUB_ONDEMAND; +                break; +            case GF_BITROT_OPTION_TYPE_SCRUB_THROTTLE: +                event_type = EVENT_BITROT_SCRUB_THROTTLE; +                ret1 = dict_get_str(options, "scrub-throttle-value", &tmp);                  if (ret1) -                        cmd_type = -1; -                else { -                        ret1 = dict_get_str (options, "volname", &tmp); -                        if (ret1) -                                tmp = ""; -                        gf_asprintf (&events_str, "name=%s", tmp); -                } - -                switch (cmd_type) { -                case GF_BITROT_OPTION_TYPE_ENABLE: -                        event_type = EVENT_BITROT_ENABLE; -                        break; -                case GF_BITROT_OPTION_TYPE_DISABLE: -                        event_type = EVENT_BITROT_DISABLE; -                        break; -                case GF_BITROT_CMD_SCRUB_ONDEMAND: -                        event_type = EVENT_BITROT_SCRUB_ONDEMAND; -                        break; -                case GF_BITROT_OPTION_TYPE_SCRUB_THROTTLE: -                        event_type = EVENT_BITROT_SCRUB_THROTTLE; -                        ret1 = dict_get_str (options, "scrub-throttle-value", -                                             &tmp); -                        if (ret1) -                                tmp = ""; -                        gf_asprintf (&events_str, "%s;value=%s", events_str, -                                     tmp); -                        break; -                case GF_BITROT_OPTION_TYPE_SCRUB_FREQ: -                        event_type = EVENT_BITROT_SCRUB_FREQ; -                        ret1 = dict_get_str (options, "scrub-frequency-value", -                                             &tmp); -                        if (ret1) -                                tmp = ""; -                        gf_asprintf (&events_str, "%s;value=%s", events_str, -                                     tmp); -                        break; -                case GF_BITROT_OPTION_TYPE_SCRUB: -                        event_type = EVENT_BITROT_SCRUB_OPTION; -                        ret1 = dict_get_str (options, "scrub-value", &tmp); -                        if (ret1) -                                tmp = ""; -                        gf_asprintf (&events_str, "%s;value=%s", events_str, -                                     tmp); -                        break; -                default: -                        break; -                } +                    tmp = ""; +                gf_asprintf(&events_str, "%s;value=%s", events_str, tmp); +                break; +            case GF_BITROT_OPTION_TYPE_SCRUB_FREQ: +                event_type = EVENT_BITROT_SCRUB_FREQ; +                ret1 = dict_get_str(options, "scrub-frequency-value", &tmp); +                if (ret1) +                    tmp = ""; +                gf_asprintf(&events_str, "%s;value=%s", events_str, tmp); +                break; +            case GF_BITROT_OPTION_TYPE_SCRUB: +                event_type = EVENT_BITROT_SCRUB_OPTION; +                ret1 = dict_get_str(options, "scrub-value", &tmp); +                if (ret1) +                    tmp = ""; +                gf_asprintf(&events_str, "%s;value=%s", events_str, tmp); +                break; +            default: +                break; +        } -                if (event_type > -1) -                        gf_event (event_type, "%s", events_str); +        if (event_type > -1) +            gf_event(event_type, "%s", events_str); -                if (events_str) -                        GF_FREE (events_str); -        } +        if (events_str) +            GF_FREE(events_str); +    }  #endif -        CLI_STACK_DESTROY (frame); +    CLI_STACK_DESTROY(frame);  out2: -        return ret; +    return ret;  }  int -cli_cmd_quota_cbk (struct cli_state *state, struct cli_cmd_word *word, -                   const char **words, int wordcount) +cli_cmd_quota_cbk(struct cli_state *state, struct cli_cmd_word *word, +                  const char **words, int wordcount)  { - -        int                      ret       = 0; -        int                      parse_err = 0; -        int32_t                  type      = 0; -        rpc_clnt_procedure_t    *proc      = NULL; -        call_frame_t            *frame     = NULL; -        dict_t                  *options   = NULL; -        gf_answer_t              answer    = GF_ANSWER_NO; -        cli_local_t             *local     = NULL; -        int                      sent      = 0; -        char                    *volname   = NULL; -        const char *question = "Disabling quota will delete all the quota " -                               "configuration. Do you want to continue?"; - -        //parse **words into options dictionary -        if (strcmp (words[1], "inode-quota") == 0) { -                ret = cli_cmd_inode_quota_parse (words, wordcount, &options); -                if (ret < 0) { -                        cli_usage_out (word->pattern); -                        parse_err = 1; -                        goto out; -                } -        } else { -                ret = cli_cmd_quota_parse (words, wordcount, &options); - -                if (ret == 1) { -                        cli_cmd_quota_help_cbk (state, word, words, wordcount); -                        ret = 0; -                        goto out; -                } -                if (ret < 0) { -                        cli_usage_out (word->pattern); -                        parse_err = 1; -                        goto out; -                } +    int ret = 0; +    int parse_err = 0; +    int32_t type = 0; +    rpc_clnt_procedure_t *proc = NULL; +    call_frame_t *frame = NULL; +    dict_t *options = NULL; +    gf_answer_t answer = GF_ANSWER_NO; +    cli_local_t *local = NULL; +    int sent = 0; +    char *volname = NULL; +    const char *question = +        "Disabling quota will delete all the quota " +        "configuration. Do you want to continue?"; + +    // parse **words into options dictionary +    if (strcmp(words[1], "inode-quota") == 0) { +        ret = cli_cmd_inode_quota_parse(words, wordcount, &options); +        if (ret < 0) { +            cli_usage_out(word->pattern); +            parse_err = 1; +            goto out;          } +    } else { +        ret = cli_cmd_quota_parse(words, wordcount, &options); -        ret = dict_get_int32 (options, "type", &type); -        if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Failed to get opcode"); -                goto out; +        if (ret == 1) { +            cli_cmd_quota_help_cbk(state, word, words, wordcount); +            ret = 0; +            goto out; +        } +        if (ret < 0) { +            cli_usage_out(word->pattern); +            parse_err = 1; +            goto out;          } +    } -        //handle quota-disable and quota-list-all different from others -        switch (type) { +    ret = dict_get_int32(options, "type", &type); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, "Failed to get opcode"); +        goto out; +    } + +    // handle quota-disable and quota-list-all different from others +    switch (type) {          case GF_QUOTA_OPTION_TYPE_DISABLE: -                answer = cli_cmd_get_confirmation (state, question); -                if (answer == GF_ANSWER_NO) -                        goto out; -                break; +            answer = cli_cmd_get_confirmation(state, question); +            if (answer == GF_ANSWER_NO) +                goto out; +            break;          case GF_QUOTA_OPTION_TYPE_LIST:          case GF_QUOTA_OPTION_TYPE_LIST_OBJECTS: -                if (wordcount != 4) -                        break; -                ret = cli_cmd_quota_handle_list_all (words, options); -                goto out; -        default: +            if (wordcount != 4)                  break; -        } +            ret = cli_cmd_quota_handle_list_all(words, options); +            goto out; +        default: +            break; +    } -        ret = dict_get_str (options, "volname", &volname); -        if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Failed to get volume name"); -                goto out; -        } +    ret = dict_get_str(options, "volname", &volname); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, "Failed to get volume name"); +        goto out; +    } -        frame = create_frame (THIS, THIS->ctx->pool); -        if (!frame) { -                ret = -1; -                goto out; -        } +    frame = create_frame(THIS, THIS->ctx->pool); +    if (!frame) { +        ret = -1; +        goto out; +    } -        CLI_LOCAL_INIT (local, words, frame, options); -        proc = &cli_rpc_prog->proctable[GLUSTER_CLI_QUOTA]; +    CLI_LOCAL_INIT(local, words, frame, options); +    proc = &cli_rpc_prog->proctable[GLUSTER_CLI_QUOTA]; -        if (proc->fn) -                ret = proc->fn (frame, THIS, options); +    if (proc->fn) +        ret = proc->fn(frame, THIS, options);  out: -        if (ret) { -                cli_cmd_sent_status_get (&sent); -                if (sent == 0 && parse_err == 0) -                        cli_out ("Quota command failed. Please check the cli " -                                 "logs for more details"); -        } - -        /* Events for Quota */ -         if (ret == 0) { -                switch (type) { -                case GF_QUOTA_OPTION_TYPE_ENABLE: -                        gf_event (EVENT_QUOTA_ENABLE, "volume=%s", volname); -                        break; -                case GF_QUOTA_OPTION_TYPE_DISABLE: -                        gf_event (EVENT_QUOTA_DISABLE, "volume=%s", volname); -                        break; -                case GF_QUOTA_OPTION_TYPE_LIMIT_USAGE: -                        gf_event (EVENT_QUOTA_SET_USAGE_LIMIT, "volume=%s;" -                                  "path=%s;limit=%s", volname, words[4], -                                  words[5]); -                        break; -                case GF_QUOTA_OPTION_TYPE_LIMIT_OBJECTS: -                        gf_event (EVENT_QUOTA_SET_OBJECTS_LIMIT, "volume=%s;" -                                  "path=%s;limit=%s", volname, words[4], -                                  words[5]); -                        break; -                case GF_QUOTA_OPTION_TYPE_REMOVE: -                        gf_event (EVENT_QUOTA_REMOVE_USAGE_LIMIT, "volume=%s;" -                                  "path=%s", volname, words[4]); -                        break; -                case GF_QUOTA_OPTION_TYPE_REMOVE_OBJECTS: -                        gf_event (EVENT_QUOTA_REMOVE_OBJECTS_LIMIT, -                                  "volume=%s;" "path=%s", volname, words[4]); -                        break; -                case GF_QUOTA_OPTION_TYPE_ALERT_TIME: -                        gf_event (EVENT_QUOTA_ALERT_TIME, "volume=%s;time=%s", -                                  volname, words[4]); -                        break; -                case GF_QUOTA_OPTION_TYPE_SOFT_TIMEOUT: -                        gf_event (EVENT_QUOTA_SOFT_TIMEOUT, "volume=%s;" -                                  "soft-timeout=%s", volname, words[4]); -                        break; -                case GF_QUOTA_OPTION_TYPE_HARD_TIMEOUT: -                        gf_event (EVENT_QUOTA_HARD_TIMEOUT, "volume=%s;" -                                  "hard-timeout=%s", volname, words[4]); -                        break; -                case GF_QUOTA_OPTION_TYPE_DEFAULT_SOFT_LIMIT: -                        gf_event (EVENT_QUOTA_DEFAULT_SOFT_LIMIT, "volume=%s;" -                                  "default-soft-limit=%s", volname, words[4]); -                        break; -                } +    if (ret) { +        cli_cmd_sent_status_get(&sent); +        if (sent == 0 && parse_err == 0) +            cli_out( +                "Quota command failed. Please check the cli " +                "logs for more details"); +    } + +    /* Events for Quota */ +    if (ret == 0) { +        switch (type) { +            case GF_QUOTA_OPTION_TYPE_ENABLE: +                gf_event(EVENT_QUOTA_ENABLE, "volume=%s", volname); +                break; +            case GF_QUOTA_OPTION_TYPE_DISABLE: +                gf_event(EVENT_QUOTA_DISABLE, "volume=%s", volname); +                break; +            case GF_QUOTA_OPTION_TYPE_LIMIT_USAGE: +                gf_event(EVENT_QUOTA_SET_USAGE_LIMIT, +                         "volume=%s;" +                         "path=%s;limit=%s", +                         volname, words[4], words[5]); +                break; +            case GF_QUOTA_OPTION_TYPE_LIMIT_OBJECTS: +                gf_event(EVENT_QUOTA_SET_OBJECTS_LIMIT, +                         "volume=%s;" +                         "path=%s;limit=%s", +                         volname, words[4], words[5]); +                break; +            case GF_QUOTA_OPTION_TYPE_REMOVE: +                gf_event(EVENT_QUOTA_REMOVE_USAGE_LIMIT, +                         "volume=%s;" +                         "path=%s", +                         volname, words[4]); +                break; +            case GF_QUOTA_OPTION_TYPE_REMOVE_OBJECTS: +                gf_event(EVENT_QUOTA_REMOVE_OBJECTS_LIMIT, +                         "volume=%s;" +                         "path=%s", +                         volname, words[4]); +                break; +            case GF_QUOTA_OPTION_TYPE_ALERT_TIME: +                gf_event(EVENT_QUOTA_ALERT_TIME, "volume=%s;time=%s", volname, +                         words[4]); +                break; +            case GF_QUOTA_OPTION_TYPE_SOFT_TIMEOUT: +                gf_event(EVENT_QUOTA_SOFT_TIMEOUT, +                         "volume=%s;" +                         "soft-timeout=%s", +                         volname, words[4]); +                break; +            case GF_QUOTA_OPTION_TYPE_HARD_TIMEOUT: +                gf_event(EVENT_QUOTA_HARD_TIMEOUT, +                         "volume=%s;" +                         "hard-timeout=%s", +                         volname, words[4]); +                break; +            case GF_QUOTA_OPTION_TYPE_DEFAULT_SOFT_LIMIT: +                gf_event(EVENT_QUOTA_DEFAULT_SOFT_LIMIT, +                         "volume=%s;" +                         "default-soft-limit=%s", +                         volname, words[4]); +                break;          } +    } - -        CLI_STACK_DESTROY (frame); -        return ret; +    CLI_STACK_DESTROY(frame); +    return ret;  }  int -cli_cmd_volume_remove_brick_cbk (struct cli_state *state, -                                 struct cli_cmd_word *word, const char **words, -                                 int wordcount) +cli_cmd_volume_remove_brick_cbk(struct cli_state *state, +                                struct cli_cmd_word *word, const char **words, +                                int wordcount)  { -        int                     ret = -1; -        rpc_clnt_procedure_t    *proc = NULL; -        call_frame_t            *frame = NULL; -        dict_t                  *options = NULL; -        gf_answer_t             answer = GF_ANSWER_NO; -        int                     brick_count = 0; -        int                     sent = 0; -        int                     parse_error = 0; -        int                     need_question = 0; -        cli_local_t             *local = NULL; -        char                    *volname = NULL; +    int ret = -1; +    rpc_clnt_procedure_t *proc = NULL; +    call_frame_t *frame = NULL; +    dict_t *options = NULL; +    gf_answer_t answer = GF_ANSWER_NO; +    int brick_count = 0; +    int sent = 0; +    int parse_error = 0; +    int need_question = 0; +    cli_local_t *local = NULL; +    char *volname = NULL;  #if (USE_EVENTS) -        eventtypes_t            event = EVENT_LAST; -        char                    *event_str = NULL; -        int                     event_ret = -1; +    eventtypes_t event = EVENT_LAST; +    char *event_str = NULL; +    int event_ret = -1;  #endif -        int32_t                 command = GF_OP_CMD_NONE; -        char                    *question = NULL; - -        frame = create_frame (THIS, THIS->ctx->pool); -        if (!frame) -                goto out; +    int32_t command = GF_OP_CMD_NONE; +    char *question = NULL; -        ret = cli_cmd_volume_remove_brick_parse (state, words, wordcount, -                                                 &options, &need_question, -                                                 &brick_count, &command); -        if (ret) { -                cli_usage_out (word->pattern); -                parse_error = 1; -                goto out; -        } - -        if (command == GF_OP_CMD_COMMIT_FORCE) { -                question = "Remove-brick force will not migrate files from the " -                           "removed bricks, so they will no longer be available" -                           " on the volume.\nDo you want to continue?"; -        } else if (command == GF_OP_CMD_START) { -                question = "Running remove-brick with cluster.force-migration" -                           " enabled can result in data corruption. It is safer" -                           " to disable this option so that files that receive " -                           "writes during migration are not migrated.\nFiles " -                           "that are not migrated can then be manually copied " -                           "after the remove-brick commit operation.\nDo you " -                           "want to continue with your current " -                           "cluster.force-migration settings?"; -        } +    frame = create_frame(THIS, THIS->ctx->pool); +    if (!frame) +        goto out; -        if (!brick_count) { -                cli_err ("No bricks specified"); -                cli_usage_out (word->pattern); -                parse_error = 1; -                ret = -1; -                goto out; -        } -        ret = dict_get_str (options, "volname", &volname); -        if (ret || !volname) { -                gf_log ("cli", GF_LOG_ERROR, "Failed to fetch volname"); -                ret = -1; -                goto out; -        } +    ret = cli_cmd_volume_remove_brick_parse(state, words, wordcount, &options, +                                            &need_question, &brick_count, +                                            &command); +    if (ret) { +        cli_usage_out(word->pattern); +        parse_error = 1; +        goto out; +    } + +    if (command == GF_OP_CMD_COMMIT_FORCE) { +        question = +            "Remove-brick force will not migrate files from the " +            "removed bricks, so they will no longer be available" +            " on the volume.\nDo you want to continue?"; +    } else if (command == GF_OP_CMD_START) { +        question = +            "Running remove-brick with cluster.force-migration" +            " enabled can result in data corruption. It is safer" +            " to disable this option so that files that receive " +            "writes during migration are not migrated.\nFiles " +            "that are not migrated can then be manually copied " +            "after the remove-brick commit operation.\nDo you " +            "want to continue with your current " +            "cluster.force-migration settings?"; +    } + +    if (!brick_count) { +        cli_err("No bricks specified"); +        cli_usage_out(word->pattern); +        parse_error = 1; +        ret = -1; +        goto out; +    } +    ret = dict_get_str(options, "volname", &volname); +    if (ret || !volname) { +        gf_log("cli", GF_LOG_ERROR, "Failed to fetch volname"); +        ret = -1; +        goto out; +    }  #if (USE_EVENTS) -        event_ret = cli_event_remove_brick_str (options, &event_str, &event); +    event_ret = cli_event_remove_brick_str(options, &event_str, &event);  #endif -        if (!strcmp (volname, GLUSTER_SHARED_STORAGE)) { -                question = "Removing brick from the shared storage volume" -                           "(gluster_shared_storage), will affect features " -                           "like snapshot scheduler, geo-replication " -                           "and NFS-Ganesha. Do you still want to " -                           "continue?"; -                need_question = _gf_true; +    if (!strcmp(volname, GLUSTER_SHARED_STORAGE)) { +        question = +            "Removing brick from the shared storage volume" +            "(gluster_shared_storage), will affect features " +            "like snapshot scheduler, geo-replication " +            "and NFS-Ganesha. Do you still want to " +            "continue?"; +        need_question = _gf_true; +    } + +    if (!(state->mode & GLUSTER_MODE_SCRIPT) && need_question) { +        answer = cli_cmd_get_confirmation(state, question); +        if (GF_ANSWER_NO == answer) { +            ret = 0; +            goto out;          } +    } -        if (!(state->mode & GLUSTER_MODE_SCRIPT) && need_question) { -                answer = cli_cmd_get_confirmation (state, question); -                if (GF_ANSWER_NO == answer) { -                        ret = 0; -                        goto out; -                } -        } +    proc = &cli_rpc_prog->proctable[GLUSTER_CLI_REMOVE_BRICK]; -        proc = &cli_rpc_prog->proctable[GLUSTER_CLI_REMOVE_BRICK]; +    CLI_LOCAL_INIT(local, words, frame, options); -        CLI_LOCAL_INIT (local, words, frame, options); - -        if (proc->fn) { -                ret = proc->fn (frame, THIS, options); -        } +    if (proc->fn) { +        ret = proc->fn(frame, THIS, options); +    }  out: -        if (ret) { -                cli_cmd_sent_status_get (&sent); -                if ((sent == 0) && (parse_error == 0)) -                        cli_out ("Volume remove-brick failed"); -        } +    if (ret) { +        cli_cmd_sent_status_get(&sent); +        if ((sent == 0) && (parse_error == 0)) +            cli_out("Volume remove-brick failed"); +    }  #if (USE_EVENTS) -        if (!ret && !event_ret) -                gf_event (event, "%s", event_str); -        if (event_str) -                GF_FREE (event_str); +    if (!ret && !event_ret) +        gf_event(event, "%s", event_str); +    if (event_str) +        GF_FREE(event_str);  #endif -        CLI_STACK_DESTROY (frame); - - -        return ret; +    CLI_STACK_DESTROY(frame); +    return ret;  }  int -cli_cmd_volume_reset_brick_cbk (struct cli_state *state, -                                struct cli_cmd_word *word, -                                const char **words, -                                int wordcount) +cli_cmd_volume_reset_brick_cbk(struct cli_state *state, +                               struct cli_cmd_word *word, const char **words, +                               int wordcount)  { -        int                      ret          = -1; -        rpc_clnt_procedure_t    *proc         = NULL; -        call_frame_t            *frame        = NULL; -        dict_t                  *options      = NULL; -        int                      sent         = 0; -        int                      parse_error  = 0; -        cli_local_t             *local        = NULL; +    int ret = -1; +    rpc_clnt_procedure_t *proc = NULL; +    call_frame_t *frame = NULL; +    dict_t *options = NULL; +    int sent = 0; +    int parse_error = 0; +    cli_local_t *local = NULL;  #ifdef GF_SOLARIS_HOST_OS -        cli_out ("Command not supported on Solaris"); -        goto out; +    cli_out("Command not supported on Solaris"); +    goto out;  #endif -        proc = &cli_rpc_prog->proctable[GLUSTER_CLI_RESET_BRICK]; +    proc = &cli_rpc_prog->proctable[GLUSTER_CLI_RESET_BRICK]; -        frame = create_frame (THIS, THIS->ctx->pool); -        if (!frame) -                goto out; +    frame = create_frame(THIS, THIS->ctx->pool); +    if (!frame) +        goto out; +    ret = cli_cmd_volume_reset_brick_parse(words, wordcount, &options); -        ret = cli_cmd_volume_reset_brick_parse (words, wordcount, &options); +    if (ret) { +        cli_usage_out(word->pattern); +        parse_error = 1; +        goto out; +    } +    if (state->mode & GLUSTER_MODE_WIGNORE_PARTITION) { +        ret = dict_set_int32(options, "ignore-partition", _gf_true);          if (ret) { -                cli_usage_out (word->pattern); -                parse_error = 1; -                goto out; +            gf_log("cli", GF_LOG_ERROR, +                   "Failed to set ignore-" +                   "partition option"); +            goto out;          } +    } -        if (state->mode & GLUSTER_MODE_WIGNORE_PARTITION) { -                ret = dict_set_int32 (options, "ignore-partition", _gf_true); -                if (ret) { -                        gf_log ("cli", GF_LOG_ERROR, "Failed to set ignore-" -                                "partition option"); -                        goto out; -                } -        } +    CLI_LOCAL_INIT(local, words, frame, options); -        CLI_LOCAL_INIT (local, words, frame, options); - -        if (proc->fn) { -                ret = proc->fn (frame, THIS, options); -        } +    if (proc->fn) { +        ret = proc->fn(frame, THIS, options); +    }  out: -        if (ret) { -                cli_cmd_sent_status_get (&sent); -                if ((sent == 0) && (parse_error == 0)) -                        cli_out ("Volume reset-brick failed"); +    if (ret) { +        cli_cmd_sent_status_get(&sent); +        if ((sent == 0) && (parse_error == 0)) +            cli_out("Volume reset-brick failed"); +    } else { +        if (wordcount > 5) { +            gf_event(EVENT_BRICK_RESET_COMMIT, +                     "Volume=%s;source-brick=%s;" +                     "destination-brick=%s", +                     (char *)words[2], (char *)words[3], (char *)words[4]);          } else { -                if (wordcount > 5) { -                        gf_event (EVENT_BRICK_RESET_COMMIT, -                                  "Volume=%s;source-brick=%s;" -                                  "destination-brick=%s", -                                  (char *)words[2], (char *)words[3], -                                  (char *)words[4]); -                } else { -                        gf_event (EVENT_BRICK_RESET_START, -                                  "Volume=%s;source-brick=%s", -                                  (char *)words[2], (char *)words[3]); -                } +            gf_event(EVENT_BRICK_RESET_START, "Volume=%s;source-brick=%s", +                     (char *)words[2], (char *)words[3]);          } -        CLI_STACK_DESTROY (frame); +    } +    CLI_STACK_DESTROY(frame); -        return ret; +    return ret;  }  int -cli_cmd_volume_replace_brick_cbk (struct cli_state *state, -                                  struct cli_cmd_word *word, -                                  const char **words, -                                  int wordcount) +cli_cmd_volume_replace_brick_cbk(struct cli_state *state, +                                 struct cli_cmd_word *word, const char **words, +                                 int wordcount)  { -        int                      ret          = -1; -        rpc_clnt_procedure_t    *proc         = NULL; -        call_frame_t            *frame        = NULL; -        dict_t                  *options = NULL; -        int                      sent = 0; -        int                      parse_error = 0; -        cli_local_t             *local = NULL; +    int ret = -1; +    rpc_clnt_procedure_t *proc = NULL; +    call_frame_t *frame = NULL; +    dict_t *options = NULL; +    int sent = 0; +    int parse_error = 0; +    cli_local_t *local = NULL;  #ifdef GF_SOLARIS_HOST_OS -        cli_out ("Command not supported on Solaris"); -        goto out; +    cli_out("Command not supported on Solaris"); +    goto out;  #endif -        proc = &cli_rpc_prog->proctable[GLUSTER_CLI_REPLACE_BRICK]; +    proc = &cli_rpc_prog->proctable[GLUSTER_CLI_REPLACE_BRICK]; -        frame = create_frame (THIS, THIS->ctx->pool); -        if (!frame) -                goto out; +    frame = create_frame(THIS, THIS->ctx->pool); +    if (!frame) +        goto out; -        ret = cli_cmd_volume_replace_brick_parse (words, wordcount, &options); +    ret = cli_cmd_volume_replace_brick_parse(words, wordcount, &options); -        if (ret) { -                cli_usage_out (word->pattern); -                parse_error = 1; -                goto out; -        } +    if (ret) { +        cli_usage_out(word->pattern); +        parse_error = 1; +        goto out; +    } -        CLI_LOCAL_INIT (local, words, frame, options); +    CLI_LOCAL_INIT(local, words, frame, options); -        if (proc->fn) { -                ret = proc->fn (frame, THIS, options); -        } +    if (proc->fn) { +        ret = proc->fn(frame, THIS, options); +    }  out: -        if (ret) { -                cli_cmd_sent_status_get (&sent); -                if ((sent == 0) && (parse_error == 0)) -                        cli_out ("Volume replace-brick failed"); -        } else { -                gf_event (EVENT_BRICK_REPLACE, -                          "Volume=%s;source-brick=%s;destination-brick=%s", -                          (char *)words[2], (char *)words[3], (char *)words[4]); -        } -        CLI_STACK_DESTROY (frame); - -        return ret; +    if (ret) { +        cli_cmd_sent_status_get(&sent); +        if ((sent == 0) && (parse_error == 0)) +            cli_out("Volume replace-brick failed"); +    } else { +        gf_event(EVENT_BRICK_REPLACE, +                 "Volume=%s;source-brick=%s;destination-brick=%s", +                 (char *)words[2], (char *)words[3], (char *)words[4]); +    } +    CLI_STACK_DESTROY(frame); + +    return ret;  } -  int -cli_cmd_volume_set_transport_cbk (struct cli_state *state, -                                  struct cli_cmd_word *word, -                                  const char **words, int wordcount) +cli_cmd_volume_set_transport_cbk(struct cli_state *state, +                                 struct cli_cmd_word *word, const char **words, +                                 int wordcount)  { -        cli_cmd_broadcast_response (0); -        return 0; +    cli_cmd_broadcast_response(0); +    return 0;  }  int -cli_cmd_volume_top_cbk (struct cli_state *state, struct cli_cmd_word *word, -                          const char **words, int wordcount) +cli_cmd_volume_top_cbk(struct cli_state *state, struct cli_cmd_word *word, +                       const char **words, int wordcount)  { +    int ret = -1; +    rpc_clnt_procedure_t *proc = NULL; +    call_frame_t *frame = NULL; +    dict_t *options = NULL; +    int sent = 0; +    int parse_error = 0; +    cli_local_t *local = NULL; + +    ret = cli_cmd_volume_top_parse(words, wordcount, &options); + +    if (ret) { +        parse_error = 1; +        cli_usage_out(word->pattern); +        goto out; +    } -        int                     ret      = -1; -        rpc_clnt_procedure_t    *proc    = NULL; -        call_frame_t            *frame   = NULL; -        dict_t                  *options = NULL; -        int                     sent     = 0; -        int                     parse_error = 0; -        cli_local_t             *local = NULL; - -        ret = cli_cmd_volume_top_parse (words, wordcount, &options); - -        if (ret) { -                parse_error = 1; -                cli_usage_out (word->pattern); -                goto out; -        } - -        proc = &cli_rpc_prog->proctable[GLUSTER_CLI_TOP_VOLUME]; +    proc = &cli_rpc_prog->proctable[GLUSTER_CLI_TOP_VOLUME]; -        frame = create_frame (THIS, THIS->ctx->pool); -        if (!frame) -                goto out; +    frame = create_frame(THIS, THIS->ctx->pool); +    if (!frame) +        goto out; -        CLI_LOCAL_INIT (local, words, frame, options); +    CLI_LOCAL_INIT(local, words, frame, options); -        if (proc->fn) { -                ret = proc->fn (frame, THIS, options); -        } +    if (proc->fn) { +        ret = proc->fn(frame, THIS, options); +    }  out: -        if (ret) { -                cli_cmd_sent_status_get (&sent); -                if ((sent == 0) && (parse_error == 0)) -                        cli_out ("Volume top failed"); -        } +    if (ret) { +        cli_cmd_sent_status_get(&sent); +        if ((sent == 0) && (parse_error == 0)) +            cli_out("Volume top failed"); +    } -        CLI_STACK_DESTROY (frame); - -        return ret; +    CLI_STACK_DESTROY(frame); +    return ret;  } -  int -cli_cmd_log_rotate_cbk (struct cli_state *state, struct cli_cmd_word *word, -                        const char **words, int wordcount) +cli_cmd_log_rotate_cbk(struct cli_state *state, struct cli_cmd_word *word, +                       const char **words, int wordcount)  { -        int                     ret = -1; -        rpc_clnt_procedure_t    *proc = NULL; -        call_frame_t            *frame = NULL; -        dict_t                  *options = NULL; -        int                     sent = 0; -        int                     parse_error = 0; -        cli_local_t             *local = NULL; - -        if (!((wordcount == 4) || (wordcount == 5))) { -                cli_usage_out (word->pattern); -                parse_error = 1; -                goto out; -        } +    int ret = -1; +    rpc_clnt_procedure_t *proc = NULL; +    call_frame_t *frame = NULL; +    dict_t *options = NULL; +    int sent = 0; +    int parse_error = 0; +    cli_local_t *local = NULL; + +    if (!((wordcount == 4) || (wordcount == 5))) { +        cli_usage_out(word->pattern); +        parse_error = 1; +        goto out; +    } -        if (!((strcmp ("rotate", words[2]) == 0) || -              (strcmp ("rotate", words[3]) == 0))) { -                cli_usage_out (word->pattern); -                parse_error = 1; -                goto out; -        } +    if (!((strcmp("rotate", words[2]) == 0) || +          (strcmp("rotate", words[3]) == 0))) { +        cli_usage_out(word->pattern); +        parse_error = 1; +        goto out; +    } -        proc = &cli_rpc_prog->proctable[GLUSTER_CLI_LOG_ROTATE]; +    proc = &cli_rpc_prog->proctable[GLUSTER_CLI_LOG_ROTATE]; -        frame = create_frame (THIS, THIS->ctx->pool); -        if (!frame) -                goto out; +    frame = create_frame(THIS, THIS->ctx->pool); +    if (!frame) +        goto out; -        ret = cli_cmd_log_rotate_parse (words, wordcount, &options); -        if (ret) -                goto out; +    ret = cli_cmd_log_rotate_parse(words, wordcount, &options); +    if (ret) +        goto out; -        CLI_LOCAL_INIT (local, words, frame, options); +    CLI_LOCAL_INIT(local, words, frame, options); -        if (proc->fn) { -                ret = proc->fn (frame, THIS, options); -        } +    if (proc->fn) { +        ret = proc->fn(frame, THIS, options); +    }  out: -        if (ret) { -                cli_cmd_sent_status_get (&sent); -                if ((sent == 0) && (parse_error == 0)) -                        cli_out ("Volume log rotate failed"); -        } -        CLI_STACK_DESTROY (frame); - -        return ret; +    if (ret) { +        cli_cmd_sent_status_get(&sent); +        if ((sent == 0) && (parse_error == 0)) +            cli_out("Volume log rotate failed"); +    } +    CLI_STACK_DESTROY(frame); + +    return ret;  }  #if (SYNCDAEMON_COMPILE)  static int -cli_check_gsync_present () +cli_check_gsync_present()  { -        char                buff[PATH_MAX] = {0, }; -        runner_t            runner = {0,}; -        char                *ptr = NULL; -        int                 ret = 0; - -        ret = setenv ("_GLUSTERD_CALLED_", "1", 1); -        if (-1 == ret) { -                gf_log ("", GF_LOG_WARNING, "setenv syscall failed, hence could" -                        "not assert if geo-replication is installed"); -                goto out; -        } - -        runinit (&runner); -        runner_add_args (&runner, GSYNCD_PREFIX"/gsyncd", "--version", NULL); -        runner_redir (&runner, STDOUT_FILENO, RUN_PIPE); -        ret = runner_start (&runner); -        if (ret == -1) { -                gf_log ("", GF_LOG_INFO, "geo-replication not installed"); -                goto out; -        } +    char buff[PATH_MAX] = { +        0, +    }; +    runner_t runner = { +        0, +    }; +    char *ptr = NULL; +    int ret = 0; + +    ret = setenv("_GLUSTERD_CALLED_", "1", 1); +    if (-1 == ret) { +        gf_log("", GF_LOG_WARNING, +               "setenv syscall failed, hence could" +               "not assert if geo-replication is installed"); +        goto out; +    } + +    runinit(&runner); +    runner_add_args(&runner, GSYNCD_PREFIX "/gsyncd", "--version", NULL); +    runner_redir(&runner, STDOUT_FILENO, RUN_PIPE); +    ret = runner_start(&runner); +    if (ret == -1) { +        gf_log("", GF_LOG_INFO, "geo-replication not installed"); +        goto out; +    } -        ptr = fgets(buff, sizeof(buff), runner_chio (&runner, STDOUT_FILENO)); -        if (ptr) { -                if (!strstr (buff, "gsyncd")) { -                        ret  = -1; -                        goto out; -                } -        } else { -                ret = -1; -                goto out; +    ptr = fgets(buff, sizeof(buff), runner_chio(&runner, STDOUT_FILENO)); +    if (ptr) { +        if (!strstr(buff, "gsyncd")) { +            ret = -1; +            goto out;          } +    } else { +        ret = -1; +        goto out; +    } -        ret = runner_end (&runner); +    ret = runner_end(&runner); -        if (ret) -                gf_log ("", GF_LOG_ERROR, "geo-replication not installed"); +    if (ret) +        gf_log("", GF_LOG_ERROR, "geo-replication not installed");  out: -        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); -        return ret ? -1 : 0; - +    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret); +    return ret ? -1 : 0;  }  void -cli_cmd_check_gsync_exists_cbk (struct cli_cmd *this) +cli_cmd_check_gsync_exists_cbk(struct cli_cmd *this)  { +    int ret = 0; -        int             ret = 0; - -        ret = cli_check_gsync_present (); -        if (ret) -                this->disable = _gf_true; - +    ret = cli_check_gsync_present(); +    if (ret) +        this->disable = _gf_true;  }  #endif  int -cli_cmd_volume_gsync_set_cbk (struct cli_state *state, struct cli_cmd_word *word, -                              const char **words, int wordcount) +cli_cmd_volume_gsync_set_cbk(struct cli_state *state, struct cli_cmd_word *word, +                             const char **words, int wordcount)  { -        int                      ret     = 0; -        int                      parse_err = 0; -        dict_t                  *options = NULL; -        rpc_clnt_procedure_t    *proc    = NULL; -        call_frame_t            *frame   = NULL; -        cli_local_t             *local   = NULL; +    int ret = 0; +    int parse_err = 0; +    dict_t *options = NULL; +    rpc_clnt_procedure_t *proc = NULL; +    call_frame_t *frame = NULL; +    cli_local_t *local = NULL;  #if (USE_EVENTS) -        int                      ret1       = -1; -        int                      cmd_type   = -1; -        int                      tmpi       = 0; -        char                    *tmp        = NULL; -        char                    *events_str = NULL; -        int                      event_type = -1; +    int ret1 = -1; +    int cmd_type = -1; +    int tmpi = 0; +    char *tmp = NULL; +    char *events_str = NULL; +    int event_type = -1;  #endif -        proc = &cli_rpc_prog->proctable [GLUSTER_CLI_GSYNC_SET]; +    proc = &cli_rpc_prog->proctable[GLUSTER_CLI_GSYNC_SET]; -        frame = create_frame (THIS, THIS->ctx->pool); -        if (frame == NULL) { -                ret = -1; -                goto out; -        } +    frame = create_frame(THIS, THIS->ctx->pool); +    if (frame == NULL) { +        ret = -1; +        goto out; +    } -        ret = cli_cmd_gsync_set_parse (words, wordcount, &options); -        if (ret) { -                cli_usage_out (word->pattern); -                parse_err = 1; -                goto out; -        } +    ret = cli_cmd_gsync_set_parse(words, wordcount, &options); +    if (ret) { +        cli_usage_out(word->pattern); +        parse_err = 1; +        goto out; +    } -        CLI_LOCAL_INIT (local, words, frame, options); +    CLI_LOCAL_INIT(local, words, frame, options); -        if (proc->fn) -                ret = proc->fn (frame, THIS, options); +    if (proc->fn) +        ret = proc->fn(frame, THIS, options);  out: -        if (ret && parse_err == 0) -                cli_out (GEOREP" command failed"); +    if (ret && parse_err == 0) +        cli_out(GEOREP " command failed");  #if (USE_EVENTS) -        if (ret == 0) { -                events_str = gf_strdup (""); - -                /* Type of Geo-rep Action - Create, Start etc */ -                ret1 = dict_get_int32 (options, "type", &cmd_type); +    if (ret == 0) { +        events_str = gf_strdup(""); + +        /* Type of Geo-rep Action - Create, Start etc */ +        ret1 = dict_get_int32(options, "type", &cmd_type); +        if (ret1) +            cmd_type = -1; + +        /* Only capture Events for modification commands */ +        switch (cmd_type) { +            case GF_GSYNC_OPTION_TYPE_CREATE: +                event_type = EVENT_GEOREP_CREATE; +                break; +            case GF_GSYNC_OPTION_TYPE_START: +                event_type = EVENT_GEOREP_START; +                break; +            case GF_GSYNC_OPTION_TYPE_STOP: +                event_type = EVENT_GEOREP_STOP; +                break; +            case GF_GSYNC_OPTION_TYPE_PAUSE: +                event_type = EVENT_GEOREP_PAUSE; +                break; +            case GF_GSYNC_OPTION_TYPE_RESUME: +                event_type = EVENT_GEOREP_RESUME; +                break; +            case GF_GSYNC_OPTION_TYPE_DELETE: +                event_type = EVENT_GEOREP_DELETE; +                break; +            case GF_GSYNC_OPTION_TYPE_CONFIG: +                ret1 = dict_get_str(options, "subop", &tmp);                  if (ret1) -                        cmd_type = -1; - -                /* Only capture Events for modification commands */ -                switch (cmd_type) { -                case GF_GSYNC_OPTION_TYPE_CREATE: -                        event_type = EVENT_GEOREP_CREATE; -                        break; -                case GF_GSYNC_OPTION_TYPE_START: -                        event_type = EVENT_GEOREP_START; -                        break; -                case GF_GSYNC_OPTION_TYPE_STOP: -                        event_type = EVENT_GEOREP_STOP; -                        break; -                case GF_GSYNC_OPTION_TYPE_PAUSE: -                        event_type = EVENT_GEOREP_PAUSE; -                        break; -                case GF_GSYNC_OPTION_TYPE_RESUME: -                        event_type = EVENT_GEOREP_RESUME; -                        break; -                case GF_GSYNC_OPTION_TYPE_DELETE: -                        event_type = EVENT_GEOREP_DELETE; -                        break; -                case GF_GSYNC_OPTION_TYPE_CONFIG: -                        ret1 = dict_get_str (options, "subop", &tmp); -                        if (ret1) -                                tmp = ""; - -                        /* For Config Set additionally capture key and value */ -                        /* For Config Reset capture key */ -                        if (strcmp (tmp, "set") == 0) { -                                event_type = EVENT_GEOREP_CONFIG_SET; - -                                ret1 = dict_get_str (options, "op_name", &tmp); -                                if (ret1) -                                        tmp = ""; - -                                gf_asprintf (&events_str, "%soption=%s;", -                                             events_str, tmp); - -                                ret1 = dict_get_str (options, "op_value", &tmp); -                                if (ret1) -                                        tmp = ""; - -                                gf_asprintf (&events_str, "%svalue=%s;", -                                             events_str, tmp); -                        } else if (strcmp (tmp, "del") == 0) { -                                event_type = EVENT_GEOREP_CONFIG_RESET; - -                                ret1 = dict_get_str (options, "op_name", &tmp); -                                if (ret1) -                                        tmp = ""; - -                                gf_asprintf (&events_str, "%soption=%s;", -                                             events_str, tmp); -                        } -                        break; -                default: -                        break; -                } +                    tmp = ""; -                if (event_type > -1) { -                        /* Capture all optional arguments used */ -                        ret1 = dict_get_int32 (options, "force", &tmpi); -                        if (ret1 == 0) -                                gf_asprintf (&events_str, "%sforce=%d;", -                                             events_str, tmpi); - -                        ret1 = dict_get_int32 (options, "push_pem", &tmpi); -                        if (ret1 == 0) -                                gf_asprintf (&events_str, "%spush_pem=%d;", -                                             events_str, tmpi); - -                        ret1 = dict_get_int32 (options, "no_verify", &tmpi); -                        if (ret1 == 0) -                                gf_asprintf (&events_str, "%sno_verify=%d;", -                                             events_str, tmpi); - -                        ret1 = dict_get_int32 (options, "ssh_port", &tmpi); -                        if (ret1 == 0) -                                gf_asprintf (&events_str, "%sssh_port=%d;", -                                             events_str, tmpi); - -                        ret1 = dict_get_int32 (options, "reset-sync-time", -                                               &tmpi); -                        if (ret1 == 0) -                                gf_asprintf (&events_str, -                                             "%sreset_sync_time=%d;", -                                             events_str, tmpi); - -                        /* Capture Master and Slave Info */ -                        ret1 = dict_get_str (options, "master", &tmp); -                        if (ret1) -                                tmp = ""; -                        gf_asprintf (&events_str, "%smaster=%s;", -                                     events_str, tmp); - -                        ret1 = dict_get_str (options, "slave", &tmp); -                        if (ret1) -                                tmp = ""; -                        gf_asprintf (&events_str, "%sslave=%s", -                                     events_str, tmp); - -                        gf_event (event_type, "%s", events_str); -                } +                /* For Config Set additionally capture key and value */ +                /* For Config Reset capture key */ +                if (strcmp(tmp, "set") == 0) { +                    event_type = EVENT_GEOREP_CONFIG_SET; -                /* Allocated by gf_strdup and gf_asprintf */ -                GF_FREE (events_str); -        } -#endif +                    ret1 = dict_get_str(options, "op_name", &tmp); +                    if (ret1) +                        tmp = ""; -        CLI_STACK_DESTROY (frame); +                    gf_asprintf(&events_str, "%soption=%s;", events_str, tmp); -        return ret; -} +                    ret1 = dict_get_str(options, "op_value", &tmp); +                    if (ret1) +                        tmp = ""; -int -cli_cmd_volume_status_cbk (struct cli_state *state, -                           struct cli_cmd_word *word, -                           const char **words, int wordcount) -{ -        int                   ret         = -1; -        rpc_clnt_procedure_t *proc        = NULL; -        call_frame_t         *frame       = NULL; -        dict_t               *dict        = NULL; -        uint32_t              cmd         = 0; -        cli_local_t          *local       = NULL; +                    gf_asprintf(&events_str, "%svalue=%s;", events_str, tmp); +                } else if (strcmp(tmp, "del") == 0) { +                    event_type = EVENT_GEOREP_CONFIG_RESET; -        ret = cli_cmd_volume_status_parse (words, wordcount, &dict); +                    ret1 = dict_get_str(options, "op_name", &tmp); +                    if (ret1) +                        tmp = ""; -        if (ret) { -                cli_usage_out (word->pattern); -                goto out; +                    gf_asprintf(&events_str, "%soption=%s;", events_str, tmp); +                } +                break; +            default: +                break;          } -        ret = dict_get_uint32 (dict, "cmd", &cmd); -        if (ret) -                goto out; - -        if (!(cmd & GF_CLI_STATUS_ALL)) { -                /* for one volume or brick */ -                proc = &cli_rpc_prog->proctable[GLUSTER_CLI_STATUS_VOLUME]; -        } else { -                /* volume status all or all detail */ -                proc = &cli_rpc_prog->proctable[GLUSTER_CLI_STATUS_ALL]; -        } +        if (event_type > -1) { +            /* Capture all optional arguments used */ +            ret1 = dict_get_int32(options, "force", &tmpi); +            if (ret1 == 0) +                gf_asprintf(&events_str, "%sforce=%d;", events_str, tmpi); -        if (!proc->fn) -                goto out; +            ret1 = dict_get_int32(options, "push_pem", &tmpi); +            if (ret1 == 0) +                gf_asprintf(&events_str, "%spush_pem=%d;", events_str, tmpi); -        frame = create_frame (THIS, THIS->ctx->pool); -        if (!frame) -                goto out; +            ret1 = dict_get_int32(options, "no_verify", &tmpi); +            if (ret1 == 0) +                gf_asprintf(&events_str, "%sno_verify=%d;", events_str, tmpi); -        CLI_LOCAL_INIT (local, words, frame, dict); +            ret1 = dict_get_int32(options, "ssh_port", &tmpi); +            if (ret1 == 0) +                gf_asprintf(&events_str, "%sssh_port=%d;", events_str, tmpi); -        ret = proc->fn (frame, THIS, dict); +            ret1 = dict_get_int32(options, "reset-sync-time", &tmpi); +            if (ret1 == 0) +                gf_asprintf(&events_str, "%sreset_sync_time=%d;", events_str, +                            tmpi); -out: -        CLI_STACK_DESTROY (frame); +            /* Capture Master and Slave Info */ +            ret1 = dict_get_str(options, "master", &tmp); +            if (ret1) +                tmp = ""; +            gf_asprintf(&events_str, "%smaster=%s;", events_str, tmp); -        return ret; -} +            ret1 = dict_get_str(options, "slave", &tmp); +            if (ret1) +                tmp = ""; +            gf_asprintf(&events_str, "%sslave=%s", events_str, tmp); +            gf_event(event_type, "%s", events_str); +        } -int -cli_get_detail_status (dict_t *dict, int i, cli_volume_status_t *status) -{ -        uint64_t                   free            = 0; -        uint64_t                   total           = 0; -        char                       key[1024]       = {0}; -        int                        ret             = 0; +        /* Allocated by gf_strdup and gf_asprintf */ +        GF_FREE(events_str); +    } +#endif -        snprintf (key, sizeof (key), "brick%d.free", i); -        ret = dict_get_uint64 (dict, key, &free); +    CLI_STACK_DESTROY(frame); -        status->free = gf_uint64_2human_readable (free); -        if (!status->free) -                goto out; +    return ret; +} -        snprintf (key, sizeof (key), "brick%d.total", i); -        ret = dict_get_uint64 (dict, key, &total); +int +cli_cmd_volume_status_cbk(struct cli_state *state, struct cli_cmd_word *word, +                          const char **words, int wordcount) +{ +    int ret = -1; +    rpc_clnt_procedure_t *proc = NULL; +    call_frame_t *frame = NULL; +    dict_t *dict = NULL; +    uint32_t cmd = 0; +    cli_local_t *local = NULL; -        status->total = gf_uint64_2human_readable (total); -        if (!status->total) -                goto out; +    ret = cli_cmd_volume_status_parse(words, wordcount, &dict); -        snprintf (key, sizeof (key), "brick%d.device", i); -        ret = dict_get_str (dict, key, &(status->device)); -        if (ret) -                status->device = NULL; +    if (ret) { +        cli_usage_out(word->pattern); +        goto out; +    } -        snprintf (key, sizeof (key), "brick%d.block_size", i); -        ret = dict_get_uint64 (dict, key, &(status->block_size)); -        if (ret) { -                ret = 0; -                status->block_size = 0; -        } +    ret = dict_get_uint32(dict, "cmd", &cmd); +    if (ret) +        goto out; -        snprintf (key, sizeof (key), "brick%d.mnt_options", i); -        ret = dict_get_str (dict, key, &(status->mount_options)); -        if (ret) -                status->mount_options = NULL; +    if (!(cmd & GF_CLI_STATUS_ALL)) { +        /* for one volume or brick */ +        proc = &cli_rpc_prog->proctable[GLUSTER_CLI_STATUS_VOLUME]; +    } else { +        /* volume status all or all detail */ +        proc = &cli_rpc_prog->proctable[GLUSTER_CLI_STATUS_ALL]; +    } -        snprintf (key, sizeof (key), "brick%d.fs_name", i); -        ret = dict_get_str (dict, key, &(status->fs_name)); -        if (ret) { -                ret = 0; -                status->fs_name = NULL; -        } +    if (!proc->fn) +        goto out; -        snprintf (key, sizeof (key), "brick%d.inode_size", i); -        ret = dict_get_str (dict, key, &(status->inode_size)); -        if (ret) -                status->inode_size = NULL; +    frame = create_frame(THIS, THIS->ctx->pool); +    if (!frame) +        goto out; -        snprintf (key, sizeof (key), "brick%d.total_inodes", i); -        ret = dict_get_uint64 (dict, key, -                        &(status->total_inodes)); -        if (ret) -                status->total_inodes = 0; +    CLI_LOCAL_INIT(local, words, frame, dict); -        snprintf (key, sizeof (key), "brick%d.free_inodes", i); -        ret = dict_get_uint64 (dict, key, &(status->free_inodes)); -        if (ret) { -                ret = 0; -                status->free_inodes = 0; -        } +    ret = proc->fn(frame, THIS, dict); +out: +    CLI_STACK_DESTROY(frame); - out: -        return ret; +    return ret;  } -void -cli_print_detailed_status (cli_volume_status_t *status) +int +cli_get_detail_status(dict_t *dict, int i, cli_volume_status_t *status)  { -        cli_out ("%-20s : %-20s", "Brick", status->brick); +    uint64_t free = 0; +    uint64_t total = 0; +    char key[1024] = {0}; +    int ret = 0; -        if (status->online) { -                cli_out ("%-20s : %-20d", "TCP Port", status->port); -                cli_out ("%-20s : %-20d", "RDMA Port", status->rdma_port); -        } else { -                cli_out ("%-20s : %-20s", "TCP Port", "N/A"); -                cli_out ("%-20s : %-20s", "RDMA Port", "N/A"); -        } +    snprintf(key, sizeof(key), "brick%d.free", i); +    ret = dict_get_uint64(dict, key, &free); -        cli_out ("%-20s : %-20c", "Online", (status->online) ? 'Y' : 'N'); -        cli_out ("%-20s : %-20s", "Pid", status->pid_str); +    status->free = gf_uint64_2human_readable(free); +    if (!status->free) +        goto out; -        if (status->fs_name) -                cli_out ("%-20s : %-20s", "File System", status->fs_name); -        else -                cli_out ("%-20s : %-20s", "File System", "N/A"); +    snprintf(key, sizeof(key), "brick%d.total", i); +    ret = dict_get_uint64(dict, key, &total); -        if (status->device) -                cli_out ("%-20s : %-20s", "Device", status->device); -        else -                cli_out ("%-20s : %-20s", "Device", "N/A"); +    status->total = gf_uint64_2human_readable(total); +    if (!status->total) +        goto out; -        if (status->mount_options) { -                cli_out ("%-20s : %-20s", "Mount Options", -                         status->mount_options); -        } else { -                cli_out ("%-20s : %-20s", "Mount Options", "N/A"); -        } +    snprintf(key, sizeof(key), "brick%d.device", i); +    ret = dict_get_str(dict, key, &(status->device)); +    if (ret) +        status->device = NULL; -        if (status->inode_size) { -                cli_out ("%-20s : %-20s", "Inode Size", -                         status->inode_size); -        } else { -                cli_out ("%-20s : %-20s", "Inode Size", "N/A"); -        } -        if (status->free) -                cli_out ("%-20s : %-20s", "Disk Space Free", status->free); -        else -                cli_out ("%-20s : %-20s", "Disk Space Free", "N/A"); +    snprintf(key, sizeof(key), "brick%d.block_size", i); +    ret = dict_get_uint64(dict, key, &(status->block_size)); +    if (ret) { +        ret = 0; +        status->block_size = 0; +    } -        if (status->total) -                cli_out ("%-20s : %-20s", "Total Disk Space", status->total); -        else -                cli_out ("%-20s : %-20s", "Total Disk Space", "N/A"); +    snprintf(key, sizeof(key), "brick%d.mnt_options", i); +    ret = dict_get_str(dict, key, &(status->mount_options)); +    if (ret) +        status->mount_options = NULL; +    snprintf(key, sizeof(key), "brick%d.fs_name", i); +    ret = dict_get_str(dict, key, &(status->fs_name)); +    if (ret) { +        ret = 0; +        status->fs_name = NULL; +    } + +    snprintf(key, sizeof(key), "brick%d.inode_size", i); +    ret = dict_get_str(dict, key, &(status->inode_size)); +    if (ret) +        status->inode_size = NULL; + +    snprintf(key, sizeof(key), "brick%d.total_inodes", i); +    ret = dict_get_uint64(dict, key, &(status->total_inodes)); +    if (ret) +        status->total_inodes = 0; + +    snprintf(key, sizeof(key), "brick%d.free_inodes", i); +    ret = dict_get_uint64(dict, key, &(status->free_inodes)); +    if (ret) { +        ret = 0; +        status->free_inodes = 0; +    } -        if (status->total_inodes) { -                cli_out ("%-20s : %-20"GF_PRI_INODE, "Inode Count", -                         status->total_inodes); -        } else { -                cli_out ("%-20s : %-20s", "Inode Count", "N/A"); -        } +out: +    return ret; +} -        if (status->free_inodes) { -                cli_out ("%-20s : %-20"GF_PRI_INODE, "Free Inodes", -                         status->free_inodes); -        } else { -                cli_out ("%-20s : %-20s", "Free Inodes", "N/A"); -        } +void +cli_print_detailed_status(cli_volume_status_t *status) +{ +    cli_out("%-20s : %-20s", "Brick", status->brick); + +    if (status->online) { +        cli_out("%-20s : %-20d", "TCP Port", status->port); +        cli_out("%-20s : %-20d", "RDMA Port", status->rdma_port); +    } else { +        cli_out("%-20s : %-20s", "TCP Port", "N/A"); +        cli_out("%-20s : %-20s", "RDMA Port", "N/A"); +    } + +    cli_out("%-20s : %-20c", "Online", (status->online) ? 'Y' : 'N'); +    cli_out("%-20s : %-20s", "Pid", status->pid_str); + +    if (status->fs_name) +        cli_out("%-20s : %-20s", "File System", status->fs_name); +    else +        cli_out("%-20s : %-20s", "File System", "N/A"); + +    if (status->device) +        cli_out("%-20s : %-20s", "Device", status->device); +    else +        cli_out("%-20s : %-20s", "Device", "N/A"); + +    if (status->mount_options) { +        cli_out("%-20s : %-20s", "Mount Options", status->mount_options); +    } else { +        cli_out("%-20s : %-20s", "Mount Options", "N/A"); +    } + +    if (status->inode_size) { +        cli_out("%-20s : %-20s", "Inode Size", status->inode_size); +    } else { +        cli_out("%-20s : %-20s", "Inode Size", "N/A"); +    } +    if (status->free) +        cli_out("%-20s : %-20s", "Disk Space Free", status->free); +    else +        cli_out("%-20s : %-20s", "Disk Space Free", "N/A"); + +    if (status->total) +        cli_out("%-20s : %-20s", "Total Disk Space", status->total); +    else +        cli_out("%-20s : %-20s", "Total Disk Space", "N/A"); + +    if (status->total_inodes) { +        cli_out("%-20s : %-20" GF_PRI_INODE, "Inode Count", +                status->total_inodes); +    } else { +        cli_out("%-20s : %-20s", "Inode Count", "N/A"); +    } + +    if (status->free_inodes) { +        cli_out("%-20s : %-20" GF_PRI_INODE, "Free Inodes", +                status->free_inodes); +    } else { +        cli_out("%-20s : %-20s", "Free Inodes", "N/A"); +    }  }  int -cli_print_brick_status (cli_volume_status_t *status) +cli_print_brick_status(cli_volume_status_t *status)  { -        int  fieldlen = CLI_VOL_STATUS_BRICK_LEN; -        int  bricklen = 0; -        char *p = NULL; -        int  num_spaces = 0; - -        p = status->brick; -        bricklen = strlen (p); -        while (bricklen > 0) { -                if (bricklen > fieldlen) { -                        cli_out ("%.*s", fieldlen, p); -                        p += fieldlen; -                        bricklen -= fieldlen; -                } else { -                        num_spaces = (fieldlen - bricklen) + 1; -                        printf ("%s", p); -                        while (num_spaces-- != 0) -                                printf (" "); -                        if (status->port || status->rdma_port) { -                                if (status->online) -                                        cli_out ("%-10d%-11d%-8c%-5s", -                                                 status->port, -                                                 status->rdma_port, -                                                 status->online?'Y':'N', -                                                 status->pid_str); -                                else -                                        cli_out ("%-10s%-11s%-8c%-5s", -                                                 "N/A", -                                                 "N/A", -                                                 status->online?'Y':'N', -                                                 status->pid_str); -                        } -                        else -                                cli_out ("%-10s%-11s%-8c%-5s", -                                         "N/A", "N/A", status->online?'Y':'N', -                                         status->pid_str); -                        bricklen = 0; -                } +    int fieldlen = CLI_VOL_STATUS_BRICK_LEN; +    int bricklen = 0; +    char *p = NULL; +    int num_spaces = 0; + +    p = status->brick; +    bricklen = strlen(p); +    while (bricklen > 0) { +        if (bricklen > fieldlen) { +            cli_out("%.*s", fieldlen, p); +            p += fieldlen; +            bricklen -= fieldlen; +        } else { +            num_spaces = (fieldlen - bricklen) + 1; +            printf("%s", p); +            while (num_spaces-- != 0) +                printf(" "); +            if (status->port || status->rdma_port) { +                if (status->online) +                    cli_out("%-10d%-11d%-8c%-5s", status->port, +                            status->rdma_port, status->online ? 'Y' : 'N', +                            status->pid_str); +                else +                    cli_out("%-10s%-11s%-8c%-5s", "N/A", "N/A", +                            status->online ? 'Y' : 'N', status->pid_str); +            } else +                cli_out("%-10s%-11s%-8c%-5s", "N/A", "N/A", +                        status->online ? 'Y' : 'N', status->pid_str); +            bricklen = 0;          } +    } -        return 0; +    return 0;  } -#define NEEDS_GLFS_HEAL(op) ((op == GF_SHD_OP_SBRAIN_HEAL_FROM_BIGGER_FILE) || \ -                             (op == GF_SHD_OP_SBRAIN_HEAL_FROM_LATEST_MTIME) ||\ -                             (op == GF_SHD_OP_SBRAIN_HEAL_FROM_BRICK) ||      \ -                             (op == GF_SHD_OP_INDEX_SUMMARY) ||               \ -                             (op == GF_SHD_OP_SPLIT_BRAIN_FILES) ||           \ -                             (op == GF_SHD_OP_GRANULAR_ENTRY_HEAL_ENABLE) || \ -                             (op == GF_SHD_OP_HEAL_SUMMARY)) +#define NEEDS_GLFS_HEAL(op)                                                    \ +    ((op == GF_SHD_OP_SBRAIN_HEAL_FROM_BIGGER_FILE) ||                         \ +     (op == GF_SHD_OP_SBRAIN_HEAL_FROM_LATEST_MTIME) ||                        \ +     (op == GF_SHD_OP_SBRAIN_HEAL_FROM_BRICK) ||                               \ +     (op == GF_SHD_OP_INDEX_SUMMARY) || (op == GF_SHD_OP_SPLIT_BRAIN_FILES) || \ +     (op == GF_SHD_OP_GRANULAR_ENTRY_HEAL_ENABLE) ||                           \ +     (op == GF_SHD_OP_HEAL_SUMMARY))  int -cli_launch_glfs_heal (int heal_op, dict_t *options) +cli_launch_glfs_heal(int heal_op, dict_t *options)  { -        char      buff[PATH_MAX] = {0}; -        runner_t  runner         = {0}; -        char      *filename      = NULL; -        char      *hostname      = NULL; -        char      *path          = NULL; -        char      *volname       = NULL; -        char      *out           = NULL; -        int        ret           = 0; - -        runinit (&runner); -        ret = dict_get_str (options, "volname", &volname); -        runner_add_args (&runner, SBIN_DIR"/glfsheal", volname, NULL); -        runner_redir (&runner, STDOUT_FILENO, RUN_PIPE); - -        switch (heal_op) { +    char buff[PATH_MAX] = {0}; +    runner_t runner = {0}; +    char *filename = NULL; +    char *hostname = NULL; +    char *path = NULL; +    char *volname = NULL; +    char *out = NULL; +    int ret = 0; + +    runinit(&runner); +    ret = dict_get_str(options, "volname", &volname); +    runner_add_args(&runner, SBIN_DIR "/glfsheal", volname, NULL); +    runner_redir(&runner, STDOUT_FILENO, RUN_PIPE); + +    switch (heal_op) {          case GF_SHD_OP_INDEX_SUMMARY: -                if (global_state->mode & GLUSTER_MODE_XML) { -                        runner_add_args (&runner, "xml", NULL); -                } -                break; +            if (global_state->mode & GLUSTER_MODE_XML) { +                runner_add_args(&runner, "xml", NULL); +            } +            break;          case GF_SHD_OP_SBRAIN_HEAL_FROM_BIGGER_FILE: -                ret = dict_get_str (options, "file", &filename); -                runner_add_args (&runner, "bigger-file", filename, NULL); -                break; +            ret = dict_get_str(options, "file", &filename); +            runner_add_args(&runner, "bigger-file", filename, NULL); +            break;          case GF_SHD_OP_SBRAIN_HEAL_FROM_LATEST_MTIME: -                ret = dict_get_str (options, "file", &filename); -                runner_add_args (&runner, "latest-mtime", filename, NULL); -                break; +            ret = dict_get_str(options, "file", &filename); +            runner_add_args(&runner, "latest-mtime", filename, NULL); +            break;          case GF_SHD_OP_SBRAIN_HEAL_FROM_BRICK: -                ret = dict_get_str (options, "heal-source-hostname", -                                    &hostname); -                ret = dict_get_str (options, "heal-source-brickpath", -                                    &path); -                runner_add_args (&runner, "source-brick", NULL); -                runner_argprintf (&runner, "%s:%s", hostname, path); -                if (dict_get_str (options, "file", &filename) == 0) -                        runner_argprintf (&runner, filename); -                break; +            ret = dict_get_str(options, "heal-source-hostname", &hostname); +            ret = dict_get_str(options, "heal-source-brickpath", &path); +            runner_add_args(&runner, "source-brick", NULL); +            runner_argprintf(&runner, "%s:%s", hostname, path); +            if (dict_get_str(options, "file", &filename) == 0) +                runner_argprintf(&runner, filename); +            break;          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); -                } -                break; +            runner_add_args(&runner, "split-brain-info", NULL); +            if (global_state->mode & GLUSTER_MODE_XML) { +                runner_add_args(&runner, "xml", NULL); +            } +            break;          case GF_SHD_OP_GRANULAR_ENTRY_HEAL_ENABLE:          case GF_SHD_OP_GRANULAR_ENTRY_HEAL_DISABLE: -                runner_add_args (&runner, "granular-entry-heal-op", NULL); -                break; +            runner_add_args(&runner, "granular-entry-heal-op", NULL); +            break;          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); -                } -                break; +            runner_add_args(&runner, "info-summary", NULL); +            if (global_state->mode & GLUSTER_MODE_XML) { +                runner_add_args(&runner, "xml", NULL); +            } +            break;          default: -                ret = -1; -                goto out; -        } -        ret = runner_start (&runner); -        if (ret == -1) -                goto out; -        while ((out = fgets (buff, sizeof(buff), -                             runner_chio (&runner, STDOUT_FILENO)))) { -                printf ("%s", out); -        } -        ret = runner_end (&runner); +            ret = -1; +            goto out; +    } +    ret = runner_start(&runner); +    if (ret == -1) +        goto out; +    while (( +        out = fgets(buff, sizeof(buff), runner_chio(&runner, STDOUT_FILENO)))) { +        printf("%s", out); +    } +    ret = runner_end(&runner);  out: -        return ret; +    return ret;  }  int -cli_cmd_volume_heal_cbk (struct cli_state *state, struct cli_cmd_word *word, -                          const char **words, int wordcount) +cli_cmd_volume_heal_cbk(struct cli_state *state, struct cli_cmd_word *word, +                        const char **words, int wordcount)  { -        int                     ret = -1; -        rpc_clnt_procedure_t    *proc = NULL; -        call_frame_t            *frame = NULL; -        int                     sent = 0; -        int                     parse_error = 0; -        dict_t                  *options = NULL; -        xlator_t                *this = NULL; -        cli_local_t             *local = NULL; -        int                     heal_op = 0; - -        this = THIS; -        frame = create_frame (this, this->ctx->pool); -        if (!frame) -                goto out; +    int ret = -1; +    rpc_clnt_procedure_t *proc = NULL; +    call_frame_t *frame = NULL; +    int sent = 0; +    int parse_error = 0; +    dict_t *options = NULL; +    xlator_t *this = NULL; +    cli_local_t *local = NULL; +    int heal_op = 0; + +    this = THIS; +    frame = create_frame(this, this->ctx->pool); +    if (!frame) +        goto out; -        if (wordcount < 3) { -               cli_usage_out (word->pattern); -               parse_error = 1; -               goto out; -        } +    if (wordcount < 3) { +        cli_usage_out(word->pattern); +        parse_error = 1; +        goto out; +    } -        ret = cli_cmd_volume_heal_options_parse (words, wordcount, &options); -        if (ret) { -                cli_usage_out (word->pattern); -                parse_error = 1; -                goto out; -        } -        ret = dict_get_int32 (options, "heal-op", &heal_op); +    ret = cli_cmd_volume_heal_options_parse(words, wordcount, &options); +    if (ret) { +        cli_usage_out(word->pattern); +        parse_error = 1; +        goto out; +    } +    ret = dict_get_int32(options, "heal-op", &heal_op); +    if (ret < 0) +        goto out; +    if (NEEDS_GLFS_HEAL(heal_op)) { +        ret = cli_launch_glfs_heal(heal_op, options);          if (ret < 0) -                goto out; -        if (NEEDS_GLFS_HEAL (heal_op)) { -                ret = cli_launch_glfs_heal (heal_op, options); -                if (ret < 0) -                        goto out; -                if (heal_op != GF_SHD_OP_GRANULAR_ENTRY_HEAL_ENABLE) -                        goto out; -        } +            goto out; +        if (heal_op != GF_SHD_OP_GRANULAR_ENTRY_HEAL_ENABLE) +            goto out; +    } -        proc = &cli_rpc_prog->proctable[GLUSTER_CLI_HEAL_VOLUME]; +    proc = &cli_rpc_prog->proctable[GLUSTER_CLI_HEAL_VOLUME]; -        CLI_LOCAL_INIT (local, words, frame, options); +    CLI_LOCAL_INIT(local, words, frame, options); -        if (proc->fn) { -                ret = proc->fn (frame, THIS, options); -        } +    if (proc->fn) { +        ret = proc->fn(frame, THIS, options); +    }  out: -        if (ret) { -                cli_cmd_sent_status_get (&sent); -                if ((sent == 0) && (parse_error == 0) && -                    !(global_state->mode & GLUSTER_MODE_XML)) { -                        cli_out ("Volume heal failed."); -                } +    if (ret) { +        cli_cmd_sent_status_get(&sent); +        if ((sent == 0) && (parse_error == 0) && +            !(global_state->mode & GLUSTER_MODE_XML)) { +            cli_out("Volume heal failed.");          } +    } -        CLI_STACK_DESTROY (frame); +    CLI_STACK_DESTROY(frame); -        return ret; +    return ret;  }  int -cli_cmd_volume_statedump_cbk (struct cli_state *state, struct cli_cmd_word *word, -                              const char **words, int wordcount) +cli_cmd_volume_statedump_cbk(struct cli_state *state, struct cli_cmd_word *word, +                             const char **words, int wordcount)  { -        int                             ret = -1; -        rpc_clnt_procedure_t            *proc = NULL; -        call_frame_t                    *frame = NULL; -        dict_t                          *options = NULL; -        int                             sent = 0; -        int                             parse_error = 0; -        cli_local_t                     *local = NULL; - -        frame = create_frame (THIS, THIS->ctx->pool); -        if (!frame) -                goto out; +    int ret = -1; +    rpc_clnt_procedure_t *proc = NULL; +    call_frame_t *frame = NULL; +    dict_t *options = NULL; +    int sent = 0; +    int parse_error = 0; +    cli_local_t *local = NULL; + +    frame = create_frame(THIS, THIS->ctx->pool); +    if (!frame) +        goto out; -        if (wordcount < 3) { -                cli_usage_out (word->pattern); -                parse_error = 1; -                goto out; -        } +    if (wordcount < 3) { +        cli_usage_out(word->pattern); +        parse_error = 1; +        goto out; +    } -        if (wordcount >= 3) { -               ret = cli_cmd_volume_statedump_options_parse (words, wordcount, -                                                              &options); -               if (ret) { -                       parse_error = 1; -                       gf_log ("cli", GF_LOG_ERROR, "Error parsing " -                               "statedump options"); -                       cli_out ("Error parsing options"); -                       cli_usage_out (word->pattern); -               } +    if (wordcount >= 3) { +        ret = cli_cmd_volume_statedump_options_parse(words, wordcount, +                                                     &options); +        if (ret) { +            parse_error = 1; +            gf_log("cli", GF_LOG_ERROR, +                   "Error parsing " +                   "statedump options"); +            cli_out("Error parsing options"); +            cli_usage_out(word->pattern);          } +    } -        ret = dict_set_str (options, "volname", (char *)words[2]); -        if (ret) -                goto out; +    ret = dict_set_str(options, "volname", (char *)words[2]); +    if (ret) +        goto out; -        proc = &cli_rpc_prog->proctable[GLUSTER_CLI_STATEDUMP_VOLUME]; +    proc = &cli_rpc_prog->proctable[GLUSTER_CLI_STATEDUMP_VOLUME]; -        CLI_LOCAL_INIT (local, words, frame, options); +    CLI_LOCAL_INIT(local, words, frame, options); -        if (proc->fn) { -                ret = proc->fn (frame, THIS, options); -        } +    if (proc->fn) { +        ret = proc->fn(frame, THIS, options); +    }  out: -        if (ret) { -                cli_cmd_sent_status_get (&sent); -                if ((sent == 0) && (parse_error == 0)) -                        cli_out ("Volume statedump failed"); -        } +    if (ret) { +        cli_cmd_sent_status_get(&sent); +        if ((sent == 0) && (parse_error == 0)) +            cli_out("Volume statedump failed"); +    } -        CLI_STACK_DESTROY (frame); +    CLI_STACK_DESTROY(frame); -        return ret; +    return ret;  }  int -cli_cmd_volume_list_cbk (struct cli_state *state, struct cli_cmd_word *word, -                         const char **words, int wordcount) +cli_cmd_volume_list_cbk(struct cli_state *state, struct cli_cmd_word *word, +                        const char **words, int wordcount)  { -        int                     ret = -1; -        call_frame_t            *frame = NULL; -        rpc_clnt_procedure_t    *proc = NULL; -        int                     sent = 0; +    int ret = -1; +    call_frame_t *frame = NULL; +    rpc_clnt_procedure_t *proc = NULL; +    int sent = 0; -        frame = create_frame (THIS, THIS->ctx->pool); -        if (!frame) -                goto out; +    frame = create_frame(THIS, THIS->ctx->pool); +    if (!frame) +        goto out; -        proc = &cli_rpc_prog->proctable[GLUSTER_CLI_LIST_VOLUME]; -        if (proc->fn) { -                ret = proc->fn (frame, THIS, NULL); -        } +    proc = &cli_rpc_prog->proctable[GLUSTER_CLI_LIST_VOLUME]; +    if (proc->fn) { +        ret = proc->fn(frame, THIS, NULL); +    }  out: -        if (ret) { -                cli_cmd_sent_status_get (&sent); -                if (sent == 0) -                        cli_out ("Volume list failed"); -        } +    if (ret) { +        cli_cmd_sent_status_get(&sent); +        if (sent == 0) +            cli_out("Volume list failed"); +    } -        CLI_STACK_DESTROY (frame); +    CLI_STACK_DESTROY(frame); -        return ret; +    return ret;  }  int -cli_cmd_volume_clearlocks_cbk (struct cli_state *state, -                               struct cli_cmd_word *word, -                               const char **words, int wordcount) +cli_cmd_volume_clearlocks_cbk(struct cli_state *state, +                              struct cli_cmd_word *word, const char **words, +                              int wordcount)  { -        int                             ret = -1; -        rpc_clnt_procedure_t            *proc = NULL; -        call_frame_t                    *frame = NULL; -        dict_t                          *options = NULL; -        int                             sent = 0; -        int                             parse_error = 0; -        cli_local_t                     *local = NULL; - -        frame = create_frame (THIS, THIS->ctx->pool); -        if (!frame) -                goto out; - -        if (wordcount < 7 || wordcount > 8) { -                cli_usage_out (word->pattern); -                parse_error = 1; -                goto out; -        } - -       ret = cli_cmd_volume_clrlks_opts_parse (words, wordcount, &options); -       if (ret) { -               parse_error = 1; -               gf_log ("cli", GF_LOG_ERROR, "Error parsing " -                       "clear-locks options"); -               cli_out ("Error parsing options"); -               cli_usage_out (word->pattern); -       } +    int ret = -1; +    rpc_clnt_procedure_t *proc = NULL; +    call_frame_t *frame = NULL; +    dict_t *options = NULL; +    int sent = 0; +    int parse_error = 0; +    cli_local_t *local = NULL; + +    frame = create_frame(THIS, THIS->ctx->pool); +    if (!frame) +        goto out; -        ret = dict_set_str (options, "volname", (char *)words[2]); -        if (ret) -                goto out; +    if (wordcount < 7 || wordcount > 8) { +        cli_usage_out(word->pattern); +        parse_error = 1; +        goto out; +    } + +    ret = cli_cmd_volume_clrlks_opts_parse(words, wordcount, &options); +    if (ret) { +        parse_error = 1; +        gf_log("cli", GF_LOG_ERROR, +               "Error parsing " +               "clear-locks options"); +        cli_out("Error parsing options"); +        cli_usage_out(word->pattern); +    } + +    ret = dict_set_str(options, "volname", (char *)words[2]); +    if (ret) +        goto out; -        ret = dict_set_str (options, "path", (char *)words[3]); -        if (ret) -                goto out; +    ret = dict_set_str(options, "path", (char *)words[3]); +    if (ret) +        goto out; -        proc = &cli_rpc_prog->proctable[GLUSTER_CLI_CLRLOCKS_VOLUME]; +    proc = &cli_rpc_prog->proctable[GLUSTER_CLI_CLRLOCKS_VOLUME]; -        CLI_LOCAL_INIT (local, words, frame, options); +    CLI_LOCAL_INIT(local, words, frame, options); -        if (proc->fn) { -                ret = proc->fn (frame, THIS, options); -        } +    if (proc->fn) { +        ret = proc->fn(frame, THIS, options); +    }  out: -        if (ret) { -                cli_cmd_sent_status_get (&sent); -                if ((sent == 0) && (parse_error == 0)) -                        cli_out ("Volume clear-locks failed"); -        } +    if (ret) { +        cli_cmd_sent_status_get(&sent); +        if ((sent == 0) && (parse_error == 0)) +            cli_out("Volume clear-locks failed"); +    } -        CLI_STACK_DESTROY (frame); +    CLI_STACK_DESTROY(frame); -        return ret; +    return ret;  }  int -cli_cmd_volume_barrier_cbk (struct cli_state *state, struct cli_cmd_word *word, -                            const char **words, int wordcount) +cli_cmd_volume_barrier_cbk(struct cli_state *state, struct cli_cmd_word *word, +                           const char **words, int wordcount)  { -        int ret = -1; -        rpc_clnt_procedure_t *proc = NULL; -        call_frame_t *frame = NULL; -        dict_t *options = NULL; -        int sent = 0; -        int parse_error = 0; -        cli_local_t *local = NULL; - -        frame = create_frame (THIS, THIS->ctx->pool); -        if (!frame) -                goto out; +    int ret = -1; +    rpc_clnt_procedure_t *proc = NULL; +    call_frame_t *frame = NULL; +    dict_t *options = NULL; +    int sent = 0; +    int parse_error = 0; +    cli_local_t *local = NULL; + +    frame = create_frame(THIS, THIS->ctx->pool); +    if (!frame) +        goto out; -        if (wordcount != 4) { -                cli_usage_out (word->pattern); -                parse_error = 1; -                goto out; -        } +    if (wordcount != 4) { +        cli_usage_out(word->pattern); +        parse_error = 1; +        goto out; +    } -        options = dict_new(); -        if (!options) { -                ret = -1; -                goto out; -        } -        ret = dict_set_str(options, "volname", (char *)words[2]); -        if (ret) -                goto out; +    options = dict_new(); +    if (!options) { +        ret = -1; +        goto out; +    } +    ret = dict_set_str(options, "volname", (char *)words[2]); +    if (ret) +        goto out; -        ret = dict_set_str (options, "barrier", (char *)words[3]); -        if (ret) -                goto out; +    ret = dict_set_str(options, "barrier", (char *)words[3]); +    if (ret) +        goto out; -        proc = &cli_rpc_prog->proctable[GLUSTER_CLI_BARRIER_VOLUME]; +    proc = &cli_rpc_prog->proctable[GLUSTER_CLI_BARRIER_VOLUME]; -        CLI_LOCAL_INIT (local, words, frame, options); +    CLI_LOCAL_INIT(local, words, frame, options); -        if (proc->fn) -                ret = proc->fn (frame, THIS, options); +    if (proc->fn) +        ret = proc->fn(frame, THIS, options);  out: -        if (ret) { -                cli_cmd_sent_status_get (&sent); -                if ((sent == 0) && (parse_error == 0)) -                        cli_err ("Volume barrier failed"); -        } -        CLI_STACK_DESTROY (frame); - -        return ret; +    if (ret) { +        cli_cmd_sent_status_get(&sent); +        if ((sent == 0) && (parse_error == 0)) +            cli_err("Volume barrier failed"); +    } +    CLI_STACK_DESTROY(frame); + +    return ret;  }  int -cli_cmd_volume_getopt_cbk (struct cli_state *state, struct cli_cmd_word *word, -                        const char **words, int wordcount) +cli_cmd_volume_getopt_cbk(struct cli_state *state, struct cli_cmd_word *word, +                          const char **words, int wordcount)  { -        int                   ret       = -1; -        rpc_clnt_procedure_t *proc      = NULL; -        call_frame_t         *frame     = NULL; -        dict_t               *options   = NULL; -        int                   sent      = 0; -        int                   parse_err = 0; -        cli_local_t          *local     = NULL; - -        if (wordcount != 4) { -                cli_usage_out (word->pattern); -                parse_err = 1; -                goto out; -        } +    int ret = -1; +    rpc_clnt_procedure_t *proc = NULL; +    call_frame_t *frame = NULL; +    dict_t *options = NULL; +    int sent = 0; +    int parse_err = 0; +    cli_local_t *local = NULL; + +    if (wordcount != 4) { +        cli_usage_out(word->pattern); +        parse_err = 1; +        goto out; +    } -        frame = create_frame (THIS, THIS->ctx->pool); -        if (!frame) -                goto out; +    frame = create_frame(THIS, THIS->ctx->pool); +    if (!frame) +        goto out; -        options = dict_new (); -        if (!options) -                goto out; +    options = dict_new(); +    if (!options) +        goto out; -        ret = dict_set_str (options, "volname", (char *)words[2]); -        if (ret) -                goto out; +    ret = dict_set_str(options, "volname", (char *)words[2]); +    if (ret) +        goto out; -        ret = dict_set_str (options, "key", (char *)words[3]); -        if (ret) -                goto out; +    ret = dict_set_str(options, "key", (char *)words[3]); +    if (ret) +        goto out; -        proc = &cli_rpc_prog->proctable[GLUSTER_CLI_GET_VOL_OPT]; +    proc = &cli_rpc_prog->proctable[GLUSTER_CLI_GET_VOL_OPT]; -        CLI_LOCAL_INIT (local, words, frame, options); +    CLI_LOCAL_INIT(local, words, frame, options); -        if (proc->fn) -                ret = proc->fn (frame, THIS, options); +    if (proc->fn) +        ret = proc->fn(frame, THIS, options);  out: -        if (ret) { -                cli_cmd_sent_status_get (&sent); -                if ((sent == 0) && (parse_err == 0)) -                        cli_err ("Volume get option failed"); -        } -        CLI_STACK_DESTROY (frame); -        return ret; +    if (ret) { +        cli_cmd_sent_status_get(&sent); +        if ((sent == 0) && (parse_err == 0)) +            cli_err("Volume get option failed"); +    } +    CLI_STACK_DESTROY(frame); +    return ret;  } -  /* This is a bit of a hack to display the help. The current bitrot cmd   * format does not work well when registering the cmds.   * Ideally the should have been of the form @@ -3214,430 +3197,372 @@ out:  struct cli_cmd bitrot_cmds[] = { -        {"volume bitrot help", -         cli_cmd_bitrot_help_cbk, -         "display help for volume bitrot commands" -        }, - -        {"volume bitrot <VOLNAME> {enable|disable}", -         NULL, /*cli_cmd_bitrot_cbk,*/ -         "Enable/disable bitrot for volume <VOLNAME>" -        }, - -        {"volume bitrot <VOLNAME> scrub-throttle {lazy|normal|aggressive}", -         NULL, /*cli_cmd_bitrot_cbk,*/ -         "Set the speed of the scrubber for volume <VOLNAME>" -        }, - -        {"volume bitrot <VOLNAME> scrub-frequency {hourly|daily|weekly|biweekly" -         "|monthly}", -         NULL, /*cli_cmd_bitrot_cbk,*/ -         "Set the frequency of the scrubber for volume <VOLNAME>" -        }, - -        {"volume bitrot <VOLNAME> scrub {pause|resume|status|ondemand}", -         NULL, /*cli_cmd_bitrot_cbk,*/ -         "Pause/resume the scrubber for <VOLNAME>. Status displays the status of " -         "the scrubber. ondemand starts the scrubber immediately." -        }, - -        {"volume bitrot <VOLNAME> {enable|disable}\n" -         "volume bitrot <volname> scrub-throttle {lazy|normal|aggressive}\n" -         "volume bitrot <volname> scrub-frequency {hourly|daily|weekly|biweekly" -         "|monthly}\n" -         "volume bitrot <volname> scrub {pause|resume|status|ondemand}", -         cli_cmd_bitrot_cbk, -         NULL -        }, - -        { NULL, NULL, NULL } -}; +    {"volume bitrot help", cli_cmd_bitrot_help_cbk, +     "display help for volume bitrot commands"}, + +    {"volume bitrot <VOLNAME> {enable|disable}", NULL, /*cli_cmd_bitrot_cbk,*/ +     "Enable/disable bitrot for volume <VOLNAME>"}, + +    {"volume bitrot <VOLNAME> scrub-throttle {lazy|normal|aggressive}", +     NULL, /*cli_cmd_bitrot_cbk,*/ +     "Set the speed of the scrubber for volume <VOLNAME>"}, + +    {"volume bitrot <VOLNAME> scrub-frequency {hourly|daily|weekly|biweekly" +     "|monthly}", +     NULL, /*cli_cmd_bitrot_cbk,*/ +     "Set the frequency of the scrubber for volume <VOLNAME>"}, +    {"volume bitrot <VOLNAME> scrub {pause|resume|status|ondemand}", +     NULL, /*cli_cmd_bitrot_cbk,*/ +     "Pause/resume the scrubber for <VOLNAME>. Status displays the status of " +     "the scrubber. ondemand starts the scrubber immediately."}, + +    {"volume bitrot <VOLNAME> {enable|disable}\n" +     "volume bitrot <volname> scrub-throttle {lazy|normal|aggressive}\n" +     "volume bitrot <volname> scrub-frequency {hourly|daily|weekly|biweekly" +     "|monthly}\n" +     "volume bitrot <volname> scrub {pause|resume|status|ondemand}", +     cli_cmd_bitrot_cbk, NULL}, + +    {NULL, NULL, NULL}};  struct cli_cmd quota_cmds[] = { -        /* Quota commands */ -        {"volume quota help", -         cli_cmd_quota_help_cbk, -         "display help for volume quota commands" -        }, - -        {"volume quota <VOLNAME> {enable|disable|list [<path> ...]| " -         "list-objects [<path> ...] | remove <path>| remove-objects <path> | " -         "default-soft-limit <percent>}", -         cli_cmd_quota_cbk, -         "Enable/disable and configure quota for <VOLNAME>" -        }, - -        {"volume quota <VOLNAME> {limit-usage <path> <size> [<percent>]}", -         cli_cmd_quota_cbk, -         "Set maximum size for <path> for <VOLNAME>" -        }, - -        {"volume quota <VOLNAME> {limit-objects <path> <number> [<percent>]}", -         cli_cmd_quota_cbk, -         "Set the maximum number of entries allowed in <path> for <VOLNAME>" -        }, - -        {"volume quota <VOLNAME> {alert-time|soft-timeout|hard-timeout} {<time>}", -         cli_cmd_quota_cbk, -         "Set quota timeout for <VOLNAME>" -        }, - -        { "volume inode-quota <VOLNAME> enable", -          cli_cmd_quota_cbk, -          "Enable/disable inode-quota for <VOLNAME>" -        }, - -        { "volume quota <VOLNAME> {enable|disable|list [<path> ...]| " -          "list-objects [<path> ...] | remove <path>| remove-objects <path> | " -          "default-soft-limit <percent>}\n" -          "volume quota <VOLNAME> {limit-usage <path> <size> [<percent>]}\n" -          "volume quota <VOLNAME> {limit-objects <path> <number> [<percent>]}\n" -          "volume quota <VOLNAME> {alert-time|soft-timeout|hard-timeout} {<time>}", -          cli_cmd_quota_cbk, -          NULL -        }, - -        { NULL, NULL, NULL } -}; +    /* Quota commands */ +    {"volume quota help", cli_cmd_quota_help_cbk, +     "display help for volume quota commands"}, + +    {"volume quota <VOLNAME> {enable|disable|list [<path> ...]| " +     "list-objects [<path> ...] | remove <path>| remove-objects <path> | " +     "default-soft-limit <percent>}", +     cli_cmd_quota_cbk, "Enable/disable and configure quota for <VOLNAME>"}, + +    {"volume quota <VOLNAME> {limit-usage <path> <size> [<percent>]}", +     cli_cmd_quota_cbk, "Set maximum size for <path> for <VOLNAME>"}, + +    {"volume quota <VOLNAME> {limit-objects <path> <number> [<percent>]}", +     cli_cmd_quota_cbk, +     "Set the maximum number of entries allowed in <path> for <VOLNAME>"}, + +    {"volume quota <VOLNAME> {alert-time|soft-timeout|hard-timeout} {<time>}", +     cli_cmd_quota_cbk, "Set quota timeout for <VOLNAME>"}, + +    {"volume inode-quota <VOLNAME> enable", cli_cmd_quota_cbk, +     "Enable/disable inode-quota for <VOLNAME>"}, + +    {"volume quota <VOLNAME> {enable|disable|list [<path> ...]| " +     "list-objects [<path> ...] | remove <path>| remove-objects <path> | " +     "default-soft-limit <percent>}\n" +     "volume quota <VOLNAME> {limit-usage <path> <size> [<percent>]}\n" +     "volume quota <VOLNAME> {limit-objects <path> <number> [<percent>]}\n" +     "volume quota <VOLNAME> {alert-time|soft-timeout|hard-timeout} {<time>}", +     cli_cmd_quota_cbk, NULL}, + +    {NULL, NULL, NULL}};  struct cli_cmd tier_cmds[] = { -        { "volume tier help", -          cli_cmd_tier_help_cbk, -          "display help for volume tier commands"}, +    {"volume tier help", cli_cmd_tier_help_cbk, +     "display help for volume tier commands"}, -        { "volume tier <VOLNAME> status", -          cli_cmd_volume_tier_cbk, -          "Display tier status for <VOLNAME>"}, +    {"volume tier <VOLNAME> status", cli_cmd_volume_tier_cbk, +     "Display tier status for <VOLNAME>"}, -        { "volume tier <VOLNAME> start [force]", -          cli_cmd_volume_tier_cbk, -          "Start the tier service for <VOLNAME>"}, +    {"volume tier <VOLNAME> start [force]", cli_cmd_volume_tier_cbk, +     "Start the tier service for <VOLNAME>"}, -        { "volume tier <VOLNAME> stop [force]", -          cli_cmd_volume_tier_cbk, -          "Stop the tier service for <VOLNAME>"}, +    {"volume tier <VOLNAME> stop [force]", cli_cmd_volume_tier_cbk, +     "Stop the tier service for <VOLNAME>"}, -        { "volume tier <VOLNAME> attach [<replica COUNT>] <NEW-BRICK>... [force]", -          cli_cmd_volume_tier_cbk, -          "Attach a hot tier to <VOLNAME>"}, +    {"volume tier <VOLNAME> attach [<replica COUNT>] <NEW-BRICK>... [force]", +     cli_cmd_volume_tier_cbk, "Attach a hot tier to <VOLNAME>"}, -        { "volume tier <VOLNAME> detach <start|stop|status|commit|[force]>", -          cli_cmd_volume_tier_cbk, -          "Detach the hot tier from <VOLNAME>"}, +    {"volume tier <VOLNAME> detach <start|stop|status|commit|[force]>", +     cli_cmd_volume_tier_cbk, "Detach the hot tier from <VOLNAME>"}, -        { "volume attach-tier <VOLNAME> [<replica COUNT>] <NEW-BRICK>...", -          cli_cmd_volume_tier_cbk, -          "NOTE: this is old syntax, will be deprecated in next release. " -          "Please use gluster volume tier <vol> attach " -          "[<replica COUNT>] <NEW-BRICK>..."}, +    {"volume attach-tier <VOLNAME> [<replica COUNT>] <NEW-BRICK>...", +     cli_cmd_volume_tier_cbk, +     "NOTE: this is old syntax, will be deprecated in next release. " +     "Please use gluster volume tier <vol> attach " +     "[<replica COUNT>] <NEW-BRICK>..."}, -        { "volume detach-tier <VOLNAME> " -          "<start|stop|status|commit|force>", -          cli_cmd_volume_tier_cbk, -          "NOTE: this is old syntax, will be deprecated in next release. " -          "Please use gluster volume tier <vol> detach " -          "{start|stop|commit} [force]"}, +    {"volume detach-tier <VOLNAME> " +     "<start|stop|status|commit|force>", +     cli_cmd_volume_tier_cbk, +     "NOTE: this is old syntax, will be deprecated in next release. " +     "Please use gluster volume tier <vol> detach " +     "{start|stop|commit} [force]"}, -        { "volume tier <VOLNAME> status\n" -          "volume tier <VOLNAME> start [force]\n" -          "volume tier <VOLNAME> stop\n" -          "volume tier <VOLNAME> attach [<replica COUNT>] <NEW-BRICK>... [force]\n" -          "volume tier <VOLNAME> detach <start|stop|status|commit|[force]>\n", -          cli_cmd_volume_tier_cbk, -          NULL }, +    {"volume tier <VOLNAME> status\n" +     "volume tier <VOLNAME> start [force]\n" +     "volume tier <VOLNAME> stop\n" +     "volume tier <VOLNAME> attach [<replica COUNT>] <NEW-BRICK>... [force]\n" +     "volume tier <VOLNAME> detach <start|stop|status|commit|[force]>\n", +     cli_cmd_volume_tier_cbk, NULL}, -        {NULL, NULL, NULL} +    {NULL, NULL, NULL} -        }; +};  struct cli_cmd volume_cmds[] = { -        { "volume help", -          cli_cmd_volume_help_cbk, -          "display help for volume commands"}, - -        { "volume info [all|<VOLNAME>]", -          cli_cmd_volume_info_cbk, -          "list information of all volumes"}, - -        { "volume create <NEW-VOLNAME> [stripe <COUNT>] " -          "[replica <COUNT> [arbiter <COUNT>]] " -          "[disperse [<COUNT>]] [disperse-data <COUNT>] [redundancy <COUNT>] " -          "[transport <tcp|rdma|tcp,rdma>] <NEW-BRICK>" +    {"volume help", cli_cmd_volume_help_cbk, +     "display help for volume commands"}, + +    {"volume info [all|<VOLNAME>]", cli_cmd_volume_info_cbk, +     "list information of all volumes"}, + +    {"volume create <NEW-VOLNAME> [stripe <COUNT>] " +     "[replica <COUNT> [arbiter <COUNT>]] " +     "[disperse [<COUNT>]] [disperse-data <COUNT>] [redundancy <COUNT>] " +     "[transport <tcp|rdma|tcp,rdma>] <NEW-BRICK>"  #ifdef HAVE_BD_XLATOR -          "?<vg_name>" +     "?<vg_name>"  #endif -          "... [force]", - -          cli_cmd_volume_create_cbk, -          "create a new volume of specified type with mentioned bricks"}, +     "... [force]", -        { "volume delete <VOLNAME>", -          cli_cmd_volume_delete_cbk, -          "delete volume specified by <VOLNAME>"}, +     cli_cmd_volume_create_cbk, +     "create a new volume of specified type with mentioned bricks"}, -        { "volume start <VOLNAME> [force]", -          cli_cmd_volume_start_cbk, -          "start volume specified by <VOLNAME>"}, +    {"volume delete <VOLNAME>", cli_cmd_volume_delete_cbk, +     "delete volume specified by <VOLNAME>"}, -        { "volume stop <VOLNAME> [force]", -          cli_cmd_volume_stop_cbk, -          "stop volume specified by <VOLNAME>"}, +    {"volume start <VOLNAME> [force]", cli_cmd_volume_start_cbk, +     "start volume specified by <VOLNAME>"}, -        /*{ "volume rename <VOLNAME> <NEW-VOLNAME>", -          cli_cmd_volume_rename_cbk, -          "rename volume <VOLNAME> to <NEW-VOLNAME>"},*/ +    {"volume stop <VOLNAME> [force]", cli_cmd_volume_stop_cbk, +     "stop volume specified by <VOLNAME>"}, -        { "volume add-brick <VOLNAME> [<stripe|replica> <COUNT> " -          "[arbiter <COUNT>]] <NEW-BRICK> ... [force]", -          cli_cmd_volume_add_brick_cbk, -          "add brick to volume <VOLNAME>"}, +    /*{ "volume rename <VOLNAME> <NEW-VOLNAME>", +      cli_cmd_volume_rename_cbk, +      "rename volume <VOLNAME> to <NEW-VOLNAME>"},*/ -        { "volume remove-brick <VOLNAME> [replica <COUNT>] <BRICK> ..." -          " <start|stop|status|commit|force>", -          cli_cmd_volume_remove_brick_cbk, -          "remove brick from volume <VOLNAME>"}, +    {"volume add-brick <VOLNAME> [<stripe|replica> <COUNT> " +     "[arbiter <COUNT>]] <NEW-BRICK> ... [force]", +     cli_cmd_volume_add_brick_cbk, "add brick to volume <VOLNAME>"}, -        { "volume rebalance <VOLNAME> {{fix-layout start} | {start [force]|stop|status}}", -          cli_cmd_volume_defrag_cbk, -          "rebalance operations"}, +    {"volume remove-brick <VOLNAME> [replica <COUNT>] <BRICK> ..." +     " <start|stop|status|commit|force>", +     cli_cmd_volume_remove_brick_cbk, "remove brick from volume <VOLNAME>"}, -        { "volume replace-brick <VOLNAME> <SOURCE-BRICK> <NEW-BRICK> " -          "{commit force}", -          cli_cmd_volume_replace_brick_cbk, -          "replace-brick operations"}, +    {"volume rebalance <VOLNAME> {{fix-layout start} | {start " +     "[force]|stop|status}}", +     cli_cmd_volume_defrag_cbk, "rebalance operations"}, -        /*{ "volume set-transport <VOLNAME> <TRANSPORT-TYPE> [<TRANSPORT-TYPE>] ...", -          cli_cmd_volume_set_transport_cbk, -          "set transport type for volume <VOLNAME>"},*/ +    {"volume replace-brick <VOLNAME> <SOURCE-BRICK> <NEW-BRICK> " +     "{commit force}", +     cli_cmd_volume_replace_brick_cbk, "replace-brick operations"}, -        { "volume set <VOLNAME> <KEY> <VALUE>", -          cli_cmd_volume_set_cbk, -         "set options for volume <VOLNAME>"}, +    /*{ "volume set-transport <VOLNAME> <TRANSPORT-TYPE> [<TRANSPORT-TYPE>] +      ...", cli_cmd_volume_set_transport_cbk, "set transport type for volume +      <VOLNAME>"},*/ +    {"volume set <VOLNAME> <KEY> <VALUE>", cli_cmd_volume_set_cbk, +     "set options for volume <VOLNAME>"}, -        { "volume log <VOLNAME> rotate [BRICK]", -          cli_cmd_log_rotate_cbk, -         "rotate the log file for corresponding volume/brick"}, +    {"volume log <VOLNAME> rotate [BRICK]", cli_cmd_log_rotate_cbk, +     "rotate the log file for corresponding volume/brick"}, -        { "volume log rotate <VOLNAME> [BRICK]", -          cli_cmd_log_rotate_cbk, -         "rotate the log file for corresponding volume/brick" -         " NOTE: This is an old syntax, will be deprecated from next release."}, +    {"volume log rotate <VOLNAME> [BRICK]", cli_cmd_log_rotate_cbk, +     "rotate the log file for corresponding volume/brick" +     " NOTE: This is an old syntax, will be deprecated from next release."}, -        { "volume sync <HOSTNAME> [all|<VOLNAME>]", -          cli_cmd_sync_volume_cbk, -         "sync the volume information from a peer"}, +    {"volume sync <HOSTNAME> [all|<VOLNAME>]", cli_cmd_sync_volume_cbk, +     "sync the volume information from a peer"}, -         { "volume reset <VOLNAME> [option] [force]", -         cli_cmd_volume_reset_cbk, -         "reset all the reconfigured options"}, +    {"volume reset <VOLNAME> [option] [force]", cli_cmd_volume_reset_cbk, +     "reset all the reconfigured options"},  #if (SYNCDAEMON_COMPILE) -        {"volume "GEOREP" [<VOLNAME>] [<SLAVE-URL>] {create [[ssh-port n] [[no-verify]|[push-pem]]] [force]" -         "|start [force]|stop [force]|pause [force]|resume [force]|config|status [detail]|delete [reset-sync-time]} [options...]", -         cli_cmd_volume_gsync_set_cbk, -         "Geo-sync operations", -         cli_cmd_check_gsync_exists_cbk}, +    {"volume " GEOREP " [<VOLNAME>] [<SLAVE-URL>] {create [[ssh-port n] " +                      "[[no-verify]|[push-pem]]] [force]" +     "|start [force]|stop [force]|pause [force]|resume [force]|config|status " +     "[detail]|delete [reset-sync-time]} [options...]", +     cli_cmd_volume_gsync_set_cbk, "Geo-sync operations", +     cli_cmd_check_gsync_exists_cbk},  #endif -         { "volume profile <VOLNAME> {start|info [peek|incremental [peek]|cumulative|clear]|stop} [nfs]", -           cli_cmd_volume_profile_cbk, -           "volume profile operations"}, - -         { "volume top <VOLNAME> {open|read|write|opendir|readdir|clear} [nfs|brick <brick>] [list-cnt <value>] |\n" -           "volume top <VOLNAME> {read-perf|write-perf} [bs <size> count <count>] [brick <brick>] [list-cnt <value>]", -           cli_cmd_volume_top_cbk, -           "volume top operations"}, - -        { "volume status [all | <VOLNAME> [nfs|shd|<BRICK>|quotad|tierd]]" -          " [detail|clients|mem|inode|fd|callpool|tasks|client-list]", -          cli_cmd_volume_status_cbk, -          "display status of all or specified volume(s)/brick"}, - -        { "volume heal <VOLNAME> [enable | disable | full |" -          "statistics [heal-count [replica <HOSTNAME:BRICKNAME>]] |" -          "info [summary | split-brain] |" -          "split-brain {bigger-file <FILE> | latest-mtime <FILE> |" -                       "source-brick <HOSTNAME:BRICKNAME> [<FILE>]} |" -          "granular-entry-heal {enable | disable}]", -          cli_cmd_volume_heal_cbk, -          "self-heal commands on volume specified by <VOLNAME>"}, - -        {"volume statedump <VOLNAME> [[nfs|quotad] [all|mem|iobuf|callpool|" -         "priv|fd|inode|history]... | [client <hostname:process-id>]]", -         cli_cmd_volume_statedump_cbk, -         "perform statedump on bricks"}, - -        {"volume list", -         cli_cmd_volume_list_cbk, -         "list all volumes in cluster"}, - -        {"volume clear-locks <VOLNAME> <path> kind {blocked|granted|all}" -          "{inode [range]|entry [basename]|posix [range]}", -          cli_cmd_volume_clearlocks_cbk, -          "Clear locks held on path" -        }, -        {"volume barrier <VOLNAME> {enable|disable}", -         cli_cmd_volume_barrier_cbk, -         "Barrier/unbarrier file operations on a volume" -        }, -        {"volume get <VOLNAME|all> <key|all>", -         cli_cmd_volume_getopt_cbk, -         "Get the value of the all options or given option for volume <VOLNAME>" -         " or all option. gluster volume get all all is to get all global " -         "options" -        }, - -        { "volume reset-brick <VOLNAME> <SOURCE-BRICK> {{start} |" -          " {<NEW-BRICK> commit}}", -          cli_cmd_volume_reset_brick_cbk, -          "reset-brick operations"}, - - -        { NULL, NULL, NULL } -}; +    {"volume profile <VOLNAME> {start|info [peek|incremental " +     "[peek]|cumulative|clear]|stop} [nfs]", +     cli_cmd_volume_profile_cbk, "volume profile operations"}, + +    {"volume top <VOLNAME> {open|read|write|opendir|readdir|clear} [nfs|brick " +     "<brick>] [list-cnt <value>] |\n" +     "volume top <VOLNAME> {read-perf|write-perf} [bs <size> count <count>] " +     "[brick <brick>] [list-cnt <value>]", +     cli_cmd_volume_top_cbk, "volume top operations"}, + +    {"volume status [all | <VOLNAME> [nfs|shd|<BRICK>|quotad|tierd]]" +     " [detail|clients|mem|inode|fd|callpool|tasks|client-list]", +     cli_cmd_volume_status_cbk, +     "display status of all or specified volume(s)/brick"}, + +    {"volume heal <VOLNAME> [enable | disable | full |" +     "statistics [heal-count [replica <HOSTNAME:BRICKNAME>]] |" +     "info [summary | split-brain] |" +     "split-brain {bigger-file <FILE> | latest-mtime <FILE> |" +     "source-brick <HOSTNAME:BRICKNAME> [<FILE>]} |" +     "granular-entry-heal {enable | disable}]", +     cli_cmd_volume_heal_cbk, +     "self-heal commands on volume specified by <VOLNAME>"}, + +    {"volume statedump <VOLNAME> [[nfs|quotad] [all|mem|iobuf|callpool|" +     "priv|fd|inode|history]... | [client <hostname:process-id>]]", +     cli_cmd_volume_statedump_cbk, "perform statedump on bricks"}, + +    {"volume list", cli_cmd_volume_list_cbk, "list all volumes in cluster"}, + +    {"volume clear-locks <VOLNAME> <path> kind {blocked|granted|all}" +     "{inode [range]|entry [basename]|posix [range]}", +     cli_cmd_volume_clearlocks_cbk, "Clear locks held on path"}, +    {"volume barrier <VOLNAME> {enable|disable}", cli_cmd_volume_barrier_cbk, +     "Barrier/unbarrier file operations on a volume"}, +    {"volume get <VOLNAME|all> <key|all>", cli_cmd_volume_getopt_cbk, +     "Get the value of the all options or given option for volume <VOLNAME>" +     " or all option. gluster volume get all all is to get all global " +     "options"}, + +    {"volume reset-brick <VOLNAME> <SOURCE-BRICK> {{start} |" +     " {<NEW-BRICK> commit}}", +     cli_cmd_volume_reset_brick_cbk, "reset-brick operations"}, + +    {NULL, NULL, NULL}};  int -cli_cmd_quota_help_cbk (struct cli_state *state, struct cli_cmd_word *in_word, -                        const char **words, int wordcount) +cli_cmd_quota_help_cbk(struct cli_state *state, struct cli_cmd_word *in_word, +                       const char **words, int wordcount)  { -        struct cli_cmd        *cmd     = NULL; -        struct cli_cmd        *quota_cmd = NULL; -        int                   count    = 0; +    struct cli_cmd *cmd = NULL; +    struct cli_cmd *quota_cmd = NULL; +    int count = 0; -        cmd = GF_MALLOC (sizeof (quota_cmds), cli_mt_cli_cmd); -        memcpy (cmd, quota_cmds, sizeof (quota_cmds)); -        count = (sizeof (quota_cmds) / sizeof (struct cli_cmd)); -        cli_cmd_sort (cmd, count); +    cmd = GF_MALLOC(sizeof(quota_cmds), cli_mt_cli_cmd); +    memcpy(cmd, quota_cmds, sizeof(quota_cmds)); +    count = (sizeof(quota_cmds) / sizeof(struct cli_cmd)); +    cli_cmd_sort(cmd, count); -        cli_out ("\ngluster quota commands"); -        cli_out ("=======================\n"); +    cli_out("\ngluster quota commands"); +    cli_out("=======================\n"); -        for (quota_cmd = cmd; quota_cmd->pattern; quota_cmd++) -                if ((_gf_false == quota_cmd->disable) && (quota_cmd->desc)) -                        cli_out ("%s - %s", quota_cmd->pattern, -                                 quota_cmd->desc); +    for (quota_cmd = cmd; quota_cmd->pattern; quota_cmd++) +        if ((_gf_false == quota_cmd->disable) && (quota_cmd->desc)) +            cli_out("%s - %s", quota_cmd->pattern, quota_cmd->desc); -        cli_out ("\n"); -        GF_FREE (cmd); +    cli_out("\n"); +    GF_FREE(cmd); -        return 0; +    return 0;  }  int -cli_cmd_bitrot_help_cbk (struct cli_state *state, struct cli_cmd_word *in_word, -                         const char **words, int wordcount) +cli_cmd_bitrot_help_cbk(struct cli_state *state, struct cli_cmd_word *in_word, +                        const char **words, int wordcount)  { -        struct cli_cmd        *cmd     = NULL; -        struct cli_cmd        *bitrot_cmd = NULL; -        int                   count    = 0; +    struct cli_cmd *cmd = NULL; +    struct cli_cmd *bitrot_cmd = NULL; +    int count = 0; -        cmd = GF_MALLOC (sizeof (bitrot_cmds), cli_mt_cli_cmd); -        memcpy (cmd, bitrot_cmds, sizeof (bitrot_cmds)); -        count = (sizeof (bitrot_cmds) / sizeof (struct cli_cmd)); -        cli_cmd_sort (cmd, count); +    cmd = GF_MALLOC(sizeof(bitrot_cmds), cli_mt_cli_cmd); +    memcpy(cmd, bitrot_cmds, sizeof(bitrot_cmds)); +    count = (sizeof(bitrot_cmds) / sizeof(struct cli_cmd)); +    cli_cmd_sort(cmd, count); -        cli_out ("\ngluster bitrot commands"); -        cli_out ("========================\n"); +    cli_out("\ngluster bitrot commands"); +    cli_out("========================\n"); -        for (bitrot_cmd = cmd; bitrot_cmd->pattern; bitrot_cmd++) -                if ((_gf_false == bitrot_cmd->disable) && (bitrot_cmd->desc)) -                        cli_out ("%s - %s", bitrot_cmd->pattern, -                                 bitrot_cmd->desc); +    for (bitrot_cmd = cmd; bitrot_cmd->pattern; bitrot_cmd++) +        if ((_gf_false == bitrot_cmd->disable) && (bitrot_cmd->desc)) +            cli_out("%s - %s", bitrot_cmd->pattern, bitrot_cmd->desc); -        cli_out ("\n"); -        GF_FREE (cmd); +    cli_out("\n"); +    GF_FREE(cmd); -        return 0; +    return 0;  }  int -cli_cmd_tier_help_cbk (struct cli_state *state, struct cli_cmd_word *in_word, -                       const char **words, int wordcount) +cli_cmd_tier_help_cbk(struct cli_state *state, struct cli_cmd_word *in_word, +                      const char **words, int wordcount)  { -        struct cli_cmd        *cmd     = NULL; -        struct cli_cmd        *tier_cmd = NULL; -        int                   count    = 0; - -        cmd = GF_MALLOC (sizeof (tier_cmds), cli_mt_cli_cmd); -        memcpy (cmd, tier_cmds, sizeof (tier_cmds)); -        count = (sizeof (tier_cmds) / sizeof (struct cli_cmd)); -        cli_cmd_sort (cmd, count); - -        cli_out ("\ngluster tier commands"); -        cli_out ("======================\n"); - -        for (tier_cmd = cmd; tier_cmd->pattern; tier_cmd++) { -                if ((_gf_false == tier_cmd->disable) && tier_cmd->desc) { -                        cli_out ("%s - %s", tier_cmd->pattern, tier_cmd->desc); -                } -        } -        cli_out ("\n"); -        GF_FREE (cmd); -        return 0; +    struct cli_cmd *cmd = NULL; +    struct cli_cmd *tier_cmd = NULL; +    int count = 0; + +    cmd = GF_MALLOC(sizeof(tier_cmds), cli_mt_cli_cmd); +    memcpy(cmd, tier_cmds, sizeof(tier_cmds)); +    count = (sizeof(tier_cmds) / sizeof(struct cli_cmd)); +    cli_cmd_sort(cmd, count); + +    cli_out("\ngluster tier commands"); +    cli_out("======================\n"); + +    for (tier_cmd = cmd; tier_cmd->pattern; tier_cmd++) { +        if ((_gf_false == tier_cmd->disable) && tier_cmd->desc) { +            cli_out("%s - %s", tier_cmd->pattern, tier_cmd->desc); +        } +    } +    cli_out("\n"); +    GF_FREE(cmd); +    return 0;  }  int -cli_cmd_volume_help_cbk (struct cli_state *state, struct cli_cmd_word *in_word, -                         const char **words, int wordcount) +cli_cmd_volume_help_cbk(struct cli_state *state, struct cli_cmd_word *in_word, +                        const char **words, int wordcount)  { -        struct cli_cmd        *cmd     = NULL; -        struct cli_cmd        *vol_cmd = NULL; -        int                   count    = 0; +    struct cli_cmd *cmd = NULL; +    struct cli_cmd *vol_cmd = NULL; +    int count = 0; -        cmd = GF_MALLOC (sizeof (volume_cmds), cli_mt_cli_cmd); -        memcpy (cmd, volume_cmds, sizeof (volume_cmds)); -        count = (sizeof (volume_cmds) / sizeof (struct cli_cmd)); -        cli_cmd_sort (cmd, count); +    cmd = GF_MALLOC(sizeof(volume_cmds), cli_mt_cli_cmd); +    memcpy(cmd, volume_cmds, sizeof(volume_cmds)); +    count = (sizeof(volume_cmds) / sizeof(struct cli_cmd)); +    cli_cmd_sort(cmd, count); -        cli_out ("\ngluster volume commands"); -        cli_out ("========================\n"); +    cli_out("\ngluster volume commands"); +    cli_out("========================\n"); -        for (vol_cmd = cmd; vol_cmd->pattern; vol_cmd++) -                if (_gf_false == vol_cmd->disable) -                        cli_out ("%s - %s", vol_cmd->pattern, vol_cmd->desc); +    for (vol_cmd = cmd; vol_cmd->pattern; vol_cmd++) +        if (_gf_false == vol_cmd->disable) +            cli_out("%s - %s", vol_cmd->pattern, vol_cmd->desc); -        cli_out ("\n"); -        GF_FREE (cmd); -        return 0; +    cli_out("\n"); +    GF_FREE(cmd); +    return 0;  }  int -cli_cmd_volume_register (struct cli_state *state) +cli_cmd_volume_register(struct cli_state *state)  { -        int  ret = 0; -        struct cli_cmd *cmd = NULL; +    int ret = 0; +    struct cli_cmd *cmd = NULL; -        for (cmd = volume_cmds; cmd->pattern; cmd++) { -                ret = cli_cmd_register (&state->tree, cmd); -                if (ret) -                        goto out; -        } +    for (cmd = volume_cmds; cmd->pattern; cmd++) { +        ret = cli_cmd_register(&state->tree, cmd); +        if (ret) +            goto out; +    } -        for (cmd = bitrot_cmds; cmd->pattern; cmd++) { -                ret = cli_cmd_register (&state->tree, cmd); -                if (ret) -                        goto out; -        } +    for (cmd = bitrot_cmds; cmd->pattern; cmd++) { +        ret = cli_cmd_register(&state->tree, cmd); +        if (ret) +            goto out; +    } -        for (cmd = quota_cmds; cmd->pattern; cmd++) { -                ret = cli_cmd_register (&state->tree, cmd); -                if (ret) -                        goto out; -        } +    for (cmd = quota_cmds; cmd->pattern; cmd++) { +        ret = cli_cmd_register(&state->tree, cmd); +        if (ret) +            goto out; +    }  #if !defined(__NetBSD__) -        for (cmd = tier_cmds; cmd->pattern; cmd++) { -                ret = cli_cmd_register (&state->tree, cmd); -                if (ret) -                        goto out; -        } +    for (cmd = tier_cmds; cmd->pattern; cmd++) { +        ret = cli_cmd_register(&state->tree, cmd); +        if (ret) +            goto out; +    }  #endif  out: -        return ret; +    return ret;  } diff --git a/cli/src/cli-cmd.c b/cli/src/cli-cmd.c index 236009b449e..396cabebbbe 100644 --- a/cli/src/cli-cmd.c +++ b/cli/src/cli-cmd.c @@ -22,395 +22,390 @@  static int cmd_done;  static int cmd_sent; -static pthread_cond_t      cond  = PTHREAD_COND_INITIALIZER; -static pthread_mutex_t     cond_mutex = PTHREAD_MUTEX_INITIALIZER; -static pthread_cond_t      conn  = PTHREAD_COND_INITIALIZER; -static pthread_mutex_t     conn_mutex = PTHREAD_MUTEX_INITIALIZER; +static pthread_cond_t cond = PTHREAD_COND_INITIALIZER; +static pthread_mutex_t cond_mutex = PTHREAD_MUTEX_INITIALIZER; +static pthread_cond_t conn = PTHREAD_COND_INITIALIZER; +static pthread_mutex_t conn_mutex = PTHREAD_MUTEX_INITIALIZER; -int    cli_op_ret = 0; -int    connected = 0; +int cli_op_ret = 0; +int connected = 0; -int cli_cmd_log_help_cbk (struct cli_state *state, struct cli_cmd_word *in_word, -                      const char **words, int wordcount); +int +cli_cmd_log_help_cbk(struct cli_state *state, struct cli_cmd_word *in_word, +                     const char **words, int wordcount);  static unsigned -cli_cmd_needs_connection (struct cli_cmd_word *word) +cli_cmd_needs_connection(struct cli_cmd_word *word)  { -        if (!strcasecmp ("quit", word->word)) -                return 0; +    if (!strcasecmp("quit", word->word)) +        return 0; -        if (!strcasecmp ("help", word->word)) -                return 0; +    if (!strcasecmp("help", word->word)) +        return 0; -        if (!strcasecmp ("getwd", word->word)) -                return 1; +    if (!strcasecmp("getwd", word->word)) +        return 1; -        if (!strcasecmp ("exit", word->word)) -                return 0; +    if (!strcasecmp("exit", word->word)) +        return 0; -        return cli_default_conn_timeout; +    return cli_default_conn_timeout;  }  int -cli_cmd_status_reset (void) +cli_cmd_status_reset(void)  { -        int ret = 0; - -        ret = cli_cmd_lock (); -        { -                if (ret == 0) { -                        cmd_sent = 0; -                        cmd_done = 0; -                } -        } -        ret = cli_cmd_unlock (); -        return ret; +    int ret = 0; +    ret = cli_cmd_lock(); +    { +        if (ret == 0) { +            cmd_sent = 0; +            cmd_done = 0; +        } +    } +    ret = cli_cmd_unlock(); +    return ret;  }  int -cli_cmd_sent_status_get (int *status) +cli_cmd_sent_status_get(int *status)  { -        int ret = 0; -        GF_ASSERT (status); - -        ret = cli_cmd_lock (); -        { -                if (ret == 0) -                        *status = cmd_sent; -        } -        ret = cli_cmd_unlock (); -        return ret; +    int ret = 0; +    GF_ASSERT(status); + +    ret = cli_cmd_lock(); +    { +        if (ret == 0) +            *status = cmd_sent; +    } +    ret = cli_cmd_unlock(); +    return ret;  }  int -cli_cmd_process (struct cli_state *state, int argc, char **argv) +cli_cmd_process(struct cli_state *state, int argc, char **argv)  { -        int                  ret = 0; -        struct cli_cmd_word *word = NULL; -        struct cli_cmd_word *next = NULL; -        int                  i = 0; +    int ret = 0; +    struct cli_cmd_word *word = NULL; +    struct cli_cmd_word *next = NULL; +    int i = 0; -        word = &state->tree.root; +    word = &state->tree.root; -        if (!argc) -                return 0; +    if (!argc) +        return 0; -        for (i = 0; i < argc; i++) { -                next = cli_cmd_nextword (word, argv[i]); +    for (i = 0; i < argc; i++) { +        next = cli_cmd_nextword(word, argv[i]); -                word = next; -                if (!word) -                        break; +        word = next; +        if (!word) +            break; -                if (word->cbkfn) -                        break; -        } +        if (word->cbkfn) +            break; +    } -        if (!word) { -                cli_out ("unrecognized word: %s (position %d)", -                         argv[i], i); -                return -1; -        } +    if (!word) { +        cli_out("unrecognized word: %s (position %d)", argv[i], i); +        return -1; +    } -        if (!word->cbkfn) { -                cli_out ("unrecognized command"); -                return -1; -        } +    if (!word->cbkfn) { +        cli_out("unrecognized command"); +        return -1; +    } -	if ( strcmp (word->word,"help")==0 ) -		goto callback; +    if (strcmp(word->word, "help") == 0) +        goto callback; -        state->await_connected = cli_cmd_needs_connection (word); +    state->await_connected = cli_cmd_needs_connection(word); -        ret = cli_cmd_await_connected (state->await_connected); -        if (ret) { -                cli_out ("Connection failed. Please check if gluster " -                          "daemon is operational."); -                gf_log ("", GF_LOG_INFO, "Exiting with: %d", ret); -                exit (ret); -        } +    ret = cli_cmd_await_connected(state->await_connected); +    if (ret) { +        cli_out( +            "Connection failed. Please check if gluster " +            "daemon is operational."); +        gf_log("", GF_LOG_INFO, "Exiting with: %d", ret); +        exit(ret); +    }  callback: -        ret = word->cbkfn (state, word, (const char **)argv, argc); -        (void) cli_cmd_status_reset (); -        return ret; +    ret = word->cbkfn(state, word, (const char **)argv, argc); +    (void)cli_cmd_status_reset(); +    return ret;  }  int -cli_cmd_input_token_count (const char *text) +cli_cmd_input_token_count(const char *text)  { -        int          count = 0; -        const char  *trav = NULL; -        int          is_spc = 1; - -        for (trav = text; *trav; trav++) { -                if (*trav == ' ') { -                        is_spc = 1; -                } else { -                        if (is_spc) { -                                count++; -                                is_spc = 0; -                        } -                } +    int count = 0; +    const char *trav = NULL; +    int is_spc = 1; + +    for (trav = text; *trav; trav++) { +        if (*trav == ' ') { +            is_spc = 1; +        } else { +            if (is_spc) { +                count++; +                is_spc = 0; +            }          } +    } -        return count; +    return count;  } -  int -cli_cmd_process_line (struct cli_state *state, const char *text) +cli_cmd_process_line(struct cli_state *state, const char *text)  { -        int     count = 0; -        char  **tokens = NULL; -        char  **tokenp = NULL; -        char   *token = NULL; -        char   *copy = NULL; -        char   *saveptr = NULL; -        int     i = 0; -        int     ret = -1; - -        count = cli_cmd_input_token_count (text); - -        tokens = calloc (count + 1, sizeof (*tokens)); -        if (!tokens) -                return -1; - -        copy = strdup (text); -        if (!copy) -                goto out; - -        tokenp = tokens; - -        for (token = strtok_r (copy, " \t\r\n", &saveptr); token; -             token = strtok_r (NULL, " \t\r\n", &saveptr)) { -                *tokenp = strdup (token); - -                if (!*tokenp) -                        goto out; -                tokenp++; -                i++; - -        } - -        ret = cli_cmd_process (state, count, tokens); +    int count = 0; +    char **tokens = NULL; +    char **tokenp = NULL; +    char *token = NULL; +    char *copy = NULL; +    char *saveptr = NULL; +    int i = 0; +    int ret = -1; + +    count = cli_cmd_input_token_count(text); + +    tokens = calloc(count + 1, sizeof(*tokens)); +    if (!tokens) +        return -1; + +    copy = strdup(text); +    if (!copy) +        goto out; + +    tokenp = tokens; + +    for (token = strtok_r(copy, " \t\r\n", &saveptr); token; +         token = strtok_r(NULL, " \t\r\n", &saveptr)) { +        *tokenp = strdup(token); + +        if (!*tokenp) +            goto out; +        tokenp++; +        i++; +    } + +    ret = cli_cmd_process(state, count, tokens);  out: -        free (copy); +    free(copy); -        if (tokens) -                cli_cmd_tokens_destroy (tokens); +    if (tokens) +        cli_cmd_tokens_destroy(tokens); -        return ret; +    return ret;  } -  int -cli_cmds_register (struct cli_state *state) +cli_cmds_register(struct cli_state *state)  { -        int  ret = 0; - -        ret = cli_cmd_volume_register (state); -        if (ret) -                goto out; - -        ret = cli_cmd_probe_register (state); -        if (ret) -                goto out; - -        ret = cli_cmd_system_register (state); -        if (ret) -                goto out; - -        ret = cli_cmd_misc_register (state); -        if (ret) -                goto out; - -        ret = cli_cmd_snapshot_register (state); -        if (ret) -                goto out; -        ret = cli_cmd_global_register (state); -        if (ret) -                goto out; +    int ret = 0; + +    ret = cli_cmd_volume_register(state); +    if (ret) +        goto out; + +    ret = cli_cmd_probe_register(state); +    if (ret) +        goto out; + +    ret = cli_cmd_system_register(state); +    if (ret) +        goto out; + +    ret = cli_cmd_misc_register(state); +    if (ret) +        goto out; + +    ret = cli_cmd_snapshot_register(state); +    if (ret) +        goto out; +    ret = cli_cmd_global_register(state); +    if (ret) +        goto out;  out: -        return ret; +    return ret;  }  int -cli_cmd_cond_init () +cli_cmd_cond_init()  { +    pthread_mutex_init(&cond_mutex, NULL); +    pthread_cond_init(&cond, NULL); -       pthread_mutex_init (&cond_mutex, NULL); -       pthread_cond_init (&cond, NULL); +    pthread_mutex_init(&conn_mutex, NULL); +    pthread_cond_init(&conn, NULL); -       pthread_mutex_init (&conn_mutex, NULL); -       pthread_cond_init (&conn, NULL); - -       return 0; +    return 0;  }  int -cli_cmd_lock () +cli_cmd_lock()  { -       pthread_mutex_lock (&cond_mutex); -       return 0; +    pthread_mutex_lock(&cond_mutex); +    return 0;  }  int -cli_cmd_unlock () +cli_cmd_unlock()  { -        pthread_mutex_unlock (&cond_mutex); -        return 0; +    pthread_mutex_unlock(&cond_mutex); +    return 0;  }  static void -seconds_from_now (unsigned secs, struct timespec *ts) +seconds_from_now(unsigned secs, struct timespec *ts)  { -        struct timeval tv = {0,}; +    struct timeval tv = { +        0, +    }; -        gettimeofday (&tv, NULL); +    gettimeofday(&tv, NULL); -        ts->tv_sec = tv.tv_sec + secs; -        ts->tv_nsec = tv.tv_usec * 1000; +    ts->tv_sec = tv.tv_sec + secs; +    ts->tv_nsec = tv.tv_usec * 1000;  }  int -cli_cmd_await_response (unsigned time) +cli_cmd_await_response(unsigned time)  { -        struct  timespec        ts = {0,}; -        int                     ret = 0; +    struct timespec ts = { +        0, +    }; +    int ret = 0; -        cli_op_ret = -1; +    cli_op_ret = -1; -        seconds_from_now (time, &ts); -        while (!cmd_done && !ret) { -                ret = pthread_cond_timedwait (&cond, &cond_mutex, -                                        &ts); -        } +    seconds_from_now(time, &ts); +    while (!cmd_done && !ret) { +        ret = pthread_cond_timedwait(&cond, &cond_mutex, &ts); +    } -        if (!cmd_done) { -                if (ret == ETIMEDOUT) -                        cli_out ("Error : Request timed out"); -                else -                        cli_out ("Error : Command returned with error code:%d", -                                 ret); -        } -        cmd_done = 0; +    if (!cmd_done) { +        if (ret == ETIMEDOUT) +            cli_out("Error : Request timed out"); +        else +            cli_out("Error : Command returned with error code:%d", ret); +    } +    cmd_done = 0; -        return cli_op_ret; +    return cli_op_ret;  }  /* This function must be called _only_ after all actions associated with   * command processing is complete. Otherwise, gluster process may exit before   * reporting results to stdout/stderr. */  int -cli_cmd_broadcast_response (int32_t status) +cli_cmd_broadcast_response(int32_t status)  { - -        pthread_mutex_lock (&cond_mutex); -        { -                if (!cmd_sent) -                        goto out; -                cmd_done = 1; -                cli_op_ret = status; -                pthread_cond_broadcast (&cond); -        } - +    pthread_mutex_lock(&cond_mutex); +    { +        if (!cmd_sent) +            goto out; +        cmd_done = 1; +        cli_op_ret = status; +        pthread_cond_broadcast(&cond); +    }  out: -        pthread_mutex_unlock (&cond_mutex); -        return 0; +    pthread_mutex_unlock(&cond_mutex); +    return 0;  }  int32_t -cli_cmd_await_connected (unsigned conn_timo) +cli_cmd_await_connected(unsigned conn_timo)  { -        int32_t                 ret = 0; -        struct  timespec        ts = {0,}; - -        if (!conn_timo) -                return 0; - -        pthread_mutex_lock (&conn_mutex); -        { -                seconds_from_now (conn_timo, &ts); -                while (!connected && !ret) { -                        ret = pthread_cond_timedwait (&conn, &conn_mutex, -                                                      &ts); -                } -        } -        pthread_mutex_unlock (&conn_mutex); +    int32_t ret = 0; +    struct timespec ts = { +        0, +    }; +    if (!conn_timo) +        return 0; + +    pthread_mutex_lock(&conn_mutex); +    { +        seconds_from_now(conn_timo, &ts); +        while (!connected && !ret) { +            ret = pthread_cond_timedwait(&conn, &conn_mutex, &ts); +        } +    } +    pthread_mutex_unlock(&conn_mutex); -        return ret; +    return ret;  }  int32_t -cli_cmd_broadcast_connected () +cli_cmd_broadcast_connected()  { -        pthread_mutex_lock (&conn_mutex); -        { -                connected = 1; -                pthread_cond_broadcast (&conn); -        } +    pthread_mutex_lock(&conn_mutex); +    { +        connected = 1; +        pthread_cond_broadcast(&conn); +    } -        pthread_mutex_unlock (&conn_mutex); +    pthread_mutex_unlock(&conn_mutex); -        return 0; +    return 0;  }  int -cli_cmd_submit (struct rpc_clnt* rpc, void *req, call_frame_t *frame, -                rpc_clnt_prog_t *prog, -                int procnum, struct iobref *iobref, -                xlator_t *this, fop_cbk_fn_t cbkfn, xdrproc_t xdrproc) +cli_cmd_submit(struct rpc_clnt *rpc, void *req, call_frame_t *frame, +               rpc_clnt_prog_t *prog, int procnum, struct iobref *iobref, +               xlator_t *this, fop_cbk_fn_t cbkfn, xdrproc_t xdrproc)  { -        int             ret = -1; -        unsigned        timeout = 0; +    int ret = -1; +    unsigned timeout = 0; -        if ((GLUSTER_CLI_PROFILE_VOLUME == procnum) || -            (GLUSTER_CLI_HEAL_VOLUME == procnum)) -                timeout = cli_ten_minutes_timeout; -        else -                timeout = cli_default_conn_timeout; +    if ((GLUSTER_CLI_PROFILE_VOLUME == procnum) || +        (GLUSTER_CLI_HEAL_VOLUME == procnum)) +        timeout = cli_ten_minutes_timeout; +    else +        timeout = cli_default_conn_timeout; -        cli_cmd_lock (); -        cmd_sent = 0; -        ret = cli_submit_request (rpc, req, frame, prog, -                                  procnum, NULL, this, cbkfn, xdrproc); +    cli_cmd_lock(); +    cmd_sent = 0; +    ret = cli_submit_request(rpc, req, frame, prog, procnum, NULL, this, cbkfn, +                             xdrproc); -        if (!ret) { -                cmd_sent = 1; -                ret = cli_cmd_await_response (timeout); -        } +    if (!ret) { +        cmd_sent = 1; +        ret = cli_cmd_await_response(timeout); +    } -        cli_cmd_unlock (); +    cli_cmd_unlock(); -        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); -        return ret; +    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret); +    return ret;  }  int -cli_cmd_pattern_cmp (void *a, void *b) +cli_cmd_pattern_cmp(void *a, void *b)  { -        struct cli_cmd *ia = NULL; -        struct cli_cmd *ib = NULL; -        int            ret = 0; - -        ia = a; -        ib = b; -        if (strcmp (ia->pattern, ib->pattern) > 0) -                ret = 1; -        else if (strcmp (ia->pattern, ib->pattern) < 0) -                ret = -1; -        else -                ret = 0; -        return ret; +    struct cli_cmd *ia = NULL; +    struct cli_cmd *ib = NULL; +    int ret = 0; + +    ia = a; +    ib = b; +    if (strcmp(ia->pattern, ib->pattern) > 0) +        ret = 1; +    else if (strcmp(ia->pattern, ib->pattern) < 0) +        ret = -1; +    else +        ret = 0; +    return ret;  }  void -cli_cmd_sort (struct cli_cmd *cmd, int count) +cli_cmd_sort(struct cli_cmd *cmd, int count)  { -        gf_array_insertionsort (cmd, 1, count - 2, sizeof(struct cli_cmd), -                                cli_cmd_pattern_cmp); +    gf_array_insertionsort(cmd, 1, count - 2, sizeof(struct cli_cmd), +                           cli_cmd_pattern_cmp);  } diff --git a/cli/src/cli-quotad-client.c b/cli/src/cli-quotad-client.c index 5be9c80c858..fbd2c0391ab 100644 --- a/cli/src/cli-quotad-client.c +++ b/cli/src/cli-quotad-client.c @@ -14,136 +14,131 @@ extern struct rpc_clnt global_quotad_rpc;  extern struct rpc_clnt_program cli_quotad_clnt;  int -cli_quotad_submit_request (void *req, call_frame_t *frame, -                           rpc_clnt_prog_t *prog, -                           int procnum, struct iobref *iobref, -                           xlator_t *this, fop_cbk_fn_t cbkfn, -                           xdrproc_t xdrproc) +cli_quotad_submit_request(void *req, call_frame_t *frame, rpc_clnt_prog_t *prog, +                          int procnum, struct iobref *iobref, xlator_t *this, +                          fop_cbk_fn_t cbkfn, xdrproc_t xdrproc)  { -        int           ret        = -1; -        int           count      = 0; -        struct iovec  iov        = {0, }; -        struct iobuf *iobuf      = NULL; -        char          new_iobref = 0; -        ssize_t       xdr_size   = 0; - -        GF_ASSERT (this); - -        if (req) { -                xdr_size = xdr_sizeof (xdrproc, req); -                iobuf = iobuf_get2 (this->ctx->iobuf_pool, xdr_size); -                if (!iobuf) { -                        goto out; -                }; - -                if (!iobref) { -                        iobref = iobref_new (); -                        if (!iobref) { -                                goto out; -                        } - -                        new_iobref = 1; -                } - -                iobref_add (iobref, iobuf); - -                iov.iov_base = iobuf->ptr; -                iov.iov_len  = iobuf_size (iobuf); - -                /* Create the xdr payload */ -                ret = xdr_serialize_generic (iov, req, xdrproc); -                if (ret == -1) { -                        goto out; -                } -                iov.iov_len = ret; -                count = 1; +    int ret = -1; +    int count = 0; +    struct iovec iov = { +        0, +    }; +    struct iobuf *iobuf = NULL; +    char new_iobref = 0; +    ssize_t xdr_size = 0; + +    GF_ASSERT(this); + +    if (req) { +        xdr_size = xdr_sizeof(xdrproc, req); +        iobuf = iobuf_get2(this->ctx->iobuf_pool, xdr_size); +        if (!iobuf) { +            goto out; +        }; + +        if (!iobref) { +            iobref = iobref_new(); +            if (!iobref) { +                goto out; +            } + +            new_iobref = 1; +        } + +        iobref_add(iobref, iobuf); + +        iov.iov_base = iobuf->ptr; +        iov.iov_len = iobuf_size(iobuf); + +        /* Create the xdr payload */ +        ret = xdr_serialize_generic(iov, req, xdrproc); +        if (ret == -1) { +            goto out;          } +        iov.iov_len = ret; +        count = 1; +    } -        /* Send the msg */ -        ret = rpc_clnt_submit (&global_quotad_rpc, prog, procnum, cbkfn, -                               &iov, count, -                               NULL, 0, iobref, frame, NULL, 0, NULL, 0, NULL); -        ret = 0; +    /* Send the msg */ +    ret = rpc_clnt_submit(&global_quotad_rpc, prog, procnum, cbkfn, &iov, count, +                          NULL, 0, iobref, frame, NULL, 0, NULL, 0, NULL); +    ret = 0;  out: -        if (new_iobref) -                iobref_unref (iobref); -        if (iobuf) -                iobuf_unref (iobuf); +    if (new_iobref) +        iobref_unref(iobref); +    if (iobuf) +        iobuf_unref(iobuf); -        return ret; +    return ret;  }  int -cli_quotad_notify (struct rpc_clnt *rpc, void *mydata, -                   rpc_clnt_event_t event, void *data) +cli_quotad_notify(struct rpc_clnt *rpc, void *mydata, rpc_clnt_event_t event, +                  void *data)  { -        xlator_t                *this = NULL; -        int                     ret = 0; +    xlator_t *this = NULL; +    int ret = 0; -        this = mydata; +    this = mydata; -        switch (event) { -        case RPC_CLNT_CONNECT: -        { -                gf_log (this->name, GF_LOG_TRACE, "got RPC_CLNT_CONNECT"); -                break; +    switch (event) { +        case RPC_CLNT_CONNECT: { +            gf_log(this->name, GF_LOG_TRACE, "got RPC_CLNT_CONNECT"); +            break;          } -        case RPC_CLNT_DISCONNECT: -        { -                gf_log (this->name, GF_LOG_TRACE, "got RPC_CLNT_DISCONNECT"); -                break; +        case RPC_CLNT_DISCONNECT: { +            gf_log(this->name, GF_LOG_TRACE, "got RPC_CLNT_DISCONNECT"); +            break;          }          default: -                gf_log (this->name, GF_LOG_TRACE, -                        "got some other RPC event %d", event); -                ret = 0; -                break; -        } +            gf_log(this->name, GF_LOG_TRACE, "got some other RPC event %d", +                   event); +            ret = 0; +            break; +    } -        return ret; +    return ret;  }  struct rpc_clnt * -cli_quotad_clnt_init (xlator_t *this, dict_t *options) +cli_quotad_clnt_init(xlator_t *this, dict_t *options)  { -        struct rpc_clnt *rpc  = NULL; -        int              ret  = -1; - +    struct rpc_clnt *rpc = NULL; +    int ret = -1; -        ret = dict_set_str (options, "transport.address-family", "unix"); -        if (ret) -                goto out; +    ret = dict_set_str(options, "transport.address-family", "unix"); +    if (ret) +        goto out; -        ret = dict_set_str (options, "transport-type", "socket"); -        if (ret) -                goto out; +    ret = dict_set_str(options, "transport-type", "socket"); +    if (ret) +        goto out; -        ret = dict_set_str (options, "transport.socket.connect-path", -                            "/var/run/gluster/quotad.socket"); -        if (ret) -                goto out; +    ret = dict_set_str(options, "transport.socket.connect-path", +                       "/var/run/gluster/quotad.socket"); +    if (ret) +        goto out; -        rpc = rpc_clnt_new (options, this, this->name, 16); -        if (!rpc) -                goto out; +    rpc = rpc_clnt_new(options, this, this->name, 16); +    if (!rpc) +        goto out; -        ret = rpc_clnt_register_notify (rpc, cli_quotad_notify, this); -        if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "failed to register notify"); -                goto out; -        } +    ret = rpc_clnt_register_notify(rpc, cli_quotad_notify, this); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, "failed to register notify"); +        goto out; +    } -        rpc_clnt_start (rpc); +    rpc_clnt_start(rpc);  out: -        if (ret) { -                if (rpc) -                        rpc_clnt_unref (rpc); -                rpc = NULL; -        } +    if (ret) { +        if (rpc) +            rpc_clnt_unref(rpc); +        rpc = NULL; +    } -        return rpc; +    return rpc;  } - diff --git a/cli/src/cli-rl.c b/cli/src/cli-rl.c index 4ddb2ab149f..dd0993b8646 100644 --- a/cli/src/cli-rl.c +++ b/cli/src/cli-rl.c @@ -27,392 +27,374 @@  #include <readline/readline.h>  #include <readline/history.h> -  int -cli_rl_out (struct cli_state *state, const char *fmt, va_list ap) +cli_rl_out(struct cli_state *state, const char *fmt, va_list ap)  { -        int tmp_rl_point = rl_point; -        int            n = rl_end; -        int            ret = 0; +    int tmp_rl_point = rl_point; +    int n = rl_end; +    int ret = 0; -        if (rl_end >= 0 ) { -                rl_kill_text (0, rl_end); -                rl_redisplay (); -        } +    if (rl_end >= 0) { +        rl_kill_text(0, rl_end); +        rl_redisplay(); +    } -        printf ("\r%*s\r", (int)strlen (state->prompt), ""); +    printf("\r%*s\r", (int)strlen(state->prompt), ""); -        ret = vprintf (fmt, ap); +    ret = vprintf(fmt, ap); -        printf ("\n"); -        fflush(stdout); +    printf("\n"); +    fflush(stdout); -        if (n) { -                rl_do_undo (); -                rl_point = tmp_rl_point; -                rl_reset_line_state (); -        } +    if (n) { +        rl_do_undo(); +        rl_point = tmp_rl_point; +        rl_reset_line_state(); +    } -        return ret; +    return ret;  }  int -cli_rl_err (struct cli_state *state, const char *fmt, va_list ap) +cli_rl_err(struct cli_state *state, const char *fmt, va_list ap)  { -        int tmp_rl_point = rl_point; -        int            n = rl_end; -        int            ret = 0; +    int tmp_rl_point = rl_point; +    int n = rl_end; +    int ret = 0; -        if (rl_end >= 0 ) { -                rl_kill_text (0, rl_end); -                rl_redisplay (); -        } +    if (rl_end >= 0) { +        rl_kill_text(0, rl_end); +        rl_redisplay(); +    } -        fprintf (stderr, "\r%*s\r", (int)strlen (state->prompt), ""); +    fprintf(stderr, "\r%*s\r", (int)strlen(state->prompt), ""); -        ret = vfprintf (stderr, fmt, ap); +    ret = vfprintf(stderr, fmt, ap); -        fprintf (stderr, "\n"); -        fflush(stderr); +    fprintf(stderr, "\n"); +    fflush(stderr); -        if (n) { -                rl_do_undo (); -                rl_point = tmp_rl_point; -                rl_reset_line_state (); -        } +    if (n) { +        rl_do_undo(); +        rl_point = tmp_rl_point; +        rl_reset_line_state(); +    } -        return ret; +    return ret;  } -  void -cli_rl_process_line (char *line) +cli_rl_process_line(char *line)  { -        struct cli_state *state = NULL; -        int               ret = 0; +    struct cli_state *state = NULL; +    int ret = 0; -        state = global_state; +    state = global_state; -        state->rl_processing = 1; -        { -                ret = cli_cmd_process_line (state, line); -                if (ret) -                        gf_log (THIS->name, GF_LOG_WARNING, -                                "failed to process line"); - -                add_history (line); -        } -        state->rl_processing = 0; +    state->rl_processing = 1; +    { +        ret = cli_cmd_process_line(state, line); +        if (ret) +            gf_log(THIS->name, GF_LOG_WARNING, "failed to process line"); +        add_history(line); +    } +    state->rl_processing = 0;  } -  int -cli_rl_stdin (int fd, int idx, int gen, void *data, -              int poll_out, int poll_in, int poll_err) +cli_rl_stdin(int fd, int idx, int gen, void *data, int poll_out, int poll_in, +             int poll_err)  { -        struct cli_state *state = NULL; +    struct cli_state *state = NULL; -        state = data; +    state = data; -        rl_callback_read_char (); +    rl_callback_read_char(); -        event_handled (state->ctx->event_pool, fd, idx, gen); +    event_handled(state->ctx->event_pool, fd, idx, gen); -        return 0; +    return 0;  } -  char * -cli_rl_autocomplete_entry (const char *text, int times) +cli_rl_autocomplete_entry(const char *text, int times)  { -        struct cli_state  *state = NULL; -        char              *retp = NULL; +    struct cli_state *state = NULL; +    char *retp = NULL; -        state = global_state; +    state = global_state; -        if (!state->matchesp) -                return NULL; +    if (!state->matchesp) +        return NULL; -        retp = *state->matchesp; +    retp = *state->matchesp; -        state->matchesp++; +    state->matchesp++; -        return retp ? strdup (retp) : NULL; +    return retp ? strdup(retp) : NULL;  } -  int -cli_rl_token_count (const char *text) +cli_rl_token_count(const char *text)  { -        int          count = 0; -        const char  *trav = NULL; -        int          is_spc = 1; - -        for (trav = text; *trav; trav++) { -                if (*trav == ' ') { -                        is_spc = 1; -                } else { -                        if (is_spc) { -                                count++; -                                is_spc = 0; -                        } -                } +    int count = 0; +    const char *trav = NULL; +    int is_spc = 1; + +    for (trav = text; *trav; trav++) { +        if (*trav == ' ') { +            is_spc = 1; +        } else { +            if (is_spc) { +                count++; +                is_spc = 0; +            }          } +    } -        if (is_spc) -                /* what needs to be autocompleted is a full -                   new word, and not extend the last word -                */ -                count++; +    if (is_spc) +        /* what needs to be autocompleted is a full +           new word, and not extend the last word +        */ +        count++; -        return count; +    return count;  } -  char ** -cli_rl_tokenize (const char *text) +cli_rl_tokenize(const char *text)  { -        int     count = 0; -        char  **tokens = NULL; -        char  **tokenp = NULL; -        char   *token = NULL; -        char   *copy = NULL; -        char   *saveptr = NULL; -        int     i = 0; - -        count = cli_rl_token_count (text); - -        tokens = calloc (count + 1, sizeof (*tokens)); -        if (!tokens) -                return NULL; - -        copy = strdup (text); -        if (!copy) -                goto out; - -        tokenp = tokens; - -        for (token = strtok_r (copy, " \t\r\n", &saveptr); token; -             token = strtok_r (NULL, " \t\r\n", &saveptr)) { -                *tokenp = strdup (token); - -                if (!*tokenp) -                        goto out; -                tokenp++; -                i++; - -        } +    int count = 0; +    char **tokens = NULL; +    char **tokenp = NULL; +    char *token = NULL; +    char *copy = NULL; +    char *saveptr = NULL; +    int i = 0; + +    count = cli_rl_token_count(text); + +    tokens = calloc(count + 1, sizeof(*tokens)); +    if (!tokens) +        return NULL; -        if (i < count) { -                /* symbolize that what needs to be autocompleted is -                   the full set of possible nextwords, and not extend -                   the last word -                */ -                *tokenp = strdup (""); -                if (!*tokenp) -                        goto out; -                tokenp++; -                i++; -        } +    copy = strdup(text); +    if (!copy) +        goto out; + +    tokenp = tokens; + +    for (token = strtok_r(copy, " \t\r\n", &saveptr); token; +         token = strtok_r(NULL, " \t\r\n", &saveptr)) { +        *tokenp = strdup(token); + +        if (!*tokenp) +            goto out; +        tokenp++; +        i++; +    } + +    if (i < count) { +        /* symbolize that what needs to be autocompleted is +           the full set of possible nextwords, and not extend +           the last word +        */ +        *tokenp = strdup(""); +        if (!*tokenp) +            goto out; +        tokenp++; +        i++; +    }  out: -        free (copy); +    free(copy); -        if (i < count) { -                cli_cmd_tokens_destroy (tokens); -                tokens = NULL; -        } +    if (i < count) { +        cli_cmd_tokens_destroy(tokens); +        tokens = NULL; +    } -        return tokens; +    return tokens;  } -  char ** -cli_rl_get_matches (struct cli_state *state, struct cli_cmd_word *word, -                    const char *text) +cli_rl_get_matches(struct cli_state *state, struct cli_cmd_word *word, +                   const char *text)  { -        char                 **matches = NULL; -        char                 **matchesp = NULL; -        struct cli_cmd_word  **next = NULL; -        int                    count = 0; -        int                    len = 0; +    char **matches = NULL; +    char **matchesp = NULL; +    struct cli_cmd_word **next = NULL; +    int count = 0; +    int len = 0; -        len = strlen (text); +    len = strlen(text); -        if (!word->nextwords) -                return NULL; +    if (!word->nextwords) +        return NULL; -        for (next = word->nextwords; *next; next++) -                count++; +    for (next = word->nextwords; *next; next++) +        count++; -        matches = calloc (count + 1, sizeof (*matches)); -        matchesp = matches; +    matches = calloc(count + 1, sizeof(*matches)); +    matchesp = matches; -        for (next = word->nextwords; *next; next++) { -                if ((*next)->match) { -                        continue; -                } +    for (next = word->nextwords; *next; next++) { +        if ((*next)->match) { +            continue; +        } -                if (strncmp ((*next)->word, text, len) == 0) { -                        *matchesp = strdup ((*next)->word); -                        matchesp++; -                } +        if (strncmp((*next)->word, text, len) == 0) { +            *matchesp = strdup((*next)->word); +            matchesp++;          } +    } -        return matches; +    return matches;  } -  int -cli_rl_autocomplete_prepare (struct cli_state *state, const char *text) +cli_rl_autocomplete_prepare(struct cli_state *state, const char *text)  { -        struct cli_cmd_word   *word = NULL; -        struct cli_cmd_word   *next = NULL; -        char                 **tokens = NULL; -        char                 **tokenp = NULL; -        char                  *token = NULL; -        char                 **matches = NULL; - -        tokens = cli_rl_tokenize (text); -        if (!tokens) -                return 0; - -        word = &state->tree.root; - -        for (tokenp = tokens; (token = *tokenp); tokenp++) { -                if (!*(tokenp+1)) { -                        /* last word */ -                        break; -                } - -                next = cli_cmd_nextword (word, token); -                word = next; -                if (!word) -                        break; +    struct cli_cmd_word *word = NULL; +    struct cli_cmd_word *next = NULL; +    char **tokens = NULL; +    char **tokenp = NULL; +    char *token = NULL; +    char **matches = NULL; + +    tokens = cli_rl_tokenize(text); +    if (!tokens) +        return 0; + +    word = &state->tree.root; + +    for (tokenp = tokens; (token = *tokenp); tokenp++) { +        if (!*(tokenp + 1)) { +            /* last word */ +            break;          } +        next = cli_cmd_nextword(word, token); +        word = next;          if (!word) -                goto out; +            break; +    } + +    if (!word) +        goto out; -        if (!token) -                return 0; -        matches = cli_rl_get_matches (state, word, token); +    if (!token) +        return 0; +    matches = cli_rl_get_matches(state, word, token); -        state->matches = matches; -        state->matchesp = matches; +    state->matches = matches; +    state->matchesp = matches;  out: -        cli_cmd_tokens_destroy (tokens); -        return 0; +    cli_cmd_tokens_destroy(tokens); +    return 0;  } -  int -cli_rl_autocomplete_cleanup (struct cli_state *state) +cli_rl_autocomplete_cleanup(struct cli_state *state)  { -        if (state->matches) -                cli_cmd_tokens_destroy (state->matches); +    if (state->matches) +        cli_cmd_tokens_destroy(state->matches); -        state->matches = NULL; -        state->matchesp = NULL; +    state->matches = NULL; +    state->matchesp = NULL; -        return 0; +    return 0;  } -  char ** -cli_rl_autocomplete (const char *text, int start, int end) +cli_rl_autocomplete(const char *text, int start, int end)  { -        struct cli_state  *state = NULL; -        char             **matches = NULL; -        char               save = 0; +    struct cli_state *state = NULL; +    char **matches = NULL; +    char save = 0; -        state = global_state; +    state = global_state; -        /* hack to make the autocompletion code neater */ -        /* fake it as though the cursor is at the end of line */ +    /* hack to make the autocompletion code neater */ +    /* fake it as though the cursor is at the end of line */ -        save = rl_line_buffer[rl_point]; -        rl_line_buffer[rl_point] = 0; +    save = rl_line_buffer[rl_point]; +    rl_line_buffer[rl_point] = 0; -        cli_rl_autocomplete_prepare (state, rl_line_buffer); +    cli_rl_autocomplete_prepare(state, rl_line_buffer); -        matches = rl_completion_matches (text, cli_rl_autocomplete_entry); +    matches = rl_completion_matches(text, cli_rl_autocomplete_entry); -        cli_rl_autocomplete_cleanup (state); +    cli_rl_autocomplete_cleanup(state); -        rl_line_buffer[rl_point] = save; +    rl_line_buffer[rl_point] = save; -        return matches; +    return matches;  } -  static char * -complete_none (const char *txt, int times) +complete_none(const char *txt, int times)  { -        return NULL; +    return NULL;  } -  void * -cli_rl_input (void *_data) +cli_rl_input(void *_data)  { -        struct cli_state *state = NULL; -        char             *line = NULL; +    struct cli_state *state = NULL; +    char *line = NULL; -        state = _data; +    state = _data; -        for (;;) { -                line = readline (state->prompt); -                if (!line) -                        exit(0);  //break; +    for (;;) { +        line = readline(state->prompt); +        if (!line) +            exit(0);  // break; -                if (*line) -                        cli_rl_process_line (line); +        if (*line) +            cli_rl_process_line(line); -                free (line); -        } +        free(line); +    } -        return NULL; +    return NULL;  } -  int -cli_rl_enable (struct cli_state *state) +cli_rl_enable(struct cli_state *state)  { -        int ret = 0; - -        rl_pre_input_hook = NULL; -        rl_attempted_completion_function = cli_rl_autocomplete; -        rl_completion_entry_function = complete_none; - -        if (!state->rl_async) { -                ret = pthread_create (&state->input, NULL, -                                      cli_rl_input, state); -                if (ret == 0) -                        state->rl_enabled = 1; -                goto out; -        } +    int ret = 0; -        ret = event_register (state->ctx->event_pool, 0, cli_rl_stdin, state, -                              1, 0); -        if (ret == -1) -                goto out; +    rl_pre_input_hook = NULL; +    rl_attempted_completion_function = cli_rl_autocomplete; +    rl_completion_entry_function = complete_none; -        state->rl_enabled = 1; -        rl_callback_handler_install (state->prompt, cli_rl_process_line); +    if (!state->rl_async) { +        ret = pthread_create(&state->input, NULL, cli_rl_input, state); +        if (ret == 0) +            state->rl_enabled = 1; +        goto out; +    } + +    ret = event_register(state->ctx->event_pool, 0, cli_rl_stdin, state, 1, 0); +    if (ret == -1) +        goto out; + +    state->rl_enabled = 1; +    rl_callback_handler_install(state->prompt, cli_rl_process_line);  out: -        return state->rl_enabled; +    return state->rl_enabled;  }  #else /* HAVE_READLINE */  int -cli_rl_enable (struct cli_state *state) +cli_rl_enable(struct cli_state *state)  { -        return 0; +    return 0;  }  #endif /* HAVE_READLINE */ diff --git a/cli/src/cli-rpc-ops.c b/cli/src/cli-rpc-ops.c index 40bd64b983c..fea74667e05 100644 --- a/cli/src/cli-rpc-ops.c +++ b/cli/src/cli-rpc-ops.c @@ -14,14 +14,14 @@   */  #define VOL_TOP_PERF_FILENAME_DEF_WIDTH 47  #define VOL_TOP_PERF_FILENAME_ALT_WIDTH 44 -#define VOL_TOP_PERF_SPEED_WIDTH        4 -#define VOL_TOP_PERF_TIME_WIDTH         26 +#define VOL_TOP_PERF_SPEED_WIDTH 4 +#define VOL_TOP_PERF_TIME_WIDTH 26  #define INDENT_MAIN_HEAD "%-25s %s "  /* Do not show estimates if greater than this number */ -#define REBAL_ESTIMATE_SEC_UPPER_LIMIT    (60*24*3600) -#define REBAL_ESTIMATE_START_TIME         600 +#define REBAL_ESTIMATE_SEC_UPPER_LIMIT (60 * 24 * 3600) +#define REBAL_ESTIMATE_START_TIME 600  #include "cli.h"  #include "compat-errno.h" @@ -46,26 +46,22 @@  #include "quota-common-utils.h"  #include "events.h" -enum gf_task_types { -        GF_TASK_TYPE_REBALANCE, -        GF_TASK_TYPE_REMOVE_BRICK -}; +enum gf_task_types { GF_TASK_TYPE_REBALANCE, GF_TASK_TYPE_REMOVE_BRICK };  extern struct rpc_clnt *global_quotad_rpc;  extern rpc_clnt_prog_t cli_quotad_clnt;  extern rpc_clnt_prog_t *cli_rpc_prog; -extern int              cli_op_ret; -extern int              connected; +extern int cli_op_ret; +extern int connected;  int32_t -gf_cli_remove_brick (call_frame_t *frame, xlator_t *this, -                     void *data); - +gf_cli_remove_brick(call_frame_t *frame, xlator_t *this, void *data); -char *cli_vol_status_str[] = {"Created", -                              "Started", -                              "Stopped", -                             }; +char *cli_vol_status_str[] = { +    "Created", +    "Started", +    "Stopped", +};  char *cli_vol_task_status_str[] = {"not started",                                     "in progress", @@ -76,9670 +72,9631 @@ char *cli_vol_task_status_str[] = {"not started",                                     "fix-layout stopped",                                     "fix-layout completed",                                     "fix-layout failed", -                                   "unknown" -}; +                                   "unknown"};  int32_t -gf_cli_snapshot (call_frame_t *frame, xlator_t *this, void *data); +gf_cli_snapshot(call_frame_t *frame, xlator_t *this, void *data);  int32_t -gf_cli_get_volume (call_frame_t *frame, xlator_t *this, -                      void *data); +gf_cli_get_volume(call_frame_t *frame, xlator_t *this, void *data);  int -cli_to_glusterd (gf_cli_req *req, call_frame_t *frame, fop_cbk_fn_t cbkfn, -                 xdrproc_t xdrproc, dict_t *dict, int procnum, xlator_t *this, -                 rpc_clnt_prog_t *prog, struct iobref *iobref); +cli_to_glusterd(gf_cli_req *req, call_frame_t *frame, fop_cbk_fn_t cbkfn, +                xdrproc_t xdrproc, dict_t *dict, int procnum, xlator_t *this, +                rpc_clnt_prog_t *prog, struct iobref *iobref);  int -add_cli_cmd_timeout_to_dict (dict_t *dict); +add_cli_cmd_timeout_to_dict(dict_t *dict);  rpc_clnt_prog_t cli_handshake_prog = { -        .progname  = "cli handshake", -        .prognum   = GLUSTER_HNDSK_PROGRAM, -        .progver   = GLUSTER_HNDSK_VERSION, +    .progname = "cli handshake", +    .prognum = GLUSTER_HNDSK_PROGRAM, +    .progver = GLUSTER_HNDSK_VERSION,  };  rpc_clnt_prog_t cli_pmap_prog = { -        .progname   = "cli portmap", -        .prognum    = GLUSTER_PMAP_PROGRAM, -        .progver    = GLUSTER_PMAP_VERSION, +    .progname = "cli portmap", +    .prognum = GLUSTER_PMAP_PROGRAM, +    .progver = GLUSTER_PMAP_VERSION,  };  int -gf_cli_probe_cbk (struct rpc_req *req, struct iovec *iov, -                        int count, void *myframe) -{ -        gf_cli_rsp            rsp   = {0,}; -        int                   ret   = -1; -        char                  msg[1024] = {0,}; - -        GF_ASSERT (myframe); - -        if (-1 == req->rpc_status) { -                goto out; -        } - -        ret = xdr_to_generic (*iov, &rsp, (xdrproc_t)xdr_gf_cli_rsp); -        if (ret < 0) { -                gf_log (((call_frame_t *) myframe)->this->name, GF_LOG_ERROR, -                        "Failed to decode xdr response"); -                //rsp.op_ret   = -1; -                //rsp.op_errno = EINVAL; -                goto out; -        } - -        gf_log ("cli", GF_LOG_INFO, "Received resp to probe"); - -        if (rsp.op_errstr && (strlen (rsp.op_errstr) > 0)) { -                snprintf (msg, sizeof (msg), "%s", rsp.op_errstr); -                if (rsp.op_ret) -                        gf_log ("cli", GF_LOG_ERROR, "%s", msg); -        } +gf_cli_probe_cbk(struct rpc_req *req, struct iovec *iov, int count, +                 void *myframe) +{ +    gf_cli_rsp rsp = { +        0, +    }; +    int ret = -1; +    char msg[1024] = { +        0, +    }; + +    GF_ASSERT(myframe); + +    if (-1 == req->rpc_status) { +        goto out; +    } + +    ret = xdr_to_generic(*iov, &rsp, (xdrproc_t)xdr_gf_cli_rsp); +    if (ret < 0) { +        gf_log(((call_frame_t *)myframe)->this->name, GF_LOG_ERROR, +               "Failed to decode xdr response"); +        // rsp.op_ret   = -1; +        // rsp.op_errno = EINVAL; +        goto out; +    } + +    gf_log("cli", GF_LOG_INFO, "Received resp to probe"); + +    if (rsp.op_errstr && (strlen(rsp.op_errstr) > 0)) { +        snprintf(msg, sizeof(msg), "%s", rsp.op_errstr); +        if (rsp.op_ret) +            gf_log("cli", GF_LOG_ERROR, "%s", msg); +    } -        if (global_state->mode & GLUSTER_MODE_XML) { -                ret = cli_xml_output_str (NULL, -                                          (rsp.op_ret)? NULL : msg, -                                          rsp.op_ret, rsp.op_errno, -                                          (rsp.op_ret)? msg : NULL); -                if (ret) -                        gf_log ("cli", GF_LOG_ERROR, -                                "Error outputting to xml"); -                goto out; -        } +    if (global_state->mode & GLUSTER_MODE_XML) { +        ret = cli_xml_output_str(NULL, (rsp.op_ret) ? NULL : msg, rsp.op_ret, +                                 rsp.op_errno, (rsp.op_ret) ? msg : NULL); +        if (ret) +            gf_log("cli", GF_LOG_ERROR, "Error outputting to xml"); +        goto out; +    } -        if (!rsp.op_ret) -                cli_out ("peer probe: success. %s", msg); -        else -                cli_err ("peer probe: failed: %s", msg); +    if (!rsp.op_ret) +        cli_out("peer probe: success. %s", msg); +    else +        cli_err("peer probe: failed: %s", msg); -        ret = rsp.op_ret; +    ret = rsp.op_ret;  out: -        cli_cmd_broadcast_response (ret); -        return ret; +    cli_cmd_broadcast_response(ret); +    return ret;  }  int -gf_cli_deprobe_cbk (struct rpc_req *req, struct iovec *iov, -                       int count, void *myframe) -{ -        gf_cli_rsp            rsp   = {0,}; -        int                   ret   = -1; -        char              msg[1024] = {0,}; - -        GF_ASSERT (myframe); - -        if (-1 == req->rpc_status) { -                goto out; -        } - -        ret = xdr_to_generic (*iov, &rsp, (xdrproc_t)xdr_gf_cli_rsp); -        if (ret < 0) { -                gf_log (((call_frame_t *) myframe)->this->name, GF_LOG_ERROR, -                        "Failed to decode xdr response"); -                //rsp.op_ret   = -1; -                //rsp.op_errno = EINVAL; -                goto out; -        } - -        gf_log ("cli", GF_LOG_INFO, "Received resp to deprobe"); - -        if (rsp.op_ret) { -                if (strlen (rsp.op_errstr) > 0) { -                        snprintf (msg, sizeof (msg), "%s", rsp.op_errstr); -                        gf_log ("cli", GF_LOG_ERROR, "%s", rsp.op_errstr); -                } -        } else { -                snprintf (msg, sizeof (msg), "success"); -        } - -        if (global_state->mode & GLUSTER_MODE_XML) { -                ret = cli_xml_output_str (NULL, -                                          (rsp.op_ret)? NULL : msg, -                                          rsp.op_ret, rsp.op_errno, -                                          (rsp.op_ret)? msg : NULL); -                if (ret) -                        gf_log ("cli", GF_LOG_ERROR, -                                "Error outputting to xml"); -                goto out; -        } +gf_cli_deprobe_cbk(struct rpc_req *req, struct iovec *iov, int count, +                   void *myframe) +{ +    gf_cli_rsp rsp = { +        0, +    }; +    int ret = -1; +    char msg[1024] = { +        0, +    }; + +    GF_ASSERT(myframe); + +    if (-1 == req->rpc_status) { +        goto out; +    } + +    ret = xdr_to_generic(*iov, &rsp, (xdrproc_t)xdr_gf_cli_rsp); +    if (ret < 0) { +        gf_log(((call_frame_t *)myframe)->this->name, GF_LOG_ERROR, +               "Failed to decode xdr response"); +        // rsp.op_ret   = -1; +        // rsp.op_errno = EINVAL; +        goto out; +    } + +    gf_log("cli", GF_LOG_INFO, "Received resp to deprobe"); + +    if (rsp.op_ret) { +        if (strlen(rsp.op_errstr) > 0) { +            snprintf(msg, sizeof(msg), "%s", rsp.op_errstr); +            gf_log("cli", GF_LOG_ERROR, "%s", rsp.op_errstr); +        } +    } else { +        snprintf(msg, sizeof(msg), "success"); +    } + +    if (global_state->mode & GLUSTER_MODE_XML) { +        ret = cli_xml_output_str(NULL, (rsp.op_ret) ? NULL : msg, rsp.op_ret, +                                 rsp.op_errno, (rsp.op_ret) ? msg : NULL); +        if (ret) +            gf_log("cli", GF_LOG_ERROR, "Error outputting to xml"); +        goto out; +    } -        if (!rsp.op_ret) -                cli_out ("peer detach: %s", msg); -        else -                cli_err ("peer detach: failed: %s", msg); +    if (!rsp.op_ret) +        cli_out("peer detach: %s", msg); +    else +        cli_err("peer detach: failed: %s", msg); -        ret = rsp.op_ret; +    ret = rsp.op_ret;  out: -        cli_cmd_broadcast_response (ret); -        return ret; +    cli_cmd_broadcast_response(ret); +    return ret;  }  int -gf_cli_output_peer_hostnames (dict_t *dict, int count, char *prefix) -{ -        int ret = -1; -        char key[256] = {0,}; -        int i = 0; -        char *hostname = NULL; - -        cli_out ("Other names:"); -        /* Starting from friend.hostname1, as friend.hostname0 will be the same -         * as friend.hostname -         */ -        for (i = 1; i < count; i++) { -                snprintf (key, sizeof (key), "%s.hostname%d", prefix, i); -                ret = dict_get_str (dict, key, &hostname); -                if (ret) -                        break; -                cli_out ("%s", hostname); -                hostname = NULL; -        } +gf_cli_output_peer_hostnames(dict_t *dict, int count, char *prefix) +{ +    int ret = -1; +    char key[256] = { +        0, +    }; +    int i = 0; +    char *hostname = NULL; + +    cli_out("Other names:"); +    /* Starting from friend.hostname1, as friend.hostname0 will be the same +     * as friend.hostname +     */ +    for (i = 1; i < count; i++) { +        snprintf(key, sizeof(key), "%s.hostname%d", prefix, i); +        ret = dict_get_str(dict, key, &hostname); +        if (ret) +            break; +        cli_out("%s", hostname); +        hostname = NULL; +    } -        return ret; +    return ret;  }  int -gf_cli_output_peer_status (dict_t *dict, int count) -{ -        int                        ret   = -1; -        char                       *uuid_buf = NULL; -        char                       *hostname_buf = NULL; -        int32_t                    i = 1; -        char                       key[256] = {0,}; -        char                       *state = NULL; -        int32_t                    connected = 0; -        char                       *connected_str = NULL; -        int                        hostname_count = 0; - -        cli_out ("Number of Peers: %d", count); -        i = 1; -        while ( i <= count) { -                snprintf (key, 256, "friend%d.uuid", i); -                ret = dict_get_str (dict, key, &uuid_buf); -                if (ret) -                        goto out; - -                snprintf (key, 256, "friend%d.hostname", i); -                ret = dict_get_str (dict, key, &hostname_buf); -                if (ret) -                        goto out; +gf_cli_output_peer_status(dict_t *dict, int count) +{ +    int ret = -1; +    char *uuid_buf = NULL; +    char *hostname_buf = NULL; +    int32_t i = 1; +    char key[256] = { +        0, +    }; +    char *state = NULL; +    int32_t connected = 0; +    char *connected_str = NULL; +    int hostname_count = 0; + +    cli_out("Number of Peers: %d", count); +    i = 1; +    while (i <= count) { +        snprintf(key, 256, "friend%d.uuid", i); +        ret = dict_get_str(dict, key, &uuid_buf); +        if (ret) +            goto out; -                snprintf (key, 256, "friend%d.connected", i); -                ret = dict_get_int32 (dict, key, &connected); -                if (ret) -                        goto out; -                if (connected) -                        connected_str = "Connected"; -                else -                        connected_str = "Disconnected"; +        snprintf(key, 256, "friend%d.hostname", i); +        ret = dict_get_str(dict, key, &hostname_buf); +        if (ret) +            goto out; +        snprintf(key, 256, "friend%d.connected", i); +        ret = dict_get_int32(dict, key, &connected); +        if (ret) +            goto out; +        if (connected) +            connected_str = "Connected"; +        else +            connected_str = "Disconnected"; -                snprintf (key, 256, "friend%d.state", i); -                ret = dict_get_str (dict, key, &state); -                if (ret) -                        goto out; +        snprintf(key, 256, "friend%d.state", i); +        ret = dict_get_str(dict, key, &state); +        if (ret) +            goto out; -                cli_out ("\nHostname: %s\nUuid: %s\nState: %s (%s)", -                         hostname_buf, uuid_buf, state, connected_str); +        cli_out("\nHostname: %s\nUuid: %s\nState: %s (%s)", hostname_buf, +                uuid_buf, state, connected_str); -                snprintf (key, sizeof (key), "friend%d.hostname_count", i); -                ret = dict_get_int32 (dict, key, &hostname_count); -                /* Print other addresses only if there are more than 1. -                 */ -                if ((ret == 0) && (hostname_count > 1)) { -                        snprintf (key, sizeof (key), "friend%d", i); -                        ret = gf_cli_output_peer_hostnames (dict, -                                                            hostname_count, -                                                            key); -                        if (ret) { -                                gf_log ("cli", GF_LOG_WARNING, -                                        "error outputting peer other names"); -                                goto out; -                        } -                } -                i++; +        snprintf(key, sizeof(key), "friend%d.hostname_count", i); +        ret = dict_get_int32(dict, key, &hostname_count); +        /* Print other addresses only if there are more than 1. +         */ +        if ((ret == 0) && (hostname_count > 1)) { +            snprintf(key, sizeof(key), "friend%d", i); +            ret = gf_cli_output_peer_hostnames(dict, hostname_count, key); +            if (ret) { +                gf_log("cli", GF_LOG_WARNING, +                       "error outputting peer other names"); +                goto out; +            }          } +        i++; +    } -        ret = 0; +    ret = 0;  out: -        return ret; +    return ret;  }  int -gf_cli_output_pool_list (dict_t *dict, int count) -{ -        int                         ret           = -1; -        char                       *uuid_buf      = NULL; -        char                       *hostname_buf  = NULL; -        int32_t                     hostname_len  = 8; /*min len 8 chars*/ -        int32_t                     i             = 1; -        char                        key[256]      = {0,}; -        int32_t                     connected     = 0; -        char                       *connected_str = NULL; - -        if (count <= 0) -                goto out; - -        while (i <= count) { -                snprintf (key, 256, "friend%d.hostname", i); -                ret = dict_get_str (dict, key, &hostname_buf); -                if (ret) -                        goto out; +gf_cli_output_pool_list(dict_t *dict, int count) +{ +    int ret = -1; +    char *uuid_buf = NULL; +    char *hostname_buf = NULL; +    int32_t hostname_len = 8; /*min len 8 chars*/ +    int32_t i = 1; +    char key[256] = { +        0, +    }; +    int32_t connected = 0; +    char *connected_str = NULL; + +    if (count <= 0) +        goto out; + +    while (i <= count) { +        snprintf(key, 256, "friend%d.hostname", i); +        ret = dict_get_str(dict, key, &hostname_buf); +        if (ret) +            goto out; -                ret = strlen(hostname_buf); -                if (ret > hostname_len) -                        hostname_len = ret; +        ret = strlen(hostname_buf); +        if (ret > hostname_len) +            hostname_len = ret; -                i++; -        } +        i++; +    } -        cli_out ("UUID\t\t\t\t\t%-*s\tState", hostname_len, "Hostname"); +    cli_out("UUID\t\t\t\t\t%-*s\tState", hostname_len, "Hostname"); -        i = 1; -        while ( i <= count) { -                snprintf (key, 256, "friend%d.uuid", i); -                ret = dict_get_str (dict, key, &uuid_buf); -                if (ret) -                        goto out; +    i = 1; +    while (i <= count) { +        snprintf(key, 256, "friend%d.uuid", i); +        ret = dict_get_str(dict, key, &uuid_buf); +        if (ret) +            goto out; -                snprintf (key, 256, "friend%d.hostname", i); -                ret = dict_get_str (dict, key, &hostname_buf); -                if (ret) -                        goto out; +        snprintf(key, 256, "friend%d.hostname", i); +        ret = dict_get_str(dict, key, &hostname_buf); +        if (ret) +            goto out; -                snprintf (key, 256, "friend%d.connected", i); -                ret = dict_get_int32 (dict, key, &connected); -                if (ret) -                        goto out; -                if (connected) -                        connected_str = "Connected"; -                else -                        connected_str = "Disconnected"; +        snprintf(key, 256, "friend%d.connected", i); +        ret = dict_get_int32(dict, key, &connected); +        if (ret) +            goto out; +        if (connected) +            connected_str = "Connected"; +        else +            connected_str = "Disconnected"; -                cli_out ("%s\t%-*s\t%s ", uuid_buf, hostname_len, hostname_buf, -                         connected_str); -                i++; -        } +        cli_out("%s\t%-*s\t%s ", uuid_buf, hostname_len, hostname_buf, +                connected_str); +        i++; +    } -        ret = 0; +    ret = 0;  out: -        return ret; +    return ret;  }  /* function pointer for gf_cli_output_{pool_list,peer_status} */ -typedef int (*cli_friend_output_fn) (dict_t*, int); +typedef int (*cli_friend_output_fn)(dict_t *, int);  int -gf_cli_list_friends_cbk (struct rpc_req *req, struct iovec *iov, -                             int count, void *myframe) +gf_cli_list_friends_cbk(struct rpc_req *req, struct iovec *iov, int count, +                        void *myframe)  { -        gf1_cli_peer_list_rsp      rsp   = {0,}; -        int                        ret   = -1; -        dict_t                    *dict = NULL; -        char                       msg[1024] = {0,}; -        char                      *cmd = NULL; -        cli_friend_output_fn       friend_output_fn; -        call_frame_t              *frame = NULL; -        unsigned long              flags = 0; +    gf1_cli_peer_list_rsp rsp = { +        0, +    }; +    int ret = -1; +    dict_t *dict = NULL; +    char msg[1024] = { +        0, +    }; +    char *cmd = NULL; +    cli_friend_output_fn friend_output_fn; +    call_frame_t *frame = NULL; +    unsigned long flags = 0; -        GF_ASSERT (myframe); +    GF_ASSERT(myframe); -        frame = myframe; +    frame = myframe; -        flags = (long)frame->local; +    flags = (long)frame->local; -        if (flags == GF_CLI_LIST_POOL_NODES) { -                cmd = "pool list"; -                friend_output_fn = &gf_cli_output_pool_list; -        } else { -                cmd = "peer status"; -                friend_output_fn = &gf_cli_output_peer_status; -        } +    if (flags == GF_CLI_LIST_POOL_NODES) { +        cmd = "pool list"; +        friend_output_fn = &gf_cli_output_pool_list; +    } else { +        cmd = "peer status"; +        friend_output_fn = &gf_cli_output_peer_status; +    } -        /* 'free' the flags set by gf_cli_list_friends */ -        frame->local = NULL; +    /* 'free' the flags set by gf_cli_list_friends */ +    frame->local = NULL; -        if (-1 == req->rpc_status) { -                goto out; -        } +    if (-1 == req->rpc_status) { +        goto out; +    } -        ret = xdr_to_generic (*iov, &rsp, (xdrproc_t)xdr_gf1_cli_peer_list_rsp); -        if (ret < 0) { -                gf_log (frame->this->name, GF_LOG_ERROR, -                        "Failed to decode xdr response"); -                //rsp.op_ret   = -1; -                //rsp.op_errno = EINVAL; +    ret = xdr_to_generic(*iov, &rsp, (xdrproc_t)xdr_gf1_cli_peer_list_rsp); +    if (ret < 0) { +        gf_log(frame->this->name, GF_LOG_ERROR, +               "Failed to decode xdr response"); +        // rsp.op_ret   = -1; +        // rsp.op_errno = EINVAL; +        goto out; +    } + +    gf_log("cli", GF_LOG_DEBUG, "Received resp to list: %d", rsp.op_ret); + +    if (!rsp.op_ret) { +        if (!rsp.friends.friends_len) { +            snprintf(msg, sizeof(msg), "%s: No peers present", cmd); +            if (global_state->mode & GLUSTER_MODE_XML) { +                ret = cli_xml_output_peer_status(dict, rsp.op_ret, rsp.op_errno, +                                                 msg); +                if (ret) +                    gf_log("cli", GF_LOG_ERROR, "Error outputting to xml");                  goto out; +            } +            cli_err("%s", msg); +            ret = 0; +            goto out;          } -        gf_log ("cli", GF_LOG_DEBUG, "Received resp to list: %d", -                rsp.op_ret); - -        if (!rsp.op_ret) { - -                if (!rsp.friends.friends_len) { -                        snprintf (msg, sizeof (msg), -                                  "%s: No peers present", cmd); -                        if (global_state->mode & GLUSTER_MODE_XML) { -                                ret = cli_xml_output_peer_status (dict, -                                                                  rsp.op_ret, -                                                                  rsp.op_errno, -                                                                  msg); -                                if (ret) -                                        gf_log ("cli", GF_LOG_ERROR, -                                                "Error outputting to xml"); -                                goto out; -                        } -                        cli_err ("%s", msg); -                        ret = 0; -                        goto out; -                } - -                dict = dict_new (); +        dict = dict_new(); -                if (!dict) { -                        ret = -1; -                        goto out; -                } +        if (!dict) { +            ret = -1; +            goto out; +        } -                ret = dict_unserialize (rsp.friends.friends_val, -                                        rsp.friends.friends_len, -                                        &dict); +        ret = dict_unserialize(rsp.friends.friends_val, rsp.friends.friends_len, +                               &dict); -                if (ret) { -                        gf_log ("", GF_LOG_ERROR, -                                        "Unable to allocate memory"); -                        goto out; -                } +        if (ret) { +            gf_log("", GF_LOG_ERROR, "Unable to allocate memory"); +            goto out; +        } -                if (global_state->mode & GLUSTER_MODE_XML) { -                        ret = cli_xml_output_peer_status (dict, rsp.op_ret, -                                                          rsp.op_errno, msg); -                        if (ret) -                                gf_log ("cli", GF_LOG_ERROR, -                                        "Error outputting to xml"); -                        goto out; -                } +        if (global_state->mode & GLUSTER_MODE_XML) { +            ret = cli_xml_output_peer_status(dict, rsp.op_ret, rsp.op_errno, +                                             msg); +            if (ret) +                gf_log("cli", GF_LOG_ERROR, "Error outputting to xml"); +            goto out; +        } -                ret = dict_get_int32 (dict, "count", &count); -                if (ret) { -                        goto out; -                } +        ret = dict_get_int32(dict, "count", &count); +        if (ret) { +            goto out; +        } -                ret = friend_output_fn (dict, count); -                if (ret) { -                        goto out; -                } +        ret = friend_output_fn(dict, count); +        if (ret) { +            goto out; +        } +    } else { +        if (global_state->mode & GLUSTER_MODE_XML) { +            ret = cli_xml_output_peer_status(dict, rsp.op_ret, rsp.op_errno, +                                             NULL); +            if (ret) +                gf_log("cli", GF_LOG_ERROR, "Error outputting to xml");          } else { -                if (global_state->mode & GLUSTER_MODE_XML) { -                        ret = cli_xml_output_peer_status (dict, rsp.op_ret, -                                                          rsp.op_errno, NULL); -                        if (ret) -                                gf_log ("cli", GF_LOG_ERROR, -                                        "Error outputting to xml"); -                } else { -                        ret = -1; -                } -                goto out; +            ret = -1;          } +        goto out; +    } - -        ret = 0; +    ret = 0;  out: -        if (ret) -                cli_err ("%s: failed", cmd); +    if (ret) +        cli_err("%s: failed", cmd); -        cli_cmd_broadcast_response (ret); +    cli_cmd_broadcast_response(ret); -        if (dict) -                dict_unref (dict); +    if (dict) +        dict_unref(dict); -        return ret; +    return ret;  }  int -gf_cli_get_state_cbk (struct rpc_req *req, struct iovec *iov, -                      int count, void *myframe) -{ -        gf_cli_rsp           rsp            = {0,}; -        int                  ret            = -1; -        dict_t               *dict          = NULL; -        char                 *daemon_name   = NULL; -        char                 *ofilepath     = NULL; - -        GF_VALIDATE_OR_GOTO ("cli", myframe, out); - -        if (-1 == req->rpc_status) { -                goto out; -        } -        ret = xdr_to_generic (*iov, &rsp, (xdrproc_t)xdr_gf_cli_rsp); -        if (ret < 0) { -                gf_log (((call_frame_t *) myframe)->this->name, GF_LOG_ERROR, -                        "Failed to decode xdr response"); -                goto out; -        } - -        dict = dict_new (); - -        if (!dict) { -                ret = -1; -                goto out; -        } - -        ret = dict_unserialize (rsp.dict.dict_val, rsp.dict.dict_len, &dict); +gf_cli_get_state_cbk(struct rpc_req *req, struct iovec *iov, int count, +                     void *myframe) +{ +    gf_cli_rsp rsp = { +        0, +    }; +    int ret = -1; +    dict_t *dict = NULL; +    char *daemon_name = NULL; +    char *ofilepath = NULL; + +    GF_VALIDATE_OR_GOTO("cli", myframe, out); + +    if (-1 == req->rpc_status) { +        goto out; +    } +    ret = xdr_to_generic(*iov, &rsp, (xdrproc_t)xdr_gf_cli_rsp); +    if (ret < 0) { +        gf_log(((call_frame_t *)myframe)->this->name, GF_LOG_ERROR, +               "Failed to decode xdr response"); +        goto out; +    } + +    dict = dict_new(); + +    if (!dict) { +        ret = -1; +        goto out; +    } + +    ret = dict_unserialize(rsp.dict.dict_val, rsp.dict.dict_len, &dict); +    if (ret) +        goto out; + +    if (rsp.op_ret) { +        if (strcmp(rsp.op_errstr, "")) +            cli_err("Failed to get daemon state: %s", rsp.op_errstr); +        else +            cli_err( +                "Failed to get daemon state. Check glusterd" +                " log file for more details"); +    } else { +        ret = dict_get_str(dict, "daemon", &daemon_name);          if (ret) -                goto out; +            gf_log("cli", GF_LOG_ERROR, "Couldn't get daemon name"); -        if (rsp.op_ret) { -                if (strcmp (rsp.op_errstr, "")) -                        cli_err ("Failed to get daemon state: %s", rsp.op_errstr); -                else -                        cli_err ("Failed to get daemon state. Check glusterd" -                                 " log file for more details"); -        } else { -                ret = dict_get_str (dict, "daemon", &daemon_name); -                if (ret) -                        gf_log ("cli", GF_LOG_ERROR, "Couldn't get daemon name"); - -                ret = dict_get_str (dict, "ofilepath", &ofilepath); -                if (ret) -                        gf_log ("cli", GF_LOG_ERROR, "Couldn't get filepath"); +        ret = dict_get_str(dict, "ofilepath", &ofilepath); +        if (ret) +            gf_log("cli", GF_LOG_ERROR, "Couldn't get filepath"); -                if (daemon_name && ofilepath) -                        cli_out ("%s state dumped to %s", -                                 daemon_name, ofilepath); -        } +        if (daemon_name && ofilepath) +            cli_out("%s state dumped to %s", daemon_name, ofilepath); +    } -        ret = rsp.op_ret; +    ret = rsp.op_ret;  out: -        free (rsp.dict.dict_val); -        free (rsp.op_errstr); +    free(rsp.dict.dict_val); +    free(rsp.op_errstr); -        if (dict) -                dict_unref (dict); +    if (dict) +        dict_unref(dict); -        cli_cmd_broadcast_response (ret); +    cli_cmd_broadcast_response(ret); -        return ret; +    return ret;  }  void -cli_out_options ( char *substr, char *optstr, char *valstr) +cli_out_options(char *substr, char *optstr, char *valstr)  { -        char                    *ptr1 = NULL; -        char                    *ptr2 = NULL; +    char *ptr1 = NULL; +    char *ptr2 = NULL; -        ptr1 = substr; -        ptr2 = optstr; +    ptr1 = substr; +    ptr2 = optstr; -        while (ptr1) -        { - /* Avoiding segmentation fault. */ -                if (!ptr2) -                        return; -                if (*ptr1 != *ptr2) -                        break; -                ptr1++; -                ptr2++; -        } +    while (ptr1) { +        /* Avoiding segmentation fault. */ +        if (!ptr2) +            return; +        if (*ptr1 != *ptr2) +            break; +        ptr1++; +        ptr2++; +    } -        if (*ptr2 == '\0') -                return; -        cli_out ("%s: %s",ptr2 , valstr); +    if (*ptr2 == '\0') +        return; +    cli_out("%s: %s", ptr2, valstr);  }  static int -_gf_cli_output_volinfo_opts (dict_t *d, char *k, -                             data_t *v, void *tmp) -{ -        int     ret   = 0; -        char   *key   = NULL; -        char   *ptr   = NULL; -        data_t *value = NULL; - -        key = tmp; - -        ptr = strstr (k, "option."); -        if (ptr) { -                value = v; -                if (!value) { -                        ret = -1; -                        goto out; -                } -                cli_out_options (key, k, v->data); +_gf_cli_output_volinfo_opts(dict_t *d, char *k, data_t *v, void *tmp) +{ +    int ret = 0; +    char *key = NULL; +    char *ptr = NULL; +    data_t *value = NULL; + +    key = tmp; + +    ptr = strstr(k, "option."); +    if (ptr) { +        value = v; +        if (!value) { +            ret = -1; +            goto out;          } +        cli_out_options(key, k, v->data); +    }  out: -        return ret; +    return ret;  }  static int -print_brick_details (dict_t *dict, int volcount, int start_index, -                     int end_index, int replica_count) -{ -        char           key[1024]   = {0,}; -        int            index       = start_index; -        int            isArbiter   = 0; -        int            ret         = -1; -        char          *brick       = NULL; +print_brick_details(dict_t *dict, int volcount, int start_index, int end_index, +                    int replica_count) +{ +    char key[1024] = { +        0, +    }; +    int index = start_index; +    int isArbiter = 0; +    int ret = -1; +    char *brick = NULL;  #ifdef HAVE_BD_XLATOR -        char          *caps        = NULL; +    char *caps = NULL;  #endif -        while (index <= end_index) { -                snprintf (key, 1024, "volume%d.brick%d", volcount, index); -                ret = dict_get_str (dict, key, &brick); -                if (ret) -                        goto out; -                snprintf (key, sizeof (key), "volume%d.brick%d.isArbiter", -                          volcount, index); -                if (dict_get (dict, key)) -                        isArbiter = 1; -                else -                        isArbiter = 0; +    while (index <= end_index) { +        snprintf(key, 1024, "volume%d.brick%d", volcount, index); +        ret = dict_get_str(dict, key, &brick); +        if (ret) +            goto out; +        snprintf(key, sizeof(key), "volume%d.brick%d.isArbiter", volcount, +                 index); +        if (dict_get(dict, key)) +            isArbiter = 1; +        else +            isArbiter = 0; -                if (isArbiter) -                        cli_out ("Brick%d: %s (arbiter)", index, brick); -                else -                        cli_out ("Brick%d: %s", index, brick); +        if (isArbiter) +            cli_out("Brick%d: %s (arbiter)", index, brick); +        else +            cli_out("Brick%d: %s", index, brick);  #ifdef HAVE_BD_XLATOR -                snprintf (key, 1024, "volume%d.vg%d", volcount, index); -                ret = dict_get_str (dict, key, &caps); -                if (!ret) -                        cli_out ("Brick%d VG: %s", index, caps); +        snprintf(key, 1024, "volume%d.vg%d", volcount, index); +        ret = dict_get_str(dict, key, &caps); +        if (!ret) +            cli_out("Brick%d VG: %s", index, caps);  #endif -                index++; -        } -        ret = 0; +        index++; +    } +    ret = 0;  out: -        return ret; +    return ret;  }  void -gf_cli_print_number_of_bricks (int type, int brick_count, int dist_count, -                               int stripe_count, int replica_count, -                               int disperse_count, int redundancy_count, -                               int arbiter_count) -{ -       if (type == GF_CLUSTER_TYPE_STRIPE_REPLICATE) { -               if (arbiter_count == 0) { -                       cli_out ("Number of Bricks: %d x %d x %d = %d", -                                (brick_count / dist_count), -                                stripe_count, -                                replica_count, -                                brick_count); -               } else { -                       cli_out ("Number of Bricks: %d x %d x (%d + %d) = %d", -                                (brick_count / dist_count), -                                stripe_count, replica_count - arbiter_count, -                                arbiter_count, brick_count); -               } -       } else if (type == GF_CLUSTER_TYPE_NONE || -                  type == GF_CLUSTER_TYPE_TIER) { -               cli_out ("Number of Bricks: %d", brick_count); -       } else if (type == GF_CLUSTER_TYPE_DISPERSE) { -               cli_out ("Number of Bricks: %d x (%d + %d) = %d", -                        (brick_count / dist_count), -                        disperse_count - redundancy_count, -                        redundancy_count, brick_count); -       } else { -               /* For both replicate and stripe, dist_count is -                  good enough */ -               if (arbiter_count == 0) { -                       cli_out ("Number of Bricks: %d x %d = %d", -                                (brick_count / dist_count), -                                dist_count, brick_count); -               } else { -                       cli_out ("Number of Bricks: %d x (%d + %d) = %d", -                                (brick_count / dist_count), -                                dist_count - arbiter_count, arbiter_count, -                                brick_count); -               } -       } - +gf_cli_print_number_of_bricks(int type, int brick_count, int dist_count, +                              int stripe_count, int replica_count, +                              int disperse_count, int redundancy_count, +                              int arbiter_count) +{ +    if (type == GF_CLUSTER_TYPE_STRIPE_REPLICATE) { +        if (arbiter_count == 0) { +            cli_out("Number of Bricks: %d x %d x %d = %d", +                    (brick_count / dist_count), stripe_count, replica_count, +                    brick_count); +        } else { +            cli_out("Number of Bricks: %d x %d x (%d + %d) = %d", +                    (brick_count / dist_count), stripe_count, +                    replica_count - arbiter_count, arbiter_count, brick_count); +        } +    } else if (type == GF_CLUSTER_TYPE_NONE || type == GF_CLUSTER_TYPE_TIER) { +        cli_out("Number of Bricks: %d", brick_count); +    } else if (type == GF_CLUSTER_TYPE_DISPERSE) { +        cli_out("Number of Bricks: %d x (%d + %d) = %d", +                (brick_count / dist_count), disperse_count - redundancy_count, +                redundancy_count, brick_count); +    } else { +        /* For both replicate and stripe, dist_count is +           good enough */ +        if (arbiter_count == 0) { +            cli_out("Number of Bricks: %d x %d = %d", +                    (brick_count / dist_count), dist_count, brick_count); +        } else { +            cli_out("Number of Bricks: %d x (%d + %d) = %d", +                    (brick_count / dist_count), dist_count - arbiter_count, +                    arbiter_count, brick_count); +        } +    }  }  int -gf_cli_print_tier_info (dict_t *dict, int i, int brick_count) -{ - -        int                  hot_brick_count        = -1; -        int                  cold_type              = 0; -        int                  cold_brick_count       = 0; -        int                  cold_replica_count     = 0; -        int                  cold_arbiter_count     = 0; -        int                  cold_disperse_count    = 0; -        int                  cold_redundancy_count  = 0; -        int                  cold_dist_count        = 0; -        int                  hot_type               = 0; -        int                  hot_replica_count      = 0; -        int                  hot_dist_count         = 0; -        int                  ret                    = -1; -        int                  vol_type               = -1; -        char                 key[256]               = {0,}; - -        GF_ASSERT (dict); - -        snprintf (key, sizeof (key), "volume%d.cold_brick_count", i); -        ret = dict_get_int32 (dict, key, &cold_brick_count); -        if (ret) -                goto out; - -        snprintf (key, sizeof (key), "volume%d.cold_type", i); -        ret = dict_get_int32 (dict, key, &cold_type); -        if (ret) -                goto out; - -        snprintf (key, sizeof (key), "volume%d.cold_dist_count", i); -        ret = dict_get_int32 (dict, key, &cold_dist_count); -        if (ret) -                goto out; - -        snprintf (key, sizeof (key), "volume%d.cold_replica_count", i); -        ret = dict_get_int32 (dict, key, &cold_replica_count); -        if (ret) -                goto out; - -        snprintf (key, sizeof (key), "volume%d.cold_arbiter_count", i); -        ret = dict_get_int32 (dict, key, &cold_arbiter_count); -        if (ret) -                goto out; - -        snprintf (key, sizeof (key), "volume%d.cold_disperse_count", i); -        ret = dict_get_int32 (dict, key, &cold_disperse_count); -        if (ret) -                goto out; - -        snprintf (key, sizeof (key), -                  "volume%d.cold_redundancy_count", i); -        ret = dict_get_int32 (dict, key, -                              &cold_redundancy_count); -        if (ret) -                goto out; - -        snprintf (key, sizeof (key), "volume%d.hot_brick_count", i); -        ret = dict_get_int32 (dict, key, &hot_brick_count); -        if (ret) -                goto out; - -        snprintf (key, sizeof (key), "volume%d.hot_type", i); -        ret = dict_get_int32 (dict, key, &hot_type); -        if (ret) -                goto out; -        snprintf (key, sizeof (key), "volume%d.hot_replica_count", i); -        ret = dict_get_int32 (dict, key, &hot_replica_count); -        if (ret) -                goto out; - -        cli_out ("Hot Tier :"); -        hot_dist_count = (hot_replica_count ? -                          hot_replica_count : 1); - -        vol_type = get_vol_type (hot_type, hot_dist_count, hot_brick_count); -        cli_out ("Hot Tier Type : %s", -                 vol_type_str[vol_type]); - -        gf_cli_print_number_of_bricks (hot_type, -                        hot_brick_count, hot_dist_count, 0, -                        hot_replica_count, 0, 0, 0); - -        ret = print_brick_details (dict, i, 1, hot_brick_count, -                                   hot_replica_count); -        if (ret) -                goto out; - -        cli_out ("Cold Tier:"); - -        vol_type = get_vol_type (cold_type, cold_dist_count, cold_brick_count); -        cli_out ("Cold Tier Type : %s", -                        vol_type_str[vol_type]); - -        gf_cli_print_number_of_bricks (cold_type, -                cold_brick_count, -                cold_dist_count, 0, cold_replica_count, -                cold_disperse_count, cold_redundancy_count, cold_arbiter_count); - -        ret = print_brick_details (dict, i, hot_brick_count+1, -                                   brick_count, cold_replica_count); -        if (ret) -                goto out; -out: -        return ret; +gf_cli_print_tier_info(dict_t *dict, int i, int brick_count) +{ +    int hot_brick_count = -1; +    int cold_type = 0; +    int cold_brick_count = 0; +    int cold_replica_count = 0; +    int cold_arbiter_count = 0; +    int cold_disperse_count = 0; +    int cold_redundancy_count = 0; +    int cold_dist_count = 0; +    int hot_type = 0; +    int hot_replica_count = 0; +    int hot_dist_count = 0; +    int ret = -1; +    int vol_type = -1; +    char key[256] = { +        0, +    }; + +    GF_ASSERT(dict); + +    snprintf(key, sizeof(key), "volume%d.cold_brick_count", i); +    ret = dict_get_int32(dict, key, &cold_brick_count); +    if (ret) +        goto out; + +    snprintf(key, sizeof(key), "volume%d.cold_type", i); +    ret = dict_get_int32(dict, key, &cold_type); +    if (ret) +        goto out; + +    snprintf(key, sizeof(key), "volume%d.cold_dist_count", i); +    ret = dict_get_int32(dict, key, &cold_dist_count); +    if (ret) +        goto out; + +    snprintf(key, sizeof(key), "volume%d.cold_replica_count", i); +    ret = dict_get_int32(dict, key, &cold_replica_count); +    if (ret) +        goto out; + +    snprintf(key, sizeof(key), "volume%d.cold_arbiter_count", i); +    ret = dict_get_int32(dict, key, &cold_arbiter_count); +    if (ret) +        goto out; + +    snprintf(key, sizeof(key), "volume%d.cold_disperse_count", i); +    ret = dict_get_int32(dict, key, &cold_disperse_count); +    if (ret) +        goto out; + +    snprintf(key, sizeof(key), "volume%d.cold_redundancy_count", i); +    ret = dict_get_int32(dict, key, &cold_redundancy_count); +    if (ret) +        goto out; + +    snprintf(key, sizeof(key), "volume%d.hot_brick_count", i); +    ret = dict_get_int32(dict, key, &hot_brick_count); +    if (ret) +        goto out; + +    snprintf(key, sizeof(key), "volume%d.hot_type", i); +    ret = dict_get_int32(dict, key, &hot_type); +    if (ret) +        goto out; +    snprintf(key, sizeof(key), "volume%d.hot_replica_count", i); +    ret = dict_get_int32(dict, key, &hot_replica_count); +    if (ret) +        goto out; + +    cli_out("Hot Tier :"); +    hot_dist_count = (hot_replica_count ? hot_replica_count : 1); + +    vol_type = get_vol_type(hot_type, hot_dist_count, hot_brick_count); +    cli_out("Hot Tier Type : %s", vol_type_str[vol_type]); + +    gf_cli_print_number_of_bricks(hot_type, hot_brick_count, hot_dist_count, 0, +                                  hot_replica_count, 0, 0, 0); + +    ret = print_brick_details(dict, i, 1, hot_brick_count, hot_replica_count); +    if (ret) +        goto out; + +    cli_out("Cold Tier:"); + +    vol_type = get_vol_type(cold_type, cold_dist_count, cold_brick_count); +    cli_out("Cold Tier Type : %s", vol_type_str[vol_type]); + +    gf_cli_print_number_of_bricks(cold_type, cold_brick_count, cold_dist_count, +                                  0, cold_replica_count, cold_disperse_count, +                                  cold_redundancy_count, cold_arbiter_count); + +    ret = print_brick_details(dict, i, hot_brick_count + 1, brick_count, +                              cold_replica_count); +    if (ret) +        goto out; +out: +    return ret;  }  int -gf_cli_get_volume_cbk (struct rpc_req *req, struct iovec *iov, -                          int count, void *myframe) -{ -        int                        ret                  = -1; -        int                        opt_count            = 0; -        int32_t                    i                    = 0; -        int32_t                    j                    = 1; -        int32_t                    status               = 0; -        int32_t                    type                 = 0; -        int32_t                    brick_count          = 0; -        int32_t                    dist_count           = 0; -        int32_t                    stripe_count         = 0; -        int32_t                    replica_count        = 0; -        int32_t                    disperse_count       = 0; -        int32_t                    redundancy_count     = 0; -        int32_t                    arbiter_count        = 0; -        int32_t                    snap_count           = 0; -        int32_t                    vol_type             = 0; -        int32_t                    transport            = 0; -        char                      *volume_id_str        = NULL; -        char                      *volname              = NULL; -        dict_t                    *dict                 = NULL; -        cli_local_t               *local                = NULL; -        char                       key[1024]            = {0}; -        char                       err_str[2048]        = {0}; -        gf_cli_rsp                 rsp                  = {0}; -        char                      *caps __attribute__((unused)) = NULL; -        int                        k __attribute__((unused)) = 0; -        call_frame_t              *frame                = NULL; - -        GF_ASSERT (myframe); - -        if (-1 == req->rpc_status) -                goto out; +gf_cli_get_volume_cbk(struct rpc_req *req, struct iovec *iov, int count, +                      void *myframe) +{ +    int ret = -1; +    int opt_count = 0; +    int32_t i = 0; +    int32_t j = 1; +    int32_t status = 0; +    int32_t type = 0; +    int32_t brick_count = 0; +    int32_t dist_count = 0; +    int32_t stripe_count = 0; +    int32_t replica_count = 0; +    int32_t disperse_count = 0; +    int32_t redundancy_count = 0; +    int32_t arbiter_count = 0; +    int32_t snap_count = 0; +    int32_t vol_type = 0; +    int32_t transport = 0; +    char *volume_id_str = NULL; +    char *volname = NULL; +    dict_t *dict = NULL; +    cli_local_t *local = NULL; +    char key[1024] = {0}; +    char err_str[2048] = {0}; +    gf_cli_rsp rsp = {0}; +    char *caps __attribute__((unused)) = NULL; +    int k __attribute__((unused)) = 0; +    call_frame_t *frame = NULL; + +    GF_ASSERT(myframe); + +    if (-1 == req->rpc_status) +        goto out; + +    frame = myframe; + +    GF_ASSERT(frame->local); + +    local = frame->local; + +    ret = xdr_to_generic(*iov, &rsp, (xdrproc_t)xdr_gf_cli_rsp); +    if (ret < 0) { +        gf_log(frame->this->name, GF_LOG_ERROR, +               "Failed to decode xdr response"); +        goto out; +    } + +    gf_log("cli", GF_LOG_INFO, "Received resp to get vol: %d", rsp.op_ret); + +    if (!rsp.dict.dict_len) { +        if (global_state->mode & GLUSTER_MODE_XML) +            goto xml_output; +        cli_err("No volumes present"); +        ret = 0; +        goto out; +    } -        frame = myframe; +    dict = dict_new(); -        GF_ASSERT (frame->local); +    if (!dict) { +        ret = -1; +        goto out; +    } -        local = frame->local; +    ret = dict_unserialize(rsp.dict.dict_val, rsp.dict.dict_len, &dict); -        ret = xdr_to_generic (*iov, &rsp, (xdrproc_t)xdr_gf_cli_rsp); -        if (ret < 0) { -                gf_log (frame->this->name, GF_LOG_ERROR, -                        "Failed to decode xdr response"); -                goto out; -        } +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, "Unable to allocate memory"); +        goto out; +    } -        gf_log ("cli", GF_LOG_INFO, "Received resp to get vol: %d", -                rsp.op_ret); +    ret = dict_get_int32(dict, "count", &count); +    if (ret) +        goto out; -        if (!rsp.dict.dict_len) { -                if (global_state->mode & GLUSTER_MODE_XML) -                        goto xml_output; -                cli_err ("No volumes present"); +    if (!count) { +        switch (local->get_vol.flags) { +            case GF_CLI_GET_NEXT_VOLUME: +                GF_FREE(local->get_vol.volname); +                local->get_vol.volname = NULL;                  ret = 0;                  goto out; -        } - -        dict = dict_new (); -        if (!dict) { +            case GF_CLI_GET_VOLUME: +                snprintf(err_str, sizeof(err_str), "Volume %s does not exist", +                         local->get_vol.volname);                  ret = -1; -                goto out; +                if (!(global_state->mode & GLUSTER_MODE_XML)) +                    goto out;          } +    } -        ret = dict_unserialize (rsp.dict.dict_val, -                                rsp.dict.dict_len, -                                &dict); - -        if (ret) { -                gf_log ("cli", GF_LOG_ERROR, -                        "Unable to allocate memory"); -                goto out; -        } +    if (rsp.op_ret) { +        if (global_state->mode & GLUSTER_MODE_XML) +            goto xml_output; +        ret = -1; +        goto out; +    } -        ret = dict_get_int32 (dict, "count", &count); -        if (ret) +xml_output: +    if (global_state->mode & GLUSTER_MODE_XML) { +        /* For GET_NEXT_VOLUME output is already begun in +         * and will also end in gf_cli_get_next_volume() +         */ +        if (local->get_vol.flags == GF_CLI_GET_VOLUME) { +            ret = cli_xml_output_vol_info_begin(local, rsp.op_ret, rsp.op_errno, +                                                rsp.op_errstr); +            if (ret) { +                gf_log("cli", GF_LOG_ERROR, "Error outputting to xml");                  goto out; - -        if (!count) { -                switch (local->get_vol.flags) { - -                case GF_CLI_GET_NEXT_VOLUME: -                        GF_FREE (local->get_vol.volname); -                        local->get_vol.volname = NULL; -                        ret = 0; -                        goto out; - -                case GF_CLI_GET_VOLUME: -                        snprintf (err_str, sizeof (err_str), -                                  "Volume %s does not exist", -                                  local->get_vol.volname); -                        ret = -1; -                        if (!(global_state->mode & GLUSTER_MODE_XML)) -                                goto out; -                } +            }          } -        if (rsp.op_ret) { -                if (global_state->mode & GLUSTER_MODE_XML) -                        goto xml_output; -                ret = -1; +        if (dict) { +            ret = cli_xml_output_vol_info(local, dict); +            if (ret) { +                gf_log("cli", GF_LOG_ERROR, "Error outputting to xml");                  goto out; +            }          } -xml_output: -        if (global_state->mode & GLUSTER_MODE_XML) { -                /* For GET_NEXT_VOLUME output is already begun in -                 * and will also end in gf_cli_get_next_volume() -                 */ -                if (local->get_vol.flags == GF_CLI_GET_VOLUME) { -                        ret = cli_xml_output_vol_info_begin -                                (local, rsp.op_ret, rsp.op_errno, -                                 rsp.op_errstr); -                        if (ret) { -                                gf_log ("cli", GF_LOG_ERROR, -                                        "Error outputting to xml"); -                                goto out; -                        } -                } - -                if (dict) { -                        ret = cli_xml_output_vol_info (local, dict); -                        if (ret) { -                                gf_log ("cli", GF_LOG_ERROR, -                                        "Error outputting to xml"); -                                goto out; -                        } -                } - -                if (local->get_vol.flags == GF_CLI_GET_VOLUME) { -                        ret = cli_xml_output_vol_info_end (local); -                        if (ret) -                                gf_log ("cli", GF_LOG_ERROR, -                                        "Error outputting to xml"); -                } -                goto out; +        if (local->get_vol.flags == GF_CLI_GET_VOLUME) { +            ret = cli_xml_output_vol_info_end(local); +            if (ret) +                gf_log("cli", GF_LOG_ERROR, "Error outputting to xml");          } +        goto out; +    } -        while ( i < count) { -                cli_out (" "); -                snprintf (key, 256, "volume%d.name", i); -                ret = dict_get_str (dict, key, &volname); -                if (ret) -                        goto out; +    while (i < count) { +        cli_out(" "); +        snprintf(key, 256, "volume%d.name", i); +        ret = dict_get_str(dict, key, &volname); +        if (ret) +            goto out; -                snprintf (key, 256, "volume%d.type", i); -                ret = dict_get_int32 (dict, key, &type); -                if (ret) -                        goto out; +        snprintf(key, 256, "volume%d.type", i); +        ret = dict_get_int32(dict, key, &type); +        if (ret) +            goto out; -                snprintf (key, 256, "volume%d.status", i); -                ret = dict_get_int32 (dict, key, &status); -                if (ret) -                        goto out; +        snprintf(key, 256, "volume%d.status", i); +        ret = dict_get_int32(dict, key, &status); +        if (ret) +            goto out; -                snprintf (key, 256, "volume%d.brick_count", i); -                ret = dict_get_int32 (dict, key, &brick_count); -                if (ret) -                        goto out; +        snprintf(key, 256, "volume%d.brick_count", i); +        ret = dict_get_int32(dict, key, &brick_count); +        if (ret) +            goto out; -                snprintf (key, 256, "volume%d.dist_count", i); -                ret = dict_get_int32 (dict, key, &dist_count); -                if (ret) -                        goto out; +        snprintf(key, 256, "volume%d.dist_count", i); +        ret = dict_get_int32(dict, key, &dist_count); +        if (ret) +            goto out; -                snprintf (key, 256, "volume%d.stripe_count", i); -                ret = dict_get_int32 (dict, key, &stripe_count); -                if (ret) -                        goto out; +        snprintf(key, 256, "volume%d.stripe_count", i); +        ret = dict_get_int32(dict, key, &stripe_count); +        if (ret) +            goto out; -                snprintf (key, 256, "volume%d.replica_count", i); -                ret = dict_get_int32 (dict, key, &replica_count); -                if (ret) -                        goto out; +        snprintf(key, 256, "volume%d.replica_count", i); +        ret = dict_get_int32(dict, key, &replica_count); +        if (ret) +            goto out; -                snprintf (key, 256, "volume%d.disperse_count", i); -                ret = dict_get_int32 (dict, key, &disperse_count); -                if (ret) -                        goto out; +        snprintf(key, 256, "volume%d.disperse_count", i); +        ret = dict_get_int32(dict, key, &disperse_count); +        if (ret) +            goto out; -                snprintf (key, 256, "volume%d.redundancy_count", i); -                ret = dict_get_int32 (dict, key, &redundancy_count); -                if (ret) -                        goto out; +        snprintf(key, 256, "volume%d.redundancy_count", i); +        ret = dict_get_int32(dict, key, &redundancy_count); +        if (ret) +            goto out; -                snprintf (key, sizeof(key), "volume%d.arbiter_count", i); -                ret = dict_get_int32 (dict, key, &arbiter_count); -                if (ret) -                        goto out; +        snprintf(key, sizeof(key), "volume%d.arbiter_count", i); +        ret = dict_get_int32(dict, key, &arbiter_count); +        if (ret) +            goto out; -                snprintf (key, 256, "volume%d.transport", i); -                ret = dict_get_int32 (dict, key, &transport); -                if (ret) -                        goto out; +        snprintf(key, 256, "volume%d.transport", i); +        ret = dict_get_int32(dict, key, &transport); +        if (ret) +            goto out; -                snprintf (key, 256, "volume%d.volume_id", i); -                ret = dict_get_str (dict, key, &volume_id_str); -                if (ret) -                        goto out; +        snprintf(key, 256, "volume%d.volume_id", i); +        ret = dict_get_str(dict, key, &volume_id_str); +        if (ret) +            goto out; -                snprintf (key, 256, "volume%d.snap_count", i); -                ret = dict_get_int32 (dict, key, &snap_count); -                if (ret) -                        goto out; +        snprintf(key, 256, "volume%d.snap_count", i); +        ret = dict_get_int32(dict, key, &snap_count); +        if (ret) +            goto out; -                // Distributed (stripe/replicate/stripe-replica) setups -                vol_type = get_vol_type (type, dist_count, brick_count); +        // Distributed (stripe/replicate/stripe-replica) setups +        vol_type = get_vol_type(type, dist_count, brick_count); -                cli_out ("Volume Name: %s", volname); -                cli_out ("Type: %s", vol_type_str[vol_type]); -                cli_out ("Volume ID: %s", volume_id_str); -                cli_out ("Status: %s", cli_vol_status_str[status]); -                cli_out ("Snapshot Count: %d", snap_count); +        cli_out("Volume Name: %s", volname); +        cli_out("Type: %s", vol_type_str[vol_type]); +        cli_out("Volume ID: %s", volume_id_str); +        cli_out("Status: %s", cli_vol_status_str[status]); +        cli_out("Snapshot Count: %d", snap_count);  #ifdef HAVE_BD_XLATOR -                k = 0; -                snprintf (key, sizeof (key), "volume%d.xlator%d", i, k); -                ret = dict_get_str (dict, key, &caps); -                if (ret) -                        goto next; -                do { -                        j = 0; -                        cli_out ("Xlator %d: %s", k + 1, caps); -                        do { -                                snprintf (key, sizeof (key), -                                          "volume%d.xlator%d.caps%d", -                                          i, k, j++); -                                ret = dict_get_str (dict, key, &caps); -                                if (ret) -                                        break; -                                cli_out ("Capability %d: %s", j, caps); -                        } while (1); - -                        snprintf (key, sizeof (key), -                                  "volume%d.xlator%d", i, ++k); -                        ret = dict_get_str (dict, key, &caps); -                        if (ret) -                                break; -                } while (1); - -next: -#endif -                gf_cli_print_number_of_bricks (type, brick_count, -                                dist_count, stripe_count, replica_count, -                                disperse_count, redundancy_count, -                                arbiter_count); +        k = 0; +        snprintf(key, sizeof(key), "volume%d.xlator%d", i, k); +        ret = dict_get_str(dict, key, &caps); +        if (ret) +            goto next; +        do { +            j = 0; +            cli_out("Xlator %d: %s", k + 1, caps); +            do { +                snprintf(key, sizeof(key), "volume%d.xlator%d.caps%d", i, k, +                         j++); +                ret = dict_get_str(dict, key, &caps); +                if (ret) +                    break; +                cli_out("Capability %d: %s", j, caps); +            } while (1); + +            snprintf(key, sizeof(key), "volume%d.xlator%d", i, ++k); +            ret = dict_get_str(dict, key, &caps); +            if (ret) +                break; +        } while (1); -                cli_out ("Transport-type: %s", -                         ((transport == 0)?"tcp": -                          (transport == 1)?"rdma": -                          "tcp,rdma")); -                j = 1; +    next: +#endif +        gf_cli_print_number_of_bricks( +            type, brick_count, dist_count, stripe_count, replica_count, +            disperse_count, redundancy_count, arbiter_count); -                GF_FREE (local->get_vol.volname); -                local->get_vol.volname = gf_strdup (volname); +        cli_out("Transport-type: %s", +                ((transport == 0) ? "tcp" +                                  : (transport == 1) ? "rdma" : "tcp,rdma")); +        j = 1; -                if (type == GF_CLUSTER_TYPE_TIER) { -                        ret = gf_cli_print_tier_info (dict, i, brick_count); -                        if (ret) -                                goto out; +        GF_FREE(local->get_vol.volname); +        local->get_vol.volname = gf_strdup(volname); -                } else { -                        cli_out ("Bricks:"); -                        ret = print_brick_details (dict, i, j, brick_count, -                                                  replica_count); -                        if (ret) -                                goto out; -                } +        if (type == GF_CLUSTER_TYPE_TIER) { +            ret = gf_cli_print_tier_info(dict, i, brick_count); +            if (ret) +                goto out; -                snprintf (key, 256, "volume%d.opt_count",i); -                ret = dict_get_int32 (dict, key, &opt_count); -                if (ret) -                        goto out; +        } else { +            cli_out("Bricks:"); +            ret = print_brick_details(dict, i, j, brick_count, replica_count); +            if (ret) +                goto out; +        } -                if (!opt_count) -                        goto out; +        snprintf(key, 256, "volume%d.opt_count", i); +        ret = dict_get_int32(dict, key, &opt_count); +        if (ret) +            goto out; -                cli_out ("Options Reconfigured:"); +        if (!opt_count) +            goto out; -                snprintf (key, 256, "volume%d.option.",i); +        cli_out("Options Reconfigured:"); -                ret = dict_foreach (dict, _gf_cli_output_volinfo_opts, key); -                if (ret) -                        goto out; +        snprintf(key, 256, "volume%d.option.", i); -                i++; -        } +        ret = dict_foreach(dict, _gf_cli_output_volinfo_opts, key); +        if (ret) +            goto out; +        i++; +    } -        ret = 0; +    ret = 0;  out: -        if (ret) -                cli_err ("%s", err_str); +    if (ret) +        cli_err("%s", err_str); -        cli_cmd_broadcast_response (ret); +    cli_cmd_broadcast_response(ret); -        if (dict) -                dict_unref (dict); +    if (dict) +        dict_unref(dict); -        free (rsp.dict.dict_val); +    free(rsp.dict.dict_val); -        free (rsp.op_errstr); +    free(rsp.op_errstr); -        gf_log ("cli", GF_LOG_DEBUG, "Returning: %d", ret); -        return ret; +    gf_log("cli", GF_LOG_DEBUG, "Returning: %d", ret); +    return ret;  }  int -gf_cli_create_volume_cbk (struct rpc_req *req, struct iovec *iov, -                             int count, void *myframe) +gf_cli_create_volume_cbk(struct rpc_req *req, struct iovec *iov, int count, +                         void *myframe)  { -        gf_cli_rsp              rsp       = {0,}; -        int                     ret       = -1; -        cli_local_t             *local    = NULL; -        char                    *volname  = NULL; -        dict_t                  *rsp_dict = NULL; -        call_frame_t            *frame    = NULL; - -        GF_ASSERT (myframe); +    gf_cli_rsp rsp = { +        0, +    }; +    int ret = -1; +    cli_local_t *local = NULL; +    char *volname = NULL; +    dict_t *rsp_dict = NULL; +    call_frame_t *frame = NULL; -        if (-1 == req->rpc_status) { -                goto out; -        } +    GF_ASSERT(myframe); -        frame = myframe; +    if (-1 == req->rpc_status) { +        goto out; +    } -        GF_ASSERT (frame->local); +    frame = myframe; -        local = frame->local; +    GF_ASSERT(frame->local); -        ret = xdr_to_generic (*iov, &rsp, (xdrproc_t)xdr_gf_cli_rsp); -        if (ret < 0) { -                gf_log (frame->this->name, GF_LOG_ERROR, -                        "Failed to decode xdr response"); -                goto out; -        } +    local = frame->local; -        gf_log ("cli", GF_LOG_INFO, "Received resp to create volume"); +    ret = xdr_to_generic(*iov, &rsp, (xdrproc_t)xdr_gf_cli_rsp); +    if (ret < 0) { +        gf_log(frame->this->name, GF_LOG_ERROR, +               "Failed to decode xdr response"); +        goto out; +    } -        ret = dict_get_str (local->dict, "volname", &volname); -        if (ret) -                goto out; +    gf_log("cli", GF_LOG_INFO, "Received resp to create volume"); -        if (global_state->mode & GLUSTER_MODE_XML) { -                if (rsp.op_ret == 0) { -                        rsp_dict = dict_new (); -                        ret = dict_unserialize (rsp.dict.dict_val, -                                                rsp.dict.dict_len, -                                                &rsp_dict); -                        if (ret) { -                                gf_log ("cli", GF_LOG_ERROR, -                                        "Failed rsp_dict unserialization"); -                                goto out; -                        } -                } +    ret = dict_get_str(local->dict, "volname", &volname); +    if (ret) +        goto out; -                ret = cli_xml_output_vol_create (rsp_dict, rsp.op_ret, -                                                 rsp.op_errno, rsp.op_errstr); -                if (ret) -                        gf_log ("cli", GF_LOG_ERROR, -                                "Error outputting to xml"); +    if (global_state->mode & GLUSTER_MODE_XML) { +        if (rsp.op_ret == 0) { +            rsp_dict = dict_new(); +            ret = dict_unserialize(rsp.dict.dict_val, rsp.dict.dict_len, +                                   &rsp_dict); +            if (ret) { +                gf_log("cli", GF_LOG_ERROR, "Failed rsp_dict unserialization");                  goto out; +            }          } -        if (rsp.op_ret && strcmp (rsp.op_errstr, "")) -                cli_err ("volume create: %s: failed: %s", volname, -                         rsp.op_errstr); -        else if (rsp.op_ret) -                cli_err ("volume create: %s: failed", volname); -        else -                cli_out ("volume create: %s: success: " -                         "please start the volume to access data", volname); +        ret = cli_xml_output_vol_create(rsp_dict, rsp.op_ret, rsp.op_errno, +                                        rsp.op_errstr); +        if (ret) +            gf_log("cli", GF_LOG_ERROR, "Error outputting to xml"); +        goto out; +    } -        ret = rsp.op_ret; +    if (rsp.op_ret && strcmp(rsp.op_errstr, "")) +        cli_err("volume create: %s: failed: %s", volname, rsp.op_errstr); +    else if (rsp.op_ret) +        cli_err("volume create: %s: failed", volname); +    else +        cli_out( +            "volume create: %s: success: " +            "please start the volume to access data", +            volname); + +    ret = rsp.op_ret;  out: -        cli_cmd_broadcast_response (ret); -        free (rsp.dict.dict_val); -        free (rsp.op_errstr); -        return ret; +    cli_cmd_broadcast_response(ret); +    free(rsp.dict.dict_val); +    free(rsp.op_errstr); +    return ret;  }  int -gf_cli_delete_volume_cbk (struct rpc_req *req, struct iovec *iov, -                             int count, void *myframe) +gf_cli_delete_volume_cbk(struct rpc_req *req, struct iovec *iov, int count, +                         void *myframe)  { -        gf_cli_rsp              rsp   = {0,}; -        int                     ret   = -1; -        cli_local_t             *local = NULL; -        char                    *volname = NULL; -        call_frame_t            *frame = NULL; -        dict_t                  *rsp_dict = NULL; +    gf_cli_rsp rsp = { +        0, +    }; +    int ret = -1; +    cli_local_t *local = NULL; +    char *volname = NULL; +    call_frame_t *frame = NULL; +    dict_t *rsp_dict = NULL; -        GF_ASSERT (myframe); +    GF_ASSERT(myframe); -        if (-1 == req->rpc_status) { -                goto out; -        } +    if (-1 == req->rpc_status) { +        goto out; +    } -        frame = myframe; +    frame = myframe; -        GF_ASSERT (frame->local); +    GF_ASSERT(frame->local); -        local = frame->local; +    local = frame->local; -        ret = xdr_to_generic (*iov, &rsp, (xdrproc_t)xdr_gf_cli_rsp); -        if (ret < 0) { -                gf_log (frame->this->name, GF_LOG_ERROR, -                        "Failed to decode xdr response"); -                goto out; -        } +    ret = xdr_to_generic(*iov, &rsp, (xdrproc_t)xdr_gf_cli_rsp); +    if (ret < 0) { +        gf_log(frame->this->name, GF_LOG_ERROR, +               "Failed to decode xdr response"); +        goto out; +    } -        ret = dict_get_str (local->dict, "volname", &volname); -        if (ret) { -                gf_log (frame->this->name, GF_LOG_ERROR, -                        "dict get failed"); -                goto out; -        } +    ret = dict_get_str(local->dict, "volname", &volname); +    if (ret) { +        gf_log(frame->this->name, GF_LOG_ERROR, "dict get failed"); +        goto out; +    } -        gf_log ("cli", GF_LOG_INFO, "Received resp to delete volume"); +    gf_log("cli", GF_LOG_INFO, "Received resp to delete volume"); -        if (global_state->mode & GLUSTER_MODE_XML) { -                if (rsp.op_ret == 0) { -                        rsp_dict = dict_new (); -                        ret = dict_unserialize (rsp.dict.dict_val, -                                                rsp.dict.dict_len, -                                                &rsp_dict); -                        if (ret) { -                                gf_log ("cli", GF_LOG_ERROR, -                                        "Failed rsp_dict unserialization"); -                                goto out; -                        } -                } - -                ret = cli_xml_output_generic_volume ("volDelete", rsp_dict, -                                                     rsp.op_ret, rsp.op_errno, -                                                     rsp.op_errstr); -                if (ret) -                        gf_log ("cli", GF_LOG_ERROR, -                                "Error outputting to xml"); +    if (global_state->mode & GLUSTER_MODE_XML) { +        if (rsp.op_ret == 0) { +            rsp_dict = dict_new(); +            ret = dict_unserialize(rsp.dict.dict_val, rsp.dict.dict_len, +                                   &rsp_dict); +            if (ret) { +                gf_log("cli", GF_LOG_ERROR, "Failed rsp_dict unserialization");                  goto out; +            }          } -        if (rsp.op_ret && strcmp (rsp.op_errstr, "")) -                cli_err ("volume delete: %s: failed: %s", volname, -                         rsp.op_errstr); -        else if (rsp.op_ret) -                cli_err ("volume delete: %s: failed", volname); -        else -                cli_out ("volume delete: %s: success", volname); +        ret = cli_xml_output_generic_volume("volDelete", rsp_dict, rsp.op_ret, +                                            rsp.op_errno, rsp.op_errstr); +        if (ret) +            gf_log("cli", GF_LOG_ERROR, "Error outputting to xml"); +        goto out; +    } -        ret = rsp.op_ret; +    if (rsp.op_ret && strcmp(rsp.op_errstr, "")) +        cli_err("volume delete: %s: failed: %s", volname, rsp.op_errstr); +    else if (rsp.op_ret) +        cli_err("volume delete: %s: failed", volname); +    else +        cli_out("volume delete: %s: success", volname); + +    ret = rsp.op_ret;  out: -        cli_cmd_broadcast_response (ret); -        free (rsp.dict.dict_val); +    cli_cmd_broadcast_response(ret); +    free(rsp.dict.dict_val); -        gf_log ("", GF_LOG_DEBUG, "Returning with %d", ret); -        return ret; +    gf_log("", GF_LOG_DEBUG, "Returning with %d", ret); +    return ret;  }  int -gf_cli3_1_uuid_get_cbk (struct rpc_req *req, struct iovec *iov, -                        int count, void *myframe) -{ -        char                    *uuid_str = NULL; -        gf_cli_rsp              rsp   = {0,}; -        int                     ret   = -1; -        cli_local_t             *local = NULL; -        call_frame_t            *frame = NULL; -        dict_t                  *dict = NULL; - -        GF_ASSERT (myframe); - -        if (-1 == req->rpc_status) -                goto out; - -        frame = myframe; - -        GF_ASSERT (frame->local); - -        local = frame->local; - -        ret = xdr_to_generic (*iov, &rsp, (xdrproc_t)xdr_gf_cli_rsp); -        if (ret < 0) { -                gf_log (frame->this->name, GF_LOG_ERROR, -                        "Failed to decode xdr response"); -                goto out; -        } - -        frame->local = NULL; - -        gf_log ("cli", GF_LOG_INFO, "Received resp to uuid get"); - -        dict = dict_new (); -        if (!dict) { -                ret = -1; -                goto out; -        } - -        ret = dict_unserialize (rsp.dict.dict_val, rsp.dict.dict_len, -                                &dict); -        if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Failed to unserialize " -                        "response for uuid get"); -                goto out; -        } - -        ret = dict_get_str (dict, "uuid", &uuid_str); -        if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Failed to get uuid " -                        "from dictionary"); -                goto out; -        } - -        if (global_state->mode & GLUSTER_MODE_XML) { -                ret = cli_xml_output_dict ("uuidGenerate", dict, rsp.op_ret, -                                           rsp.op_errno, rsp.op_errstr); -                if (ret) -                        gf_log ("cli", GF_LOG_ERROR, -                                "Error outputting to xml"); -                goto out; -        } - -        if (rsp.op_ret) { -                if (strcmp (rsp.op_errstr, "") == 0) -                        cli_err ("Get uuid was unsuccessful"); -                else -                        cli_err ("%s", rsp.op_errstr); +gf_cli3_1_uuid_get_cbk(struct rpc_req *req, struct iovec *iov, int count, +                       void *myframe) +{ +    char *uuid_str = NULL; +    gf_cli_rsp rsp = { +        0, +    }; +    int ret = -1; +    cli_local_t *local = NULL; +    call_frame_t *frame = NULL; +    dict_t *dict = NULL; + +    GF_ASSERT(myframe); + +    if (-1 == req->rpc_status) +        goto out; + +    frame = myframe; + +    GF_ASSERT(frame->local); + +    local = frame->local; + +    ret = xdr_to_generic(*iov, &rsp, (xdrproc_t)xdr_gf_cli_rsp); +    if (ret < 0) { +        gf_log(frame->this->name, GF_LOG_ERROR, +               "Failed to decode xdr response"); +        goto out; +    } + +    frame->local = NULL; + +    gf_log("cli", GF_LOG_INFO, "Received resp to uuid get"); + +    dict = dict_new(); +    if (!dict) { +        ret = -1; +        goto out; +    } + +    ret = dict_unserialize(rsp.dict.dict_val, rsp.dict.dict_len, &dict); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, +               "Failed to unserialize " +               "response for uuid get"); +        goto out; +    } + +    ret = dict_get_str(dict, "uuid", &uuid_str); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, +               "Failed to get uuid " +               "from dictionary"); +        goto out; +    } + +    if (global_state->mode & GLUSTER_MODE_XML) { +        ret = cli_xml_output_dict("uuidGenerate", dict, rsp.op_ret, +                                  rsp.op_errno, rsp.op_errstr); +        if (ret) +            gf_log("cli", GF_LOG_ERROR, "Error outputting to xml"); +        goto out; +    } -        } else { -                cli_out ("UUID: %s", uuid_str); +    if (rsp.op_ret) { +        if (strcmp(rsp.op_errstr, "") == 0) +            cli_err("Get uuid was unsuccessful"); +        else +            cli_err("%s", rsp.op_errstr); -        } -        ret = rsp.op_ret; +    } else { +        cli_out("UUID: %s", uuid_str); +    } +    ret = rsp.op_ret;  out: -        cli_cmd_broadcast_response (ret); -        cli_local_wipe (local); -        if (rsp.dict.dict_val) -                free (rsp.dict.dict_val); +    cli_cmd_broadcast_response(ret); +    cli_local_wipe(local); +    if (rsp.dict.dict_val) +        free(rsp.dict.dict_val); -        gf_log ("", GF_LOG_DEBUG, "Returning with %d", ret); -        return ret; +    gf_log("", GF_LOG_DEBUG, "Returning with %d", ret); +    return ret;  }  int -gf_cli3_1_uuid_reset_cbk (struct rpc_req *req, struct iovec *iov, -                             int count, void *myframe) +gf_cli3_1_uuid_reset_cbk(struct rpc_req *req, struct iovec *iov, int count, +                         void *myframe)  { -        gf_cli_rsp              rsp   = {0,}; -        int                     ret   = -1; -        cli_local_t             *local = NULL; -        call_frame_t            *frame = NULL; +    gf_cli_rsp rsp = { +        0, +    }; +    int ret = -1; +    cli_local_t *local = NULL; +    call_frame_t *frame = NULL; -        GF_ASSERT (myframe); +    GF_ASSERT(myframe); -        if (-1 == req->rpc_status) { -                goto out; -        } +    if (-1 == req->rpc_status) { +        goto out; +    } -        frame = myframe; +    frame = myframe; -        GF_ASSERT (frame->local); +    GF_ASSERT(frame->local); -        local = frame->local; +    local = frame->local; -        ret = xdr_to_generic (*iov, &rsp, (xdrproc_t)xdr_gf_cli_rsp); -        if (ret < 0) { -                gf_log (frame->this->name, GF_LOG_ERROR, -                        "Failed to decode xdr response"); -                goto out; -        } +    ret = xdr_to_generic(*iov, &rsp, (xdrproc_t)xdr_gf_cli_rsp); +    if (ret < 0) { +        gf_log(frame->this->name, GF_LOG_ERROR, +               "Failed to decode xdr response"); +        goto out; +    } -        frame->local = NULL; +    frame->local = NULL; -        gf_log ("cli", GF_LOG_INFO, "Received resp to uuid reset"); +    gf_log("cli", GF_LOG_INFO, "Received resp to uuid reset"); -        if (global_state->mode & GLUSTER_MODE_XML) { -                ret = cli_xml_output_dict ("uuidReset", NULL, rsp.op_ret, -                                           rsp.op_errno, rsp.op_errstr); -                if (ret) -                        gf_log ("cli", GF_LOG_ERROR, -                                "Error outputting to xml"); -                goto out; -        } +    if (global_state->mode & GLUSTER_MODE_XML) { +        ret = cli_xml_output_dict("uuidReset", NULL, rsp.op_ret, rsp.op_errno, +                                  rsp.op_errstr); +        if (ret) +            gf_log("cli", GF_LOG_ERROR, "Error outputting to xml"); +        goto out; +    } -        if (rsp.op_ret && strcmp (rsp.op_errstr, "")) -                cli_err ("%s", rsp.op_errstr); -        else -                cli_out ("resetting the peer uuid has been %s", -                         (rsp.op_ret) ? "unsuccessful": "successful"); -        ret = rsp.op_ret; +    if (rsp.op_ret && strcmp(rsp.op_errstr, "")) +        cli_err("%s", rsp.op_errstr); +    else +        cli_out("resetting the peer uuid has been %s", +                (rsp.op_ret) ? "unsuccessful" : "successful"); +    ret = rsp.op_ret;  out: -        cli_cmd_broadcast_response (ret); -        cli_local_wipe (local); -        if (rsp.dict.dict_val) -                free (rsp.dict.dict_val); +    cli_cmd_broadcast_response(ret); +    cli_local_wipe(local); +    if (rsp.dict.dict_val) +        free(rsp.dict.dict_val); -        gf_log ("", GF_LOG_DEBUG, "Returning with %d", ret); -        return ret; +    gf_log("", GF_LOG_DEBUG, "Returning with %d", ret); +    return ret;  }  int -gf_cli_start_volume_cbk (struct rpc_req *req, struct iovec *iov, -                             int count, void *myframe) +gf_cli_start_volume_cbk(struct rpc_req *req, struct iovec *iov, int count, +                        void *myframe)  { -        gf_cli_rsp              rsp   = {0,}; -        int                     ret   = -1; -        cli_local_t             *local = NULL; -        char                    *volname = NULL; -        call_frame_t            *frame = NULL; -        dict_t                  *rsp_dict = NULL; +    gf_cli_rsp rsp = { +        0, +    }; +    int ret = -1; +    cli_local_t *local = NULL; +    char *volname = NULL; +    call_frame_t *frame = NULL; +    dict_t *rsp_dict = NULL; -        GF_ASSERT (myframe); +    GF_ASSERT(myframe); -        if (-1 == req->rpc_status) { -                goto out; -        } +    if (-1 == req->rpc_status) { +        goto out; +    } -        frame = myframe; +    frame = myframe; -        GF_ASSERT (frame->local); +    GF_ASSERT(frame->local); -        local = frame->local; +    local = frame->local; -        ret = xdr_to_generic (*iov, &rsp, (xdrproc_t)xdr_gf_cli_rsp); -        if (ret < 0) { -                gf_log (frame->this->name, GF_LOG_ERROR, -                        "Failed to decode xdr response"); -                goto out; -        } +    ret = xdr_to_generic(*iov, &rsp, (xdrproc_t)xdr_gf_cli_rsp); +    if (ret < 0) { +        gf_log(frame->this->name, GF_LOG_ERROR, +               "Failed to decode xdr response"); +        goto out; +    } -        ret = dict_get_str (local->dict, "volname", &volname); -        if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "dict get failed"); -                goto out; -        } +    ret = dict_get_str(local->dict, "volname", &volname); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, "dict get failed"); +        goto out; +    } -        gf_log ("cli", GF_LOG_INFO, "Received resp to start volume"); - -        if (global_state->mode & GLUSTER_MODE_XML) { -                if (rsp.op_ret == 0) { -                        rsp_dict = dict_new (); -                        ret = dict_unserialize (rsp.dict.dict_val, -                                                rsp.dict.dict_len, -                                                &rsp_dict); -                        if (ret) { -                                gf_log ("cli", GF_LOG_ERROR, -                                        "Failed rsp_dict unserialization"); -                                goto out; -                        } -                } +    gf_log("cli", GF_LOG_INFO, "Received resp to start volume"); -                ret = cli_xml_output_generic_volume ("volStart", rsp_dict, -                                                     rsp.op_ret, rsp.op_errno, -                                                     rsp.op_errstr); -                if (ret) -                        gf_log ("cli", GF_LOG_ERROR, -                                "Error outputting to xml"); +    if (global_state->mode & GLUSTER_MODE_XML) { +        if (rsp.op_ret == 0) { +            rsp_dict = dict_new(); +            ret = dict_unserialize(rsp.dict.dict_val, rsp.dict.dict_len, +                                   &rsp_dict); +            if (ret) { +                gf_log("cli", GF_LOG_ERROR, "Failed rsp_dict unserialization");                  goto out; +            }          } -        if (rsp.op_ret && strcmp (rsp.op_errstr, "")) -                cli_err ("volume start: %s: failed: %s", volname, -                         rsp.op_errstr); -        else if (rsp.op_ret) -                cli_err ("volume start: %s: failed", volname); -        else -                cli_out ("volume start: %s: success", volname); +        ret = cli_xml_output_generic_volume("volStart", rsp_dict, rsp.op_ret, +                                            rsp.op_errno, rsp.op_errstr); +        if (ret) +            gf_log("cli", GF_LOG_ERROR, "Error outputting to xml"); +        goto out; +    } -        ret = rsp.op_ret; +    if (rsp.op_ret && strcmp(rsp.op_errstr, "")) +        cli_err("volume start: %s: failed: %s", volname, rsp.op_errstr); +    else if (rsp.op_ret) +        cli_err("volume start: %s: failed", volname); +    else +        cli_out("volume start: %s: success", volname); + +    ret = rsp.op_ret;  out: -        cli_cmd_broadcast_response (ret); -        free (rsp.dict.dict_val); -        free (rsp.op_errstr); -        return ret; +    cli_cmd_broadcast_response(ret); +    free(rsp.dict.dict_val); +    free(rsp.op_errstr); +    return ret;  }  int -gf_cli_stop_volume_cbk (struct rpc_req *req, struct iovec *iov, -                             int count, void *myframe) +gf_cli_stop_volume_cbk(struct rpc_req *req, struct iovec *iov, int count, +                       void *myframe)  { -        gf_cli_rsp            rsp   = {0,}; -        int                   ret   = -1; -        cli_local_t           *local = NULL; -        char                  *volname = NULL; -        call_frame_t          *frame = NULL; -        dict_t                *rsp_dict = NULL; +    gf_cli_rsp rsp = { +        0, +    }; +    int ret = -1; +    cli_local_t *local = NULL; +    char *volname = NULL; +    call_frame_t *frame = NULL; +    dict_t *rsp_dict = NULL; -        GF_ASSERT (myframe); +    GF_ASSERT(myframe); -        if (-1 == req->rpc_status) { -                goto out; -        } +    if (-1 == req->rpc_status) { +        goto out; +    } -        frame = myframe; +    frame = myframe; -        GF_ASSERT (frame->local); +    GF_ASSERT(frame->local); -        local = frame->local; +    local = frame->local; -        ret = xdr_to_generic (*iov, &rsp, (xdrproc_t)xdr_gf_cli_rsp); -        if (ret < 0) { -                gf_log (frame->this->name, GF_LOG_ERROR, -                        "Failed to decode xdr response"); -                goto out; -        } +    ret = xdr_to_generic(*iov, &rsp, (xdrproc_t)xdr_gf_cli_rsp); +    if (ret < 0) { +        gf_log(frame->this->name, GF_LOG_ERROR, +               "Failed to decode xdr response"); +        goto out; +    } -        ret = dict_get_str (local->dict, "volname", &volname); -        if (ret) { -                gf_log (frame->this->name, GF_LOG_ERROR, -                        "Unable to get volname from dict"); -                goto out; -        } +    ret = dict_get_str(local->dict, "volname", &volname); +    if (ret) { +        gf_log(frame->this->name, GF_LOG_ERROR, +               "Unable to get volname from dict"); +        goto out; +    } -        gf_log ("cli", GF_LOG_INFO, "Received resp to stop volume"); +    gf_log("cli", GF_LOG_INFO, "Received resp to stop volume"); -        if (global_state->mode & GLUSTER_MODE_XML) { -                if (rsp.op_ret == 0) { -                        rsp_dict = dict_new (); -                        ret = dict_unserialize (rsp.dict.dict_val, -                                                rsp.dict.dict_len, -                                                &rsp_dict); -                        if (ret) { -                                gf_log ("cli", GF_LOG_ERROR, -                                        "Failed rsp_dict unserialization"); -                                goto out; -                        } -                } - -                ret = cli_xml_output_generic_volume ("volStop", rsp_dict, -                                                     rsp.op_ret, rsp.op_errno, -                                                     rsp.op_errstr); -                if (ret) -                        gf_log ("cli", GF_LOG_ERROR, -                                "Error outputting to xml"); +    if (global_state->mode & GLUSTER_MODE_XML) { +        if (rsp.op_ret == 0) { +            rsp_dict = dict_new(); +            ret = dict_unserialize(rsp.dict.dict_val, rsp.dict.dict_len, +                                   &rsp_dict); +            if (ret) { +                gf_log("cli", GF_LOG_ERROR, "Failed rsp_dict unserialization");                  goto out; +            }          } -        if (rsp.op_ret && strcmp (rsp.op_errstr, "")) -                cli_err ("volume stop: %s: failed: %s", volname, rsp.op_errstr); -        else if (rsp.op_ret) -                cli_err ("volume stop: %s: failed", volname); -        else -                cli_out ("volume stop: %s: success", volname); +        ret = cli_xml_output_generic_volume("volStop", rsp_dict, rsp.op_ret, +                                            rsp.op_errno, rsp.op_errstr); +        if (ret) +            gf_log("cli", GF_LOG_ERROR, "Error outputting to xml"); +        goto out; +    } -        ret = rsp.op_ret; +    if (rsp.op_ret && strcmp(rsp.op_errstr, "")) +        cli_err("volume stop: %s: failed: %s", volname, rsp.op_errstr); +    else if (rsp.op_ret) +        cli_err("volume stop: %s: failed", volname); +    else +        cli_out("volume stop: %s: success", volname); + +    ret = rsp.op_ret;  out: -        cli_cmd_broadcast_response (ret); -        free (rsp.op_errstr); -        free (rsp.dict.dict_val); +    cli_cmd_broadcast_response(ret); +    free(rsp.op_errstr); +    free(rsp.dict.dict_val); -        return ret; +    return ret;  }  int -gf_cli_print_rebalance_status (dict_t *dict, enum gf_task_types task_type, -                               gf_boolean_t is_tier) -{ -        int                ret            = -1; -        int                count          = 0; -        int                i              = 1; -        char               key[256]       = {0,}; -        gf_defrag_status_t status_rcd     = GF_DEFRAG_STATUS_NOT_STARTED; -        uint64_t           files          = 0; -        uint64_t           size           = 0; -        uint64_t           lookup         = 0; -        char               *node_name     = NULL; -        uint64_t           failures       = 0; -        uint64_t           skipped        = 0; -        double             elapsed        = 0; -        char               *status_str    = NULL; -        char               *size_str      = NULL; -        int32_t            hrs            = 0; -        uint32_t           min            = 0; -        uint32_t           sec            = 0; -        gf_boolean_t       down           = _gf_false; -        gf_boolean_t       fix_layout     = _gf_false; -        uint64_t           max_time       = 0; -        uint64_t           max_elapsed    = 0; -        uint64_t           time_left      = 0; -        gf_boolean_t       show_estimates = _gf_false; - - -        ret = dict_get_int32 (dict, "count", &count); -        if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "count not set"); -                goto out; -        } - -        snprintf (key, sizeof (key), "status-1"); - -        ret = dict_get_int32 (dict, key, (int32_t *)&status_rcd); -        if (ret) { -                gf_log ("cli", GF_LOG_TRACE, "count %d %d", count, 1); -                gf_log ("cli", GF_LOG_TRACE, "failed to get status"); -                goto out; -        } - -        /* Fix layout will be sent to all nodes for the volume -           so every status should be of type -           GF_DEFRAG_STATUS_LAYOUT_FIX* -        */ - -        if ((task_type == GF_TASK_TYPE_REBALANCE) -           && (status_rcd >= GF_DEFRAG_STATUS_LAYOUT_FIX_STARTED)) { -                fix_layout = _gf_true; -        } - -        if (fix_layout) { -                cli_out ("%35s %41s %27s", "Node", "status", -                         "run time in h:m:s"); -                cli_out ("%35s %41s %27s", "---------", "-----------", -                         "------------"); -        } else { -                cli_out ("%40s %16s %13s %13s %13s %13s %20s %18s", -                         "Node", "Rebalanced-files", "size", "scanned", -                         "failures", "skipped", "status", "run time in" -                         " h:m:s"); -                cli_out ("%40s %16s %13s %13s %13s %13s %20s %18s", -                         "---------", "-----------", "-----------", -                         "-----------", "-----------", "-----------", -                         "------------", "--------------"); -        } - -        for (i = 1; i <= count; i++) { -                /* Reset the variables to prevent carryover of values */ -                node_name = NULL; -                files = 0; -                size = 0; -                lookup = 0; -                skipped = 0; -                status_str = NULL; -                elapsed = 0; -                time_left = 0; - -                /* Check if status is NOT_STARTED, and continue early */ -                snprintf (key, sizeof (key), "status-%d", i); - -                ret = dict_get_int32 (dict, key, (int32_t *)&status_rcd); -                if (ret == -ENOENT) { -                        gf_log ("cli", GF_LOG_TRACE, "count %d %d", count, i); -                        gf_log ("cli", GF_LOG_TRACE, "failed to get status"); -                        gf_log ("cli", GF_LOG_ERROR, "node down and has failed" -                                " to set dict"); -                        down = _gf_true; -                        continue; -                        /* skip this node if value not available*/ -                } else if (ret) { -                        gf_log ("cli", GF_LOG_TRACE, "count %d %d", count, i); -                        gf_log ("cli", GF_LOG_TRACE, "failed to get status"); -                        continue; -                        /* skip this node if value not available*/ -                } - -                if (GF_DEFRAG_STATUS_NOT_STARTED == status_rcd) -                        continue; - -                if (GF_DEFRAG_STATUS_STARTED == status_rcd) -                        show_estimates = _gf_true; - -                snprintf (key, 256, "node-name-%d", i); -                ret = dict_get_str (dict, key, &node_name); -                if (ret) -                        gf_log ("cli", GF_LOG_TRACE, "failed to get node-name"); +gf_cli_print_rebalance_status(dict_t *dict, enum gf_task_types task_type, +                              gf_boolean_t is_tier) +{ +    int ret = -1; +    int count = 0; +    int i = 1; +    char key[256] = { +        0, +    }; +    gf_defrag_status_t status_rcd = GF_DEFRAG_STATUS_NOT_STARTED; +    uint64_t files = 0; +    uint64_t size = 0; +    uint64_t lookup = 0; +    char *node_name = NULL; +    uint64_t failures = 0; +    uint64_t skipped = 0; +    double elapsed = 0; +    char *status_str = NULL; +    char *size_str = NULL; +    int32_t hrs = 0; +    uint32_t min = 0; +    uint32_t sec = 0; +    gf_boolean_t down = _gf_false; +    gf_boolean_t fix_layout = _gf_false; +    uint64_t max_time = 0; +    uint64_t max_elapsed = 0; +    uint64_t time_left = 0; +    gf_boolean_t show_estimates = _gf_false; + +    ret = dict_get_int32(dict, "count", &count); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, "count not set"); +        goto out; +    } + +    snprintf(key, sizeof(key), "status-1"); + +    ret = dict_get_int32(dict, key, (int32_t *)&status_rcd); +    if (ret) { +        gf_log("cli", GF_LOG_TRACE, "count %d %d", count, 1); +        gf_log("cli", GF_LOG_TRACE, "failed to get status"); +        goto out; +    } + +    /* Fix layout will be sent to all nodes for the volume +       so every status should be of type +       GF_DEFRAG_STATUS_LAYOUT_FIX* +    */ + +    if ((task_type == GF_TASK_TYPE_REBALANCE) && +        (status_rcd >= GF_DEFRAG_STATUS_LAYOUT_FIX_STARTED)) { +        fix_layout = _gf_true; +    } + +    if (fix_layout) { +        cli_out("%35s %41s %27s", "Node", "status", "run time in h:m:s"); +        cli_out("%35s %41s %27s", "---------", "-----------", "------------"); +    } else { +        cli_out("%40s %16s %13s %13s %13s %13s %20s %18s", "Node", +                "Rebalanced-files", "size", "scanned", "failures", "skipped", +                "status", +                "run time in" +                " h:m:s"); +        cli_out("%40s %16s %13s %13s %13s %13s %20s %18s", "---------", +                "-----------", "-----------", "-----------", "-----------", +                "-----------", "------------", "--------------"); +    } + +    for (i = 1; i <= count; i++) { +        /* Reset the variables to prevent carryover of values */ +        node_name = NULL; +        files = 0; +        size = 0; +        lookup = 0; +        skipped = 0; +        status_str = NULL; +        elapsed = 0; +        time_left = 0; + +        /* Check if status is NOT_STARTED, and continue early */ +        snprintf(key, sizeof(key), "status-%d", i); + +        ret = dict_get_int32(dict, key, (int32_t *)&status_rcd); +        if (ret == -ENOENT) { +            gf_log("cli", GF_LOG_TRACE, "count %d %d", count, i); +            gf_log("cli", GF_LOG_TRACE, "failed to get status"); +            gf_log("cli", GF_LOG_ERROR, +                   "node down and has failed" +                   " to set dict"); +            down = _gf_true; +            continue; +            /* skip this node if value not available*/ +        } else if (ret) { +            gf_log("cli", GF_LOG_TRACE, "count %d %d", count, i); +            gf_log("cli", GF_LOG_TRACE, "failed to get status"); +            continue; +            /* skip this node if value not available*/ +        } + +        if (GF_DEFRAG_STATUS_NOT_STARTED == status_rcd) +            continue; + +        if (GF_DEFRAG_STATUS_STARTED == status_rcd) +            show_estimates = _gf_true; + +        snprintf(key, 256, "node-name-%d", i); +        ret = dict_get_str(dict, key, &node_name); +        if (ret) +            gf_log("cli", GF_LOG_TRACE, "failed to get node-name"); -                snprintf (key, sizeof (key), "files-%d", i); -                ret = dict_get_uint64 (dict, key, &files); -                if (ret) -                        gf_log ("cli", GF_LOG_TRACE, -                                "failed to get file count"); +        snprintf(key, sizeof(key), "files-%d", i); +        ret = dict_get_uint64(dict, key, &files); +        if (ret) +            gf_log("cli", GF_LOG_TRACE, "failed to get file count"); -                snprintf (key, sizeof (key), "size-%d", i); -                ret = dict_get_uint64 (dict, key, &size); -                if (ret) -                        gf_log ("cli", GF_LOG_TRACE, -                                "failed to get size of xfer"); +        snprintf(key, sizeof(key), "size-%d", i); +        ret = dict_get_uint64(dict, key, &size); +        if (ret) +            gf_log("cli", GF_LOG_TRACE, "failed to get size of xfer"); -                snprintf (key, sizeof (key), "lookups-%d", i); -                ret = dict_get_uint64 (dict, key, &lookup); -                if (ret) -                        gf_log ("cli", GF_LOG_TRACE, -                                "failed to get lookedup file count"); +        snprintf(key, sizeof(key), "lookups-%d", i); +        ret = dict_get_uint64(dict, key, &lookup); +        if (ret) +            gf_log("cli", GF_LOG_TRACE, "failed to get lookedup file count"); -                snprintf (key, sizeof (key), "failures-%d", i); -                ret = dict_get_uint64 (dict, key, &failures); -                if (ret) -                        gf_log ("cli", GF_LOG_TRACE, -                                "failed to get failures count"); +        snprintf(key, sizeof(key), "failures-%d", i); +        ret = dict_get_uint64(dict, key, &failures); +        if (ret) +            gf_log("cli", GF_LOG_TRACE, "failed to get failures count"); -                snprintf (key, sizeof (key), "skipped-%d", i); -                ret = dict_get_uint64 (dict, key, &skipped); -                if (ret) -                        gf_log ("cli", GF_LOG_TRACE, -                                "failed to get skipped count"); +        snprintf(key, sizeof(key), "skipped-%d", i); +        ret = dict_get_uint64(dict, key, &skipped); +        if (ret) +            gf_log("cli", GF_LOG_TRACE, "failed to get skipped count"); -                /* For remove-brick include skipped count into failure count*/ -                if (task_type != GF_TASK_TYPE_REBALANCE) { -                        failures += skipped; -                        skipped = 0; -                } +        /* For remove-brick include skipped count into failure count*/ +        if (task_type != GF_TASK_TYPE_REBALANCE) { +            failures += skipped; +            skipped = 0; +        } -                snprintf (key, sizeof (key), "run-time-%d", i); -                ret = dict_get_double (dict, key, &elapsed); -                if (ret) -                        gf_log ("cli", GF_LOG_TRACE, "failed to get run-time"); +        snprintf(key, sizeof(key), "run-time-%d", i); +        ret = dict_get_double(dict, key, &elapsed); +        if (ret) +            gf_log("cli", GF_LOG_TRACE, "failed to get run-time"); -                snprintf (key, sizeof (key), "time-left-%d", i); -                ret = dict_get_uint64 (dict, key, &time_left); -                if (ret) -                        gf_log ("cli", GF_LOG_TRACE, -                                "failed to get time left"); +        snprintf(key, sizeof(key), "time-left-%d", i); +        ret = dict_get_uint64(dict, key, &time_left); +        if (ret) +            gf_log("cli", GF_LOG_TRACE, "failed to get time left"); -                if (elapsed > max_elapsed) -                        max_elapsed = elapsed; +        if (elapsed > max_elapsed) +            max_elapsed = elapsed; -                if (time_left > max_time) -                        max_time = time_left; +        if (time_left > max_time) +            max_time = time_left; -                /* Check for array bound */ -                if (status_rcd >= GF_DEFRAG_STATUS_MAX) -                        status_rcd = GF_DEFRAG_STATUS_MAX; +        /* Check for array bound */ +        if (status_rcd >= GF_DEFRAG_STATUS_MAX) +            status_rcd = GF_DEFRAG_STATUS_MAX; -                status_str = cli_vol_task_status_str[status_rcd]; -                size_str = gf_uint64_2human_readable(size); -                hrs = elapsed / 3600; -                min = ((uint64_t) elapsed % 3600) / 60; -                sec = ((uint64_t) elapsed % 3600) % 60; +        status_str = cli_vol_task_status_str[status_rcd]; +        size_str = gf_uint64_2human_readable(size); +        hrs = elapsed / 3600; +        min = ((uint64_t)elapsed % 3600) / 60; +        sec = ((uint64_t)elapsed % 3600) % 60; -                if (fix_layout) { -                        cli_out ("%35s %50s %8d:%d:%d", node_name, status_str, -                                 hrs, min, sec); -                } else { -                        if (size_str) { -                                cli_out ("%40s %16"PRIu64 " %13s" " %13"PRIu64 -                                          " %13" PRIu64" %13"PRIu64 " %20s " -                                         "%8d:%02d:%02d", node_name, files, -                                         size_str, lookup, failures, skipped, -                                         status_str, hrs, min, sec); -                        } else { -                                cli_out ("%40s %16"PRIu64 " %13"PRIu64 " %13" -                                         PRIu64 " %13"PRIu64" %13"PRIu64 " %20s" -                                         " %8d:%02d:%02d", node_name, files, -                                         size, lookup, failures, skipped, -                                         status_str, hrs, min, sec); -                        } -                } -                GF_FREE(size_str); -        } -        if (is_tier && down) -                cli_out ("WARNING: glusterd might be down on one or more nodes." -                         " Please check the nodes that are down using \'gluster" -                         " peer status\' and start the glusterd on those nodes," -                         " else tier detach commit might fail!"); - -        /* Max time will be non-zero if rebalance is still running */ -        if (max_time) { -                hrs = max_time / 3600; -                min = (max_time % 3600) / 60; -                sec = (max_time % 3600) % 60; - -                if (hrs < REBAL_ESTIMATE_SEC_UPPER_LIMIT) { -                        cli_out ("Estimated time left for rebalance to " -                                 "complete : %8d:%02d:%02d", hrs, min, sec); -                } else { -                        cli_out ("Estimated time left for rebalance to " -                                 "complete : > 2 months. Please try again " -                                 "later."); -                } +        if (fix_layout) { +            cli_out("%35s %50s %8d:%d:%d", node_name, status_str, hrs, min, +                    sec);          } else { -                /* Rebalance will return 0 if it could not calculate the -                 * estimates or if it is complete. -                 */ -                if (!show_estimates) { -                        goto out; -                } -                if (max_elapsed <= REBAL_ESTIMATE_START_TIME) { -                        cli_out ("The estimated time for rebalance to complete " -                                 "will be unavailable for the first 10 " -                                 "minutes."); -                } else { -                        cli_out ("Rebalance estimated time unavailable. Please " -                                 "try again later."); -                } +            if (size_str) { +                cli_out("%40s %16" PRIu64 +                        " %13s" +                        " %13" PRIu64 " %13" PRIu64 " %13" PRIu64 +                        " %20s " +                        "%8d:%02d:%02d", +                        node_name, files, size_str, lookup, failures, skipped, +                        status_str, hrs, min, sec); +            } else { +                cli_out("%40s %16" PRIu64 " %13" PRIu64 " %13" PRIu64 +                        " %13" PRIu64 " %13" PRIu64 +                        " %20s" +                        " %8d:%02d:%02d", +                        node_name, files, size, lookup, failures, skipped, +                        status_str, hrs, min, sec); +            } +        } +        GF_FREE(size_str); +    } +    if (is_tier && down) +        cli_out( +            "WARNING: glusterd might be down on one or more nodes." +            " Please check the nodes that are down using \'gluster" +            " peer status\' and start the glusterd on those nodes," +            " else tier detach commit might fail!"); + +    /* Max time will be non-zero if rebalance is still running */ +    if (max_time) { +        hrs = max_time / 3600; +        min = (max_time % 3600) / 60; +        sec = (max_time % 3600) % 60; + +        if (hrs < REBAL_ESTIMATE_SEC_UPPER_LIMIT) { +            cli_out( +                "Estimated time left for rebalance to " +                "complete : %8d:%02d:%02d", +                hrs, min, sec); +        } else { +            cli_out( +                "Estimated time left for rebalance to " +                "complete : > 2 months. Please try again " +                "later."); +        } +    } else { +        /* Rebalance will return 0 if it could not calculate the +         * estimates or if it is complete. +         */ +        if (!show_estimates) { +            goto out; +        } +        if (max_elapsed <= REBAL_ESTIMATE_START_TIME) { +            cli_out( +                "The estimated time for rebalance to complete " +                "will be unavailable for the first 10 " +                "minutes."); +        } else { +            cli_out( +                "Rebalance estimated time unavailable. Please " +                "try again later.");          } +    }  out: -        return ret; +    return ret;  }  int -gf_cli_print_tier_status (dict_t *dict, enum gf_task_types task_type) -{ -        int                ret          = -1; -        int                count        = 0; -        int                i            = 1; -        uint64_t           promoted     = 0; -        uint64_t           demoted      = 0; -        char               key[256]     = {0,}; -        char               *node_name   = NULL; -        gf_defrag_status_t status_rcd   = GF_DEFRAG_STATUS_NOT_STARTED; -        char               *status_str  = NULL; -        gf_boolean_t       down         = _gf_false; -        double             elapsed      = 0; -        int                hrs          = 0; -        int                min          = 0; -        int                sec          = 0; - -        ret = dict_get_int32 (dict, "count", &count); -        if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "count not set"); -                goto out; -        } - -        cli_out ("%-20s %-20s %-20s %-20s %-20s", "Node", "Promoted files", -                 "Demoted files", "Status", "run time in h:m:s"); -        cli_out ("%-20s %-20s %-20s %-20s %-20s", "---------", "---------", -                 "---------", "---------", "---------"); - -        for (i = 1; i <= count; i++) { -                /* Reset the variables to prevent carryover of values */ -                node_name = NULL; -                promoted = 0; -                demoted = 0; - -                /* Check if status is NOT_STARTED, and continue early */ -                snprintf (key, sizeof (key), "status-%d", i); - -                ret = dict_get_int32 (dict, key, (int32_t *)&status_rcd); -                if (ret == -ENOENT) { -                        gf_log ("cli", GF_LOG_TRACE, "count: %d, %d," -                                "failed to get status", count, i); -                        gf_log ("cli", GF_LOG_ERROR, "node down and has failed" -                                " to set dict"); -                        down = _gf_true; -                        continue; -                        /*skipping this node as value unavailable*/ -                } else if (ret) { -                        gf_log ("cli", GF_LOG_TRACE, "count: %d, %d," -                                "failed to get status", count, i); -                        continue; -                } - -                if (GF_DEFRAG_STATUS_NOT_STARTED == status_rcd) -                        continue; - -                snprintf (key, sizeof (key), "node-name-%d", i); -                ret = dict_get_str (dict, key, &node_name); -                if (ret) -                        gf_log ("cli", GF_LOG_TRACE, "failed to get node-name"); +gf_cli_print_tier_status(dict_t *dict, enum gf_task_types task_type) +{ +    int ret = -1; +    int count = 0; +    int i = 1; +    uint64_t promoted = 0; +    uint64_t demoted = 0; +    char key[256] = { +        0, +    }; +    char *node_name = NULL; +    gf_defrag_status_t status_rcd = GF_DEFRAG_STATUS_NOT_STARTED; +    char *status_str = NULL; +    gf_boolean_t down = _gf_false; +    double elapsed = 0; +    int hrs = 0; +    int min = 0; +    int sec = 0; + +    ret = dict_get_int32(dict, "count", &count); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, "count not set"); +        goto out; +    } + +    cli_out("%-20s %-20s %-20s %-20s %-20s", "Node", "Promoted files", +            "Demoted files", "Status", "run time in h:m:s"); +    cli_out("%-20s %-20s %-20s %-20s %-20s", "---------", "---------", +            "---------", "---------", "---------"); + +    for (i = 1; i <= count; i++) { +        /* Reset the variables to prevent carryover of values */ +        node_name = NULL; +        promoted = 0; +        demoted = 0; + +        /* Check if status is NOT_STARTED, and continue early */ +        snprintf(key, sizeof(key), "status-%d", i); + +        ret = dict_get_int32(dict, key, (int32_t *)&status_rcd); +        if (ret == -ENOENT) { +            gf_log("cli", GF_LOG_TRACE, +                   "count: %d, %d," +                   "failed to get status", +                   count, i); +            gf_log("cli", GF_LOG_ERROR, +                   "node down and has failed" +                   " to set dict"); +            down = _gf_true; +            continue; +            /*skipping this node as value unavailable*/ +        } else if (ret) { +            gf_log("cli", GF_LOG_TRACE, +                   "count: %d, %d," +                   "failed to get status", +                   count, i); +            continue; +        } + +        if (GF_DEFRAG_STATUS_NOT_STARTED == status_rcd) +            continue; + +        snprintf(key, sizeof(key), "node-name-%d", i); +        ret = dict_get_str(dict, key, &node_name); +        if (ret) +            gf_log("cli", GF_LOG_TRACE, "failed to get node-name"); -                snprintf (key, sizeof (key), "promoted-%d", i); -                ret = dict_get_uint64 (dict, key, &promoted); -                if (ret) -                        gf_log ("cli", GF_LOG_TRACE, -                                "failed to get promoted count"); +        snprintf(key, sizeof(key), "promoted-%d", i); +        ret = dict_get_uint64(dict, key, &promoted); +        if (ret) +            gf_log("cli", GF_LOG_TRACE, "failed to get promoted count"); -                snprintf (key, sizeof (key), "demoted-%d", i); -                ret = dict_get_uint64 (dict, key, &demoted); -                if (ret) -                        gf_log ("cli", GF_LOG_TRACE, -                                "failed to get demoted count"); +        snprintf(key, sizeof(key), "demoted-%d", i); +        ret = dict_get_uint64(dict, key, &demoted); +        if (ret) +            gf_log("cli", GF_LOG_TRACE, "failed to get demoted count"); -                snprintf (key, sizeof (key), "run-time-%d", i); -                ret = dict_get_double (dict, key, &elapsed); -                if (ret) -                        gf_log ("cli", GF_LOG_TRACE, "failed to get run-time"); +        snprintf(key, sizeof(key), "run-time-%d", i); +        ret = dict_get_double(dict, key, &elapsed); +        if (ret) +            gf_log("cli", GF_LOG_TRACE, "failed to get run-time"); -                /* Check for array bound */ -                if (status_rcd >= GF_DEFRAG_STATUS_MAX) -                        status_rcd = GF_DEFRAG_STATUS_MAX; +        /* Check for array bound */ +        if (status_rcd >= GF_DEFRAG_STATUS_MAX) +            status_rcd = GF_DEFRAG_STATUS_MAX; -                hrs = elapsed / 3600; -                min = ((int) elapsed % 3600) / 60; -                sec = ((int) elapsed % 3600) % 60; +        hrs = elapsed / 3600; +        min = ((int)elapsed % 3600) / 60; +        sec = ((int)elapsed % 3600) % 60; -                status_str = cli_vol_task_status_str[status_rcd]; -                cli_out ("%-20s %-20"PRIu64" %-20"PRIu64" %-20s" -                         " %d:%d:%d", node_name, promoted, demoted, -                         status_str, hrs, min, sec); -        } -        if (down) -                cli_out ("WARNING: glusterd might be down on one or more nodes." -                         " Please check the nodes that are down using \'gluster" -                         " peer status\' and start the glusterd on those nodes."); +        status_str = cli_vol_task_status_str[status_rcd]; +        cli_out("%-20s %-20" PRIu64 " %-20" PRIu64 +                " %-20s" +                " %d:%d:%d", +                node_name, promoted, demoted, status_str, hrs, min, sec); +    } +    if (down) +        cli_out( +            "WARNING: glusterd might be down on one or more nodes." +            " Please check the nodes that are down using \'gluster" +            " peer status\' and start the glusterd on those nodes.");  out: -        return ret; +    return ret;  }  int -gf_cli_defrag_volume_cbk (struct rpc_req *req, struct iovec *iov, -                             int count, void *myframe) -{ -        gf_cli_rsp   rsp          = {0,}; -        cli_local_t  *local       = NULL; -        char         *volname     = NULL; -        call_frame_t *frame       = NULL; -        int          cmd          = 0; -        int          ret          = -1; -        dict_t       *dict        = NULL; -        char         msg[1024]    = {0,}; -        char         *task_id_str = NULL; - -        if (-1 == req->rpc_status) { -                goto out; -        } - -        GF_ASSERT (myframe); - -        frame = myframe; - -        GF_ASSERT (frame->local); - -        local = frame->local; - -        ret = xdr_to_generic (*iov, &rsp, -                              (xdrproc_t)xdr_gf_cli_rsp); +gf_cli_defrag_volume_cbk(struct rpc_req *req, struct iovec *iov, int count, +                         void *myframe) +{ +    gf_cli_rsp rsp = { +        0, +    }; +    cli_local_t *local = NULL; +    char *volname = NULL; +    call_frame_t *frame = NULL; +    int cmd = 0; +    int ret = -1; +    dict_t *dict = NULL; +    char msg[1024] = { +        0, +    }; +    char *task_id_str = NULL; + +    if (-1 == req->rpc_status) { +        goto out; +    } + +    GF_ASSERT(myframe); + +    frame = myframe; + +    GF_ASSERT(frame->local); + +    local = frame->local; + +    ret = xdr_to_generic(*iov, &rsp, (xdrproc_t)xdr_gf_cli_rsp); +    if (ret < 0) { +        gf_log(frame->this->name, GF_LOG_ERROR, +               "Failed to decode xdr response"); +        goto out; +    } + +    ret = dict_get_str(local->dict, "volname", &volname); +    if (ret) { +        gf_log(frame->this->name, GF_LOG_ERROR, "Failed to get volname"); +        goto out; +    } + +    ret = dict_get_int32(local->dict, "rebalance-command", (int32_t *)&cmd); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, "Failed to get command"); +        goto out; +    } + +    if (rsp.dict.dict_len) { +        /* Unserialize the dictionary */ +        dict = dict_new(); + +        ret = dict_unserialize(rsp.dict.dict_val, rsp.dict.dict_len, &dict);          if (ret < 0) { -                gf_log (frame->this->name, GF_LOG_ERROR, -                        "Failed to decode xdr response"); -                goto out; +            gf_log("glusterd", GF_LOG_ERROR, +                   "failed to " +                   "unserialize req-buffer to dictionary"); +            goto out;          } +    } -        ret = dict_get_str (local->dict, "volname", &volname); +    if (!((cmd == GF_DEFRAG_CMD_STOP) || (cmd == GF_DEFRAG_CMD_STATUS) || +          (cmd == GF_DEFRAG_CMD_STATUS_TIER)) && +        !(global_state->mode & GLUSTER_MODE_XML)) { +        ret = dict_get_str(dict, GF_REBALANCE_TID_KEY, &task_id_str);          if (ret) { -                gf_log (frame->this->name, GF_LOG_ERROR, -                        "Failed to get volname"); -                goto out; -        } - -        ret = dict_get_int32 (local->dict, "rebalance-command", -                              (int32_t *)&cmd); -        if (ret) { -                gf_log ("cli", GF_LOG_ERROR, -                        "Failed to get command"); -                goto out; -        } - -        if (rsp.dict.dict_len) { -                /* Unserialize the dictionary */ -                dict  = dict_new (); - -                ret = dict_unserialize (rsp.dict.dict_val, -                                        rsp.dict.dict_len, -                                        &dict); -                if (ret < 0) { -                        gf_log ("glusterd", GF_LOG_ERROR, -                                "failed to " -                                "unserialize req-buffer to dictionary"); -                        goto out; -                } -        } - -        if (!((cmd == GF_DEFRAG_CMD_STOP) || -              (cmd == GF_DEFRAG_CMD_STATUS) || -              (cmd == GF_DEFRAG_CMD_STATUS_TIER)) && -             !(global_state->mode & GLUSTER_MODE_XML)) { -                ret = dict_get_str (dict, GF_REBALANCE_TID_KEY, &task_id_str); -                if (ret) { -                        gf_log ("cli", GF_LOG_WARNING, -                                "failed to get %s from dict", -                                GF_REBALANCE_TID_KEY); -                        goto out; -                } -                if (rsp.op_ret && strcmp (rsp.op_errstr, "")) { -                        snprintf (msg, sizeof (msg), "%s", rsp.op_errstr); -                } else { -                         if (!rsp.op_ret) { -                                /* append errstr in the cli msg for successful -                                 * case since unlock failures can be highlighted -                                 * event though rebalance command was successful -                                 */ -                                 if (cmd == GF_DEFRAG_CMD_START_TIER) { -                                         snprintf (msg, sizeof (msg), "Tier " -                                                  "start is successful on %s.", -                                                  volname); -                                 } else if (cmd == GF_DEFRAG_CMD_STOP_TIER) { -                                         snprintf (msg, sizeof (msg), "Tier " -                                                  "daemon stopped " -                                                  "on %s.", volname); -                                 } else { -                                         snprintf (msg, sizeof (msg), -                                                  "Rebalance on %s has been " -                                                  "started successfully. Use " -                                                  "rebalance status command to" -                                                  " check status of the " -                                                  "rebalance process.\nID: %s", -                                                  volname, task_id_str); -                                 } -                         } else { -                                snprintf (msg, sizeof (msg), -                                          "Starting rebalance on volume %s has " -                                          "been unsuccessful.", volname); -                        } -                } -                goto done; -        } - -        if (cmd == GF_DEFRAG_CMD_STOP) { -                if (rsp.op_ret == -1) { -                        if (strcmp (rsp.op_errstr, "")) -                                snprintf (msg, sizeof (msg), -                                          "%s", rsp.op_errstr); -                        else -                                snprintf (msg, sizeof (msg), -                                          "rebalance volume %s stop failed", -                                          volname); -                        goto done; -                } else { -                        /* append errstr in the cli msg for successful case -                         * since unlock failures can be highlighted event though -                         * rebalance command was successful */ -                        snprintf (msg, sizeof (msg), -                                  "rebalance process may be in the middle of a " -                                  "file migration.\nThe process will be fully " -                                  "stopped once the migration of the file is " -                                  "complete.\nPlease check rebalance process " -                                  "for completion before doing any further " -                                  "brick related tasks on the volume.\n%s", -                                  rsp.op_errstr); -                } +            gf_log("cli", GF_LOG_WARNING, "failed to get %s from dict", +                   GF_REBALANCE_TID_KEY); +            goto out;          } -        if (cmd == GF_DEFRAG_CMD_STATUS || cmd == GF_DEFRAG_CMD_STATUS_TIER) { -                if (rsp.op_ret == -1) { -                        if (strcmp (rsp.op_errstr, "")) -                                snprintf (msg, sizeof (msg), -                                          "%s", rsp.op_errstr); -                        else -                                snprintf (msg, sizeof (msg), -                                          "Failed to get the status of " -                                          "rebalance process"); -                        goto done; +        if (rsp.op_ret && strcmp(rsp.op_errstr, "")) { +            snprintf(msg, sizeof(msg), "%s", rsp.op_errstr); +        } else { +            if (!rsp.op_ret) { +                /* append errstr in the cli msg for successful +                 * case since unlock failures can be highlighted +                 * event though rebalance command was successful +                 */ +                if (cmd == GF_DEFRAG_CMD_START_TIER) { +                    snprintf(msg, sizeof(msg), +                             "Tier " +                             "start is successful on %s.", +                             volname); +                } else if (cmd == GF_DEFRAG_CMD_STOP_TIER) { +                    snprintf(msg, sizeof(msg), +                             "Tier " +                             "daemon stopped " +                             "on %s.", +                             volname);                  } else { -                        snprintf (msg, sizeof (msg), "%s", rsp.op_errstr); -                } +                    snprintf(msg, sizeof(msg), +                             "Rebalance on %s has been " +                             "started successfully. Use " +                             "rebalance status command to" +                             " check status of the " +                             "rebalance process.\nID: %s", +                             volname, task_id_str); +                } +            } else { +                snprintf(msg, sizeof(msg), +                         "Starting rebalance on volume %s has " +                         "been unsuccessful.", +                         volname); +            } +        } +        goto done; +    } + +    if (cmd == GF_DEFRAG_CMD_STOP) { +        if (rsp.op_ret == -1) { +            if (strcmp(rsp.op_errstr, "")) +                snprintf(msg, sizeof(msg), "%s", rsp.op_errstr); +            else +                snprintf(msg, sizeof(msg), "rebalance volume %s stop failed", +                         volname); +            goto done; +        } else { +            /* append errstr in the cli msg for successful case +             * since unlock failures can be highlighted event though +             * rebalance command was successful */ +            snprintf(msg, sizeof(msg), +                     "rebalance process may be in the middle of a " +                     "file migration.\nThe process will be fully " +                     "stopped once the migration of the file is " +                     "complete.\nPlease check rebalance process " +                     "for completion before doing any further " +                     "brick related tasks on the volume.\n%s", +                     rsp.op_errstr); +        } +    } +    if (cmd == GF_DEFRAG_CMD_STATUS || cmd == GF_DEFRAG_CMD_STATUS_TIER) { +        if (rsp.op_ret == -1) { +            if (strcmp(rsp.op_errstr, "")) +                snprintf(msg, sizeof(msg), "%s", rsp.op_errstr); +            else +                snprintf(msg, sizeof(msg), +                         "Failed to get the status of " +                         "rebalance process"); +            goto done; +        } else { +            snprintf(msg, sizeof(msg), "%s", rsp.op_errstr);          } +    } -        if (global_state->mode & GLUSTER_MODE_XML) { -                ret = cli_xml_output_vol_rebalance (cmd, dict, rsp.op_ret, -                                                    rsp.op_errno, -                                                    rsp.op_errstr); -                goto out; -        } +    if (global_state->mode & GLUSTER_MODE_XML) { +        ret = cli_xml_output_vol_rebalance(cmd, dict, rsp.op_ret, rsp.op_errno, +                                           rsp.op_errstr); +        goto out; +    } -        if (cmd == GF_DEFRAG_CMD_STATUS_TIER) -                ret = gf_cli_print_tier_status (dict, GF_TASK_TYPE_REBALANCE); -        else if (cmd == GF_DEFRAG_CMD_DETACH_STATUS) -                ret = gf_cli_print_rebalance_status (dict, -                                                     GF_TASK_TYPE_REBALANCE, -                                                     _gf_true); -        else -                ret = gf_cli_print_rebalance_status (dict, -                                                     GF_TASK_TYPE_REBALANCE, -                                                     _gf_false); +    if (cmd == GF_DEFRAG_CMD_STATUS_TIER) +        ret = gf_cli_print_tier_status(dict, GF_TASK_TYPE_REBALANCE); +    else if (cmd == GF_DEFRAG_CMD_DETACH_STATUS) +        ret = gf_cli_print_rebalance_status(dict, GF_TASK_TYPE_REBALANCE, +                                            _gf_true); +    else +        ret = gf_cli_print_rebalance_status(dict, GF_TASK_TYPE_REBALANCE, +                                            _gf_false); -        if (ret) -                gf_log ("cli", GF_LOG_ERROR, -                        "Failed to print rebalance status"); +    if (ret) +        gf_log("cli", GF_LOG_ERROR, "Failed to print rebalance status");  done: -        if (global_state->mode & GLUSTER_MODE_XML) -                cli_xml_output_str ("volRebalance", msg, -                                    rsp.op_ret, rsp.op_errno, -                                    rsp.op_errstr); -        else { -                if (rsp.op_ret) - -                        if (cmd == GF_DEFRAG_CMD_START_TIER || cmd == -                            GF_DEFRAG_CMD_STATUS_TIER) { -                                cli_err ("Tiering Migration Functionality: %s:" -                                         " failed%s%s", volname, -                                         strlen (msg) ? ": " : "", msg); -                        } else -                                cli_err ("volume rebalance: %s: failed%s%s", -                                         volname, strlen (msg) ? ": " : "", -                                         msg); -                else -                        if (cmd == GF_DEFRAG_CMD_START_TIER || cmd == -                            GF_DEFRAG_CMD_STATUS_TIER) { -                                cli_out ("Tiering Migration Functionality: %s:" -                                         " success%s%s", volname, -                                         strlen (msg) ? ": " : "", msg); -                        } else -                                cli_out ("volume rebalance: %s: success%s%s", -                                         volname, strlen (msg) ? ": " : "", -                                         msg); -        } -        ret = rsp.op_ret; +    if (global_state->mode & GLUSTER_MODE_XML) +        cli_xml_output_str("volRebalance", msg, rsp.op_ret, rsp.op_errno, +                           rsp.op_errstr); +    else { +        if (rsp.op_ret) -out: -        free (rsp.op_errstr); //malloced by xdr -        free (rsp.dict.dict_val); //malloced by xdr -        if (dict) -                dict_unref (dict); -        cli_cmd_broadcast_response (ret); -        return ret; +            if (cmd == GF_DEFRAG_CMD_START_TIER || +                cmd == GF_DEFRAG_CMD_STATUS_TIER) { +                cli_err( +                    "Tiering Migration Functionality: %s:" +                    " failed%s%s", +                    volname, strlen(msg) ? ": " : "", msg); +            } else +                cli_err("volume rebalance: %s: failed%s%s", volname, +                        strlen(msg) ? ": " : "", msg); +        else if (cmd == GF_DEFRAG_CMD_START_TIER || +                 cmd == GF_DEFRAG_CMD_STATUS_TIER) { +            cli_out( +                "Tiering Migration Functionality: %s:" +                " success%s%s", +                volname, strlen(msg) ? ": " : "", msg); +        } else +            cli_out("volume rebalance: %s: success%s%s", volname, +                    strlen(msg) ? ": " : "", msg); +    } +    ret = rsp.op_ret; + +out: +    free(rsp.op_errstr);      // malloced by xdr +    free(rsp.dict.dict_val);  // malloced by xdr +    if (dict) +        dict_unref(dict); +    cli_cmd_broadcast_response(ret); +    return ret;  }  int -gf_cli_rename_volume_cbk (struct rpc_req *req, struct iovec *iov, -                             int count, void *myframe) -{ -        gf_cli_rsp              rsp   = {0,}; -        int                     ret   = -1; -        char                    msg[1024] = {0,}; - -        GF_ASSERT (myframe); - -        if (-1 == req->rpc_status) { -                goto out; -        } - -        ret = xdr_to_generic (*iov, &rsp, (xdrproc_t)xdr_gf_cli_rsp); -        if (ret < 0) { -                gf_log (((call_frame_t *) myframe)->this->name, GF_LOG_ERROR, -                        "Failed to decode xdr response"); -                goto out; -        } - +gf_cli_rename_volume_cbk(struct rpc_req *req, struct iovec *iov, int count, +                         void *myframe) +{ +    gf_cli_rsp rsp = { +        0, +    }; +    int ret = -1; +    char msg[1024] = { +        0, +    }; + +    GF_ASSERT(myframe); + +    if (-1 == req->rpc_status) { +        goto out; +    } + +    ret = xdr_to_generic(*iov, &rsp, (xdrproc_t)xdr_gf_cli_rsp); +    if (ret < 0) { +        gf_log(((call_frame_t *)myframe)->this->name, GF_LOG_ERROR, +               "Failed to decode xdr response"); +        goto out; +    } + +    gf_log("cli", GF_LOG_INFO, "Received resp to probe"); +    snprintf(msg, sizeof(msg), "Rename volume %s", +             (rsp.op_ret) ? "unsuccessful" : "successful"); + +    if (global_state->mode & GLUSTER_MODE_XML) { +        ret = cli_xml_output_str("volRename", msg, rsp.op_ret, rsp.op_errno, +                                 rsp.op_errstr); +        if (ret) +            gf_log("cli", GF_LOG_ERROR, "Error outputting to xml"); +        goto out; +    } -        gf_log ("cli", GF_LOG_INFO, "Received resp to probe"); -        snprintf (msg, sizeof (msg), "Rename volume %s", -                  (rsp.op_ret) ? "unsuccessful": "successful"); +    if (rsp.op_ret) +        cli_err("volume rename: failed"); +    else +        cli_out("volume rename: success"); -        if (global_state->mode & GLUSTER_MODE_XML) { -                ret = cli_xml_output_str ("volRename", msg, rsp.op_ret, -                                          rsp.op_errno, rsp.op_errstr); -                if (ret) -                        gf_log ("cli", GF_LOG_ERROR, -                                "Error outputting to xml"); -                goto out; -        } - -        if (rsp.op_ret) -                cli_err ("volume rename: failed"); -        else -                cli_out ("volume rename: success"); - -        ret = rsp.op_ret; +    ret = rsp.op_ret;  out: -        cli_cmd_broadcast_response (ret); -        return ret; +    cli_cmd_broadcast_response(ret); +    return ret;  }  int -gf_cli_reset_volume_cbk (struct rpc_req *req, struct iovec *iov, -                             int count, void *myframe) +gf_cli_reset_volume_cbk(struct rpc_req *req, struct iovec *iov, int count, +                        void *myframe)  { -        gf_cli_rsp           rsp   = {0,}; -        int                  ret   = -1; -        char                 msg[1024] = {0,}; - -        GF_ASSERT (myframe); - -        if (-1 == req->rpc_status) { -                goto out; -        } - -        ret = xdr_to_generic (*iov, &rsp, (xdrproc_t)xdr_gf_cli_rsp); -        if (ret < 0) { -                gf_log (((call_frame_t *) myframe)->this->name, GF_LOG_ERROR, -                        "Failed to decode xdr response"); -                goto out; -        } - -        gf_log ("cli", GF_LOG_INFO, "Received resp to reset"); - -        if (strcmp (rsp.op_errstr, "")) -                snprintf (msg, sizeof (msg), "%s", rsp.op_errstr); -        else -                snprintf (msg, sizeof (msg), "reset volume %s", -                          (rsp.op_ret) ? "unsuccessful": "successful"); - -        if (global_state->mode & GLUSTER_MODE_XML) { -                ret = cli_xml_output_str ("volReset", msg, rsp.op_ret, -                                          rsp.op_errno, rsp.op_errstr); -                if (ret) -                        gf_log ("cli", GF_LOG_ERROR, -                                "Error outputting to xml"); -                goto out; -        } +    gf_cli_rsp rsp = { +        0, +    }; +    int ret = -1; +    char msg[1024] = { +        0, +    }; + +    GF_ASSERT(myframe); + +    if (-1 == req->rpc_status) { +        goto out; +    } + +    ret = xdr_to_generic(*iov, &rsp, (xdrproc_t)xdr_gf_cli_rsp); +    if (ret < 0) { +        gf_log(((call_frame_t *)myframe)->this->name, GF_LOG_ERROR, +               "Failed to decode xdr response"); +        goto out; +    } + +    gf_log("cli", GF_LOG_INFO, "Received resp to reset"); + +    if (strcmp(rsp.op_errstr, "")) +        snprintf(msg, sizeof(msg), "%s", rsp.op_errstr); +    else +        snprintf(msg, sizeof(msg), "reset volume %s", +                 (rsp.op_ret) ? "unsuccessful" : "successful"); + +    if (global_state->mode & GLUSTER_MODE_XML) { +        ret = cli_xml_output_str("volReset", msg, rsp.op_ret, rsp.op_errno, +                                 rsp.op_errstr); +        if (ret) +            gf_log("cli", GF_LOG_ERROR, "Error outputting to xml"); +        goto out; +    } -        if (rsp.op_ret) -                cli_err ("volume reset: failed: %s", msg); -        else -                cli_out ("volume reset: success: %s", msg); +    if (rsp.op_ret) +        cli_err("volume reset: failed: %s", msg); +    else +        cli_out("volume reset: success: %s", msg); -        ret = rsp.op_ret; +    ret = rsp.op_ret;  out: -        cli_cmd_broadcast_response (ret); -        return ret; +    cli_cmd_broadcast_response(ret); +    return ret;  }  char * -is_server_debug_xlator (void *myframe) -{ -        call_frame_t         *frame        = NULL; -        cli_local_t          *local        = NULL; -        char                 **words       = NULL; -        char                 *key          = NULL; -        char                 *value        = NULL; -        char                 *debug_xlator = NULL; - -        frame = myframe; -        local = frame->local; -        words = (char **)local->words; - -        while (*words != NULL) { -                if (strstr (*words, "trace") == NULL && -                    strstr (*words, "error-gen") == NULL) { -                        words++; -                        continue; -                } - -                key = *words; +is_server_debug_xlator(void *myframe) +{ +    call_frame_t *frame = NULL; +    cli_local_t *local = NULL; +    char **words = NULL; +    char *key = NULL; +    char *value = NULL; +    char *debug_xlator = NULL; + +    frame = myframe; +    local = frame->local; +    words = (char **)local->words; + +    while (*words != NULL) { +        if (strstr(*words, "trace") == NULL && +            strstr(*words, "error-gen") == NULL) { +            words++; +            continue; +        } + +        key = *words; +        words++; +        value = *words; +        if (value == NULL) +            break; +        if (strstr(value, "client")) { +            words++; +            continue; +        } else { +            if (!(strstr(value, "posix") || strstr(value, "acl") || +                  strstr(value, "locks") || strstr(value, "io-threads") || +                  strstr(value, "marker") || strstr(value, "index"))) {                  words++; -                value = *words; -                if (value == NULL) -                        break; -                if (strstr (value, "client")) { -                        words++; -                        continue; -                } else { -                        if (!(strstr (value, "posix") || strstr (value, "acl") -                              || strstr (value, "locks") || -                              strstr (value, "io-threads") || -                              strstr (value, "marker") || -                              strstr (value, "index"))) { -                                words++; -                                continue; -                        } else { -                                debug_xlator = gf_strdup (key); -                                break; -                        } -                } +                continue; +            } else { +                debug_xlator = gf_strdup(key); +                break; +            }          } +    } -        return debug_xlator; +    return debug_xlator;  }  int -gf_cli_set_volume_cbk (struct rpc_req *req, struct iovec *iov, -                             int count, void *myframe) -{ -        gf_cli_rsp           rsp   = {0,}; -        int                  ret   = -1; -        dict_t               *dict = NULL; -        char                 *help_str = NULL; -        char                 msg[1024] = {0,}; -        char                 *debug_xlator = NULL; -        char                 tmp_str[512] = {0,}; - -        GF_ASSERT (myframe); - -        if (-1 == req->rpc_status) { -                goto out; -        } - -        ret = xdr_to_generic (*iov, &rsp, (xdrproc_t)xdr_gf_cli_rsp); -        if (ret < 0) { -                gf_log (((call_frame_t *) myframe)->this->name, GF_LOG_ERROR, -                        "Failed to decode xdr response"); -                goto out; -        } - -        gf_log ("cli", GF_LOG_INFO, "Received resp to set"); - -        dict = dict_new (); - -        if (!dict) { -                ret = -1; -                goto out; -        } - -        ret = dict_unserialize (rsp.dict.dict_val, rsp.dict.dict_len, &dict); -        if (ret) { -                gf_log ("cli", GF_LOG_ERROR, -                        "failed to unserialize volume set respone dict"); -                goto out; -        } - -        /* For brick processes graph change does not happen on the fly. -         * The process has to be restarted. So this is a check from the -         * volume set option such that if debug xlators such as trace/errorgen -         * are provided in the set command, warn the user. -         */ -        debug_xlator = is_server_debug_xlator (myframe); - -        if (dict_get_str (dict, "help-str", &help_str) && !msg[0]) -                snprintf (msg, sizeof (msg), "Set volume %s", -                          (rsp.op_ret) ? "unsuccessful": "successful"); -        if (rsp.op_ret == 0 && debug_xlator) { -                snprintf (tmp_str, sizeof (tmp_str), "\n%s translator has been " -                          "added to the server volume file. Please restart the" -                          " volume for enabling the translator", debug_xlator); -        } - -        if ((global_state->mode & GLUSTER_MODE_XML) && (help_str == NULL)) { -                ret = cli_xml_output_str ("volSet", msg, rsp.op_ret, -                                          rsp.op_errno, rsp.op_errstr); -                if (ret) -                        gf_log ("cli", GF_LOG_ERROR, -                                "Error outputting to xml"); -                goto out; -        } +gf_cli_set_volume_cbk(struct rpc_req *req, struct iovec *iov, int count, +                      void *myframe) +{ +    gf_cli_rsp rsp = { +        0, +    }; +    int ret = -1; +    dict_t *dict = NULL; +    char *help_str = NULL; +    char msg[1024] = { +        0, +    }; +    char *debug_xlator = NULL; +    char tmp_str[512] = { +        0, +    }; + +    GF_ASSERT(myframe); + +    if (-1 == req->rpc_status) { +        goto out; +    } + +    ret = xdr_to_generic(*iov, &rsp, (xdrproc_t)xdr_gf_cli_rsp); +    if (ret < 0) { +        gf_log(((call_frame_t *)myframe)->this->name, GF_LOG_ERROR, +               "Failed to decode xdr response"); +        goto out; +    } + +    gf_log("cli", GF_LOG_INFO, "Received resp to set"); + +    dict = dict_new(); + +    if (!dict) { +        ret = -1; +        goto out; +    } + +    ret = dict_unserialize(rsp.dict.dict_val, rsp.dict.dict_len, &dict); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, +               "failed to unserialize volume set respone dict"); +        goto out; +    } + +    /* For brick processes graph change does not happen on the fly. +     * The process has to be restarted. So this is a check from the +     * volume set option such that if debug xlators such as trace/errorgen +     * are provided in the set command, warn the user. +     */ +    debug_xlator = is_server_debug_xlator(myframe); + +    if (dict_get_str(dict, "help-str", &help_str) && !msg[0]) +        snprintf(msg, sizeof(msg), "Set volume %s", +                 (rsp.op_ret) ? "unsuccessful" : "successful"); +    if (rsp.op_ret == 0 && debug_xlator) { +        snprintf(tmp_str, sizeof(tmp_str), +                 "\n%s translator has been " +                 "added to the server volume file. Please restart the" +                 " volume for enabling the translator", +                 debug_xlator); +    } + +    if ((global_state->mode & GLUSTER_MODE_XML) && (help_str == NULL)) { +        ret = cli_xml_output_str("volSet", msg, rsp.op_ret, rsp.op_errno, +                                 rsp.op_errstr); +        if (ret) +            gf_log("cli", GF_LOG_ERROR, "Error outputting to xml"); +        goto out; +    } -        if (rsp.op_ret) { -                if (strcmp (rsp.op_errstr, "")) -                        cli_err ("volume set: failed: %s", rsp.op_errstr); -                else -                        cli_err ("volume set: failed"); +    if (rsp.op_ret) { +        if (strcmp(rsp.op_errstr, "")) +            cli_err("volume set: failed: %s", rsp.op_errstr); +        else +            cli_err("volume set: failed"); +    } else { +        if (help_str == NULL) { +            if (debug_xlator == NULL) +                cli_out("volume set: success"); +            else +                cli_out("volume set: success%s", tmp_str);          } else { -                if (help_str == NULL) { -                        if (debug_xlator == NULL) -                                cli_out ("volume set: success"); -                        else -                                cli_out ("volume set: success%s", tmp_str); -                }else { -                        cli_out ("%s", help_str); -                } +            cli_out("%s", help_str);          } +    } -        ret = rsp.op_ret; +    ret = rsp.op_ret;  out: -        if (dict) -                dict_unref (dict); -        GF_FREE (debug_xlator); -        cli_cmd_broadcast_response (ret); -        return ret; +    if (dict) +        dict_unref(dict); +    GF_FREE(debug_xlator); +    cli_cmd_broadcast_response(ret); +    return ret;  }  int -gf_cli_add_tier_brick_cbk (struct rpc_req *req, struct iovec *iov, -                           int count, void *myframe) -{ -        gf_cli_rsp                  rsp   = {0,}; -        int                         ret   = -1; -        char                        msg[1024] = {0,}; - -        GF_VALIDATE_OR_GOTO ("cli", myframe, out); - -        if (-1 == req->rpc_status) { -                goto out; -        } - -        ret = xdr_to_generic (*iov, &rsp, (xdrproc_t)xdr_gf_cli_rsp); -        if (ret < 0) { -                gf_log (((call_frame_t *) myframe)->this->name, GF_LOG_ERROR, -                        "Failed to decode xdr response"); -                goto out; -        } - - -        gf_log ("cli", GF_LOG_INFO, "Received resp to attach tier"); - -        if (rsp.op_ret && strcmp (rsp.op_errstr, "")) -                snprintf (msg, sizeof (msg), "%s", rsp.op_errstr); -        else -                snprintf (msg, sizeof (msg), "Attach tier %s", -                          (rsp.op_ret) ? "unsuccessful" : "successful"); - -        if (global_state->mode & GLUSTER_MODE_XML) { -                ret = cli_xml_output_str ("volAttachTier", msg, rsp.op_ret, -                                          rsp.op_errno, rsp.op_errstr); -                if (ret) -                        gf_log ("cli", GF_LOG_ERROR, -                                "Error outputting to xml"); -                goto out; -        } +gf_cli_add_tier_brick_cbk(struct rpc_req *req, struct iovec *iov, int count, +                          void *myframe) +{ +    gf_cli_rsp rsp = { +        0, +    }; +    int ret = -1; +    char msg[1024] = { +        0, +    }; + +    GF_VALIDATE_OR_GOTO("cli", myframe, out); + +    if (-1 == req->rpc_status) { +        goto out; +    } + +    ret = xdr_to_generic(*iov, &rsp, (xdrproc_t)xdr_gf_cli_rsp); +    if (ret < 0) { +        gf_log(((call_frame_t *)myframe)->this->name, GF_LOG_ERROR, +               "Failed to decode xdr response"); +        goto out; +    } + +    gf_log("cli", GF_LOG_INFO, "Received resp to attach tier"); + +    if (rsp.op_ret && strcmp(rsp.op_errstr, "")) +        snprintf(msg, sizeof(msg), "%s", rsp.op_errstr); +    else +        snprintf(msg, sizeof(msg), "Attach tier %s", +                 (rsp.op_ret) ? "unsuccessful" : "successful"); + +    if (global_state->mode & GLUSTER_MODE_XML) { +        ret = cli_xml_output_str("volAttachTier", msg, rsp.op_ret, rsp.op_errno, +                                 rsp.op_errstr); +        if (ret) +            gf_log("cli", GF_LOG_ERROR, "Error outputting to xml"); +        goto out; +    } -        if (rsp.op_ret) -                cli_err ("volume attach-tier: failed: %s", msg); -        else -                cli_out ("volume attach-tier: success"); -        ret = rsp.op_ret; +    if (rsp.op_ret) +        cli_err("volume attach-tier: failed: %s", msg); +    else +        cli_out("volume attach-tier: success"); +    ret = rsp.op_ret;  out: -        cli_cmd_broadcast_response (ret); -        free (rsp.dict.dict_val); -        free (rsp.op_errstr); -        return ret; +    cli_cmd_broadcast_response(ret); +    free(rsp.dict.dict_val); +    free(rsp.op_errstr); +    return ret;  }  int -gf_cli_attach_tier_cbk (struct rpc_req *req, struct iovec *iov, -                             int count, void *myframe) -{ -        gf_cli_rsp                  rsp   = {0,}; -        int                         ret   = -1; -        char                        msg[1024] = {0,}; - -        GF_VALIDATE_OR_GOTO ("cli", myframe, out); - -        if (-1 == req->rpc_status) { -                goto out; -        } - -        ret = xdr_to_generic (*iov, &rsp, (xdrproc_t)xdr_gf_cli_rsp); -        if (ret < 0) { -                gf_log (((call_frame_t *) myframe)->this->name, GF_LOG_ERROR, -                        "Failed to decode xdr response"); -                goto out; -        } - - -        gf_log ("cli", GF_LOG_INFO, "Received resp to attach tier"); - -        if (rsp.op_ret && strcmp (rsp.op_errstr, "")) -                snprintf (msg, sizeof (msg), "%s", rsp.op_errstr); -        else -                snprintf (msg, sizeof (msg), "Attach tier %s", -                          (rsp.op_ret) ? "unsuccessful" : "successful"); - -        if (global_state->mode & GLUSTER_MODE_XML) { -                ret = cli_xml_output_str ("volAttachTier", msg, rsp.op_ret, -                                          rsp.op_errno, rsp.op_errstr); -                if (ret) -                        gf_log ("cli", GF_LOG_ERROR, -                                "Error outputting to xml"); -                goto out; -        } +gf_cli_attach_tier_cbk(struct rpc_req *req, struct iovec *iov, int count, +                       void *myframe) +{ +    gf_cli_rsp rsp = { +        0, +    }; +    int ret = -1; +    char msg[1024] = { +        0, +    }; + +    GF_VALIDATE_OR_GOTO("cli", myframe, out); + +    if (-1 == req->rpc_status) { +        goto out; +    } + +    ret = xdr_to_generic(*iov, &rsp, (xdrproc_t)xdr_gf_cli_rsp); +    if (ret < 0) { +        gf_log(((call_frame_t *)myframe)->this->name, GF_LOG_ERROR, +               "Failed to decode xdr response"); +        goto out; +    } + +    gf_log("cli", GF_LOG_INFO, "Received resp to attach tier"); + +    if (rsp.op_ret && strcmp(rsp.op_errstr, "")) +        snprintf(msg, sizeof(msg), "%s", rsp.op_errstr); +    else +        snprintf(msg, sizeof(msg), "Attach tier %s", +                 (rsp.op_ret) ? "unsuccessful" : "successful"); + +    if (global_state->mode & GLUSTER_MODE_XML) { +        ret = cli_xml_output_str("volAttachTier", msg, rsp.op_ret, rsp.op_errno, +                                 rsp.op_errstr); +        if (ret) +            gf_log("cli", GF_LOG_ERROR, "Error outputting to xml"); +        goto out; +    } -        if (rsp.op_ret) -                cli_err ("volume attach-tier: failed: %s", msg); -        else -                cli_out ("volume attach-tier: success"); -        ret = rsp.op_ret; +    if (rsp.op_ret) +        cli_err("volume attach-tier: failed: %s", msg); +    else +        cli_out("volume attach-tier: success"); +    ret = rsp.op_ret;  out: -        cli_cmd_broadcast_response (ret); -        free (rsp.dict.dict_val); -        free (rsp.op_errstr); -        return ret; +    cli_cmd_broadcast_response(ret); +    free(rsp.dict.dict_val); +    free(rsp.op_errstr); +    return ret;  }  int -gf_cli_remove_tier_brick_cbk (struct rpc_req *req, struct iovec *iov, -                             int count, void *myframe) -{ - -        gf_cli_rsp                      rsp   = {0,}; -        int                             ret   = -1; -        char                            msg[1024] = {0,}; -        char                           *cmd_str = "unknown"; -        cli_local_t                    *local = NULL; -        call_frame_t                   *frame = NULL; -        char                           *task_id_str = NULL; -        dict_t                         *rsp_dict = NULL; -        int32_t                         command = 0; - -        GF_ASSERT (myframe); - -        if (-1 == req->rpc_status) { -                goto out; -        } - -        frame = myframe; - -        GF_ASSERT (frame->local); - -        local = frame->local; - -        ret = xdr_to_generic (*iov, &rsp, (xdrproc_t)xdr_gf_cli_rsp); -        if (ret < 0) { -                gf_log (frame->this->name, GF_LOG_ERROR, -                        "Failed to decode xdr response"); -                goto out; -        } - -        ret = dict_get_int32 (local->dict, "command", &command); +gf_cli_remove_tier_brick_cbk(struct rpc_req *req, struct iovec *iov, int count, +                             void *myframe) +{ +    gf_cli_rsp rsp = { +        0, +    }; +    int ret = -1; +    char msg[1024] = { +        0, +    }; +    char *cmd_str = "unknown"; +    cli_local_t *local = NULL; +    call_frame_t *frame = NULL; +    char *task_id_str = NULL; +    dict_t *rsp_dict = NULL; +    int32_t command = 0; + +    GF_ASSERT(myframe); + +    if (-1 == req->rpc_status) { +        goto out; +    } + +    frame = myframe; + +    GF_ASSERT(frame->local); + +    local = frame->local; + +    ret = xdr_to_generic(*iov, &rsp, (xdrproc_t)xdr_gf_cli_rsp); +    if (ret < 0) { +        gf_log(frame->this->name, GF_LOG_ERROR, +               "Failed to decode xdr response"); +        goto out; +    } + +    ret = dict_get_int32(local->dict, "command", &command); +    if (ret) { +        gf_log("", GF_LOG_ERROR, "failed to get command"); +        goto out; +    } + +    if (rsp.dict.dict_len) { +        rsp_dict = dict_new(); +        if (!rsp_dict) { +            ret = -1; +            goto out; +        } + +        ret = dict_unserialize(rsp.dict.dict_val, rsp.dict.dict_len, &rsp_dict);          if (ret) { -                 gf_log ("", GF_LOG_ERROR, "failed to get command"); -                 goto out; +            gf_log("cli", GF_LOG_ERROR, "Failed to unserialize rsp_dict"); +            goto out;          } +    } - -        if (rsp.dict.dict_len) { -                rsp_dict = dict_new (); -                if (!rsp_dict) { -                        ret = -1; -                        goto out; -                } - -                ret = dict_unserialize (rsp.dict.dict_val, rsp.dict.dict_len, -                                        &rsp_dict); -                if (ret) { -                        gf_log ("cli", GF_LOG_ERROR, -                                "Failed to unserialize rsp_dict"); -                        goto out; -                } -        } - -        switch (command) { +    switch (command) {          case GF_DEFRAG_CMD_DETACH_START: -                cmd_str = "start"; - -                ret = dict_get_str (rsp_dict, GF_REMOVE_BRICK_TID_KEY, -                                    &task_id_str); -                if (ret) { -                        gf_log ("cli", GF_LOG_ERROR, -                                "remove-brick-id is not present in dict"); -                } -                break; +            cmd_str = "start"; + +            ret = dict_get_str(rsp_dict, GF_REMOVE_BRICK_TID_KEY, &task_id_str); +            if (ret) { +                gf_log("cli", GF_LOG_ERROR, +                       "remove-brick-id is not present in dict"); +            } +            break;          case GF_DEFRAG_CMD_DETACH_COMMIT: -                cmd_str = "commit"; -                break; +            cmd_str = "commit"; +            break;          case GF_DEFRAG_CMD_DETACH_COMMIT_FORCE: -                cmd_str = "commit force"; -                break; +            cmd_str = "commit force"; +            break;          case GF_DEFRAG_CMD_DETACH_STOP: -                cmd_str = "stop"; -                break; +            cmd_str = "stop"; +            break;          case GF_DEFRAG_CMD_DETACH_STATUS: -                cmd_str = "status"; -                break; +            cmd_str = "status"; +            break;          default: -                cmd_str = "unknown"; -                break; -        } +            cmd_str = "unknown"; +            break; +    } -        gf_log ("cli", GF_LOG_INFO, "Received resp to detach tier"); +    gf_log("cli", GF_LOG_INFO, "Received resp to detach tier"); -        if (rsp.op_ret && strcmp (rsp.op_errstr, "")) -                snprintf (msg, sizeof (msg), "%s", rsp.op_errstr); -        else -                snprintf (msg, sizeof (msg), "Detach tier %s %s", cmd_str, -                          (rsp.op_ret) ? "unsuccessful" : "successful"); +    if (rsp.op_ret && strcmp(rsp.op_errstr, "")) +        snprintf(msg, sizeof(msg), "%s", rsp.op_errstr); +    else +        snprintf(msg, sizeof(msg), "Detach tier %s %s", cmd_str, +                 (rsp.op_ret) ? "unsuccessful" : "successful"); -        ret = rsp.op_ret; -        if (global_state->mode & GLUSTER_MODE_XML) { -                ret = cli_xml_output_vol_remove_brick_detach_tier ( -                                _gf_true, rsp_dict, -                                rsp.op_ret, rsp.op_errno, -                                msg, "volDetachTier"); +    ret = rsp.op_ret; +    if (global_state->mode & GLUSTER_MODE_XML) { +        ret = cli_xml_output_vol_remove_brick_detach_tier( +            _gf_true, rsp_dict, rsp.op_ret, rsp.op_errno, msg, "volDetachTier"); -                if (ret) -                        gf_log ("cli", GF_LOG_ERROR, -                                "Error outputting to xml"); -                goto out; -        } else { -                if (rsp.op_ret) { -                        if (strcmp (rsp.op_errstr, "")) -                                snprintf (msg, sizeof (msg), "volume tier " -                                          "detach %s: failed: %s", cmd_str, -                                          rsp.op_errstr); -                        else -                                snprintf (msg, sizeof (msg), "volume tier " -                                          "detach %s: failed", cmd_str); - -                        cli_err ("%s", msg); -                        goto out; - -                } else { -                        cli_out ("volume detach tier %s: success", cmd_str); -                        if (GF_DEFRAG_CMD_DETACH_START == command && -                            task_id_str != NULL) -                                cli_out ("ID: %s", task_id_str); -                        if (GF_DEFRAG_CMD_DETACH_COMMIT == command) -                                cli_out ("Check the detached bricks to ensure " -                                         "all files are migrated.\nIf files " -                                         "with data are found on the brick " -                                         "path, copy them via a gluster mount " -                                         "point before re-purposing the " -                                         "removed brick. "); -                } -        } -        if (command == GF_DEFRAG_CMD_DETACH_STOP || -            command == GF_DEFRAG_CMD_DETACH_STATUS) -                ret = gf_cli_print_rebalance_status (rsp_dict, -                                GF_TASK_TYPE_REMOVE_BRICK, _gf_true); -        if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Failed to print remove-brick " -                                "rebalance status"); -                goto out; -        } - -        if ((command == GF_DEFRAG_CMD_DETACH_STOP) && (rsp.op_ret == 0)) { -                cli_out ("'detach tier' process may be in the middle of a " -                         "file migration.\nThe process will be fully stopped " -                         "once the migration of the file is complete.\nPlease " -                         "check detach tier process for completion before " -                         "doing any further brick related tasks on the " -                         "volume."); -        } -        ret = rsp.op_ret; - -out: -        cli_cmd_broadcast_response (ret); -        free (rsp.dict.dict_val); -        free (rsp.op_errstr); +        if (ret) +            gf_log("cli", GF_LOG_ERROR, "Error outputting to xml"); +        goto out; +    } else { +        if (rsp.op_ret) { +            if (strcmp(rsp.op_errstr, "")) +                snprintf(msg, sizeof(msg), +                         "volume tier " +                         "detach %s: failed: %s", +                         cmd_str, rsp.op_errstr); +            else +                snprintf(msg, sizeof(msg), +                         "volume tier " +                         "detach %s: failed", +                         cmd_str); + +            cli_err("%s", msg); +            goto out; -        return ret; +        } else { +            cli_out("volume detach tier %s: success", cmd_str); +            if (GF_DEFRAG_CMD_DETACH_START == command && task_id_str != NULL) +                cli_out("ID: %s", task_id_str); +            if (GF_DEFRAG_CMD_DETACH_COMMIT == command) +                cli_out( +                    "Check the detached bricks to ensure " +                    "all files are migrated.\nIf files " +                    "with data are found on the brick " +                    "path, copy them via a gluster mount " +                    "point before re-purposing the " +                    "removed brick. "); +        } +    } +    if (command == GF_DEFRAG_CMD_DETACH_STOP || +        command == GF_DEFRAG_CMD_DETACH_STATUS) +        ret = gf_cli_print_rebalance_status(rsp_dict, GF_TASK_TYPE_REMOVE_BRICK, +                                            _gf_true); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, +               "Failed to print remove-brick " +               "rebalance status"); +        goto out; +    } + +    if ((command == GF_DEFRAG_CMD_DETACH_STOP) && (rsp.op_ret == 0)) { +        cli_out( +            "'detach tier' process may be in the middle of a " +            "file migration.\nThe process will be fully stopped " +            "once the migration of the file is complete.\nPlease " +            "check detach tier process for completion before " +            "doing any further brick related tasks on the " +            "volume."); +    } +    ret = rsp.op_ret; + +out: +    cli_cmd_broadcast_response(ret); +    free(rsp.dict.dict_val); +    free(rsp.op_errstr); + +    return ret;  }  int -gf_cli_detach_tier_status_cbk (struct rpc_req *req, struct iovec *iov, -                                 int count, void *myframe) -{ -        gf_cli_rsp               rsp     = {0,}; -        int                      ret     = -1; -        dict_t                  *dict    = NULL; -        char                     msg[1024] = {0,}; -        int32_t                  command = 0; -        gf1_op_commands          cmd = GF_OP_CMD_NONE; -        cli_local_t             *local = NULL; -        call_frame_t            *frame = NULL; -        char                    *cmd_str = "unknown"; - -        GF_ASSERT (myframe); - -        if (-1 == req->rpc_status) { -                goto out; -        } +gf_cli_detach_tier_status_cbk(struct rpc_req *req, struct iovec *iov, int count, +                              void *myframe) +{ +    gf_cli_rsp rsp = { +        0, +    }; +    int ret = -1; +    dict_t *dict = NULL; +    char msg[1024] = { +        0, +    }; +    int32_t command = 0; +    gf1_op_commands cmd = GF_OP_CMD_NONE; +    cli_local_t *local = NULL; +    call_frame_t *frame = NULL; +    char *cmd_str = "unknown"; -        frame = myframe; +    GF_ASSERT(myframe); -        GF_ASSERT (frame->local); +    if (-1 == req->rpc_status) { +        goto out; +    } -        local = frame->local; +    frame = myframe; -        ret = xdr_to_generic (*iov, &rsp, -                              (xdrproc_t)xdr_gf_cli_rsp); -        if (ret < 0) { -                gf_log (frame->this->name, GF_LOG_ERROR, -                        "Failed to decode xdr response"); -                goto out; -        } +    GF_ASSERT(frame->local); -        ret = dict_get_int32 (local->dict, "command", &command); -        if (ret) -                goto out; +    local = frame->local; + +    ret = xdr_to_generic(*iov, &rsp, (xdrproc_t)xdr_gf_cli_rsp); +    if (ret < 0) { +        gf_log(frame->this->name, GF_LOG_ERROR, +               "Failed to decode xdr response"); +        goto out; +    } + +    ret = dict_get_int32(local->dict, "command", &command); +    if (ret) +        goto out; -        cmd = command; +    cmd = command; -        switch (cmd) { +    switch (cmd) {          case GF_OP_CMD_STOP_DETACH_TIER: -                cmd_str = "stop"; -                break; +            cmd_str = "stop"; +            break;          case GF_OP_CMD_STATUS: -                cmd_str = "status"; -                break; +            cmd_str = "status"; +            break;          default: -                break; -        } - -        ret = rsp.op_ret; -        if (rsp.op_ret == -1) { -                if (strcmp (rsp.op_errstr, "")) -                        snprintf (msg, sizeof (msg), "volume tier detach %s: " -                                  "failed: %s", cmd_str, rsp.op_errstr); -                else -                        snprintf (msg, sizeof (msg), "volume tier detach %s: " -                                  "failed", cmd_str); +            break; +    } + +    ret = rsp.op_ret; +    if (rsp.op_ret == -1) { +        if (strcmp(rsp.op_errstr, "")) +            snprintf(msg, sizeof(msg), +                     "volume tier detach %s: " +                     "failed: %s", +                     cmd_str, rsp.op_errstr); +        else +            snprintf(msg, sizeof(msg), +                     "volume tier detach %s: " +                     "failed", +                     cmd_str); -                if (global_state->mode & GLUSTER_MODE_XML) -                        goto xml_output; +        if (global_state->mode & GLUSTER_MODE_XML) +            goto xml_output; -                cli_err ("%s", msg); -                goto out; -        } +        cli_err("%s", msg); +        goto out; +    } -        if (rsp.dict.dict_len) { -                /* Unserialize the dictionary */ -                dict  = dict_new (); +    if (rsp.dict.dict_len) { +        /* Unserialize the dictionary */ +        dict = dict_new(); -                ret = dict_unserialize (rsp.dict.dict_val, -                                        rsp.dict.dict_len, -                                        &dict); -                if (ret < 0) { -                        strncpy (msg, "failed to unserialize req-buffer to " -                                 "dictionary", sizeof (msg)); +        ret = dict_unserialize(rsp.dict.dict_val, rsp.dict.dict_len, &dict); +        if (ret < 0) { +            strncpy(msg, +                    "failed to unserialize req-buffer to " +                    "dictionary", +                    sizeof(msg)); -                        if (global_state->mode & GLUSTER_MODE_XML) { -                                rsp.op_ret = -1; -                                goto xml_output; -                        } +            if (global_state->mode & GLUSTER_MODE_XML) { +                rsp.op_ret = -1; +                goto xml_output; +            } -                        gf_log ("cli", GF_LOG_ERROR, "%s", msg); -                        goto out; -                } +            gf_log("cli", GF_LOG_ERROR, "%s", msg); +            goto out;          } +    }  xml_output: -        if (global_state->mode & GLUSTER_MODE_XML) { -                if (strcmp (rsp.op_errstr, "")) { -                        ret = cli_xml_output_vol_remove_brick_detach_tier ( -                                                               _gf_true, dict, -                                                               rsp.op_ret, -                                                               rsp.op_errno, -                                                               rsp.op_errstr, -                                                               "volDetachTier"); -                } else { -                        ret = cli_xml_output_vol_remove_brick_detach_tier -                                                               (_gf_true, dict, -                                                               rsp.op_ret, -                                                               rsp.op_errno, -                                                               msg, -                                                               "volDetachTier"); -                } -                goto out; -        } +    if (global_state->mode & GLUSTER_MODE_XML) { +        if (strcmp(rsp.op_errstr, "")) { +            ret = cli_xml_output_vol_remove_brick_detach_tier( +                _gf_true, dict, rsp.op_ret, rsp.op_errno, rsp.op_errstr, +                "volDetachTier"); +        } else { +            ret = cli_xml_output_vol_remove_brick_detach_tier( +                _gf_true, dict, rsp.op_ret, rsp.op_errno, msg, "volDetachTier"); +        } +        goto out; +    } + +    ret = gf_cli_print_rebalance_status(dict, GF_TASK_TYPE_REMOVE_BRICK, +                                        _gf_true); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, +               "Failed to print remove-brick " +               "rebalance status"); +        goto out; +    } + +    if ((cmd == GF_OP_CMD_STOP_DETACH_TIER) && (rsp.op_ret == 0)) { +        cli_out( +            "'detach tier' process may be in the middle of a " +            "file migration.\nThe process will be fully stopped " +            "once the migration of the file is complete.\nPlease " +            "check detach tier process for completion before " +            "doing any further brick related tasks on the " +            "volume."); +    } + +out: +    free(rsp.dict.dict_val); /* malloced by xdr */ +    if (dict) +        dict_unref(dict); +    cli_cmd_broadcast_response(ret); +    return ret; +} -        ret = gf_cli_print_rebalance_status (dict, GF_TASK_TYPE_REMOVE_BRICK, -                                             _gf_true); -        if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Failed to print remove-brick " -                        "rebalance status"); -                goto out; -        } +int +gf_cli_add_brick_cbk(struct rpc_req *req, struct iovec *iov, int count, +                     void *myframe) +{ +    gf_cli_rsp rsp = { +        0, +    }; +    int ret = -1; +    char msg[1024] = { +        0, +    }; + +    GF_ASSERT(myframe); + +    if (-1 == req->rpc_status) { +        goto out; +    } + +    ret = xdr_to_generic(*iov, &rsp, (xdrproc_t)xdr_gf_cli_rsp); +    if (ret < 0) { +        gf_log(((call_frame_t *)myframe)->this->name, GF_LOG_ERROR, +               "Failed to decode xdr response"); +        goto out; +    } + +    gf_log("cli", GF_LOG_INFO, "Received resp to add brick"); + +    if (rsp.op_ret && strcmp(rsp.op_errstr, "")) +        snprintf(msg, sizeof(msg), "%s", rsp.op_errstr); +    else +        snprintf(msg, sizeof(msg), "Add Brick %s", +                 (rsp.op_ret) ? "unsuccessful" : "successful"); + +    if (global_state->mode & GLUSTER_MODE_XML) { +        ret = cli_xml_output_str("volAddBrick", msg, rsp.op_ret, rsp.op_errno, +                                 rsp.op_errstr); +        if (ret) +            gf_log("cli", GF_LOG_ERROR, "Error outputting to xml"); +        goto out; +    } -        if ((cmd == GF_OP_CMD_STOP_DETACH_TIER) && (rsp.op_ret == 0)) { -                cli_out ("'detach tier' process may be in the middle of a " -                         "file migration.\nThe process will be fully stopped " -                         "once the migration of the file is complete.\nPlease " -                         "check detach tier process for completion before " -                         "doing any further brick related tasks on the " -                         "volume."); -        } +    if (rsp.op_ret) +        cli_err("volume add-brick: failed: %s", rsp.op_errstr); +    else +        cli_out("volume add-brick: success"); +    ret = rsp.op_ret;  out: -        free (rsp.dict.dict_val); /* malloced by xdr */ -        if (dict) -                dict_unref (dict); -        cli_cmd_broadcast_response (ret); -        return ret; +    cli_cmd_broadcast_response(ret); +    free(rsp.dict.dict_val); +    free(rsp.op_errstr); +    return ret;  } -  int -gf_cli_add_brick_cbk (struct rpc_req *req, struct iovec *iov, -                             int count, void *myframe) +gf_cli3_remove_brick_status_cbk(struct rpc_req *req, struct iovec *iov, +                                int count, void *myframe)  { -        gf_cli_rsp                  rsp   = {0,}; -        int                         ret   = -1; -        char                        msg[1024] = {0,}; - -        GF_ASSERT (myframe); - -        if (-1 == req->rpc_status) { -                goto out; -        } - -        ret = xdr_to_generic (*iov, &rsp, (xdrproc_t)xdr_gf_cli_rsp); -        if (ret < 0) { -                gf_log (((call_frame_t *) myframe)->this->name, GF_LOG_ERROR, -                        "Failed to decode xdr response"); -                goto out; -        } - - -        gf_log ("cli", GF_LOG_INFO, "Received resp to add brick"); +    gf_cli_rsp rsp = { +        0, +    }; +    int ret = -1; +    dict_t *dict = NULL; +    char msg[1024] = { +        0, +    }; +    int32_t command = 0; +    gf1_op_commands cmd = GF_OP_CMD_NONE; +    cli_local_t *local = NULL; +    call_frame_t *frame = NULL; +    char *cmd_str = "unknown"; -        if (rsp.op_ret && strcmp (rsp.op_errstr, "")) -                snprintf (msg, sizeof (msg), "%s", rsp.op_errstr); -        else -                snprintf (msg, sizeof (msg), "Add Brick %s", -                          (rsp.op_ret) ? "unsuccessful": "successful"); +    GF_ASSERT(myframe); -        if (global_state->mode & GLUSTER_MODE_XML) { -                ret = cli_xml_output_str ("volAddBrick", msg, rsp.op_ret, -                                          rsp.op_errno, rsp.op_errstr); -                if (ret) -                        gf_log ("cli", GF_LOG_ERROR, -                                "Error outputting to xml"); -                goto out; -        } +    if (-1 == req->rpc_status) { +        goto out; +    } -        if (rsp.op_ret) -                cli_err ("volume add-brick: failed: %s", rsp.op_errstr); -        else -                cli_out ("volume add-brick: success"); -        ret = rsp.op_ret; +    frame = myframe; -out: -        cli_cmd_broadcast_response (ret); -        free (rsp.dict.dict_val); -        free (rsp.op_errstr); -        return ret; -} +    GF_ASSERT(frame->local); -int -gf_cli3_remove_brick_status_cbk (struct rpc_req *req, struct iovec *iov, -                                 int count, void *myframe) -{ -        gf_cli_rsp               rsp     = {0,}; -        int                      ret     = -1; -        dict_t                  *dict    = NULL; -        char                     msg[1024] = {0,}; -        int32_t                  command = 0; -        gf1_op_commands          cmd = GF_OP_CMD_NONE; -        cli_local_t             *local = NULL; -        call_frame_t            *frame = NULL; -        char                    *cmd_str = "unknown"; - -        GF_ASSERT (myframe); - -        if (-1 == req->rpc_status) { -                goto out; -        } +    local = frame->local; -        frame = myframe; +    ret = xdr_to_generic(*iov, &rsp, (xdrproc_t)xdr_gf_cli_rsp); +    if (ret < 0) { +        gf_log(frame->this->name, GF_LOG_ERROR, +               "Failed to decode xdr response"); +        goto out; +    } -        GF_ASSERT (frame->local); +    ret = dict_get_int32(local->dict, "command", &command); +    if (ret) +        goto out; -        local = frame->local; +    cmd = command; -        ret = xdr_to_generic (*iov, &rsp, -                              (xdrproc_t)xdr_gf_cli_rsp); -        if (ret < 0) { -                gf_log (frame->this->name, GF_LOG_ERROR, -                        "Failed to decode xdr response"); -                goto out; -        } - -        ret = dict_get_int32 (local->dict, "command", &command); -        if (ret) -                goto out; - -        cmd = command; - -        switch (cmd) { +    switch (cmd) {          case GF_OP_CMD_STOP: -                cmd_str = "stop"; -                break; +            cmd_str = "stop"; +            break;          case GF_OP_CMD_STATUS: -                cmd_str = "status"; -                break; +            cmd_str = "status"; +            break;          default: -                break; -        } +            break; +    } + +    ret = rsp.op_ret; +    if (rsp.op_ret == -1) { +        if (strcmp(rsp.op_errstr, "")) +            snprintf(msg, sizeof(msg), +                     "volume remove-brick %s: " +                     "failed: %s", +                     cmd_str, rsp.op_errstr); +        else +            snprintf(msg, sizeof(msg), +                     "volume remove-brick %s: " +                     "failed", +                     cmd_str); -        ret = rsp.op_ret; -        if (rsp.op_ret == -1) { -                if (strcmp (rsp.op_errstr, "")) -                        snprintf (msg, sizeof (msg), "volume remove-brick %s: " -                                  "failed: %s", cmd_str, rsp.op_errstr); -                else -                        snprintf (msg, sizeof (msg), "volume remove-brick %s: " -                                  "failed", cmd_str); +        if (global_state->mode & GLUSTER_MODE_XML) +            goto xml_output; -                if (global_state->mode & GLUSTER_MODE_XML) -                        goto xml_output; +        cli_err("%s", msg); +        goto out; +    } -                cli_err ("%s", msg); -                goto out; -        } +    if (rsp.dict.dict_len) { +        /* Unserialize the dictionary */ +        dict = dict_new(); -        if (rsp.dict.dict_len) { -                /* Unserialize the dictionary */ -                dict  = dict_new (); - -                ret = dict_unserialize (rsp.dict.dict_val, -                                        rsp.dict.dict_len, -                                        &dict); -                if (ret < 0) { -                        strncpy (msg, "failed to unserialize req-buffer to " -                                 "dictionary", sizeof (msg)); +        ret = dict_unserialize(rsp.dict.dict_val, rsp.dict.dict_len, &dict); +        if (ret < 0) { +            strncpy(msg, +                    "failed to unserialize req-buffer to " +                    "dictionary", +                    sizeof(msg)); -                        if (global_state->mode & GLUSTER_MODE_XML) { -                                rsp.op_ret = -1; -                                goto xml_output; -                        } +            if (global_state->mode & GLUSTER_MODE_XML) { +                rsp.op_ret = -1; +                goto xml_output; +            } -                        gf_log ("cli", GF_LOG_ERROR, "%s", msg); -                        goto out; -                } +            gf_log("cli", GF_LOG_ERROR, "%s", msg); +            goto out;          } +    }  xml_output: -        if (global_state->mode & GLUSTER_MODE_XML) { -                if (strcmp (rsp.op_errstr, "")) { -                        ret = cli_xml_output_vol_remove_brick_detach_tier ( -                                                               _gf_true, dict, -                                                               rsp.op_ret, -                                                               rsp.op_errno, -                                                               rsp.op_errstr, -                                                               "volRemoveBrick"); -                } else { -                        ret = cli_xml_output_vol_remove_brick_detach_tier ( -                                                               _gf_true, dict, -                                                               rsp.op_ret, -                                                               rsp.op_errno, -                                                               msg, -                                                               "volRemoveBrick"); -                } -                goto out; -        } - -        ret = gf_cli_print_rebalance_status (dict, GF_TASK_TYPE_REMOVE_BRICK, -                                             _gf_false); -        if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Failed to print remove-brick " -                        "rebalance status"); -                goto out; -        } - -        if ((cmd == GF_OP_CMD_STOP) && (rsp.op_ret == 0)) { -                cli_out ("'remove-brick' process may be in the middle of a " -                         "file migration.\nThe process will be fully stopped " -                         "once the migration of the file is complete.\nPlease " -                         "check remove-brick process for completion before " -                         "doing any further brick related tasks on the " -                         "volume."); -        } - -out: -        free (rsp.dict.dict_val); //malloced by xdr -        if (dict) -                dict_unref (dict); -        cli_cmd_broadcast_response (ret); -        return ret; +    if (global_state->mode & GLUSTER_MODE_XML) { +        if (strcmp(rsp.op_errstr, "")) { +            ret = cli_xml_output_vol_remove_brick_detach_tier( +                _gf_true, dict, rsp.op_ret, rsp.op_errno, rsp.op_errstr, +                "volRemoveBrick"); +        } else { +            ret = cli_xml_output_vol_remove_brick_detach_tier( +                _gf_true, dict, rsp.op_ret, rsp.op_errno, msg, +                "volRemoveBrick"); +        } +        goto out; +    } + +    ret = gf_cli_print_rebalance_status(dict, GF_TASK_TYPE_REMOVE_BRICK, +                                        _gf_false); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, +               "Failed to print remove-brick " +               "rebalance status"); +        goto out; +    } + +    if ((cmd == GF_OP_CMD_STOP) && (rsp.op_ret == 0)) { +        cli_out( +            "'remove-brick' process may be in the middle of a " +            "file migration.\nThe process will be fully stopped " +            "once the migration of the file is complete.\nPlease " +            "check remove-brick process for completion before " +            "doing any further brick related tasks on the " +            "volume."); +    } + +out: +    free(rsp.dict.dict_val);  // malloced by xdr +    if (dict) +        dict_unref(dict); +    cli_cmd_broadcast_response(ret); +    return ret;  } -  int -gf_cli_remove_brick_cbk (struct rpc_req *req, struct iovec *iov, -                             int count, void *myframe) -{ -        gf_cli_rsp                      rsp   = {0,}; -        int                             ret   = -1; -        char                            msg[1024] = {0,}; -        gf1_op_commands                 cmd = GF_OP_CMD_NONE; -        char                           *cmd_str = "unknown"; -        cli_local_t                    *local = NULL; -        call_frame_t                   *frame = NULL; -        char                           *task_id_str = NULL; -        dict_t                         *rsp_dict = NULL; - -        GF_ASSERT (myframe); - -        if (-1 == req->rpc_status) { -                goto out; -        } - -        frame = myframe; - -        GF_ASSERT (frame->local); - -        local = frame->local; - -        ret = xdr_to_generic (*iov, &rsp, (xdrproc_t)xdr_gf_cli_rsp); -        if (ret < 0) { -                gf_log (frame->this->name, GF_LOG_ERROR, -                        "Failed to decode xdr response"); -                goto out; -        } - -        ret = dict_get_int32 (local->dict, "command", (int32_t *)&cmd); +gf_cli_remove_brick_cbk(struct rpc_req *req, struct iovec *iov, int count, +                        void *myframe) +{ +    gf_cli_rsp rsp = { +        0, +    }; +    int ret = -1; +    char msg[1024] = { +        0, +    }; +    gf1_op_commands cmd = GF_OP_CMD_NONE; +    char *cmd_str = "unknown"; +    cli_local_t *local = NULL; +    call_frame_t *frame = NULL; +    char *task_id_str = NULL; +    dict_t *rsp_dict = NULL; + +    GF_ASSERT(myframe); + +    if (-1 == req->rpc_status) { +        goto out; +    } + +    frame = myframe; + +    GF_ASSERT(frame->local); + +    local = frame->local; + +    ret = xdr_to_generic(*iov, &rsp, (xdrproc_t)xdr_gf_cli_rsp); +    if (ret < 0) { +        gf_log(frame->this->name, GF_LOG_ERROR, +               "Failed to decode xdr response"); +        goto out; +    } + +    ret = dict_get_int32(local->dict, "command", (int32_t *)&cmd); +    if (ret) { +        gf_log("", GF_LOG_ERROR, "failed to get command"); +        goto out; +    } + +    if (rsp.dict.dict_len) { +        rsp_dict = dict_new(); +        if (!rsp_dict) { +            ret = -1; +            goto out; +        } + +        ret = dict_unserialize(rsp.dict.dict_val, rsp.dict.dict_len, &rsp_dict);          if (ret) { -                 gf_log ("", GF_LOG_ERROR, "failed to get command"); -                 goto out; -        } - -        if (rsp.dict.dict_len) { -                rsp_dict = dict_new (); -                if (!rsp_dict) { -                        ret = -1; -                        goto out; -                } - -                ret = dict_unserialize (rsp.dict.dict_val, rsp.dict.dict_len, -                                        &rsp_dict); -                if (ret) { -                        gf_log ("cli", GF_LOG_ERROR, -                                "Failed to unserialize rsp_dict"); -                        goto out; -                } +            gf_log("cli", GF_LOG_ERROR, "Failed to unserialize rsp_dict"); +            goto out;          } +    } -        switch (cmd) { +    switch (cmd) {          case GF_OP_CMD_DETACH_START:          case GF_OP_CMD_START: -                cmd_str = "start"; - -                ret = dict_get_str (rsp_dict, GF_REMOVE_BRICK_TID_KEY, &task_id_str); -                if (ret) { -                        gf_log ("cli", GF_LOG_ERROR, -                                "remove-brick-id is not present in dict"); -                } -                break; +            cmd_str = "start"; + +            ret = dict_get_str(rsp_dict, GF_REMOVE_BRICK_TID_KEY, &task_id_str); +            if (ret) { +                gf_log("cli", GF_LOG_ERROR, +                       "remove-brick-id is not present in dict"); +            } +            break;          case GF_OP_CMD_COMMIT: -                cmd_str = "commit"; -                break; +            cmd_str = "commit"; +            break;          case GF_OP_CMD_COMMIT_FORCE: -                cmd_str = "commit force"; -                break; +            cmd_str = "commit force"; +            break;          default: -                cmd_str = "unknown"; -                break; -        } - -        gf_log ("cli", GF_LOG_INFO, "Received resp to remove brick"); - -        if (rsp.op_ret && strcmp (rsp.op_errstr, "")) -                snprintf (msg, sizeof (msg), "%s", rsp.op_errstr); -        else -                snprintf (msg, sizeof (msg), "Remove Brick %s %s", cmd_str, -                          (rsp.op_ret) ? "unsuccessful": "successful"); - -        if (global_state->mode & GLUSTER_MODE_XML) { -                ret = cli_xml_output_vol_remove_brick_detach_tier ( -                                                       _gf_false, rsp_dict, -                                                       rsp.op_ret, rsp.op_errno, -                                                       msg, "volRemoveBrick"); -                if (ret) -                        gf_log ("cli", GF_LOG_ERROR, -                                "Error outputting to xml"); -                goto out; -        } +            cmd_str = "unknown"; +            break; +    } + +    gf_log("cli", GF_LOG_INFO, "Received resp to remove brick"); + +    if (rsp.op_ret && strcmp(rsp.op_errstr, "")) +        snprintf(msg, sizeof(msg), "%s", rsp.op_errstr); +    else +        snprintf(msg, sizeof(msg), "Remove Brick %s %s", cmd_str, +                 (rsp.op_ret) ? "unsuccessful" : "successful"); + +    if (global_state->mode & GLUSTER_MODE_XML) { +        ret = cli_xml_output_vol_remove_brick_detach_tier( +            _gf_false, rsp_dict, rsp.op_ret, rsp.op_errno, msg, +            "volRemoveBrick"); +        if (ret) +            gf_log("cli", GF_LOG_ERROR, "Error outputting to xml"); +        goto out; +    } -        if (rsp.op_ret) { -                cli_err ("volume remove-brick %s: failed: %s", cmd_str, -                         msg); -        } else { -                cli_out ("volume remove-brick %s: success", cmd_str); -                if (GF_OP_CMD_START == cmd && task_id_str != NULL) -                        cli_out ("ID: %s", task_id_str); -                if (GF_OP_CMD_COMMIT == cmd) -                        cli_out ("Check the removed bricks to ensure all files " -                                 "are migrated.\nIf files with data are " -                                 "found on the brick path, copy them via a " -                                 "gluster mount point before re-purposing the " -                                 "removed brick. "); -        } +    if (rsp.op_ret) { +        cli_err("volume remove-brick %s: failed: %s", cmd_str, msg); +    } else { +        cli_out("volume remove-brick %s: success", cmd_str); +        if (GF_OP_CMD_START == cmd && task_id_str != NULL) +            cli_out("ID: %s", task_id_str); +        if (GF_OP_CMD_COMMIT == cmd) +            cli_out( +                "Check the removed bricks to ensure all files " +                "are migrated.\nIf files with data are " +                "found on the brick path, copy them via a " +                "gluster mount point before re-purposing the " +                "removed brick. "); +    } -        ret = rsp.op_ret; +    ret = rsp.op_ret;  out: -        cli_cmd_broadcast_response (ret); -        free (rsp.dict.dict_val); -        free (rsp.op_errstr); +    cli_cmd_broadcast_response(ret); +    free(rsp.dict.dict_val); +    free(rsp.op_errstr); -        return ret; +    return ret;  }  int -gf_cli_reset_brick_cbk (struct rpc_req *req, struct iovec *iov, -                        int count, void *myframe) -{ -        gf_cli_rsp                       rsp              = {0,}; -        int                              ret              = -1; -        cli_local_t                     *local            = NULL; -        call_frame_t                    *frame            = NULL; -        char                            *rb_operation_str = NULL; -        dict_t                          *rsp_dict         = NULL; -        char                             msg[1024]        = {0,}; -        char                            *reset_op         = NULL; - -        GF_ASSERT (myframe); - -        if (-1 == req->rpc_status) { -                goto out; -        } - -        frame = myframe; - -        GF_ASSERT (frame->local); - -        local = frame->local; - -        ret = xdr_to_generic (*iov, &rsp, (xdrproc_t)xdr_gf_cli_rsp); +gf_cli_reset_brick_cbk(struct rpc_req *req, struct iovec *iov, int count, +                       void *myframe) +{ +    gf_cli_rsp rsp = { +        0, +    }; +    int ret = -1; +    cli_local_t *local = NULL; +    call_frame_t *frame = NULL; +    char *rb_operation_str = NULL; +    dict_t *rsp_dict = NULL; +    char msg[1024] = { +        0, +    }; +    char *reset_op = NULL; + +    GF_ASSERT(myframe); + +    if (-1 == req->rpc_status) { +        goto out; +    } + +    frame = myframe; + +    GF_ASSERT(frame->local); + +    local = frame->local; + +    ret = xdr_to_generic(*iov, &rsp, (xdrproc_t)xdr_gf_cli_rsp); +    if (ret < 0) { +        gf_log(frame->this->name, GF_LOG_ERROR, +               "Failed to decode xdr response"); +        goto out; +    } + +    ret = dict_get_str(local->dict, "operation", &reset_op); +    if (ret) { +        gf_log(frame->this->name, GF_LOG_ERROR, "dict_get on operation failed"); +        goto out; +    } + +    if (rsp.dict.dict_len) { +        /* Unserialize the dictionary */ +        rsp_dict = dict_new(); + +        ret = dict_unserialize(rsp.dict.dict_val, rsp.dict.dict_len, &rsp_dict);          if (ret < 0) { -                gf_log (frame->this->name, GF_LOG_ERROR, -                        "Failed to decode xdr response"); -                goto out; -        } - -        ret = dict_get_str (local->dict, "operation", &reset_op); -        if (ret) { -                gf_log (frame->this->name, GF_LOG_ERROR, -                        "dict_get on operation failed"); -                goto out; -        } - -        if (rsp.dict.dict_len) { -                /* Unserialize the dictionary */ -                rsp_dict  = dict_new (); - -                ret = dict_unserialize (rsp.dict.dict_val, -                                rsp.dict.dict_len, -                                &rsp_dict); -                if (ret < 0) { -                        gf_log (frame->this->name, GF_LOG_ERROR, "failed to " -                                "unserialize rsp buffer to dictionary"); -                        goto out; -                } -        } - -        if (strcmp (reset_op, "GF_RESET_OP_START") && -            strcmp (reset_op, "GF_RESET_OP_COMMIT") && -            strcmp (reset_op, "GF_RESET_OP_COMMIT_FORCE")) { -                rb_operation_str = gf_strdup ("Unknown operation"); -                ret = -1; -                goto out; -        } - -        if (rsp.op_ret && (strcmp (rsp.op_errstr, ""))) { -                rb_operation_str = gf_strdup (rsp.op_errstr); -        } else { -                if (!strcmp (reset_op, "GF_RESET_OP_START")) { -                        if (rsp.op_ret) -                                rb_operation_str = gf_strdup ("reset-brick " -                                                              "start " -                                                              "operation " -                                                              "failed"); -                        else -                                rb_operation_str = gf_strdup ("reset-brick " -                                                              "start " -                                                              "operation " -                                                              "successful"); -                } else if (!strcmp (reset_op, "GF_RESET_OP_COMMIT")) { - -                        if (rsp.op_ret) -                                rb_operation_str = gf_strdup ("reset-brick " -                                                              "commit " -                                                              "operation " -                                                              "failed"); -                        else -                                rb_operation_str = gf_strdup ("reset-brick " -                                                              "commit " -                                                              "operation " -                                                              "successful"); -                } else if (!strcmp (reset_op, "GF_RESET_OP_COMMIT_FORCE")) { - -                        if (rsp.op_ret) -                                rb_operation_str = gf_strdup ("reset-brick " -                                                              "commit " -                                                              "force operation " -                                                              "failed"); -                        else -                                rb_operation_str = gf_strdup ("reset-brick " -                                                              "commit " -                                                              "force operation " -                                                              "successful"); -                } -        } - -        gf_log ("cli", GF_LOG_INFO, "Received resp to reset brick"); -        snprintf (msg, sizeof (msg), "%s", -                  rb_operation_str ? rb_operation_str : "Unknown operation"); - -        if (global_state->mode & GLUSTER_MODE_XML) { -                ret = cli_xml_output_vol_replace_brick (rsp_dict, -                                                        rsp.op_ret, -                                                        rsp.op_errno, msg); -                if (ret) -                        gf_log ("cli", GF_LOG_ERROR, -                                "Error outputting to xml"); -                goto out; -        } +            gf_log(frame->this->name, GF_LOG_ERROR, +                   "failed to " +                   "unserialize rsp buffer to dictionary"); +            goto out; +        } +    } + +    if (strcmp(reset_op, "GF_RESET_OP_START") && +        strcmp(reset_op, "GF_RESET_OP_COMMIT") && +        strcmp(reset_op, "GF_RESET_OP_COMMIT_FORCE")) { +        rb_operation_str = gf_strdup("Unknown operation"); +        ret = -1; +        goto out; +    } + +    if (rsp.op_ret && (strcmp(rsp.op_errstr, ""))) { +        rb_operation_str = gf_strdup(rsp.op_errstr); +    } else { +        if (!strcmp(reset_op, "GF_RESET_OP_START")) { +            if (rsp.op_ret) +                rb_operation_str = gf_strdup( +                    "reset-brick " +                    "start " +                    "operation " +                    "failed"); +            else +                rb_operation_str = gf_strdup( +                    "reset-brick " +                    "start " +                    "operation " +                    "successful"); +        } else if (!strcmp(reset_op, "GF_RESET_OP_COMMIT")) { +            if (rsp.op_ret) +                rb_operation_str = gf_strdup( +                    "reset-brick " +                    "commit " +                    "operation " +                    "failed"); +            else +                rb_operation_str = gf_strdup( +                    "reset-brick " +                    "commit " +                    "operation " +                    "successful"); +        } else if (!strcmp(reset_op, "GF_RESET_OP_COMMIT_FORCE")) { +            if (rsp.op_ret) +                rb_operation_str = gf_strdup( +                    "reset-brick " +                    "commit " +                    "force operation " +                    "failed"); +            else +                rb_operation_str = gf_strdup( +                    "reset-brick " +                    "commit " +                    "force operation " +                    "successful"); +        } +    } + +    gf_log("cli", GF_LOG_INFO, "Received resp to reset brick"); +    snprintf(msg, sizeof(msg), "%s", +             rb_operation_str ? rb_operation_str : "Unknown operation"); + +    if (global_state->mode & GLUSTER_MODE_XML) { +        ret = cli_xml_output_vol_replace_brick(rsp_dict, rsp.op_ret, +                                               rsp.op_errno, msg); +        if (ret) +            gf_log("cli", GF_LOG_ERROR, "Error outputting to xml"); +        goto out; +    } -        if (rsp.op_ret) -                cli_err ("volume reset-brick: failed: %s", msg); -        else -                cli_out ("volume reset-brick: success: %s", msg); -        ret = rsp.op_ret; +    if (rsp.op_ret) +        cli_err("volume reset-brick: failed: %s", msg); +    else +        cli_out("volume reset-brick: success: %s", msg); +    ret = rsp.op_ret;  out: -        if (frame) -                frame->local = NULL; +    if (frame) +        frame->local = NULL; -        if (local) -                cli_local_wipe (local); +    if (local) +        cli_local_wipe(local); -        if (rb_operation_str) -                GF_FREE (rb_operation_str); +    if (rb_operation_str) +        GF_FREE(rb_operation_str); -        cli_cmd_broadcast_response (ret); -        free (rsp.dict.dict_val); -        if (rsp_dict) -                dict_unref (rsp_dict); +    cli_cmd_broadcast_response(ret); +    free(rsp.dict.dict_val); +    if (rsp_dict) +        dict_unref(rsp_dict); -        return ret; +    return ret;  }  int -gf_cli_replace_brick_cbk (struct rpc_req *req, struct iovec *iov, -                             int count, void *myframe) -{ -        gf_cli_rsp                       rsp              = {0,}; -        int                              ret              = -1; -        cli_local_t                     *local            = NULL; -        call_frame_t                    *frame            = NULL; -        char                            *rb_operation_str = NULL; -        dict_t                          *rsp_dict         = NULL; -        char                             msg[1024]        = {0,}; -        char                            *replace_op       = NULL; - -        GF_ASSERT (myframe); - -        if (-1 == req->rpc_status) { -                goto out; -        } - -        frame = myframe; - -        GF_ASSERT (frame->local); - -        local = frame->local; - -        ret = xdr_to_generic (*iov, &rsp, (xdrproc_t)xdr_gf_cli_rsp); +gf_cli_replace_brick_cbk(struct rpc_req *req, struct iovec *iov, int count, +                         void *myframe) +{ +    gf_cli_rsp rsp = { +        0, +    }; +    int ret = -1; +    cli_local_t *local = NULL; +    call_frame_t *frame = NULL; +    char *rb_operation_str = NULL; +    dict_t *rsp_dict = NULL; +    char msg[1024] = { +        0, +    }; +    char *replace_op = NULL; + +    GF_ASSERT(myframe); + +    if (-1 == req->rpc_status) { +        goto out; +    } + +    frame = myframe; + +    GF_ASSERT(frame->local); + +    local = frame->local; + +    ret = xdr_to_generic(*iov, &rsp, (xdrproc_t)xdr_gf_cli_rsp); +    if (ret < 0) { +        gf_log(frame->this->name, GF_LOG_ERROR, +               "Failed to decode xdr response"); +        goto out; +    } + +    ret = dict_get_str(local->dict, "operation", &replace_op); +    if (ret) { +        gf_log(frame->this->name, GF_LOG_ERROR, "dict_get on operation failed"); +        goto out; +    } + +    if (rsp.dict.dict_len) { +        /* Unserialize the dictionary */ +        rsp_dict = dict_new(); + +        ret = dict_unserialize(rsp.dict.dict_val, rsp.dict.dict_len, &rsp_dict);          if (ret < 0) { -                gf_log (frame->this->name, GF_LOG_ERROR, -                        "Failed to decode xdr response"); -                goto out; -        } - -        ret = dict_get_str (local->dict, "operation", &replace_op); -        if (ret) { -                gf_log (frame->this->name, GF_LOG_ERROR, -                        "dict_get on operation failed"); -                goto out; -        } - -        if (rsp.dict.dict_len) { -                /* Unserialize the dictionary */ -                rsp_dict  = dict_new (); - -                ret = dict_unserialize (rsp.dict.dict_val, -                                rsp.dict.dict_len, -                                &rsp_dict); -                if (ret < 0) { -                        gf_log (frame->this->name, GF_LOG_ERROR, "failed to " -                                "unserialize rsp buffer to dictionary"); -                        goto out; -                } -        } - -        if (!strcmp (replace_op, "GF_REPLACE_OP_COMMIT_FORCE")) { - -                if (rsp.op_ret || ret) -                        rb_operation_str = gf_strdup ("replace-brick commit " -                                                      "force operation failed"); -                else -                        rb_operation_str = gf_strdup ("replace-brick commit " -                                                      "force operation " -                                                      "successful"); -        } else { -                gf_log (frame->this->name, GF_LOG_DEBUG, "Unknown operation"); -        } - -        if (rsp.op_ret && (strcmp (rsp.op_errstr, ""))) { -                rb_operation_str = gf_strdup (rsp.op_errstr); -        } - -        gf_log ("cli", GF_LOG_INFO, "Received resp to replace brick"); -        snprintf (msg, sizeof (msg), "%s", -                  rb_operation_str ? rb_operation_str : "Unknown operation"); - -        if (global_state->mode & GLUSTER_MODE_XML) { -                ret = cli_xml_output_vol_replace_brick (rsp_dict, -                                                        rsp.op_ret, -                                                        rsp.op_errno, msg); -                if (ret) -                        gf_log ("cli", GF_LOG_ERROR, -                                "Error outputting to xml"); -                goto out; -        } - -        if (rsp.op_ret) -                cli_err ("volume replace-brick: failed: %s", msg); +            gf_log(frame->this->name, GF_LOG_ERROR, +                   "failed to " +                   "unserialize rsp buffer to dictionary"); +            goto out; +        } +    } + +    if (!strcmp(replace_op, "GF_REPLACE_OP_COMMIT_FORCE")) { +        if (rsp.op_ret || ret) +            rb_operation_str = gf_strdup( +                "replace-brick commit " +                "force operation failed");          else -                cli_out ("volume replace-brick: success: %s", msg); -        ret = rsp.op_ret; +            rb_operation_str = gf_strdup( +                "replace-brick commit " +                "force operation " +                "successful"); +    } else { +        gf_log(frame->this->name, GF_LOG_DEBUG, "Unknown operation"); +    } + +    if (rsp.op_ret && (strcmp(rsp.op_errstr, ""))) { +        rb_operation_str = gf_strdup(rsp.op_errstr); +    } + +    gf_log("cli", GF_LOG_INFO, "Received resp to replace brick"); +    snprintf(msg, sizeof(msg), "%s", +             rb_operation_str ? rb_operation_str : "Unknown operation"); + +    if (global_state->mode & GLUSTER_MODE_XML) { +        ret = cli_xml_output_vol_replace_brick(rsp_dict, rsp.op_ret, +                                               rsp.op_errno, msg); +        if (ret) +            gf_log("cli", GF_LOG_ERROR, "Error outputting to xml"); +        goto out; +    } + +    if (rsp.op_ret) +        cli_err("volume replace-brick: failed: %s", msg); +    else +        cli_out("volume replace-brick: success: %s", msg); +    ret = rsp.op_ret;  out: -        if (frame) -                frame->local = NULL; +    if (frame) +        frame->local = NULL; -        if (local) -                cli_local_wipe (local); +    if (local) +        cli_local_wipe(local); -        if (rb_operation_str) -                GF_FREE (rb_operation_str); +    if (rb_operation_str) +        GF_FREE(rb_operation_str); -        cli_cmd_broadcast_response (ret); -        free (rsp.dict.dict_val); -        if (rsp_dict) -                dict_unref (rsp_dict); +    cli_cmd_broadcast_response(ret); +    free(rsp.dict.dict_val); +    if (rsp_dict) +        dict_unref(rsp_dict); -        return ret; +    return ret;  } -  static int -gf_cli_log_rotate_cbk (struct rpc_req *req, struct iovec *iov, -                          int count, void *myframe) -{ -        gf_cli_rsp             rsp   = {0,}; -        int                    ret   = -1; -        char                   msg[1024] = {0,}; - -        GF_ASSERT (myframe); - -        if (-1 == req->rpc_status) { -                goto out; -        } - -        ret = xdr_to_generic (*iov, &rsp, (xdrproc_t)xdr_gf_cli_rsp); -        if (ret < 0) { -                gf_log (((call_frame_t *) myframe)->this->name, GF_LOG_ERROR, -                        "Failed to decode xdr response"); -                goto out; -        } - -        gf_log ("cli", GF_LOG_DEBUG, "Received resp to log rotate"); - -        if (rsp.op_ret && strcmp (rsp.op_errstr, "")) -                snprintf (msg, sizeof (msg), "%s", rsp.op_errstr); -        else -                snprintf (msg, sizeof (msg), "log rotate %s", -                          (rsp.op_ret) ? "unsuccessful": "successful"); - -        if (global_state->mode & GLUSTER_MODE_XML) { -                ret = cli_xml_output_str ("volLogRotate", msg, rsp.op_ret, -                                          rsp.op_errno, rsp.op_errstr); -                if (ret) -                        gf_log ("cli", GF_LOG_ERROR, -                                "Error outputting to xml"); -                goto out; -        } +gf_cli_log_rotate_cbk(struct rpc_req *req, struct iovec *iov, int count, +                      void *myframe) +{ +    gf_cli_rsp rsp = { +        0, +    }; +    int ret = -1; +    char msg[1024] = { +        0, +    }; + +    GF_ASSERT(myframe); + +    if (-1 == req->rpc_status) { +        goto out; +    } + +    ret = xdr_to_generic(*iov, &rsp, (xdrproc_t)xdr_gf_cli_rsp); +    if (ret < 0) { +        gf_log(((call_frame_t *)myframe)->this->name, GF_LOG_ERROR, +               "Failed to decode xdr response"); +        goto out; +    } + +    gf_log("cli", GF_LOG_DEBUG, "Received resp to log rotate"); + +    if (rsp.op_ret && strcmp(rsp.op_errstr, "")) +        snprintf(msg, sizeof(msg), "%s", rsp.op_errstr); +    else +        snprintf(msg, sizeof(msg), "log rotate %s", +                 (rsp.op_ret) ? "unsuccessful" : "successful"); + +    if (global_state->mode & GLUSTER_MODE_XML) { +        ret = cli_xml_output_str("volLogRotate", msg, rsp.op_ret, rsp.op_errno, +                                 rsp.op_errstr); +        if (ret) +            gf_log("cli", GF_LOG_ERROR, "Error outputting to xml"); +        goto out; +    } -        if (rsp.op_ret) -                cli_err ("volume log-rotate: failed: %s", msg); -        else -                cli_out ("volume log-rotate: success"); -        ret = rsp.op_ret; +    if (rsp.op_ret) +        cli_err("volume log-rotate: failed: %s", msg); +    else +        cli_out("volume log-rotate: success"); +    ret = rsp.op_ret;  out: -        cli_cmd_broadcast_response (ret); -        free (rsp.dict.dict_val); +    cli_cmd_broadcast_response(ret); +    free(rsp.dict.dict_val); -        return ret; +    return ret;  }  static int -gf_cli_sync_volume_cbk (struct rpc_req *req, struct iovec *iov, -                           int count, void *myframe) -{ -        gf_cli_rsp                     rsp   = {0,}; -        int                            ret   = -1; -        char                           msg[1024] = {0,}; - -        GF_ASSERT (myframe); - -        if (-1 == req->rpc_status) { -                goto out; -        } - -        ret = xdr_to_generic (*iov, &rsp, (xdrproc_t)xdr_gf_cli_rsp); -        if (ret < 0) { -                gf_log (((call_frame_t *) myframe)->this->name, GF_LOG_ERROR, -                        "Failed to decode xdr response"); -                goto out; -        } - -        gf_log ("cli", GF_LOG_DEBUG, "Received resp to sync"); - -        if (rsp.op_ret && strcmp (rsp.op_errstr, "")) -                snprintf (msg, sizeof (msg), "volume sync: failed: %s", -                          rsp.op_errstr); -        else -                snprintf (msg, sizeof (msg), "volume sync: %s", -                          (rsp.op_ret) ? "failed": "success"); - -        if (global_state->mode & GLUSTER_MODE_XML) { -                ret = cli_xml_output_str ("volSync", msg, rsp.op_ret, -                                          rsp.op_errno, rsp.op_errstr); -                if (ret) -                        gf_log ("cli", GF_LOG_ERROR, -                                "Error outputting to xml"); -                goto out; -        } +gf_cli_sync_volume_cbk(struct rpc_req *req, struct iovec *iov, int count, +                       void *myframe) +{ +    gf_cli_rsp rsp = { +        0, +    }; +    int ret = -1; +    char msg[1024] = { +        0, +    }; + +    GF_ASSERT(myframe); + +    if (-1 == req->rpc_status) { +        goto out; +    } + +    ret = xdr_to_generic(*iov, &rsp, (xdrproc_t)xdr_gf_cli_rsp); +    if (ret < 0) { +        gf_log(((call_frame_t *)myframe)->this->name, GF_LOG_ERROR, +               "Failed to decode xdr response"); +        goto out; +    } + +    gf_log("cli", GF_LOG_DEBUG, "Received resp to sync"); + +    if (rsp.op_ret && strcmp(rsp.op_errstr, "")) +        snprintf(msg, sizeof(msg), "volume sync: failed: %s", rsp.op_errstr); +    else +        snprintf(msg, sizeof(msg), "volume sync: %s", +                 (rsp.op_ret) ? "failed" : "success"); + +    if (global_state->mode & GLUSTER_MODE_XML) { +        ret = cli_xml_output_str("volSync", msg, rsp.op_ret, rsp.op_errno, +                                 rsp.op_errstr); +        if (ret) +            gf_log("cli", GF_LOG_ERROR, "Error outputting to xml"); +        goto out; +    } -        if (rsp.op_ret) -                cli_err ("%s", msg); -        else -                cli_out ("%s", msg); -        ret = rsp.op_ret; +    if (rsp.op_ret) +        cli_err("%s", msg); +    else +        cli_out("%s", msg); +    ret = rsp.op_ret;  out: -        cli_cmd_broadcast_response (ret); -        return ret; +    cli_cmd_broadcast_response(ret); +    return ret;  }  static int -print_quota_list_usage_output (cli_local_t *local, char *path, int64_t avail, -                               char *sl_str, quota_limits_t *limits, -                               quota_meta_t *used_space, gf_boolean_t sl, -                               gf_boolean_t hl, double sl_num, -                               gf_boolean_t limit_set) -{ -        int32_t         ret          = -1; -        char           *used_str     = NULL; -        char           *avail_str    = NULL; -        char           *hl_str       = NULL; -        char           *sl_val       = NULL; - -        used_str = gf_uint64_2human_readable (used_space->size); - -        if (limit_set) { -                hl_str = gf_uint64_2human_readable (limits->hl); -                avail_str = gf_uint64_2human_readable (avail); - -                sl_val = gf_uint64_2human_readable (sl_num); -        } - -        if (global_state->mode & GLUSTER_MODE_XML) { -                ret = cli_quota_xml_output (local, path, limits->hl, -                                            sl_str, sl_num, used_space->size, -                                            avail, sl ? "Yes" : "No", -                                            hl ? "Yes" : "No", limit_set); -                if (ret) { -                        gf_log ("cli", GF_LOG_ERROR, "Failed to " -                                "output in xml format for quota " -                                "list command"); -                } -                goto out; -        } - -        if (limit_set) { -                if (!used_str) { -                        cli_out ("%-40s %7s %7s(%s) %8"PRIu64 "%9"PRIu64"" -                                 "%15s %18s", path, hl_str, sl_str, sl_val, -                                 used_space->size, avail, -                                 sl ? "Yes" : "No", hl ? "Yes" : "No"); -                } else { -                        cli_out ("%-40s %7s %7s(%s) %8s %7s %15s %20s", -                                 path, hl_str, sl_str, sl_val, used_str, -                                 avail_str, sl ? "Yes" : "No", -                                 hl ? "Yes" : "No"); -                } +print_quota_list_usage_output(cli_local_t *local, char *path, int64_t avail, +                              char *sl_str, quota_limits_t *limits, +                              quota_meta_t *used_space, gf_boolean_t sl, +                              gf_boolean_t hl, double sl_num, +                              gf_boolean_t limit_set) +{ +    int32_t ret = -1; +    char *used_str = NULL; +    char *avail_str = NULL; +    char *hl_str = NULL; +    char *sl_val = NULL; + +    used_str = gf_uint64_2human_readable(used_space->size); + +    if (limit_set) { +        hl_str = gf_uint64_2human_readable(limits->hl); +        avail_str = gf_uint64_2human_readable(avail); + +        sl_val = gf_uint64_2human_readable(sl_num); +    } + +    if (global_state->mode & GLUSTER_MODE_XML) { +        ret = cli_quota_xml_output(local, path, limits->hl, sl_str, sl_num, +                                   used_space->size, avail, sl ? "Yes" : "No", +                                   hl ? "Yes" : "No", limit_set); +        if (ret) { +            gf_log("cli", GF_LOG_ERROR, +                   "Failed to " +                   "output in xml format for quota " +                   "list command"); +        } +        goto out; +    } + +    if (limit_set) { +        if (!used_str) { +            cli_out("%-40s %7s %7s(%s) %8" PRIu64 "%9" PRIu64 +                    "" +                    "%15s %18s", +                    path, hl_str, sl_str, sl_val, used_space->size, avail, +                    sl ? "Yes" : "No", hl ? "Yes" : "No");          } else { -                        cli_out ("%-36s %10s %10s %14s %9s %15s %18s", -                                 path, "N/A", "N/A", used_str, "N/A", -                                 "N/A", "N/A"); +            cli_out("%-40s %7s %7s(%s) %8s %7s %15s %20s", path, hl_str, sl_str, +                    sl_val, used_str, avail_str, sl ? "Yes" : "No", +                    hl ? "Yes" : "No");          } +    } else { +        cli_out("%-36s %10s %10s %14s %9s %15s %18s", path, "N/A", "N/A", +                used_str, "N/A", "N/A", "N/A"); +    } -        ret = 0; +    ret = 0;  out: -        GF_FREE (hl_str); -        GF_FREE (used_str); -        GF_FREE (avail_str); -        GF_FREE (sl_val); +    GF_FREE(hl_str); +    GF_FREE(used_str); +    GF_FREE(avail_str); +    GF_FREE(sl_val); -        return ret; +    return ret;  }  static int -print_quota_list_object_output (cli_local_t *local, char *path, int64_t avail, +print_quota_list_object_output(cli_local_t *local, char *path, int64_t avail,                                 char *sl_str, quota_limits_t *limits,                                 quota_meta_t *used_space, gf_boolean_t sl,                                 gf_boolean_t hl, double sl_num,                                 gf_boolean_t limit_set)  { -        int32_t         ret       = -1; -        int64_t         sl_val    = sl_num; +    int32_t ret = -1; +    int64_t sl_val = sl_num; -        if (global_state->mode & GLUSTER_MODE_XML) { -                ret = cli_quota_object_xml_output (local, path, sl_str, sl_val, -                                                   limits, used_space, avail, -                                                   sl ? "Yes" : "No", -                                                   hl ? "Yes" : "No", -                                                   limit_set); -                if (ret) { -                        gf_log ("cli", GF_LOG_ERROR, "Failed to " -                                "output in xml format for quota " -                                "list command"); -                } -                goto out; +    if (global_state->mode & GLUSTER_MODE_XML) { +        ret = cli_quota_object_xml_output(local, path, sl_str, sl_val, limits, +                                          used_space, avail, sl ? "Yes" : "No", +                                          hl ? "Yes" : "No", limit_set); +        if (ret) { +            gf_log("cli", GF_LOG_ERROR, +                   "Failed to " +                   "output in xml format for quota " +                   "list command");          } +        goto out; +    } -        if (limit_set) { -                cli_out ("%-40s %9"PRIu64" %9s(%"PRId64") %10"PRIu64"" -                         "%10"PRIu64" %11"PRIu64" %15s %20s", -                         path, limits->hl, sl_str, sl_val, -                         used_space->file_count, used_space->dir_count, -                         avail, sl ? "Yes" : "No", hl ? "Yes" : "No"); -        } else { -                cli_out ("%-40s %9s %9s %10"PRIu64" %10"PRIu64" %11s %15s %20s", -                         path, "N/A", "N/A", used_space->file_count, -                         used_space->dir_count, "N/A", "N/A", "N/A"); -        } -        ret = 0; +    if (limit_set) { +        cli_out("%-40s %9" PRIu64 " %9s(%" PRId64 ") %10" PRIu64 +                "" +                "%10" PRIu64 " %11" PRIu64 " %15s %20s", +                path, limits->hl, sl_str, sl_val, used_space->file_count, +                used_space->dir_count, avail, sl ? "Yes" : "No", +                hl ? "Yes" : "No"); +    } else { +        cli_out("%-40s %9s %9s %10" PRIu64 " %10" PRIu64 " %11s %15s %20s", +                path, "N/A", "N/A", used_space->file_count, +                used_space->dir_count, "N/A", "N/A", "N/A"); +    } +    ret = 0;  out: -        return ret; +    return ret;  }  static int -print_quota_list_output (cli_local_t *local, char *path, char *default_sl, -                         quota_limits_t *limits, quota_meta_t *used_space, -                         int type, gf_boolean_t limit_set) -{ -        int64_t         avail            = 0; -        char            percent_str[20]  = {0}; -        char           *sl_final         = NULL; -        int             ret              = -1; -        double          sl_num           = 0; -        gf_boolean_t    sl               = _gf_false; -        gf_boolean_t    hl               = _gf_false; -        int64_t         used_size        = 0; - -        GF_ASSERT (local); -        GF_ASSERT (path); - -        if (limit_set) { -                if (limits->sl < 0) { -                        ret = gf_string2percent (default_sl, &sl_num); -                        if (ret) { -                                gf_log ("cli", GF_LOG_ERROR, -                                        "could not convert default soft limit" -                                        " to percent"); -                                goto out; -                        } -                        sl_num = (sl_num * limits->hl) / 100; -                        sl_final = default_sl; -                } else { -                        sl_num = (limits->sl * limits->hl) / 100; -                        snprintf (percent_str, sizeof (percent_str), "%"PRIu64"%%", -                                        limits->sl); -                        sl_final = percent_str; -                } -                if (type == GF_QUOTA_OPTION_TYPE_LIST) -                        used_size = used_space->size; -                else -                        used_size = used_space->file_count + used_space->dir_count; - -                if (limits->hl > used_size) { -                        avail = limits->hl - used_size; -                        hl = _gf_false; -                        if (used_size > sl_num) -                                sl = _gf_true; -                        else -                                sl = _gf_false; -                } else { -                        avail = 0; -                        hl = sl = _gf_true; -                } +print_quota_list_output(cli_local_t *local, char *path, char *default_sl, +                        quota_limits_t *limits, quota_meta_t *used_space, +                        int type, gf_boolean_t limit_set) +{ +    int64_t avail = 0; +    char percent_str[20] = {0}; +    char *sl_final = NULL; +    int ret = -1; +    double sl_num = 0; +    gf_boolean_t sl = _gf_false; +    gf_boolean_t hl = _gf_false; +    int64_t used_size = 0; + +    GF_ASSERT(local); +    GF_ASSERT(path); + +    if (limit_set) { +        if (limits->sl < 0) { +            ret = gf_string2percent(default_sl, &sl_num); +            if (ret) { +                gf_log("cli", GF_LOG_ERROR, +                       "could not convert default soft limit" +                       " to percent"); +                goto out; +            } +            sl_num = (sl_num * limits->hl) / 100; +            sl_final = default_sl; +        } else { +            sl_num = (limits->sl * limits->hl) / 100; +            snprintf(percent_str, sizeof(percent_str), "%" PRIu64 "%%", +                     limits->sl); +            sl_final = percent_str;          } -          if (type == GF_QUOTA_OPTION_TYPE_LIST) -                ret = print_quota_list_usage_output (local, path, avail, -                                                     sl_final, limits, -                                                     used_space, sl, hl, -                                                     sl_num, limit_set); +            used_size = used_space->size;          else -                ret = print_quota_list_object_output (local, path, avail, -                                                      sl_final, limits, -                                                      used_space, sl, hl, -                                                      sl_num, limit_set); +            used_size = used_space->file_count + used_space->dir_count; + +        if (limits->hl > used_size) { +            avail = limits->hl - used_size; +            hl = _gf_false; +            if (used_size > sl_num) +                sl = _gf_true; +            else +                sl = _gf_false; +        } else { +            avail = 0; +            hl = sl = _gf_true; +        } +    } + +    if (type == GF_QUOTA_OPTION_TYPE_LIST) +        ret = print_quota_list_usage_output(local, path, avail, sl_final, +                                            limits, used_space, sl, hl, sl_num, +                                            limit_set); +    else +        ret = print_quota_list_object_output(local, path, avail, sl_final, +                                             limits, used_space, sl, hl, sl_num, +                                             limit_set);  out: -        return ret; +    return ret;  }  static int -print_quota_list_from_mountdir (cli_local_t *local, char *mountdir, -                                char *default_sl, char *path, int type) -{ -        int             ret              = -1; -        ssize_t         xattr_size       = 0; -        quota_limits_t  limits           = {0,}; -        quota_meta_t    used_space       = {0,}; -        char           *key              = NULL; -        gf_boolean_t    limit_set        = _gf_true; - -        GF_ASSERT (local); -        GF_ASSERT (mountdir); -        GF_ASSERT (path); - -        if (type == GF_QUOTA_OPTION_TYPE_LIST) -                key = QUOTA_LIMIT_KEY; -        else -                key = QUOTA_LIMIT_OBJECTS_KEY; - - -        ret = sys_lgetxattr (mountdir, key, (void *)&limits, sizeof (limits)); -        if (ret < 0) { -                gf_log ("cli", GF_LOG_ERROR, "Failed to get the xattr %s " -                        "on %s. Reason : %s", key, mountdir, strerror (errno)); - -                switch (errno) { +print_quota_list_from_mountdir(cli_local_t *local, char *mountdir, +                               char *default_sl, char *path, int type) +{ +    int ret = -1; +    ssize_t xattr_size = 0; +    quota_limits_t limits = { +        0, +    }; +    quota_meta_t used_space = { +        0, +    }; +    char *key = NULL; +    gf_boolean_t limit_set = _gf_true; + +    GF_ASSERT(local); +    GF_ASSERT(mountdir); +    GF_ASSERT(path); + +    if (type == GF_QUOTA_OPTION_TYPE_LIST) +        key = QUOTA_LIMIT_KEY; +    else +        key = QUOTA_LIMIT_OBJECTS_KEY; + +    ret = sys_lgetxattr(mountdir, key, (void *)&limits, sizeof(limits)); +    if (ret < 0) { +        gf_log("cli", GF_LOG_ERROR, +               "Failed to get the xattr %s " +               "on %s. Reason : %s", +               key, mountdir, strerror(errno)); + +        switch (errno) {  #if defined(ENODATA) -                case ENODATA: +            case ENODATA:  #endif  #if defined(ENOATTR) && (ENOATTR != ENODATA) -                case ENOATTR: +            case ENOATTR:  #endif -                        /* If it's an ENOATTR, quota/inode-quota is -                         * configured(limit is set at least for one directory). -                         * The user is trying to issue 'list/list-objects' -                         * command for a directory on which quota limit is -                         * not set and we are showing the used-space in case -                         * of list-usage and showing (dir_count, file_count) -                         * in case of list-objects. Other labels are -                         * shown "N/A". -                         */ - -                        limit_set = _gf_false; -                        goto enoattr; -                        break; - -                default: -                        cli_err ("%-40s %s", path, strerror (errno)); -                        break; -                } +                /* If it's an ENOATTR, quota/inode-quota is +                 * configured(limit is set at least for one directory). +                 * The user is trying to issue 'list/list-objects' +                 * command for a directory on which quota limit is +                 * not set and we are showing the used-space in case +                 * of list-usage and showing (dir_count, file_count) +                 * in case of list-objects. Other labels are +                 * shown "N/A". +                 */ -                goto out; +                limit_set = _gf_false; +                goto enoattr; +                break; + +            default: +                cli_err("%-40s %s", path, strerror(errno)); +                break;          } -        limits.hl = ntoh64 (limits.hl); -        limits.sl = ntoh64 (limits.sl); +        goto out; +    } + +    limits.hl = ntoh64(limits.hl); +    limits.sl = ntoh64(limits.sl);  enoattr: -        xattr_size = sys_lgetxattr (mountdir, QUOTA_SIZE_KEY, NULL, 0); -        if (xattr_size < (sizeof (int64_t) * 2) && -            type == GF_QUOTA_OPTION_TYPE_LIST_OBJECTS) { -                ret = -1; +    xattr_size = sys_lgetxattr(mountdir, QUOTA_SIZE_KEY, NULL, 0); +    if (xattr_size < (sizeof(int64_t) * 2) && +        type == GF_QUOTA_OPTION_TYPE_LIST_OBJECTS) { +        ret = -1; -                /* This can happen when glusterfs is upgraded from 3.6 to 3.7 -                 * and the xattr healing is not completed. -                 */ -        } else if (xattr_size > (sizeof (int64_t) * 2)) { -                ret = sys_lgetxattr (mountdir, QUOTA_SIZE_KEY, -                                     &used_space, sizeof (used_space)); -        } else if (xattr_size > 0) { -                /* This is for compatibility. -                 * Older version had only file usage -                 */ -                ret = sys_lgetxattr (mountdir, QUOTA_SIZE_KEY, -                             &(used_space.size), sizeof (used_space.size)); -                used_space.file_count = 0; -                used_space.dir_count = 0; -        } else { -                ret = -1; -        } +        /* This can happen when glusterfs is upgraded from 3.6 to 3.7 +         * and the xattr healing is not completed. +         */ +    } else if (xattr_size > (sizeof(int64_t) * 2)) { +        ret = sys_lgetxattr(mountdir, QUOTA_SIZE_KEY, &used_space, +                            sizeof(used_space)); +    } else if (xattr_size > 0) { +        /* This is for compatibility. +         * Older version had only file usage +         */ +        ret = sys_lgetxattr(mountdir, QUOTA_SIZE_KEY, &(used_space.size), +                            sizeof(used_space.size)); +        used_space.file_count = 0; +        used_space.dir_count = 0; +    } else { +        ret = -1; +    } -        if (ret < 0) { -                gf_log ("cli", GF_LOG_ERROR, "Failed to get quota size " -                        "on path %s: %s", mountdir, strerror (errno)); -                print_quota_list_empty (path, type); -                goto out; -        } +    if (ret < 0) { +        gf_log("cli", GF_LOG_ERROR, +               "Failed to get quota size " +               "on path %s: %s", +               mountdir, strerror(errno)); +        print_quota_list_empty(path, type); +        goto out; +    } -        used_space.size = ntoh64 (used_space.size); -        used_space.file_count = ntoh64 (used_space.file_count); -        used_space.dir_count = ntoh64 (used_space.dir_count); +    used_space.size = ntoh64(used_space.size); +    used_space.file_count = ntoh64(used_space.file_count); +    used_space.dir_count = ntoh64(used_space.dir_count); -        ret = print_quota_list_output (local, path, default_sl, &limits, -                                       &used_space, type, limit_set); +    ret = print_quota_list_output(local, path, default_sl, &limits, &used_space, +                                  type, limit_set);  out: -        return ret; +    return ret;  }  int -gluster_remove_auxiliary_mount (char *volname) +gluster_remove_auxiliary_mount(char *volname)  { -        int       ret                = -1; -        char      mountdir[PATH_MAX] = {0,}; -        xlator_t  *this               = NULL; +    int ret = -1; +    char mountdir[PATH_MAX] = { +        0, +    }; +    xlator_t *this = NULL; -        this = THIS; -        GF_ASSERT (this); +    this = THIS; +    GF_ASSERT(this); -        GLUSTERD_GET_QUOTA_LIST_MOUNT_PATH (mountdir, volname, "/"); -        ret = gf_umount_lazy (this->name, mountdir, 1); -        if (ret) { -                gf_log("cli", GF_LOG_ERROR, "umount on %s failed, " -                        "reason : %s", mountdir, strerror (errno)); -        } +    GLUSTERD_GET_QUOTA_LIST_MOUNT_PATH(mountdir, volname, "/"); +    ret = gf_umount_lazy(this->name, mountdir, 1); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, +               "umount on %s failed, " +               "reason : %s", +               mountdir, strerror(errno)); +    } -        return ret; +    return ret;  }  int -gf_cli_print_limit_list_from_dict (cli_local_t *local, char *volname, -                                   dict_t *dict, char *default_sl, int count, -                                   int op_ret, int op_errno, char *op_errstr) -{ -        int             ret                     = -1; -        int             i                       = 0; -        char            key[1024]               = {0,}; -        char            mountdir[PATH_MAX]      = {0,}; -        char            *path                   = NULL; -        int             type                    = -1; - -        if (!dict|| count <= 0) -                goto out; - -        ret = dict_get_int32 (dict, "type", &type); +gf_cli_print_limit_list_from_dict(cli_local_t *local, char *volname, +                                  dict_t *dict, char *default_sl, int count, +                                  int op_ret, int op_errno, char *op_errstr) +{ +    int ret = -1; +    int i = 0; +    char key[1024] = { +        0, +    }; +    char mountdir[PATH_MAX] = { +        0, +    }; +    char *path = NULL; +    int type = -1; + +    if (!dict || count <= 0) +        goto out; + +    ret = dict_get_int32(dict, "type", &type); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, "Failed to get quota type"); +        goto out; +    } + +    if (global_state->mode & GLUSTER_MODE_XML) { +        ret = cli_xml_output_vol_quota_limit_list_begin(local, op_ret, op_errno, +                                                        op_errstr);          if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Failed to get quota type"); -                goto out; +            gf_log("cli", GF_LOG_ERROR, "Error outputting xml begin"); +            goto out;          } +    } else { +        print_quota_list_header(type); +    } -        if (global_state->mode & GLUSTER_MODE_XML) { -                ret = cli_xml_output_vol_quota_limit_list_begin -                                (local, op_ret, op_errno, op_errstr); -                if (ret) { -                        gf_log ("cli", GF_LOG_ERROR, -                                "Error outputting xml begin"); -                        goto out; -                } -        } else { -                print_quota_list_header (type); -        } - -        while (count--) { -                snprintf (key, sizeof (key), "path%d", i++); - -                ret = dict_get_str (dict, key, &path); -                if (ret < 0) { -                        gf_log ("cli", GF_LOG_DEBUG, "Path not present in limit" -                                " list"); -                        continue; -                } +    while (count--) { +        snprintf(key, sizeof(key), "path%d", i++); -                ret = gf_canonicalize_path (path); -                if (ret) -                        goto out; -                GLUSTERD_GET_QUOTA_LIST_MOUNT_PATH (mountdir, volname, path); -                ret = print_quota_list_from_mountdir (local, mountdir, -                                                      default_sl, path, type); +        ret = dict_get_str(dict, key, &path); +        if (ret < 0) { +            gf_log("cli", GF_LOG_DEBUG, +                   "Path not present in limit" +                   " list"); +            continue;          } +        ret = gf_canonicalize_path(path); +        if (ret) +            goto out; +        GLUSTERD_GET_QUOTA_LIST_MOUNT_PATH(mountdir, volname, path); +        ret = print_quota_list_from_mountdir(local, mountdir, default_sl, path, +                                             type); +    } +  out: -        return ret; +    return ret;  }  int -print_quota_list_from_quotad (call_frame_t *frame, dict_t *rsp_dict) -{ -        char             *path          = NULL; -        char             *default_sl    = NULL; -        int              ret            = -1; -        cli_local_t     *local          = NULL; -        dict_t          *gd_rsp_dict    = NULL; -        quota_meta_t     used_space     = {0, }; -        quota_limits_t   limits         = {0, }; -        quota_limits_t  *size_limits    = NULL; -        int32_t          type           = 0; -        int32_t          success_count  = 0; - -        GF_ASSERT (frame); - -        local = frame->local; -        gd_rsp_dict = local->dict; - -        ret = dict_get_int32 (rsp_dict, "type", &type); +print_quota_list_from_quotad(call_frame_t *frame, dict_t *rsp_dict) +{ +    char *path = NULL; +    char *default_sl = NULL; +    int ret = -1; +    cli_local_t *local = NULL; +    dict_t *gd_rsp_dict = NULL; +    quota_meta_t used_space = { +        0, +    }; +    quota_limits_t limits = { +        0, +    }; +    quota_limits_t *size_limits = NULL; +    int32_t type = 0; +    int32_t success_count = 0; + +    GF_ASSERT(frame); + +    local = frame->local; +    gd_rsp_dict = local->dict; + +    ret = dict_get_int32(rsp_dict, "type", &type); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, "Failed to get type"); +        goto out; +    } + +    ret = dict_get_str(rsp_dict, GET_ANCESTRY_PATH_KEY, &path); +    if (ret) { +        gf_log("cli", GF_LOG_WARNING, +               "path key is not present " +               "in dict"); +        goto out; +    } + +    ret = dict_get_str(gd_rsp_dict, "default-soft-limit", &default_sl); +    if (ret) { +        gf_log(frame->this->name, GF_LOG_ERROR, +               "failed to " +               "get default soft limit"); +        goto out; +    } + +    if (type == GF_QUOTA_OPTION_TYPE_LIST) { +        ret = dict_get_bin(rsp_dict, QUOTA_LIMIT_KEY, (void **)&size_limits);          if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Failed to get type"); -                goto out; -        } - -        ret = dict_get_str (rsp_dict, GET_ANCESTRY_PATH_KEY, &path); -        if (ret) { -                gf_log ("cli", GF_LOG_WARNING, "path key is not present " -                        "in dict"); -                goto out; +            gf_log("cli", GF_LOG_WARNING, "limit key not present in dict on %s", +                   path); +            goto out;          } - -        ret = dict_get_str (gd_rsp_dict, "default-soft-limit", &default_sl); +    } else { +        ret = dict_get_bin(rsp_dict, QUOTA_LIMIT_OBJECTS_KEY, +                           (void **)&size_limits);          if (ret) { -                gf_log (frame->this->name, GF_LOG_ERROR, "failed to " -                        "get default soft limit"); -                goto out; -        } - -        if (type == GF_QUOTA_OPTION_TYPE_LIST) { -                ret = dict_get_bin (rsp_dict, QUOTA_LIMIT_KEY, -                                    (void **)&size_limits); -                if (ret) { -                        gf_log ("cli", GF_LOG_WARNING, -                                "limit key not present in dict on %s", -                                path); -                        goto out; -                } +            gf_log("cli", GF_LOG_WARNING, +                   "object limit key not present in dict on %s", path); +            goto out; +        } +    } + +    limits.hl = ntoh64(size_limits->hl); +    limits.sl = ntoh64(size_limits->sl); + +    if (type == GF_QUOTA_OPTION_TYPE_LIST) +        ret = quota_dict_get_meta(rsp_dict, QUOTA_SIZE_KEY, &used_space); +    else +        ret = quota_dict_get_inode_meta(rsp_dict, QUOTA_SIZE_KEY, &used_space); + +    if (ret < 0) { +        gf_log("cli", GF_LOG_WARNING, "size key not present in dict"); +        print_quota_list_empty(path, type); +        goto out; +    } + +    LOCK(&local->lock); +    { +        ret = dict_get_int32(gd_rsp_dict, "quota-list-success-count", +                             &success_count); +        if (ret) +            success_count = 0; + +        ret = dict_set_int32(gd_rsp_dict, "quota-list-success-count", +                             success_count + 1); +    } +    UNLOCK(&local->lock); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, +               "Failed to set " +               "quota-list-success-count in dict"); +        goto out; +    } + +    if (success_count == 0) { +        if (!(global_state->mode & GLUSTER_MODE_XML)) { +            print_quota_list_header(type);          } else { -                ret = dict_get_bin (rsp_dict, QUOTA_LIMIT_OBJECTS_KEY, -                                   (void **)&size_limits); -                if (ret) { -                        gf_log ("cli", GF_LOG_WARNING, -                                "object limit key not present in dict on %s", -                                path); -                        goto out; -                } -        } - -        limits.hl = ntoh64 (size_limits->hl); -        limits.sl = ntoh64 (size_limits->sl); - -        if (type == GF_QUOTA_OPTION_TYPE_LIST) -                ret = quota_dict_get_meta (rsp_dict, QUOTA_SIZE_KEY, -                                           &used_space); -        else -                ret = quota_dict_get_inode_meta (rsp_dict, QUOTA_SIZE_KEY, -                                                 &used_space); - -        if (ret < 0) { -                gf_log ("cli", GF_LOG_WARNING, -                        "size key not present in dict"); -                print_quota_list_empty (path, type); -                goto out; -        } - -        LOCK (&local->lock); -        { -                ret = dict_get_int32 (gd_rsp_dict, "quota-list-success-count", -                                      &success_count); -                if (ret) -                        success_count = 0; - -                ret = dict_set_int32 (gd_rsp_dict, -                                      "quota-list-success-count", -                                      success_count + 1); -        } -        UNLOCK (&local->lock); -        if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Failed to set " -                        "quota-list-success-count in dict"); +            ret = cli_xml_output_vol_quota_limit_list_begin(local, 0, 0, NULL); +            if (ret) { +                gf_log("cli", GF_LOG_ERROR, +                       "Error in " +                       "printing xml output");                  goto out; +            }          } +    } -        if (success_count == 0) { -                if (!(global_state->mode & GLUSTER_MODE_XML)) { -                        print_quota_list_header (type); -                } else { -                        ret = cli_xml_output_vol_quota_limit_list_begin -                                (local, 0, 0, NULL); -                        if (ret) { -                                gf_log ("cli", GF_LOG_ERROR, "Error in " -                                        "printing xml output"); -                                goto out; -                        } -                } -        } - -        ret = print_quota_list_output (local, path, default_sl, &limits, -                                       &used_space, type, _gf_true); +    ret = print_quota_list_output(local, path, default_sl, &limits, &used_space, +                                  type, _gf_true);  out: -        return ret; +    return ret;  } -void* -cli_cmd_broadcast_response_detached (void *opaque) +void * +cli_cmd_broadcast_response_detached(void *opaque)  { -        int32_t ret = 0; +    int32_t ret = 0; -        ret = (intptr_t) opaque; -        cli_cmd_broadcast_response (ret); +    ret = (intptr_t)opaque; +    cli_cmd_broadcast_response(ret); -        return NULL; +    return NULL;  }  int32_t -cli_quota_compare_path (struct list_head *list1, -                        struct list_head *list2) +cli_quota_compare_path(struct list_head *list1, struct list_head *list2)  { -        struct list_node  *node1  = NULL; -        struct list_node  *node2  = NULL; -        dict_t            *dict1  = NULL; -        dict_t            *dict2  = NULL; -        char              *path1  = NULL; -        char              *path2  = NULL; -        int                ret    = 0; +    struct list_node *node1 = NULL; +    struct list_node *node2 = NULL; +    dict_t *dict1 = NULL; +    dict_t *dict2 = NULL; +    char *path1 = NULL; +    char *path2 = NULL; +    int ret = 0; -        node1 = list_entry (list1, struct list_node, list); -        node2 = list_entry (list2, struct list_node, list); +    node1 = list_entry(list1, struct list_node, list); +    node2 = list_entry(list2, struct list_node, list); -        dict1 = node1->ptr; -        dict2 = node2->ptr; +    dict1 = node1->ptr; +    dict2 = node2->ptr; -        ret = dict_get_str (dict1, GET_ANCESTRY_PATH_KEY, &path1); -        if (ret < 0) -                return 0; +    ret = dict_get_str(dict1, GET_ANCESTRY_PATH_KEY, &path1); +    if (ret < 0) +        return 0; -        ret = dict_get_str (dict2, GET_ANCESTRY_PATH_KEY, &path2); -        if (ret < 0) -                return 0; +    ret = dict_get_str(dict2, GET_ANCESTRY_PATH_KEY, &path2); +    if (ret < 0) +        return 0; -        return strcmp (path1, path2); +    return strcmp(path1, path2);  }  int -cli_quotad_getlimit_cbk (struct rpc_req *req, struct iovec *iov, -                          int count, void *myframe) +cli_quotad_getlimit_cbk(struct rpc_req *req, struct iovec *iov, int count, +                        void *myframe)  {      /*TODO: we need to gather the path, hard-limit, soft-limit and used space*/ -        gf_cli_rsp         rsp         = {0,}; -        int                ret         = -1; -        dict_t            *dict        = NULL; -        struct list_node  *node        = NULL; -        struct list_node  *tmpnode     = NULL; -        call_frame_t      *frame       = NULL; -        cli_local_t       *local       = NULL; -        int32_t            list_count  = 0; -        pthread_t          th_id       = {0, }; -        int32_t            max_count   = 0; - -        GF_ASSERT (myframe); - -        frame = myframe; - -        GF_ASSERT (frame->local); - -        local = frame->local; - -        LOCK (&local->lock); -        { -                ret = dict_get_int32 (local->dict, "quota-list-count", -                                      &list_count); -                if (ret) -                        list_count = 0; - -                list_count++; -                ret = dict_set_int32 (local->dict, "quota-list-count", -                                      list_count); -        } -        UNLOCK (&local->lock); - -        if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Failed to set " -                        "quota-list-count in dict"); -                goto out; -        } - -        if (-1 == req->rpc_status) { -                if (list_count == 0) -                        cli_err ("Connection failed. Please check if quota " -                                 "daemon is operational."); -                ret = -1; -                goto out; -        } - -        ret = xdr_to_generic (*iov, &rsp, (xdrproc_t)xdr_gf_cli_rsp); -        if (ret < 0) { -                gf_log (frame->this->name, GF_LOG_ERROR, -                        "Failed to decode xdr response"); -                goto out; -        } - -        if (rsp.op_ret) { -                ret = -1; -                if (strcmp (rsp.op_errstr, "")) -                        cli_err ("quota command failed : %s", rsp.op_errstr); -                else -                        cli_err ("quota command : failed"); -                goto out; -        } - -        if (rsp.dict.dict_len) { -                /* Unserialize the dictionary */ -                dict  = dict_new (); - -                ret = dict_unserialize (rsp.dict.dict_val, -                                        rsp.dict.dict_len, -                                        &dict); -                if (ret < 0) { -                        gf_log ("cli", GF_LOG_ERROR, -                                "failed to " -                                "unserialize req-buffer to dictionary"); -                        goto out; -                } - -                node = list_node_add_order (dict, &local->dict_list, -                                            cli_quota_compare_path); -                if (node == NULL) { -                        gf_log ("cli", GF_LOG_ERROR, -                                "failed to add node to the list"); -                        dict_unref (dict); -                        goto out; -                } +    gf_cli_rsp rsp = { +        0, +    }; +    int ret = -1; +    dict_t *dict = NULL; +    struct list_node *node = NULL; +    struct list_node *tmpnode = NULL; +    call_frame_t *frame = NULL; +    cli_local_t *local = NULL; +    int32_t list_count = 0; +    pthread_t th_id = { +        0, +    }; +    int32_t max_count = 0; + +    GF_ASSERT(myframe); + +    frame = myframe; + +    GF_ASSERT(frame->local); + +    local = frame->local; + +    LOCK(&local->lock); +    { +        ret = dict_get_int32(local->dict, "quota-list-count", &list_count); +        if (ret) +            list_count = 0; + +        list_count++; +        ret = dict_set_int32(local->dict, "quota-list-count", list_count); +    } +    UNLOCK(&local->lock); + +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, +               "Failed to set " +               "quota-list-count in dict"); +        goto out; +    } + +    if (-1 == req->rpc_status) { +        if (list_count == 0) +            cli_err( +                "Connection failed. Please check if quota " +                "daemon is operational."); +        ret = -1; +        goto out; +    } + +    ret = xdr_to_generic(*iov, &rsp, (xdrproc_t)xdr_gf_cli_rsp); +    if (ret < 0) { +        gf_log(frame->this->name, GF_LOG_ERROR, +               "Failed to decode xdr response"); +        goto out; +    } + +    if (rsp.op_ret) { +        ret = -1; +        if (strcmp(rsp.op_errstr, "")) +            cli_err("quota command failed : %s", rsp.op_errstr); +        else +            cli_err("quota command : failed"); +        goto out; +    } -       } +    if (rsp.dict.dict_len) { +        /* Unserialize the dictionary */ +        dict = dict_new(); -        ret = dict_get_int32 (local->dict, "max_count", -                              &max_count); +        ret = dict_unserialize(rsp.dict.dict_val, rsp.dict.dict_len, &dict);          if (ret < 0) { -                gf_log ("cli", GF_LOG_ERROR, -                        "failed to get max_count"); -                goto out; +            gf_log("cli", GF_LOG_ERROR, +                   "failed to " +                   "unserialize req-buffer to dictionary"); +            goto out;          } -        if (list_count == max_count) { -                list_for_each_entry_safe (node, tmpnode, -                                          &local->dict_list, list) { -                        dict = node->ptr; -                        print_quota_list_from_quotad (frame, dict); -                        list_node_del (node); -                        dict_unref (dict); -                } +        node = list_node_add_order(dict, &local->dict_list, +                                   cli_quota_compare_path); +        if (node == NULL) { +            gf_log("cli", GF_LOG_ERROR, "failed to add node to the list"); +            dict_unref(dict); +            goto out;          } +    } +    ret = dict_get_int32(local->dict, "max_count", &max_count); +    if (ret < 0) { +        gf_log("cli", GF_LOG_ERROR, "failed to get max_count"); +        goto out; +    } +    if (list_count == max_count) { +        list_for_each_entry_safe(node, tmpnode, &local->dict_list, list) +        { +            dict = node->ptr; +            print_quota_list_from_quotad(frame, dict); +            list_node_del(node); +            dict_unref(dict); +        } +    } + +out: +    /* Bad Fix: CLI holds the lock to process a command. +     * When processing quota list command, below sequence of steps executed +     * in the same thread and causing deadlock +     * +     * 1) CLI holds the lock +     * 2) Send rpc_clnt_submit request to quotad for quota usage +     * 3) If quotad is down, rpc_clnt_submit invokes cbk function with error +     * 4) cbk function cli_quotad_getlimit_cbk invokes +     *    cli_cmd_broadcast_response which tries to hold lock to broadcast +     *    the results and hangs, because same thread has already holding +     *    the lock +     * +     * Broadcasting response in a separate thread which is not a +     * good fix. This needs to be re-visted with better solution +     */ +    if (ret == -1) { +        ret = pthread_create(&th_id, NULL, cli_cmd_broadcast_response_detached, +                             (void *)-1); +        if (ret) +            gf_log("cli", GF_LOG_ERROR, +                   "pthread_create failed: " +                   "%s", +                   strerror(errno)); +    } else { +        cli_cmd_broadcast_response(ret); +    } -out: -        /* Bad Fix: CLI holds the lock to process a command. -         * When processing quota list command, below sequence of steps executed -         * in the same thread and causing deadlock -         * -         * 1) CLI holds the lock -         * 2) Send rpc_clnt_submit request to quotad for quota usage -         * 3) If quotad is down, rpc_clnt_submit invokes cbk function with error -         * 4) cbk function cli_quotad_getlimit_cbk invokes -         *    cli_cmd_broadcast_response which tries to hold lock to broadcast -         *    the results and hangs, because same thread has already holding -         *    the lock -         * -         * Broadcasting response in a separate thread which is not a -         * good fix. This needs to be re-visted with better solution -         */ -        if (ret == -1) { -                ret = pthread_create (&th_id, NULL, -                                cli_cmd_broadcast_response_detached, -                                (void *)-1); -                if (ret) -                        gf_log ("cli", GF_LOG_ERROR, "pthread_create failed: " -                                "%s", strerror (errno)); -        } else { -                cli_cmd_broadcast_response (ret); -        } - -        free (rsp.dict.dict_val); -        return ret; +    free(rsp.dict.dict_val); +    return ret;  }  int -cli_quotad_getlimit (call_frame_t *frame, xlator_t *this, void *data) +cli_quotad_getlimit(call_frame_t *frame, xlator_t *this, void *data)  { -        gf_cli_req          req = {{0,}}; -        int                 ret = 0; -        dict_t             *dict = NULL; +    gf_cli_req req = {{ +        0, +    }}; +    int ret = 0; +    dict_t *dict = NULL; -        if (!frame || !this ||  !data) { -                ret = -1; -                goto out; -        } +    if (!frame || !this || !data) { +        ret = -1; +        goto out; +    } -        dict = data; -        ret = add_cli_cmd_timeout_to_dict (dict); +    dict = data; +    ret = add_cli_cmd_timeout_to_dict(dict); -        ret = dict_allocate_and_serialize (dict, &req.dict.dict_val, -                                           &req.dict.dict_len); -        if (ret < 0) { -                gf_log (this->name, GF_LOG_ERROR, -                        "failed to serialize the data"); +    ret = dict_allocate_and_serialize(dict, &req.dict.dict_val, +                                      &req.dict.dict_len); +    if (ret < 0) { +        gf_log(this->name, GF_LOG_ERROR, "failed to serialize the data"); -                goto out; -        } +        goto out; +    } -        ret = cli_cmd_submit (global_quotad_rpc, &req, frame, &cli_quotad_clnt, -                              GF_AGGREGATOR_GETLIMIT, NULL, -                              this, cli_quotad_getlimit_cbk, -                              (xdrproc_t) xdr_gf_cli_req); +    ret = cli_cmd_submit(global_quotad_rpc, &req, frame, &cli_quotad_clnt, +                         GF_AGGREGATOR_GETLIMIT, NULL, this, +                         cli_quotad_getlimit_cbk, (xdrproc_t)xdr_gf_cli_req);  out: -        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); -        return ret; +    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret); +    return ret;  }  void -gf_cli_quota_list (cli_local_t *local, char *volname, dict_t *dict, -                   char *default_sl, int count, int op_ret, -                   int op_errno, char *op_errstr) +gf_cli_quota_list(cli_local_t *local, char *volname, dict_t *dict, +                  char *default_sl, int count, int op_ret, int op_errno, +                  char *op_errstr)  { -        GF_VALIDATE_OR_GOTO ("cli", volname, out); +    GF_VALIDATE_OR_GOTO("cli", volname, out); -        if (!connected) -                goto out; +    if (!connected) +        goto out; -        if (count > 0) -                gf_cli_print_limit_list_from_dict (local, volname, dict, -                                                   default_sl, count, op_ret, -                                                   op_errno, op_errstr); +    if (count > 0) +        gf_cli_print_limit_list_from_dict(local, volname, dict, default_sl, +                                          count, op_ret, op_errno, op_errstr);  out: -        return; +    return;  }  int -gf_cli_quota_cbk (struct rpc_req *req, struct iovec *iov, -                     int count, void *myframe) -{ -        gf_cli_rsp         rsp         = {0,}; -        int                ret         = -1; -        dict_t            *dict        = NULL; -        char              *volname     = NULL; -        int32_t            type        = 0; -        call_frame_t      *frame       = NULL; -        char              *default_sl  = NULL; -        cli_local_t       *local       = NULL; -        char              *default_sl_dup  = NULL; -        int32_t            entry_count      = 0; - -        GF_ASSERT (myframe); - -        if (-1 == req->rpc_status) { -                goto out; +gf_cli_quota_cbk(struct rpc_req *req, struct iovec *iov, int count, +                 void *myframe) +{ +    gf_cli_rsp rsp = { +        0, +    }; +    int ret = -1; +    dict_t *dict = NULL; +    char *volname = NULL; +    int32_t type = 0; +    call_frame_t *frame = NULL; +    char *default_sl = NULL; +    cli_local_t *local = NULL; +    char *default_sl_dup = NULL; +    int32_t entry_count = 0; + +    GF_ASSERT(myframe); + +    if (-1 == req->rpc_status) { +        goto out; +    } + +    frame = myframe; + +    GF_ASSERT(frame->local); + +    local = frame->local; + +    ret = xdr_to_generic(*iov, &rsp, (xdrproc_t)xdr_gf_cli_rsp); +    if (ret < 0) { +        gf_log(frame->this->name, GF_LOG_ERROR, +               "Failed to decode xdr response"); +        goto out; +    } + +    if (rsp.op_ret) { +        ret = -1; +        if (global_state->mode & GLUSTER_MODE_XML) +            goto xml_output; + +        if (strcmp(rsp.op_errstr, "")) { +            cli_err("quota command failed : %s", rsp.op_errstr); +            if (rsp.op_ret == -ENOENT) +                cli_err( +                    "please enter the path relative to " +                    "the volume"); +        } else { +            cli_err("quota command : failed");          } -        frame = myframe; - -        GF_ASSERT (frame->local); +        goto out; +    } -        local = frame->local; +    if (rsp.dict.dict_len) { +        /* Unserialize the dictionary */ +        dict = dict_new(); -        ret = xdr_to_generic (*iov, &rsp, (xdrproc_t)xdr_gf_cli_rsp); +        ret = dict_unserialize(rsp.dict.dict_val, rsp.dict.dict_len, &dict);          if (ret < 0) { -                gf_log (frame->this->name, GF_LOG_ERROR, -                        "Failed to decode xdr response"); -                goto out; -        } - -        if (rsp.op_ret) { -                ret = -1; -                if (global_state->mode & GLUSTER_MODE_XML) -                        goto xml_output; - -                if (strcmp (rsp.op_errstr, "")) { -                        cli_err ("quota command failed : %s", rsp.op_errstr); -                        if (rsp.op_ret == -ENOENT) -                                cli_err ("please enter the path relative to " -                                         "the volume"); -                } else { -                        cli_err ("quota command : failed"); -                } - -                goto out; -        } - -        if (rsp.dict.dict_len) { -                /* Unserialize the dictionary */ -                dict  = dict_new (); - -                ret = dict_unserialize (rsp.dict.dict_val, -                                        rsp.dict.dict_len, -                                        &dict); -                if (ret < 0) { -                        gf_log ("cli", GF_LOG_ERROR, -                                "failed to " -                                "unserialize req-buffer to dictionary"); -                        goto out; -                } +            gf_log("cli", GF_LOG_ERROR, +                   "failed to " +                   "unserialize req-buffer to dictionary"); +            goto out; +        } +    } + +    gf_log("cli", GF_LOG_DEBUG, "Received resp to quota command"); + +    ret = dict_get_str(dict, "volname", &volname); +    if (ret) +        gf_log(frame->this->name, GF_LOG_ERROR, "failed to get volname"); + +    ret = dict_get_str(dict, "default-soft-limit", &default_sl); +    if (ret) +        gf_log(frame->this->name, GF_LOG_TRACE, +               "failed to get " +               "default soft limit"); + +    // default-soft-limit is part of rsp_dict only iff we sent +    // GLUSTER_CLI_QUOTA with type being GF_QUOTA_OPTION_TYPE_LIST +    if (default_sl) { +        default_sl_dup = gf_strdup(default_sl); +        if (!default_sl_dup) { +            ret = -1; +            goto out; +        } +        ret = dict_set_dynstr(local->dict, "default-soft-limit", +                              default_sl_dup); +        if (ret) { +            gf_log(frame->this->name, GF_LOG_TRACE, +                   "failed to set default soft limit"); +            GF_FREE(default_sl_dup);          } +    } -        gf_log ("cli", GF_LOG_DEBUG, "Received resp to quota command"); +    ret = dict_get_int32(dict, "type", &type); +    if (ret) +        gf_log(frame->this->name, GF_LOG_TRACE, "failed to get type"); -        ret = dict_get_str (dict, "volname", &volname); -        if (ret) -                gf_log (frame->this->name, GF_LOG_ERROR, -                        "failed to get volname"); +    ret = dict_get_int32(dict, "count", &entry_count); +    if (ret) +        gf_log(frame->this->name, GF_LOG_TRACE, "failed to get count"); -        ret = dict_get_str (dict, "default-soft-limit", &default_sl); -        if (ret) -                gf_log (frame->this->name, GF_LOG_TRACE, "failed to get " -                        "default soft limit"); - -        // default-soft-limit is part of rsp_dict only iff we sent -        // GLUSTER_CLI_QUOTA with type being GF_QUOTA_OPTION_TYPE_LIST -        if (default_sl) { -                default_sl_dup = gf_strdup (default_sl); -                if (!default_sl_dup) { -                        ret = -1; -                        goto out; -                } -                ret = dict_set_dynstr (local->dict, "default-soft-limit", -                                       default_sl_dup); -                if (ret) { -                        gf_log (frame->this->name, GF_LOG_TRACE, -                                "failed to set default soft limit"); -                        GF_FREE (default_sl_dup); -                } -        } - -        ret = dict_get_int32 (dict, "type", &type); -        if (ret) -                gf_log (frame->this->name, GF_LOG_TRACE, -                        "failed to get type"); - -        ret = dict_get_int32 (dict, "count", &entry_count); -        if (ret) -                gf_log (frame->this->name, GF_LOG_TRACE, "failed to get count"); +    if ((type == GF_QUOTA_OPTION_TYPE_LIST) || +        (type == GF_QUOTA_OPTION_TYPE_LIST_OBJECTS)) { +        gf_cli_quota_list(local, volname, dict, default_sl, entry_count, +                          rsp.op_ret, rsp.op_errno, rsp.op_errstr); -        if ((type == GF_QUOTA_OPTION_TYPE_LIST) -            || (type == GF_QUOTA_OPTION_TYPE_LIST_OBJECTS)) { -                gf_cli_quota_list (local, volname, dict, default_sl, -                                   entry_count, rsp.op_ret, -                                   rsp.op_errno, rsp.op_errstr); - -                if (global_state->mode & GLUSTER_MODE_XML) { -                        ret = cli_xml_output_vol_quota_limit_list_end (local); -                        if (ret < 0) { -                                ret = -1; -                                gf_log ("cli", GF_LOG_ERROR, "Error in printing" -                                       " xml output"); -                        } -                        goto out; -                } +        if (global_state->mode & GLUSTER_MODE_XML) { +            ret = cli_xml_output_vol_quota_limit_list_end(local); +            if (ret < 0) { +                ret = -1; +                gf_log("cli", GF_LOG_ERROR, +                       "Error in printing" +                       " xml output"); +            } +            goto out;          } +    }  xml_output: -        if (global_state->mode & GLUSTER_MODE_XML) { -                ret = cli_xml_output_str ("volQuota", NULL, rsp.op_ret, -                                          rsp.op_errno, rsp.op_errstr); -                if (ret) -                        gf_log ("cli", GF_LOG_ERROR, -                                "Error outputting to xml"); -                goto out; -        } +    if (global_state->mode & GLUSTER_MODE_XML) { +        ret = cli_xml_output_str("volQuota", NULL, rsp.op_ret, rsp.op_errno, +                                 rsp.op_errstr); +        if (ret) +            gf_log("cli", GF_LOG_ERROR, "Error outputting to xml"); +        goto out; +    } -        if (!rsp.op_ret && type != GF_QUOTA_OPTION_TYPE_LIST -                        && type != GF_QUOTA_OPTION_TYPE_LIST_OBJECTS) -                cli_out ("volume quota : success"); +    if (!rsp.op_ret && type != GF_QUOTA_OPTION_TYPE_LIST && +        type != GF_QUOTA_OPTION_TYPE_LIST_OBJECTS) +        cli_out("volume quota : success"); -        ret = rsp.op_ret; +    ret = rsp.op_ret;  out: -        if ((type == GF_QUOTA_OPTION_TYPE_LIST) -            || (type == GF_QUOTA_OPTION_TYPE_LIST_OBJECTS)) { -                gluster_remove_auxiliary_mount (volname); -        } +    if ((type == GF_QUOTA_OPTION_TYPE_LIST) || +        (type == GF_QUOTA_OPTION_TYPE_LIST_OBJECTS)) { +        gluster_remove_auxiliary_mount(volname); +    } -        cli_cmd_broadcast_response (ret); -        if (dict) -                dict_unref (dict); +    cli_cmd_broadcast_response(ret); +    if (dict) +        dict_unref(dict); -        free (rsp.dict.dict_val); +    free(rsp.dict.dict_val); -        return ret; +    return ret;  }  int -gf_cli_getspec_cbk (struct rpc_req *req, struct iovec *iov, -                       int count, void *myframe) +gf_cli_getspec_cbk(struct rpc_req *req, struct iovec *iov, int count, +                   void *myframe)  { -        gf_getspec_rsp          rsp   = {0,}; -        int                     ret   = -1; -        char                   *spec  = NULL; +    gf_getspec_rsp rsp = { +        0, +    }; +    int ret = -1; +    char *spec = NULL; -        GF_ASSERT (myframe); +    GF_ASSERT(myframe); -        if (-1 == req->rpc_status) { -                goto out; -        } +    if (-1 == req->rpc_status) { +        goto out; +    } -        ret = xdr_to_generic (*iov, &rsp, (xdrproc_t)xdr_gf_getspec_rsp); -        if (ret < 0) { -                gf_log (((call_frame_t *) myframe)->this->name, GF_LOG_ERROR, -                        "Failed to decode xdr response"); -                goto out; -        } +    ret = xdr_to_generic(*iov, &rsp, (xdrproc_t)xdr_gf_getspec_rsp); +    if (ret < 0) { +        gf_log(((call_frame_t *)myframe)->this->name, GF_LOG_ERROR, +               "Failed to decode xdr response"); +        goto out; +    } -        if (rsp.op_ret == -1) { -                gf_log (((call_frame_t *) myframe)->this->name, GF_LOG_ERROR, -                        "getspec failed"); -                goto out; -        } +    if (rsp.op_ret == -1) { +        gf_log(((call_frame_t *)myframe)->this->name, GF_LOG_ERROR, +               "getspec failed"); +        goto out; +    } -        gf_log ("cli", GF_LOG_INFO, "Received resp to getspec"); +    gf_log("cli", GF_LOG_INFO, "Received resp to getspec"); -        spec = GF_MALLOC (rsp.op_ret + 1, cli_mt_char); -        if (!spec) { -                gf_log("", GF_LOG_ERROR, "out of memory"); -                goto out; -        } -        memcpy (spec, rsp.spec, rsp.op_ret); -        spec[rsp.op_ret] = '\0'; -        cli_out ("%s", spec); -        GF_FREE (spec); +    spec = GF_MALLOC(rsp.op_ret + 1, cli_mt_char); +    if (!spec) { +        gf_log("", GF_LOG_ERROR, "out of memory"); +        goto out; +    } +    memcpy(spec, rsp.spec, rsp.op_ret); +    spec[rsp.op_ret] = '\0'; +    cli_out("%s", spec); +    GF_FREE(spec); -        ret = 0; +    ret = 0;  out: -        cli_cmd_broadcast_response (ret); -        return ret; +    cli_cmd_broadcast_response(ret); +    return ret;  }  int -gf_cli_pmap_b2p_cbk (struct rpc_req *req, struct iovec *iov, -                        int count, void *myframe) +gf_cli_pmap_b2p_cbk(struct rpc_req *req, struct iovec *iov, int count, +                    void *myframe)  { -        pmap_port_by_brick_rsp rsp = {0,}; -        int                     ret   = -1; -        char                   *spec  = NULL; +    pmap_port_by_brick_rsp rsp = { +        0, +    }; +    int ret = -1; +    char *spec = NULL; -        GF_ASSERT (myframe); +    GF_ASSERT(myframe); -        if (-1 == req->rpc_status) { -                goto out; -        } +    if (-1 == req->rpc_status) { +        goto out; +    } -        ret = xdr_to_generic (*iov, &rsp, (xdrproc_t)xdr_pmap_port_by_brick_rsp); -        if (ret < 0) { -                gf_log (((call_frame_t *) myframe)->this->name, GF_LOG_ERROR, -                        "Failed to decode xdr response"); -                goto out; -        } +    ret = xdr_to_generic(*iov, &rsp, (xdrproc_t)xdr_pmap_port_by_brick_rsp); +    if (ret < 0) { +        gf_log(((call_frame_t *)myframe)->this->name, GF_LOG_ERROR, +               "Failed to decode xdr response"); +        goto out; +    } -        if (rsp.op_ret == -1) { -                gf_log (((call_frame_t *) myframe)->this->name, GF_LOG_ERROR, -                        "pump_b2p failed"); -                goto out; -        } +    if (rsp.op_ret == -1) { +        gf_log(((call_frame_t *)myframe)->this->name, GF_LOG_ERROR, +               "pump_b2p failed"); +        goto out; +    } -        gf_log ("cli", GF_LOG_INFO, "Received resp to pmap b2p"); +    gf_log("cli", GF_LOG_INFO, "Received resp to pmap b2p"); -        cli_out ("%d", rsp.port); -        GF_FREE (spec); +    cli_out("%d", rsp.port); +    GF_FREE(spec); -        ret = rsp.op_ret; +    ret = rsp.op_ret;  out: -        cli_cmd_broadcast_response (ret); -        return ret; +    cli_cmd_broadcast_response(ret); +    return ret;  } -  int32_t -gf_cli_probe (call_frame_t *frame, xlator_t *this, -                 void *data) +gf_cli_probe(call_frame_t *frame, xlator_t *this, void *data)  { -        gf_cli_req         req      = {{0,},}; -        int                ret      = 0; -        dict_t            *dict     = NULL; -        int                port     = 0; - -        if (!frame || !this ||  !data) { -                ret = -1; -                goto out; -        } - -        dict = data; - -        ret = dict_get_int32 (dict, "port", &port); -        if (ret) { -                ret = dict_set_int32 (dict, "port", CLI_GLUSTERD_PORT); -                if (ret) -                        goto out; -        } +    gf_cli_req req = { +        { +            0, +        }, +    }; +    int ret = 0; +    dict_t *dict = NULL; +    int port = 0; + +    if (!frame || !this || !data) { +        ret = -1; +        goto out; +    } + +    dict = data; + +    ret = dict_get_int32(dict, "port", &port); +    if (ret) { +        ret = dict_set_int32(dict, "port", CLI_GLUSTERD_PORT); +        if (ret) +            goto out; +    } -        ret = cli_to_glusterd (&req, frame, gf_cli_probe_cbk, -                               (xdrproc_t) xdr_gf_cli_req, dict, -                               GLUSTER_CLI_PROBE, this, cli_rpc_prog, NULL); +    ret = cli_to_glusterd(&req, frame, gf_cli_probe_cbk, +                          (xdrproc_t)xdr_gf_cli_req, dict, GLUSTER_CLI_PROBE, +                          this, cli_rpc_prog, NULL);  out: -        GF_FREE (req.dict.dict_val); -        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); +    GF_FREE(req.dict.dict_val); +    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret); -        return ret; +    return ret;  }  int32_t -gf_cli_deprobe (call_frame_t *frame, xlator_t *this, -                   void *data) +gf_cli_deprobe(call_frame_t *frame, xlator_t *this, void *data)  { -        gf_cli_req           req      = {{0,},}; -        int                  ret      = 0; -        dict_t              *dict     = NULL; -        int                  port     = 0; -        int                  flags    = 0; - -        if (!frame || !this ||  !data) { -                ret = -1; -                goto out; -        } - -        dict = data; -        ret = dict_get_int32 (dict, "port", &port); -        if (ret) { -                ret = dict_set_int32 (dict, "port", CLI_GLUSTERD_PORT); -                if (ret) -                        goto out; -        } +    gf_cli_req req = { +        { +            0, +        }, +    }; +    int ret = 0; +    dict_t *dict = NULL; +    int port = 0; +    int flags = 0; + +    if (!frame || !this || !data) { +        ret = -1; +        goto out; +    } + +    dict = data; +    ret = dict_get_int32(dict, "port", &port); +    if (ret) { +        ret = dict_set_int32(dict, "port", CLI_GLUSTERD_PORT); +        if (ret) +            goto out; +    } -        ret = dict_get_int32 (dict, "flags", &flags); -        if (ret) { -                ret = dict_set_int32 (dict, "flags", 0); -                if (ret) -                        goto out; -        } +    ret = dict_get_int32(dict, "flags", &flags); +    if (ret) { +        ret = dict_set_int32(dict, "flags", 0); +        if (ret) +            goto out; +    } -        ret = cli_to_glusterd (&req, frame, gf_cli_deprobe_cbk, -                               (xdrproc_t)xdr_gf_cli_req, dict, -                              GLUSTER_CLI_DEPROBE, this, cli_rpc_prog, NULL); +    ret = cli_to_glusterd(&req, frame, gf_cli_deprobe_cbk, +                          (xdrproc_t)xdr_gf_cli_req, dict, GLUSTER_CLI_DEPROBE, +                          this, cli_rpc_prog, NULL);  out: -        GF_FREE (req.dict.dict_val); -        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); +    GF_FREE(req.dict.dict_val); +    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret); -        return ret; +    return ret;  }  int32_t -gf_cli_list_friends (call_frame_t *frame, xlator_t *this, -                     void *data) +gf_cli_list_friends(call_frame_t *frame, xlator_t *this, void *data)  { -        gf1_cli_peer_list_req   req = {0,}; -        int                     ret = 0; -        unsigned long           flags = 0; +    gf1_cli_peer_list_req req = { +        0, +    }; +    int ret = 0; +    unsigned long flags = 0; -        if (!frame || !this) { -                ret = -1; -                goto out; -        } +    if (!frame || !this) { +        ret = -1; +        goto out; +    } -        GF_ASSERT (frame->local == NULL); +    GF_ASSERT(frame->local == NULL); -        flags = (long)data; -        req.flags = flags; -        frame->local = (void*)flags; -        ret = cli_cmd_submit (NULL, &req, frame, cli_rpc_prog, -                              GLUSTER_CLI_LIST_FRIENDS, NULL, -                              this, gf_cli_list_friends_cbk, -                              (xdrproc_t) xdr_gf1_cli_peer_list_req); +    flags = (long)data; +    req.flags = flags; +    frame->local = (void *)flags; +    ret = cli_cmd_submit( +        NULL, &req, frame, cli_rpc_prog, GLUSTER_CLI_LIST_FRIENDS, NULL, this, +        gf_cli_list_friends_cbk, (xdrproc_t)xdr_gf1_cli_peer_list_req);  out: -        if (ret && frame) { -                /* -                 * If everything goes fine, gf_cli_list_friends_cbk() -                 * [invoked through cli_cmd_submit()]resets the -                 * frame->local to NULL. In case cli_cmd_submit() -                 * fails in between, RESET frame->local here. -                 */ -                frame->local = NULL; -        } -        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); -        return ret; +    if (ret && frame) { +        /* +         * If everything goes fine, gf_cli_list_friends_cbk() +         * [invoked through cli_cmd_submit()]resets the +         * frame->local to NULL. In case cli_cmd_submit() +         * fails in between, RESET frame->local here. +         */ +        frame->local = NULL; +    } +    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret); +    return ret;  }  int32_t -gf_cli_get_state (call_frame_t *frame, xlator_t *this, void *data) +gf_cli_get_state(call_frame_t *frame, xlator_t *this, void *data)  { -        gf_cli_req              req =  {{0,},}; -        int                     ret = 0; -        dict_t                  *dict = NULL; +    gf_cli_req req = { +        { +            0, +        }, +    }; +    int ret = 0; +    dict_t *dict = NULL; -        if (!frame || !this ||  !data) { -                ret = -1; -                goto out; -        } +    if (!frame || !this || !data) { +        ret = -1; +        goto out; +    } -        dict = data; +    dict = data; -        ret = cli_to_glusterd (&req, frame, gf_cli_get_state_cbk, -                               (xdrproc_t) xdr_gf_cli_req, dict, -                               GLUSTER_CLI_GET_STATE, this, cli_rpc_prog, -                               NULL); +    ret = cli_to_glusterd(&req, frame, gf_cli_get_state_cbk, +                          (xdrproc_t)xdr_gf_cli_req, dict, +                          GLUSTER_CLI_GET_STATE, this, cli_rpc_prog, NULL);  out: -        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); +    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret); -        return ret; +    return ret;  }  int32_t -gf_cli_get_next_volume (call_frame_t *frame, xlator_t *this, -                           void *data) +gf_cli_get_next_volume(call_frame_t *frame, xlator_t *this, void *data)  { +    int ret = 0; +    cli_cmd_volume_get_ctx_t *ctx = NULL; +    cli_local_t *local = NULL; -        int                             ret = 0; -        cli_cmd_volume_get_ctx_t        *ctx = NULL; -        cli_local_t                     *local = NULL; +    if (!frame || !this || !data) { +        ret = -1; +        goto out; +    } -        if (!frame || !this || !data) { -                ret = -1; -                goto out; -        } +    ctx = data; +    local = frame->local; -        ctx = data; -        local = frame->local; - -        if (global_state->mode & GLUSTER_MODE_XML) { -                ret = cli_xml_output_vol_info_begin (local, 0, 0, ""); -                if (ret) { -                        gf_log ("cli", GF_LOG_ERROR, "Error outputting to xml"); -                        goto out; -                } +    if (global_state->mode & GLUSTER_MODE_XML) { +        ret = cli_xml_output_vol_info_begin(local, 0, 0, ""); +        if (ret) { +            gf_log("cli", GF_LOG_ERROR, "Error outputting to xml"); +            goto out;          } +    } -        ret = gf_cli_get_volume (frame, this, data); - +    ret = gf_cli_get_volume(frame, this, data); -        if (!local || !local->get_vol.volname) { -                if ((global_state->mode & GLUSTER_MODE_XML)) -                        goto end_xml; +    if (!local || !local->get_vol.volname) { +        if ((global_state->mode & GLUSTER_MODE_XML)) +            goto end_xml; -                cli_err ("No volumes present"); -                goto out; -        } +        cli_err("No volumes present"); +        goto out; +    } +    ctx->volname = local->get_vol.volname; +    while (ctx->volname) { +        ret = gf_cli_get_volume(frame, this, ctx); +        if (ret) +            goto out;          ctx->volname = local->get_vol.volname; - -        while (ctx->volname) { -                ret = gf_cli_get_volume (frame, this, ctx); -                if (ret) -                        goto out; -                ctx->volname = local->get_vol.volname; -        } +    }  end_xml: -        if (global_state->mode & GLUSTER_MODE_XML) { -                ret = cli_xml_output_vol_info_end (local); -                if (ret) -                        gf_log ("cli", GF_LOG_ERROR, "Error outputting to xml"); -        } +    if (global_state->mode & GLUSTER_MODE_XML) { +        ret = cli_xml_output_vol_info_end(local); +        if (ret) +            gf_log("cli", GF_LOG_ERROR, "Error outputting to xml"); +    }  out: -        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); -        return ret; +    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret); +    return ret;  }  int32_t -gf_cli_get_volume (call_frame_t *frame, xlator_t *this, -                      void *data) +gf_cli_get_volume(call_frame_t *frame, xlator_t *this, void *data)  { -        gf_cli_req                      req = {{0,}}; -        int                             ret = 0; -        cli_cmd_volume_get_ctx_t        *ctx = NULL; -        dict_t                          *dict = NULL; -        int32_t                         flags = 0; +    gf_cli_req req = {{ +        0, +    }}; +    int ret = 0; +    cli_cmd_volume_get_ctx_t *ctx = NULL; +    dict_t *dict = NULL; +    int32_t flags = 0; -        if (!frame || !this || !data) { -                ret = -1; -                goto out; -        } +    if (!frame || !this || !data) { +        ret = -1; +        goto out; +    } -        ctx = data; +    ctx = data; -        dict = dict_new (); -        if (!dict) -                goto out; +    dict = dict_new(); +    if (!dict) +        goto out; -        if (ctx->volname) { -                ret = dict_set_str (dict, "volname", ctx->volname); -                if (ret) -                        goto out; -        } +    if (ctx->volname) { +        ret = dict_set_str(dict, "volname", ctx->volname); +        if (ret) +            goto out; +    } -        flags = ctx->flags; -        ret = dict_set_int32 (dict, "flags", flags); -        if (ret) { -                gf_log (frame->this->name, GF_LOG_ERROR, "failed to set flags"); -                goto out; -        } +    flags = ctx->flags; +    ret = dict_set_int32(dict, "flags", flags); +    if (ret) { +        gf_log(frame->this->name, GF_LOG_ERROR, "failed to set flags"); +        goto out; +    } -        ret = dict_allocate_and_serialize (dict, &req.dict.dict_val, -                                           &req.dict.dict_len); -        if (ret) { -                gf_log (frame->this->name, GF_LOG_ERROR, -                        "failed to serialize dict"); -                goto out; -        } +    ret = dict_allocate_and_serialize(dict, &req.dict.dict_val, +                                      &req.dict.dict_len); +    if (ret) { +        gf_log(frame->this->name, GF_LOG_ERROR, "failed to serialize dict"); +        goto out; +    } -        ret = cli_cmd_submit (NULL, &req, frame, cli_rpc_prog, -                              GLUSTER_CLI_GET_VOLUME, NULL, -                              this, gf_cli_get_volume_cbk, -                              (xdrproc_t) xdr_gf_cli_req); +    ret = cli_cmd_submit(NULL, &req, frame, cli_rpc_prog, +                         GLUSTER_CLI_GET_VOLUME, NULL, this, +                         gf_cli_get_volume_cbk, (xdrproc_t)xdr_gf_cli_req);  out: -        if (dict) -                dict_unref (dict); +    if (dict) +        dict_unref(dict); -        GF_FREE (req.dict.dict_val); +    GF_FREE(req.dict.dict_val); -        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); -        return ret; +    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret); +    return ret;  }  int32_t -gf_cli3_1_uuid_get (call_frame_t *frame, xlator_t *this, -                      void *data) +gf_cli3_1_uuid_get(call_frame_t *frame, xlator_t *this, void *data)  { -        gf_cli_req                      req = {{0,}}; -        int                             ret = 0; -        dict_t                          *dict = NULL; +    gf_cli_req req = {{ +        0, +    }}; +    int ret = 0; +    dict_t *dict = NULL; -        if (!frame || !this || !data) { -                ret = -1; -                goto out; -        } +    if (!frame || !this || !data) { +        ret = -1; +        goto out; +    } -        dict = data; -        ret = cli_to_glusterd (&req, frame, gf_cli3_1_uuid_get_cbk, -                               (xdrproc_t)xdr_gf_cli_req, dict, -                               GLUSTER_CLI_UUID_GET, this, cli_rpc_prog, -                               NULL); +    dict = data; +    ret = cli_to_glusterd(&req, frame, gf_cli3_1_uuid_get_cbk, +                          (xdrproc_t)xdr_gf_cli_req, dict, GLUSTER_CLI_UUID_GET, +                          this, cli_rpc_prog, NULL);  out: -        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); -        return ret; +    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret); +    return ret;  }  int32_t -gf_cli3_1_uuid_reset (call_frame_t *frame, xlator_t *this, -                      void *data) +gf_cli3_1_uuid_reset(call_frame_t *frame, xlator_t *this, void *data)  { -        gf_cli_req                      req = {{0,}}; -        int                             ret = 0; -        dict_t                          *dict = NULL; +    gf_cli_req req = {{ +        0, +    }}; +    int ret = 0; +    dict_t *dict = NULL; -        if (!frame || !this || !data) { -                ret = -1; -                goto out; -        } +    if (!frame || !this || !data) { +        ret = -1; +        goto out; +    } -        dict = data; -        ret = cli_to_glusterd (&req, frame, gf_cli3_1_uuid_reset_cbk, -                               (xdrproc_t)xdr_gf_cli_req, dict, -                               GLUSTER_CLI_UUID_RESET, this, cli_rpc_prog, -                               NULL); +    dict = data; +    ret = cli_to_glusterd(&req, frame, gf_cli3_1_uuid_reset_cbk, +                          (xdrproc_t)xdr_gf_cli_req, dict, +                          GLUSTER_CLI_UUID_RESET, this, cli_rpc_prog, NULL);  out: -        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); -        return ret; +    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret); +    return ret;  }  int32_t -gf_cli_create_volume (call_frame_t *frame, xlator_t *this, -                         void *data) +gf_cli_create_volume(call_frame_t *frame, xlator_t *this, void *data)  { -        gf_cli_req              req = {{0,}}; -        int                     ret = 0; -        dict_t                  *dict = NULL; +    gf_cli_req req = {{ +        0, +    }}; +    int ret = 0; +    dict_t *dict = NULL; -        if (!frame || !this ||  !data) { -                ret = -1; -                goto out; -        } +    if (!frame || !this || !data) { +        ret = -1; +        goto out; +    } -        dict = data; +    dict = data; -        ret = cli_to_glusterd (&req, frame, gf_cli_create_volume_cbk, -                               (xdrproc_t) xdr_gf_cli_req, dict, -                               GLUSTER_CLI_CREATE_VOLUME, this, cli_rpc_prog, -                               NULL); +    ret = cli_to_glusterd(&req, frame, gf_cli_create_volume_cbk, +                          (xdrproc_t)xdr_gf_cli_req, dict, +                          GLUSTER_CLI_CREATE_VOLUME, this, cli_rpc_prog, NULL);  out: -        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); +    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret); -        GF_FREE (req.dict.dict_val); +    GF_FREE(req.dict.dict_val); -        return ret; +    return ret;  }  int32_t -gf_cli_delete_volume (call_frame_t *frame, xlator_t *this, -                         void *data) +gf_cli_delete_volume(call_frame_t *frame, xlator_t *this, void *data)  { -        gf_cli_req              req = {{0,}}; -        int                     ret = 0; -        dict_t                  *dict = NULL; +    gf_cli_req req = {{ +        0, +    }}; +    int ret = 0; +    dict_t *dict = NULL; -        if (!frame || !this ||  !data) { -                ret = -1; -                goto out; -        } +    if (!frame || !this || !data) { +        ret = -1; +        goto out; +    } -        dict = data; +    dict = data; -        ret = cli_to_glusterd (&req, frame, gf_cli_delete_volume_cbk, -                               (xdrproc_t) xdr_gf_cli_req, dict, -                               GLUSTER_CLI_DELETE_VOLUME, this, cli_rpc_prog, -                               NULL); +    ret = cli_to_glusterd(&req, frame, gf_cli_delete_volume_cbk, +                          (xdrproc_t)xdr_gf_cli_req, dict, +                          GLUSTER_CLI_DELETE_VOLUME, this, cli_rpc_prog, NULL);  out: -        GF_FREE (req.dict.dict_val); -        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); +    GF_FREE(req.dict.dict_val); +    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret); -        return ret; +    return ret;  }  int32_t -gf_cli_start_volume (call_frame_t *frame, xlator_t *this, -                         void *data) +gf_cli_start_volume(call_frame_t *frame, xlator_t *this, void *data)  { -        gf_cli_req              req = {{0,}}; -        int                     ret = 0; -        dict_t                  *dict = NULL; +    gf_cli_req req = {{ +        0, +    }}; +    int ret = 0; +    dict_t *dict = NULL; -        if (!frame || !this ||  !data) { -                ret = -1; -                goto out; -        } +    if (!frame || !this || !data) { +        ret = -1; +        goto out; +    } -        dict = data; +    dict = data; -        ret = cli_to_glusterd (&req, frame, gf_cli_start_volume_cbk, -                               (xdrproc_t) xdr_gf_cli_req, dict, -                               GLUSTER_CLI_START_VOLUME, this, cli_rpc_prog, -                               NULL); +    ret = cli_to_glusterd(&req, frame, gf_cli_start_volume_cbk, +                          (xdrproc_t)xdr_gf_cli_req, dict, +                          GLUSTER_CLI_START_VOLUME, this, cli_rpc_prog, NULL);  out: -        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); +    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret); -        return ret; +    return ret;  }  int32_t -gf_cli_stop_volume (call_frame_t *frame, xlator_t *this, -                         void *data) +gf_cli_stop_volume(call_frame_t *frame, xlator_t *this, void *data)  { -        gf_cli_req             req = {{0,}}; -        int                    ret = 0; -        dict_t                 *dict = data; +    gf_cli_req req = {{ +        0, +    }}; +    int ret = 0; +    dict_t *dict = data; -        if (!frame || !this ||  !data) { -                ret = -1; -                goto out; -        } +    if (!frame || !this || !data) { +        ret = -1; +        goto out; +    } -        dict = data; +    dict = data; -        ret = cli_to_glusterd (&req, frame, gf_cli_stop_volume_cbk, -                               (xdrproc_t) xdr_gf_cli_req, dict, -                               GLUSTER_CLI_STOP_VOLUME, this, cli_rpc_prog, -                               NULL); +    ret = cli_to_glusterd(&req, frame, gf_cli_stop_volume_cbk, +                          (xdrproc_t)xdr_gf_cli_req, dict, +                          GLUSTER_CLI_STOP_VOLUME, this, cli_rpc_prog, NULL);  out: -        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); +    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret); -        return ret; +    return ret;  }  int32_t -gf_cli_defrag_volume (call_frame_t *frame, xlator_t *this, -                         void *data) +gf_cli_defrag_volume(call_frame_t *frame, xlator_t *this, void *data)  { -        gf_cli_req              req     =  {{0,}}; -        int                     ret     = 0; -        dict_t                 *dict    = NULL; +    gf_cli_req req = {{ +        0, +    }}; +    int ret = 0; +    dict_t *dict = NULL; -        if (!frame || !this ||  !data) { -                ret = -1; -                goto out; -        } +    if (!frame || !this || !data) { +        ret = -1; +        goto out; +    } -        dict = data; +    dict = data; -        ret = cli_to_glusterd (&req, frame, gf_cli_defrag_volume_cbk, -                               (xdrproc_t) xdr_gf_cli_req, dict, -                               GLUSTER_CLI_DEFRAG_VOLUME, this, cli_rpc_prog, -                               NULL); +    ret = cli_to_glusterd(&req, frame, gf_cli_defrag_volume_cbk, +                          (xdrproc_t)xdr_gf_cli_req, dict, +                          GLUSTER_CLI_DEFRAG_VOLUME, this, cli_rpc_prog, NULL);  out: -        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); +    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret); -        return ret; +    return ret;  }  int32_t -gf_cli_rename_volume (call_frame_t *frame, xlator_t *this, -                         void *data) +gf_cli_rename_volume(call_frame_t *frame, xlator_t *this, void *data)  { -        gf_cli_req              req = {{0,}}; -        int                     ret = 0; -        dict_t                  *dict = NULL; +    gf_cli_req req = {{ +        0, +    }}; +    int ret = 0; +    dict_t *dict = NULL; -        if (!frame || !this ||  !data) { -                ret = -1; -                goto out; -        } - -        dict = data; +    if (!frame || !this || !data) { +        ret = -1; +        goto out; +    } -        ret = dict_allocate_and_serialize (dict, &req.dict.dict_val, -                                           &req.dict.dict_len); -        if (ret < 0) { -                gf_log (this->name, GF_LOG_ERROR, -                        "failed to serialize the data"); +    dict = data; -                goto out; -        } +    ret = dict_allocate_and_serialize(dict, &req.dict.dict_val, +                                      &req.dict.dict_len); +    if (ret < 0) { +        gf_log(this->name, GF_LOG_ERROR, "failed to serialize the data"); +        goto out; +    } -        ret = cli_cmd_submit (NULL, &req, frame, cli_rpc_prog, -                              GLUSTER_CLI_RENAME_VOLUME, NULL, -                              this, gf_cli_rename_volume_cbk, -                              (xdrproc_t) xdr_gf_cli_req); +    ret = cli_cmd_submit(NULL, &req, frame, cli_rpc_prog, +                         GLUSTER_CLI_RENAME_VOLUME, NULL, this, +                         gf_cli_rename_volume_cbk, (xdrproc_t)xdr_gf_cli_req);  out: -        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); +    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret); -        return ret; +    return ret;  }  int32_t -gf_cli_reset_volume (call_frame_t *frame, xlator_t *this, -                        void *data) +gf_cli_reset_volume(call_frame_t *frame, xlator_t *this, void *data)  { -        gf_cli_req              req =  {{0,} }; -        int                     ret = 0; -        dict_t                  *dict = NULL; +    gf_cli_req req = {{ +        0, +    }}; +    int ret = 0; +    dict_t *dict = NULL; -        if (!frame || !this ||  !data) { -                ret = -1; -                goto out; -        } +    if (!frame || !this || !data) { +        ret = -1; +        goto out; +    } -        dict = data; +    dict = data; -        ret = cli_to_glusterd (&req, frame, gf_cli_reset_volume_cbk, -                               (xdrproc_t) xdr_gf_cli_req, dict, -                               GLUSTER_CLI_RESET_VOLUME, this, cli_rpc_prog, -                               NULL); +    ret = cli_to_glusterd(&req, frame, gf_cli_reset_volume_cbk, +                          (xdrproc_t)xdr_gf_cli_req, dict, +                          GLUSTER_CLI_RESET_VOLUME, this, cli_rpc_prog, NULL);  out: -        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); -        return ret; +    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret); +    return ret;  }  int32_t -gf_cli_set_volume (call_frame_t *frame, xlator_t *this, -                         void *data) +gf_cli_set_volume(call_frame_t *frame, xlator_t *this, void *data)  { -        gf_cli_req              req =  {{0,} }; -        int                     ret = 0; -        dict_t                  *dict = NULL; +    gf_cli_req req = {{ +        0, +    }}; +    int ret = 0; +    dict_t *dict = NULL; -        if (!frame || !this ||  !data) { -                ret = -1; -                goto out; -        } +    if (!frame || !this || !data) { +        ret = -1; +        goto out; +    } -        dict = data; +    dict = data; -        ret = cli_to_glusterd (&req, frame, gf_cli_set_volume_cbk, -                               (xdrproc_t) xdr_gf_cli_req, dict, -                               GLUSTER_CLI_SET_VOLUME, this, cli_rpc_prog, -                               NULL); +    ret = cli_to_glusterd(&req, frame, gf_cli_set_volume_cbk, +                          (xdrproc_t)xdr_gf_cli_req, dict, +                          GLUSTER_CLI_SET_VOLUME, this, cli_rpc_prog, NULL);  out: -        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); +    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret); -        return ret; +    return ret;  }  int32_t -gf_cli_add_brick (call_frame_t *frame, xlator_t *this, -                         void *data) +gf_cli_add_brick(call_frame_t *frame, xlator_t *this, void *data)  { -        gf_cli_req              req =  {{0,} }; -        int                     ret = 0; -        dict_t                  *dict = NULL; -        char                    *volname = NULL; -        int32_t                 count = 0; +    gf_cli_req req = {{ +        0, +    }}; +    int ret = 0; +    dict_t *dict = NULL; +    char *volname = NULL; +    int32_t count = 0; -        if (!frame || !this ||  !data) { -                ret = -1; -                goto out; -        } +    if (!frame || !this || !data) { +        ret = -1; +        goto out; +    } -        dict = data; +    dict = data; -        ret = dict_get_str (dict, "volname", &volname); +    ret = dict_get_str(dict, "volname", &volname); -        if (ret) -                goto out; +    if (ret) +        goto out; -        ret = dict_get_int32 (dict, "count", &count); -        if (ret) -                goto out; +    ret = dict_get_int32(dict, "count", &count); +    if (ret) +        goto out; -        ret = cli_to_glusterd (&req, frame, gf_cli_add_brick_cbk, -                               (xdrproc_t) xdr_gf_cli_req, dict, -                               GLUSTER_CLI_ADD_BRICK, this, cli_rpc_prog, NULL); +    ret = cli_to_glusterd(&req, frame, gf_cli_add_brick_cbk, +                          (xdrproc_t)xdr_gf_cli_req, dict, +                          GLUSTER_CLI_ADD_BRICK, this, cli_rpc_prog, NULL);  out: -        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); +    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret); -        GF_FREE (req.dict.dict_val); +    GF_FREE(req.dict.dict_val); -        return ret; +    return ret;  }  int32_t -gf_cli_tier (call_frame_t *frame, xlator_t *this, -             void *data) +gf_cli_tier(call_frame_t *frame, xlator_t *this, void *data)  { -        int                     ret = 0; -        int32_t                 command = 0; -        gf_cli_req              req =  { {0,} }; -        dict_t                  *dict = NULL; +    int ret = 0; +    int32_t command = 0; +    gf_cli_req req = {{ +        0, +    }}; +    dict_t *dict = NULL; -        if (!frame || !this || !data) { -                ret = -1; -                goto out; -        } -        dict = data; +    if (!frame || !this || !data) { +        ret = -1; +        goto out; +    } +    dict = data; -        ret = dict_get_int32 (dict, "rebalance-command", &command); -        if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Failed to get rebalance-command"); -                goto out; -        } +    ret = dict_get_int32(dict, "rebalance-command", &command); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, "Failed to get rebalance-command"); +        goto out; +    } -        ret = cli_to_glusterd (&req, frame, gf_cli_defrag_volume_cbk, -                                (xdrproc_t) xdr_gf_cli_req, dict, -                                GLUSTER_CLI_TIER, this, cli_rpc_prog, -                                NULL); +    ret = cli_to_glusterd(&req, frame, gf_cli_defrag_volume_cbk, +                          (xdrproc_t)xdr_gf_cli_req, dict, GLUSTER_CLI_TIER, +                          this, cli_rpc_prog, NULL);  out: -        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); +    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret); -        GF_FREE (req.dict.dict_val); +    GF_FREE(req.dict.dict_val); -        return ret; +    return ret;  }  int32_t -gf_cli_add_tier_brick (call_frame_t *frame, xlator_t *this, -                       void *data) +gf_cli_add_tier_brick(call_frame_t *frame, xlator_t *this, void *data)  { -        gf_cli_req              req             = { {0,} }; -        int                     ret             = 0; -        dict_t                  *dict           = NULL; +    gf_cli_req req = {{ +        0, +    }}; +    int ret = 0; +    dict_t *dict = NULL; -        if (!frame || !this ||  !data) { -                ret = -1; -                goto out; -        } +    if (!frame || !this || !data) { +        ret = -1; +        goto out; +    } -        dict = data; +    dict = data; -        ret = cli_to_glusterd (&req, frame, gf_cli_add_tier_brick_cbk, -                               (xdrproc_t) xdr_gf_cli_req, dict, -                               GLUSTER_CLI_ADD_TIER_BRICK, this, -                               cli_rpc_prog, NULL); -        if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Failed to send request to " -                        "glusterd"); -                goto out; -        } +    ret = cli_to_glusterd(&req, frame, gf_cli_add_tier_brick_cbk, +                          (xdrproc_t)xdr_gf_cli_req, dict, +                          GLUSTER_CLI_ADD_TIER_BRICK, this, cli_rpc_prog, NULL); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, +               "Failed to send request to " +               "glusterd"); +        goto out; +    }  out: -        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); +    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret); -        GF_FREE (req.dict.dict_val); -        return ret; +    GF_FREE(req.dict.dict_val); +    return ret;  } -  int32_t -gf_cli_attach_tier (call_frame_t *frame, xlator_t *this, -                    void *data) -{ -        gf_cli_req              req             =  {{0,} }; -        int                     ret             = 0; -        dict_t                  *dict           = NULL; -        dict_t                  *newdict        = NULL; -        char                    *tierwords[]    = {"volume", "tier", "", -                                                   "start", NULL}; -        const char              **words         = (const char **)tierwords; -        char                    *volname        = NULL; -        cli_local_t             *local          = NULL; -        cli_local_t             *oldlocal       = NULL; - -        if (!frame || !this ||  !data) { -                ret = -1; -                goto out; -        } - -        dict = data; - -        ret = cli_to_glusterd (&req, frame, gf_cli_attach_tier_cbk, -                               (xdrproc_t) xdr_gf_cli_req, dict, -                               GLUSTER_CLI_ATTACH_TIER, this, -                               cli_rpc_prog, NULL); -        if (ret) -                goto out; -        ret = dict_get_str (dict, "volname", &volname); -        if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Failed to get volume name"); -                goto notify_cli; -        } - -        words[2] = volname; -        ret = cli_cmd_volume_old_tier_parse ((const char **)words, -                                             4, &newdict); -        if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Failed to parse tier start " -                        "command"); -                goto notify_cli; -        } - -        gf_log ("cli", GF_LOG_DEBUG, "Sending tier start"); - -        oldlocal = frame->local; -        CLI_LOCAL_INIT (local, words, frame, newdict); -        ret = gf_cli_tier (frame, this, newdict); -        frame->local = oldlocal; -        cli_local_wipe (local); +gf_cli_attach_tier(call_frame_t *frame, xlator_t *this, void *data) +{ +    gf_cli_req req = {{ +        0, +    }}; +    int ret = 0; +    dict_t *dict = NULL; +    dict_t *newdict = NULL; +    char *tierwords[] = {"volume", "tier", "", "start", NULL}; +    const char **words = (const char **)tierwords; +    char *volname = NULL; +    cli_local_t *local = NULL; +    cli_local_t *oldlocal = NULL; + +    if (!frame || !this || !data) { +        ret = -1; +        goto out; +    } + +    dict = data; + +    ret = cli_to_glusterd(&req, frame, gf_cli_attach_tier_cbk, +                          (xdrproc_t)xdr_gf_cli_req, dict, +                          GLUSTER_CLI_ATTACH_TIER, this, cli_rpc_prog, NULL); +    if (ret) +        goto out; +    ret = dict_get_str(dict, "volname", &volname); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, "Failed to get volume name"); +        goto notify_cli; +    } + +    words[2] = volname; +    ret = cli_cmd_volume_old_tier_parse((const char **)words, 4, &newdict); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, +               "Failed to parse tier start " +               "command"); +        goto notify_cli; +    } + +    gf_log("cli", GF_LOG_DEBUG, "Sending tier start"); + +    oldlocal = frame->local; +    CLI_LOCAL_INIT(local, words, frame, newdict); +    ret = gf_cli_tier(frame, this, newdict); +    frame->local = oldlocal; +    cli_local_wipe(local);  notify_cli: -        if (ret) { -                cli_out ("Failed to run tier start. Please execute tier start " -                         "command explicitly"); -                cli_out ("Usage : gluster volume tier <volname> start"); -        } +    if (ret) { +        cli_out( +            "Failed to run tier start. Please execute tier start " +            "command explicitly"); +        cli_out("Usage : gluster volume tier <volname> start"); +    }  out: -        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); +    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret); -        GF_FREE (req.dict.dict_val); -        return ret; +    GF_FREE(req.dict.dict_val); +    return ret;  }  int32_t -gf_cli_remove_tier_brick (call_frame_t *frame, xlator_t *this, -                    void *data) +gf_cli_remove_tier_brick(call_frame_t *frame, xlator_t *this, void *data)  { -        gf_cli_req                status_req = { {0,} }; -        int                       ret = 0; -        dict_t                   *dict = NULL; -        int32_t                   command = 0; -        char                     *volname = NULL; +    gf_cli_req status_req = {{ +        0, +    }}; +    int ret = 0; +    dict_t *dict = NULL; +    int32_t command = 0; +    char *volname = NULL; -        if (!frame || !this ||  !data) { -                ret = -1; -                goto out; -        } +    if (!frame || !this || !data) { +        ret = -1; +        goto out; +    } -        dict = data; +    dict = data; -        ret = dict_get_str (dict, "volname", &volname); -        if (ret) -                goto out; +    ret = dict_get_str(dict, "volname", &volname); +    if (ret) +        goto out; -        ret = dict_get_int32 (dict, "command", &command); -        if (ret) -                goto out; +    ret = dict_get_int32(dict, "command", &command); +    if (ret) +        goto out; -        ret = dict_set_int32 (dict, "rebalance-command", (int32_t) command); -        if (ret) { -                gf_log (this->name, GF_LOG_ERROR, -                                "Failed to set dict"); -                goto out; -        } +    ret = dict_set_int32(dict, "rebalance-command", (int32_t)command); +    if (ret) { +        gf_log(this->name, GF_LOG_ERROR, "Failed to set dict"); +        goto out; +    } -        ret = cli_to_glusterd (&status_req, frame, -                        gf_cli_remove_tier_brick_cbk, -                        (xdrproc_t) xdr_gf_cli_req, dict, -                        GLUSTER_CLI_TIER, this, -                        cli_rpc_prog, NULL); +    ret = cli_to_glusterd(&status_req, frame, gf_cli_remove_tier_brick_cbk, +                          (xdrproc_t)xdr_gf_cli_req, dict, GLUSTER_CLI_TIER, +                          this, cli_rpc_prog, NULL);  out: -        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); +    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret); -        GF_FREE (status_req.dict.dict_val); +    GF_FREE(status_req.dict.dict_val); -        return ret; +    return ret;  }  int32_t -gf_cli_remove_brick (call_frame_t *frame, xlator_t *this, -                     void *data) -{ -        gf_cli_req                req =  {{0,}};; -        gf_cli_req                status_req =  {{0,}};; -        int                       ret = 0; -        dict_t                   *dict = NULL; -        int32_t                   command = 0; -        char                     *volname = NULL; -        int32_t                   cmd = 0; - -        if (!frame || !this ||  !data) { -                ret = -1; -                goto out; -        } - -        dict = data; - -        ret = dict_get_str (dict, "volname", &volname); -        if (ret) -                goto out; - -        ret = dict_get_int32 (dict, "command", &command); -        if (ret) -                goto out; - -        if ((command != GF_OP_CMD_STATUS) && -            (command != GF_OP_CMD_STOP)) { - - -                ret = cli_to_glusterd (&req, frame, gf_cli_remove_brick_cbk, -                                       (xdrproc_t) xdr_gf_cli_req, dict, -                                       GLUSTER_CLI_REMOVE_BRICK, this, -                                       cli_rpc_prog, NULL); -        } else { -                /* Need rebalance status to be sent :-) */ -                if (command == GF_OP_CMD_STATUS) -                        cmd |= GF_DEFRAG_CMD_STATUS; -                else -                        cmd |= GF_DEFRAG_CMD_STOP; - -                ret = dict_set_int32 (dict, "rebalance-command", (int32_t) cmd); -                if (ret) { -                        gf_log (this->name, GF_LOG_ERROR, -                                "Failed to set dict"); -                        goto out; -                } +gf_cli_remove_brick(call_frame_t *frame, xlator_t *this, void *data) +{ +    gf_cli_req req = {{ +        0, +    }}; +    ; +    gf_cli_req status_req = {{ +        0, +    }}; +    ; +    int ret = 0; +    dict_t *dict = NULL; +    int32_t command = 0; +    char *volname = NULL; +    int32_t cmd = 0; + +    if (!frame || !this || !data) { +        ret = -1; +        goto out; +    } + +    dict = data; + +    ret = dict_get_str(dict, "volname", &volname); +    if (ret) +        goto out; + +    ret = dict_get_int32(dict, "command", &command); +    if (ret) +        goto out; + +    if ((command != GF_OP_CMD_STATUS) && (command != GF_OP_CMD_STOP)) { +        ret = cli_to_glusterd( +            &req, frame, gf_cli_remove_brick_cbk, (xdrproc_t)xdr_gf_cli_req, +            dict, GLUSTER_CLI_REMOVE_BRICK, this, cli_rpc_prog, NULL); +    } else { +        /* Need rebalance status to be sent :-) */ +        if (command == GF_OP_CMD_STATUS) +            cmd |= GF_DEFRAG_CMD_STATUS; +        else +            cmd |= GF_DEFRAG_CMD_STOP; -                ret = cli_to_glusterd (&status_req, frame, -                                       gf_cli3_remove_brick_status_cbk, -                                       (xdrproc_t) xdr_gf_cli_req, dict, -                                       GLUSTER_CLI_DEFRAG_VOLUME, this, -                                       cli_rpc_prog, NULL); +        ret = dict_set_int32(dict, "rebalance-command", (int32_t)cmd); +        if (ret) { +            gf_log(this->name, GF_LOG_ERROR, "Failed to set dict"); +            goto out; +        } -                } +        ret = cli_to_glusterd( +            &status_req, frame, gf_cli3_remove_brick_status_cbk, +            (xdrproc_t)xdr_gf_cli_req, dict, GLUSTER_CLI_DEFRAG_VOLUME, this, +            cli_rpc_prog, NULL); +    }  out: -        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); +    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret); -        GF_FREE (req.dict.dict_val); +    GF_FREE(req.dict.dict_val); -        GF_FREE (status_req.dict.dict_val); +    GF_FREE(status_req.dict.dict_val); -        return ret; +    return ret;  }  int32_t -gf_cli_reset_brick (call_frame_t *frame, xlator_t *this, void *data) -{ -        gf_cli_req                  req        =  { {0,} }; -        int                         ret        = 0; -        dict_t                     *dict       = NULL; -        char                       *dst_brick  = NULL; -        char                       *src_brick  = NULL; -        char                       *volname    = NULL; -        char                       *op         = NULL; - -        if (!frame || !this ||  !data) { -                ret = -1; -                goto out; -        } - -        dict = data; - -        ret = dict_get_str (dict, "operation", &op); -        if (ret) { -                gf_log (this->name, GF_LOG_DEBUG, -                        "dict_get on operation failed"); -                goto out; -        } - -        ret = dict_get_str (dict, "volname", &volname); +gf_cli_reset_brick(call_frame_t *frame, xlator_t *this, void *data) +{ +    gf_cli_req req = {{ +        0, +    }}; +    int ret = 0; +    dict_t *dict = NULL; +    char *dst_brick = NULL; +    char *src_brick = NULL; +    char *volname = NULL; +    char *op = NULL; + +    if (!frame || !this || !data) { +        ret = -1; +        goto out; +    } + +    dict = data; + +    ret = dict_get_str(dict, "operation", &op); +    if (ret) { +        gf_log(this->name, GF_LOG_DEBUG, "dict_get on operation failed"); +        goto out; +    } + +    ret = dict_get_str(dict, "volname", &volname); +    if (ret) { +        gf_log(this->name, GF_LOG_DEBUG, "dict_get on volname failed"); +        goto out; +    } + +    ret = dict_get_str(dict, "src-brick", &src_brick); +    if (ret) { +        gf_log(this->name, GF_LOG_DEBUG, "dict_get on src-brick failed"); +        goto out; +    } + +    if (!strcmp(op, "GF_RESET_OP_COMMIT") || +        !strcmp(op, "GF_RESET_OP_COMMIT_FORCE")) { +        ret = dict_get_str(dict, "dst-brick", &dst_brick);          if (ret) { -                gf_log (this->name, GF_LOG_DEBUG, -                        "dict_get on volname failed"); -                goto out; +            gf_log(this->name, GF_LOG_DEBUG, "dict_get on dst-brick failed"); +            goto out;          } +    } -        ret = dict_get_str (dict, "src-brick", &src_brick); -        if (ret) { -                gf_log (this->name, GF_LOG_DEBUG, -                        "dict_get on src-brick failed"); -                goto out; -        } +    gf_log(this->name, GF_LOG_DEBUG, "Received command reset-brick %s on %s.", +           op, src_brick); -        if (!strcmp (op, "GF_RESET_OP_COMMIT") || -            !strcmp (op, "GF_RESET_OP_COMMIT_FORCE")) { -                ret = dict_get_str (dict, "dst-brick", &dst_brick); -                if (ret) { -                        gf_log (this->name, GF_LOG_DEBUG, -                                "dict_get on dst-brick failed"); -                        goto out; -                } -        } - -        gf_log (this->name, GF_LOG_DEBUG, -                "Received command reset-brick %s on %s.", op, src_brick); - -        ret = cli_to_glusterd (&req, frame, gf_cli_reset_brick_cbk, -                               (xdrproc_t) xdr_gf_cli_req, dict, -                               GLUSTER_CLI_RESET_BRICK, this, cli_rpc_prog, -                               NULL); +    ret = cli_to_glusterd(&req, frame, gf_cli_reset_brick_cbk, +                          (xdrproc_t)xdr_gf_cli_req, dict, +                          GLUSTER_CLI_RESET_BRICK, this, cli_rpc_prog, NULL);  out: -        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); +    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret); -        GF_FREE (req.dict.dict_val); +    GF_FREE(req.dict.dict_val); -        return ret; +    return ret;  }  int32_t -gf_cli_replace_brick (call_frame_t *frame, xlator_t *this, -                      void *data) -{ -        gf_cli_req                  req        =  {{0,}}; -        int                         ret        = 0; -        dict_t                     *dict       = NULL; -        char                       *src_brick  = NULL; -        char                       *dst_brick  = NULL; -        char                       *volname    = NULL; -        int32_t                     op         = 0; - -        if (!frame || !this ||  !data) { -                ret = -1; -                goto out; -        } +gf_cli_replace_brick(call_frame_t *frame, xlator_t *this, void *data) +{ +    gf_cli_req req = {{ +        0, +    }}; +    int ret = 0; +    dict_t *dict = NULL; +    char *src_brick = NULL; +    char *dst_brick = NULL; +    char *volname = NULL; +    int32_t op = 0; -        dict = data; +    if (!frame || !this || !data) { +        ret = -1; +        goto out; +    } -        ret = dict_get_int32 (dict, "operation", &op); -        if (ret) { -                gf_log (this->name, GF_LOG_DEBUG, -                        "dict_get on operation failed"); -                goto out; -        } -        ret = dict_get_str (dict, "volname", &volname); -        if (ret) { -                gf_log (this->name, GF_LOG_DEBUG, -                        "dict_get on volname failed"); -                goto out; -        } +    dict = data; -        ret = dict_get_str (dict, "src-brick", &src_brick); -        if (ret) { -                gf_log (this->name, GF_LOG_DEBUG, -                        "dict_get on src-brick failed"); -                goto out; -        } +    ret = dict_get_int32(dict, "operation", &op); +    if (ret) { +        gf_log(this->name, GF_LOG_DEBUG, "dict_get on operation failed"); +        goto out; +    } +    ret = dict_get_str(dict, "volname", &volname); +    if (ret) { +        gf_log(this->name, GF_LOG_DEBUG, "dict_get on volname failed"); +        goto out; +    } -        ret = dict_get_str (dict, "dst-brick", &dst_brick); -        if (ret) { -                gf_log (this->name, GF_LOG_DEBUG, -                        "dict_get on dst-brick failed"); -                goto out; -        } +    ret = dict_get_str(dict, "src-brick", &src_brick); +    if (ret) { +        gf_log(this->name, GF_LOG_DEBUG, "dict_get on src-brick failed"); +        goto out; +    } + +    ret = dict_get_str(dict, "dst-brick", &dst_brick); +    if (ret) { +        gf_log(this->name, GF_LOG_DEBUG, "dict_get on dst-brick failed"); +        goto out; +    } -        gf_log (this->name, GF_LOG_DEBUG, -                "Received command replace-brick %s with " -                "%s with operation=%d", src_brick, -                dst_brick, op); +    gf_log(this->name, GF_LOG_DEBUG, +           "Received command replace-brick %s with " +           "%s with operation=%d", +           src_brick, dst_brick, op); -        ret = cli_to_glusterd (&req, frame, gf_cli_replace_brick_cbk, -                               (xdrproc_t) xdr_gf_cli_req, dict, -                               GLUSTER_CLI_REPLACE_BRICK, this, cli_rpc_prog, -                               NULL); +    ret = cli_to_glusterd(&req, frame, gf_cli_replace_brick_cbk, +                          (xdrproc_t)xdr_gf_cli_req, dict, +                          GLUSTER_CLI_REPLACE_BRICK, this, cli_rpc_prog, NULL);  out: -        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); +    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret); -        GF_FREE (req.dict.dict_val); +    GF_FREE(req.dict.dict_val); -        return ret; +    return ret;  } -  int32_t -gf_cli_log_rotate (call_frame_t *frame, xlator_t *this, -                      void *data) +gf_cli_log_rotate(call_frame_t *frame, xlator_t *this, void *data)  { -        gf_cli_req                req = {{0,}}; -        int                       ret = 0; -        dict_t                   *dict = NULL; +    gf_cli_req req = {{ +        0, +    }}; +    int ret = 0; +    dict_t *dict = NULL; -        if (!frame || !this ||  !data) { -                ret = -1; -                goto out; -        } +    if (!frame || !this || !data) { +        ret = -1; +        goto out; +    } -        dict = data; +    dict = data; -        ret = cli_to_glusterd (&req, frame, gf_cli_log_rotate_cbk, -                               (xdrproc_t) xdr_gf_cli_req, dict, -                               GLUSTER_CLI_LOG_ROTATE, this, cli_rpc_prog, -                               NULL); +    ret = cli_to_glusterd(&req, frame, gf_cli_log_rotate_cbk, +                          (xdrproc_t)xdr_gf_cli_req, dict, +                          GLUSTER_CLI_LOG_ROTATE, this, cli_rpc_prog, NULL);  out: -        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); +    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret); -        GF_FREE (req.dict.dict_val); -        return ret; +    GF_FREE(req.dict.dict_val); +    return ret;  }  int32_t -gf_cli_sync_volume (call_frame_t *frame, xlator_t *this, -                       void *data) +gf_cli_sync_volume(call_frame_t *frame, xlator_t *this, void *data)  { -        int               ret = 0; -        gf_cli_req        req = {{0,}}; -        dict_t            *dict = NULL; +    int ret = 0; +    gf_cli_req req = {{ +        0, +    }}; +    dict_t *dict = NULL; -        if (!frame || !this || !data) { -                ret = -1; -                goto out; -        } +    if (!frame || !this || !data) { +        ret = -1; +        goto out; +    } -        dict = data; +    dict = data; -        ret = cli_to_glusterd (&req, frame, gf_cli_sync_volume_cbk, -                               (xdrproc_t) xdr_gf_cli_req, dict, -                               GLUSTER_CLI_SYNC_VOLUME, this, cli_rpc_prog, -                               NULL); +    ret = cli_to_glusterd(&req, frame, gf_cli_sync_volume_cbk, +                          (xdrproc_t)xdr_gf_cli_req, dict, +                          GLUSTER_CLI_SYNC_VOLUME, this, cli_rpc_prog, NULL);  out: -        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); -        GF_FREE (req.dict.dict_val); +    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret); +    GF_FREE(req.dict.dict_val); -        return ret; +    return ret;  }  int32_t -gf_cli_getspec (call_frame_t *frame, xlator_t *this, -                         void *data) -{ -        gf_getspec_req          req = {0,}; -        int                     ret = 0; -        dict_t                  *dict = NULL; -        dict_t                  *op_dict = NULL; - -        if (!frame || !this ||  !data) { -                ret = -1; -                goto out; -        } - -        dict = data; - -        ret = dict_get_str (dict, "volid", &req.key); -        if (ret) -                goto out; - -        op_dict = dict_new (); -        if (!op_dict) { -                ret = -1; -                goto out; -        } - -        // Set the supported min and max op-versions, so glusterd can make a -        // decision -        ret = dict_set_int32 (op_dict, "min-op-version", GD_OP_VERSION_MIN); -        if (ret) { -                gf_log (THIS->name, GF_LOG_ERROR, "Failed to set min-op-version" -                        " in request dict"); -                goto out; -        } - -        ret = dict_set_int32 (op_dict, "max-op-version", GD_OP_VERSION_MAX); -        if (ret) { -                gf_log (THIS->name, GF_LOG_ERROR, "Failed to set max-op-version" -                        " in request dict"); -                goto out; -        } - -        ret = dict_allocate_and_serialize (op_dict, &req.xdata.xdata_val, -                                           &req.xdata.xdata_len); -        if (ret < 0) { -                gf_log (THIS->name, GF_LOG_ERROR, -                        "Failed to serialize dictionary"); -                goto out; -        } - -        ret = cli_cmd_submit (NULL, &req, frame, &cli_handshake_prog, -                              GF_HNDSK_GETSPEC, NULL, -                              this, gf_cli_getspec_cbk, -                              (xdrproc_t) xdr_gf_getspec_req); - -out: -        if (op_dict) { -                dict_unref(op_dict); -        } -        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); - -        return ret; +gf_cli_getspec(call_frame_t *frame, xlator_t *this, void *data) +{ +    gf_getspec_req req = { +        0, +    }; +    int ret = 0; +    dict_t *dict = NULL; +    dict_t *op_dict = NULL; + +    if (!frame || !this || !data) { +        ret = -1; +        goto out; +    } + +    dict = data; + +    ret = dict_get_str(dict, "volid", &req.key); +    if (ret) +        goto out; + +    op_dict = dict_new(); +    if (!op_dict) { +        ret = -1; +        goto out; +    } + +    // Set the supported min and max op-versions, so glusterd can make a +    // decision +    ret = dict_set_int32(op_dict, "min-op-version", GD_OP_VERSION_MIN); +    if (ret) { +        gf_log(THIS->name, GF_LOG_ERROR, +               "Failed to set min-op-version" +               " in request dict"); +        goto out; +    } + +    ret = dict_set_int32(op_dict, "max-op-version", GD_OP_VERSION_MAX); +    if (ret) { +        gf_log(THIS->name, GF_LOG_ERROR, +               "Failed to set max-op-version" +               " in request dict"); +        goto out; +    } + +    ret = dict_allocate_and_serialize(op_dict, &req.xdata.xdata_val, +                                      &req.xdata.xdata_len); +    if (ret < 0) { +        gf_log(THIS->name, GF_LOG_ERROR, "Failed to serialize dictionary"); +        goto out; +    } + +    ret = cli_cmd_submit(NULL, &req, frame, &cli_handshake_prog, +                         GF_HNDSK_GETSPEC, NULL, this, gf_cli_getspec_cbk, +                         (xdrproc_t)xdr_gf_getspec_req); + +out: +    if (op_dict) { +        dict_unref(op_dict); +    } +    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret); + +    return ret;  }  int32_t -gf_cli_quota (call_frame_t *frame, xlator_t *this, -                 void *data) +gf_cli_quota(call_frame_t *frame, xlator_t *this, void *data)  { -        gf_cli_req          req = {{0,}}; -        int                 ret = 0; -        dict_t             *dict = NULL; +    gf_cli_req req = {{ +        0, +    }}; +    int ret = 0; +    dict_t *dict = NULL; -        if (!frame || !this ||  !data) { -                ret = -1; -                goto out; -        } +    if (!frame || !this || !data) { +        ret = -1; +        goto out; +    } -        dict = data; +    dict = data; -        ret = cli_to_glusterd (&req, frame, gf_cli_quota_cbk, -                               (xdrproc_t) xdr_gf_cli_req, dict, -                               GLUSTER_CLI_QUOTA, this, cli_rpc_prog, NULL); +    ret = cli_to_glusterd(&req, frame, gf_cli_quota_cbk, +                          (xdrproc_t)xdr_gf_cli_req, dict, GLUSTER_CLI_QUOTA, +                          this, cli_rpc_prog, NULL);  out: -        GF_FREE (req.dict.dict_val); +    GF_FREE(req.dict.dict_val); -        return ret; +    return ret;  }  int32_t -gf_cli_pmap_b2p (call_frame_t *frame, xlator_t *this, void *data) +gf_cli_pmap_b2p(call_frame_t *frame, xlator_t *this, void *data)  { -        pmap_port_by_brick_req  req = {0,}; -        int                     ret = 0; -        dict_t                  *dict = NULL; +    pmap_port_by_brick_req req = { +        0, +    }; +    int ret = 0; +    dict_t *dict = NULL; -        if (!frame || !this ||  !data) { -                ret = -1; -                goto out; -        } +    if (!frame || !this || !data) { +        ret = -1; +        goto out; +    } -        dict = data; +    dict = data; -        ret = dict_get_str (dict, "brick", &req.brick); -        if (ret) -                goto out; +    ret = dict_get_str(dict, "brick", &req.brick); +    if (ret) +        goto out; -        ret = cli_cmd_submit (NULL, &req, frame, &cli_pmap_prog, -                              GF_PMAP_PORTBYBRICK, NULL, -                              this, gf_cli_pmap_b2p_cbk, -                              (xdrproc_t) xdr_pmap_port_by_brick_req); +    ret = cli_cmd_submit(NULL, &req, frame, &cli_pmap_prog, GF_PMAP_PORTBYBRICK, +                         NULL, this, gf_cli_pmap_b2p_cbk, +                         (xdrproc_t)xdr_pmap_port_by_brick_req);  out: -        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); +    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret); -        return ret; +    return ret;  }  static int -gf_cli_fsm_log_cbk (struct rpc_req *req, struct iovec *iov, -                       int count, void *myframe) -{ -        gf1_cli_fsm_log_rsp        rsp   = {0,}; -        int                        ret   = -1; -        dict_t                     *dict = NULL; -        int                        tr_count = 0; -        char                       key[256] = {0}; -        int                        i = 0; -        char                       *old_state = NULL; -        char                       *new_state = NULL; -        char                       *event = NULL; -        char                       *time = NULL; - -        GF_ASSERT (myframe); - -        if (-1 == req->rpc_status) { -                goto out; -        } - -        ret = xdr_to_generic (*iov, &rsp, (xdrproc_t)xdr_gf1_cli_fsm_log_rsp); -        if (ret < 0) { -                gf_log (((call_frame_t *) myframe)->this->name, GF_LOG_ERROR, -                        "Failed to decode xdr response"); -                goto out; -        } - -        if (rsp.op_ret) { -                if (strcmp (rsp.op_errstr, "")) -                        cli_err ("%s", rsp.op_errstr); -                cli_err ("fsm log unsuccessful"); -                ret = rsp.op_ret; -                goto out; -        } - -        dict = dict_new (); -        if (!dict) { -                ret = -1; -                goto out; -        } - -        ret = dict_unserialize (rsp.fsm_log.fsm_log_val, -                                rsp.fsm_log.fsm_log_len, -                                &dict); - -        if (ret) { -                cli_err ("bad response"); -                goto out; -        } - -        ret = dict_get_int32 (dict, "count", &tr_count); -        if (tr_count) -                cli_out("number of transitions: %d", tr_count); -        else -                cli_err("No transitions"); -        for (i = 0; i < tr_count; i++) { -                snprintf (key, sizeof (key), "log%d-old-state", i); -                ret = dict_get_str (dict, key, &old_state); -                if (ret) -                        goto out; +gf_cli_fsm_log_cbk(struct rpc_req *req, struct iovec *iov, int count, +                   void *myframe) +{ +    gf1_cli_fsm_log_rsp rsp = { +        0, +    }; +    int ret = -1; +    dict_t *dict = NULL; +    int tr_count = 0; +    char key[256] = {0}; +    int i = 0; +    char *old_state = NULL; +    char *new_state = NULL; +    char *event = NULL; +    char *time = NULL; + +    GF_ASSERT(myframe); + +    if (-1 == req->rpc_status) { +        goto out; +    } + +    ret = xdr_to_generic(*iov, &rsp, (xdrproc_t)xdr_gf1_cli_fsm_log_rsp); +    if (ret < 0) { +        gf_log(((call_frame_t *)myframe)->this->name, GF_LOG_ERROR, +               "Failed to decode xdr response"); +        goto out; +    } + +    if (rsp.op_ret) { +        if (strcmp(rsp.op_errstr, "")) +            cli_err("%s", rsp.op_errstr); +        cli_err("fsm log unsuccessful"); +        ret = rsp.op_ret; +        goto out; +    } + +    dict = dict_new(); +    if (!dict) { +        ret = -1; +        goto out; +    } + +    ret = dict_unserialize(rsp.fsm_log.fsm_log_val, rsp.fsm_log.fsm_log_len, +                           &dict); + +    if (ret) { +        cli_err("bad response"); +        goto out; +    } + +    ret = dict_get_int32(dict, "count", &tr_count); +    if (tr_count) +        cli_out("number of transitions: %d", tr_count); +    else +        cli_err("No transitions"); +    for (i = 0; i < tr_count; i++) { +        snprintf(key, sizeof(key), "log%d-old-state", i); +        ret = dict_get_str(dict, key, &old_state); +        if (ret) +            goto out; -                snprintf (key, sizeof (key), "log%d-event", i); -                ret = dict_get_str (dict, key, &event); -                if (ret) -                        goto out; +        snprintf(key, sizeof(key), "log%d-event", i); +        ret = dict_get_str(dict, key, &event); +        if (ret) +            goto out; -                snprintf (key, sizeof (key), "log%d-new-state", i); -                ret = dict_get_str (dict, key, &new_state); -                if (ret) -                        goto out; +        snprintf(key, sizeof(key), "log%d-new-state", i); +        ret = dict_get_str(dict, key, &new_state); +        if (ret) +            goto out; -                snprintf (key, sizeof (key), "log%d-time", i); -                ret = dict_get_str (dict, key, &time); -                if (ret) -                        goto out; -                cli_out ("Old State: [%s]\n" -                         "New State: [%s]\n" -                         "Event    : [%s]\n" -                         "timestamp: [%s]\n", old_state, new_state, event, time); -        } +        snprintf(key, sizeof(key), "log%d-time", i); +        ret = dict_get_str(dict, key, &time); +        if (ret) +            goto out; +        cli_out( +            "Old State: [%s]\n" +            "New State: [%s]\n" +            "Event    : [%s]\n" +            "timestamp: [%s]\n", +            old_state, new_state, event, time); +    } -        ret = rsp.op_ret; +    ret = rsp.op_ret;  out: -        cli_cmd_broadcast_response (ret); -        return ret; +    cli_cmd_broadcast_response(ret); +    return ret;  }  int32_t -gf_cli_fsm_log (call_frame_t *frame, xlator_t *this, void *data) +gf_cli_fsm_log(call_frame_t *frame, xlator_t *this, void *data)  { -        int                        ret = -1; -        gf1_cli_fsm_log_req        req = {0,}; +    int ret = -1; +    gf1_cli_fsm_log_req req = { +        0, +    }; -        GF_ASSERT (frame); -        GF_ASSERT (this); -        GF_ASSERT (data); +    GF_ASSERT(frame); +    GF_ASSERT(this); +    GF_ASSERT(data); -        if (!frame || !this || !data) -                goto out; -        req.name = data; -        ret = cli_cmd_submit (NULL, &req, frame, cli_rpc_prog, -                              GLUSTER_CLI_FSM_LOG, NULL, -                              this, gf_cli_fsm_log_cbk, -                              (xdrproc_t) xdr_gf1_cli_fsm_log_req); +    if (!frame || !this || !data) +        goto out; +    req.name = data; +    ret = cli_cmd_submit(NULL, &req, frame, cli_rpc_prog, GLUSTER_CLI_FSM_LOG, +                         NULL, this, gf_cli_fsm_log_cbk, +                         (xdrproc_t)xdr_gf1_cli_fsm_log_req);  out: -        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); +    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret); -        return ret; +    return ret;  }  int -gf_cli_gsync_config_command (dict_t *dict) -{ -        runner_t runner     = {0,}; -        char *subop         = NULL; -        char *gwd           = NULL; -        char *slave         = NULL; -        char *confpath      = NULL; -        char *master        = NULL; -        char *op_name       = NULL; -        int   ret           = -1; -        char  conf_path[PATH_MAX] = ""; - -        if (dict_get_str (dict, "subop", &subop) != 0) -                return -1; - -        if (strcmp (subop, "get") != 0 && strcmp (subop, "get-all") != 0) { -                cli_out (GEOREP" config updated successfully"); -                return 0; -        } - -        if (dict_get_str (dict, "glusterd_workdir", &gwd) != 0 || -            dict_get_str (dict, "slave", &slave) != 0) -                return -1; - -        if (dict_get_str (dict, "master", &master) != 0) -                master = NULL; -        if (dict_get_str (dict, "op_name", &op_name) != 0) -                op_name = NULL; - -        ret = dict_get_str (dict, "conf_path", &confpath); -        if (ret || !confpath) { -                ret = snprintf (conf_path, sizeof(conf_path) - 1, -                                "%s/"GEOREP"/gsyncd_template.conf", gwd); -                conf_path[ret] = '\0'; -                confpath = conf_path; -        } - -        runinit (&runner); -        runner_add_args (&runner, GSYNCD_PREFIX"/gsyncd", "-c", NULL); -        runner_argprintf (&runner, "%s", confpath); -        runner_argprintf (&runner, "--iprefix=%s", DATADIR); -        if (master) -                runner_argprintf (&runner, ":%s", master); -        runner_add_arg (&runner, slave); -        runner_argprintf (&runner, "--config-%s", subop); -        if (op_name) -                runner_add_arg (&runner, op_name); - -        return runner_run (&runner); +gf_cli_gsync_config_command(dict_t *dict) +{ +    runner_t runner = { +        0, +    }; +    char *subop = NULL; +    char *gwd = NULL; +    char *slave = NULL; +    char *confpath = NULL; +    char *master = NULL; +    char *op_name = NULL; +    int ret = -1; +    char conf_path[PATH_MAX] = ""; + +    if (dict_get_str(dict, "subop", &subop) != 0) +        return -1; + +    if (strcmp(subop, "get") != 0 && strcmp(subop, "get-all") != 0) { +        cli_out(GEOREP " config updated successfully"); +        return 0; +    } + +    if (dict_get_str(dict, "glusterd_workdir", &gwd) != 0 || +        dict_get_str(dict, "slave", &slave) != 0) +        return -1; + +    if (dict_get_str(dict, "master", &master) != 0) +        master = NULL; +    if (dict_get_str(dict, "op_name", &op_name) != 0) +        op_name = NULL; + +    ret = dict_get_str(dict, "conf_path", &confpath); +    if (ret || !confpath) { +        ret = snprintf(conf_path, sizeof(conf_path) - 1, +                       "%s/" GEOREP "/gsyncd_template.conf", gwd); +        conf_path[ret] = '\0'; +        confpath = conf_path; +    } + +    runinit(&runner); +    runner_add_args(&runner, GSYNCD_PREFIX "/gsyncd", "-c", NULL); +    runner_argprintf(&runner, "%s", confpath); +    runner_argprintf(&runner, "--iprefix=%s", DATADIR); +    if (master) +        runner_argprintf(&runner, ":%s", master); +    runner_add_arg(&runner, slave); +    runner_argprintf(&runner, "--config-%s", subop); +    if (op_name) +        runner_add_arg(&runner, op_name); + +    return runner_run(&runner);  } -  int -gf_cli_print_status (char **title_values, -                     gf_gsync_status_t **sts_vals, -                     int *spacing, int gsync_count, -                     int number_of_fields, int is_detail) -{ -        int     i                        = 0; -        int     j                        = 0; -        int     ret                      = 0; -        int     status_fields            = 8; /* Indexed at 0 */ -        int     total_spacing            = 0; -        char  **output_values            = NULL; -        char   *tmp                      = NULL; -        char   *hyphens                  = NULL; - -        /* calculating spacing for hyphens */ -        for (i = 0; i < number_of_fields; i++) { -                /* Suppressing detail output for status */ -                if ((!is_detail) && (i > status_fields)) { -                       /* Suppressing detailed output for -                        * status */ -                        continue; -                } -                spacing[i] += 3; /* Adding extra space to -                                    distinguish between fields */ -                total_spacing += spacing[i]; -        } -        total_spacing += 4; /* For the spacing between the fields */ - -        /* char pointers for each field */ -        output_values = GF_CALLOC (number_of_fields, sizeof (char *), -                                   gf_common_mt_char); -        if (!output_values) { -                ret = -1; -                goto out; -        } -        for (i = 0; i < number_of_fields; i++) { -                output_values[i] = GF_CALLOC (spacing[i] + 1, sizeof (char), -                                              gf_common_mt_char); -                if (!output_values[i]) { -                        ret = -1; -                        goto out; -                } -        } - -        hyphens = GF_CALLOC (total_spacing + 1, sizeof (char), -                             gf_common_mt_char); -        if (!hyphens) { +gf_cli_print_status(char **title_values, gf_gsync_status_t **sts_vals, +                    int *spacing, int gsync_count, int number_of_fields, +                    int is_detail) +{ +    int i = 0; +    int j = 0; +    int ret = 0; +    int status_fields = 8; /* Indexed at 0 */ +    int total_spacing = 0; +    char **output_values = NULL; +    char *tmp = NULL; +    char *hyphens = NULL; + +    /* calculating spacing for hyphens */ +    for (i = 0; i < number_of_fields; i++) { +        /* Suppressing detail output for status */ +        if ((!is_detail) && (i > status_fields)) { +            /* Suppressing detailed output for +             * status */ +            continue; +        } +        spacing[i] += 3; /* Adding extra space to +                            distinguish between fields */ +        total_spacing += spacing[i]; +    } +    total_spacing += 4; /* For the spacing between the fields */ + +    /* char pointers for each field */ +    output_values = GF_CALLOC(number_of_fields, sizeof(char *), +                              gf_common_mt_char); +    if (!output_values) { +        ret = -1; +        goto out; +    } +    for (i = 0; i < number_of_fields; i++) { +        output_values[i] = GF_CALLOC(spacing[i] + 1, sizeof(char), +                                     gf_common_mt_char); +        if (!output_values[i]) { +            ret = -1; +            goto out; +        } +    } + +    hyphens = GF_CALLOC(total_spacing + 1, sizeof(char), gf_common_mt_char); +    if (!hyphens) { +        ret = -1; +        goto out; +    } + +    cli_out(" "); + +    /* setting the title "NODE", "MASTER", etc. from title_values[] +       and printing the same */ +    for (j = 0; j < number_of_fields; j++) { +        if ((!is_detail) && (j > status_fields)) { +            /* Suppressing detailed output for +             * status */ +            output_values[j][0] = '\0'; +            continue; +        } +        memset(output_values[j], ' ', spacing[j]); +        memcpy(output_values[j], title_values[j], strlen(title_values[j])); +        output_values[j][spacing[j]] = '\0'; +    } +    cli_out("%s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s", output_values[0], +            output_values[1], output_values[2], output_values[3], +            output_values[4], output_values[5], output_values[6], +            output_values[7], output_values[8], output_values[9], +            output_values[10], output_values[11], output_values[12], +            output_values[13], output_values[14], output_values[15]); + +    /* setting and printing the hyphens */ +    memset(hyphens, '-', total_spacing); +    hyphens[total_spacing] = '\0'; +    cli_out("%s", hyphens); + +    for (i = 0; i < gsync_count; i++) { +        for (j = 0; j < number_of_fields; j++) { +            if ((!is_detail) && (j > status_fields)) { +                /* Suppressing detailed output for +                 * status */ +                output_values[j][0] = '\0'; +                continue; +            } +            tmp = get_struct_variable(j, sts_vals[i]); +            if (!tmp) { +                gf_log("", GF_LOG_ERROR, "struct member empty.");                  ret = -1;                  goto out; +            } +            memset(output_values[j], ' ', spacing[j]); +            memcpy(output_values[j], tmp, strlen(tmp)); +            output_values[j][spacing[j]] = '\0';          } -        cli_out (" "); - -        /* setting the title "NODE", "MASTER", etc. from title_values[] -           and printing the same */ -        for (j = 0; j < number_of_fields; j++) { -                if ((!is_detail) && (j > status_fields)) { -                       /* Suppressing detailed output for -                        * status */ -                       output_values[j][0] = '\0'; -                       continue; -                } -                memset (output_values[j], ' ', spacing[j]); -                memcpy (output_values[j], title_values[j], -                        strlen(title_values[j])); -                output_values[j][spacing[j]] = '\0'; -        } -        cli_out ("%s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s", -                 output_values[0], output_values[1], -                 output_values[2], output_values[3], -                 output_values[4], output_values[5], -                 output_values[6], output_values[7], -                 output_values[8], output_values[9], -                 output_values[10], output_values[11], -                 output_values[12], output_values[13], -                 output_values[14], output_values[15]); - -        /* setting and printing the hyphens */ -        memset (hyphens, '-', total_spacing); -        hyphens[total_spacing] = '\0'; -        cli_out ("%s", hyphens); - -        for (i = 0; i < gsync_count; i++) { -                for (j = 0; j < number_of_fields; j++) { -                        if ((!is_detail) && (j > status_fields)) { -                                /* Suppressing detailed output for -                                 * status */ -                                output_values[j][0] = '\0'; -                                continue; -                        } -                        tmp = get_struct_variable(j, sts_vals[i]); -                        if (!tmp) { -                                gf_log ("", GF_LOG_ERROR, -                                        "struct member empty."); -                                ret = -1; -                                goto out; -                        } -                        memset (output_values[j], ' ', spacing[j]); -                        memcpy (output_values[j], tmp, strlen (tmp)); -                        output_values[j][spacing[j]] = '\0'; -                } - -                cli_out ("%s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s", -                         output_values[0], output_values[1], -                         output_values[2], output_values[3], -                         output_values[4], output_values[5], -                         output_values[6], output_values[7], -                         output_values[8], output_values[9], -                         output_values[10], output_values[11], -                         output_values[12], output_values[13], -                         output_values[14], output_values[15]); -        } +        cli_out("%s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s", +                output_values[0], output_values[1], output_values[2], +                output_values[3], output_values[4], output_values[5], +                output_values[6], output_values[7], output_values[8], +                output_values[9], output_values[10], output_values[11], +                output_values[12], output_values[13], output_values[14], +                output_values[15]); +    }  out: -        if (output_values) { -                for (i = 0; i < number_of_fields; i++) { -                        if (output_values[i]) -                                GF_FREE (output_values[i]); -                } -                GF_FREE (output_values); +    if (output_values) { +        for (i = 0; i < number_of_fields; i++) { +            if (output_values[i]) +                GF_FREE(output_values[i]);          } +        GF_FREE(output_values); +    } -        if (hyphens) -                GF_FREE (hyphens); +    if (hyphens) +        GF_FREE(hyphens); -        return ret; +    return ret;  }  int -gf_gsync_status_t_comparator (const void *p, const void *q) +gf_gsync_status_t_comparator(const void *p, const void *q)  { -        char *slavekey1 = NULL; -        char *slavekey2 = NULL; - -        slavekey1 = get_struct_variable (20, (*(gf_gsync_status_t **)p)); -        slavekey2 = get_struct_variable (20, (*(gf_gsync_status_t **)q)); -        if (!slavekey1 || !slavekey2) { -                gf_log ("cli", GF_LOG_ERROR, -                        "struct member empty."); -                return 0; -        } - -        return strcmp (slavekey1, slavekey2); -} - -int -gf_cli_read_status_data (dict_t *dict, -                         gf_gsync_status_t **sts_vals, -                         int *spacing, int gsync_count, -                         int number_of_fields) -{ -        char   *tmp                    = NULL; -        char    sts_val_name[PATH_MAX] = ""; -        int     ret                    = 0; -        int     i                      = 0; -        int     j                      = 0; - -        /* Storing per node status info in each object */ -        for (i = 0; i < gsync_count; i++) { -                snprintf (sts_val_name, sizeof(sts_val_name), "status_value%d", i); - -                /* Fetching the values from dict, and calculating -                   the max length for each field */ -                ret = dict_get_bin (dict, sts_val_name, (void **)&(sts_vals[i])); -                if (ret) -                        goto out; - -                for (j = 0; j < number_of_fields; j++) { -                        tmp = get_struct_variable(j, sts_vals[i]); -                        if (!tmp) { -                                gf_log ("", GF_LOG_ERROR, -                                        "struct member empty."); -                                ret = -1; -                                goto out; -                        } -                        if (strlen (tmp) > spacing[j]) -                                spacing[j] = strlen (tmp); -                } -        } +    char *slavekey1 = NULL; +    char *slavekey2 = NULL; -        /* Sort based on Session Slave */ -        qsort(sts_vals, gsync_count, -              sizeof(gf_gsync_status_t *), -              gf_gsync_status_t_comparator); +    slavekey1 = get_struct_variable(20, (*(gf_gsync_status_t **)p)); +    slavekey2 = get_struct_variable(20, (*(gf_gsync_status_t **)q)); +    if (!slavekey1 || !slavekey2) { +        gf_log("cli", GF_LOG_ERROR, "struct member empty."); +        return 0; +    } -out: -        return ret; +    return strcmp(slavekey1, slavekey2);  }  int -gf_cli_gsync_status_output (dict_t *dict, gf_boolean_t is_detail) -{ -        int                     gsync_count    = 0; -        int                     i              = 0; -        int                     ret            = 0; -        int                     spacing[16]    = {0}; -        int                     num_of_fields  = 16; -        char                    errmsg[1024]   = ""; -        char                   *master         = NULL; -        char                   *slave          = NULL; -        char                   *title_values[] = {"MASTER NODE", "MASTER VOL", -                                                  "MASTER BRICK", "SLAVE USER", -                                                  "SLAVE", "SLAVE NODE", -                                                  "STATUS", "CRAWL STATUS", -                                                  "LAST_SYNCED", "ENTRY", -                                                  "DATA", "META", "FAILURES", -                                                  "CHECKPOINT TIME", -                                                  "CHECKPOINT COMPLETED", -                                                  "CHECKPOINT COMPLETION TIME"}; -        gf_gsync_status_t     **sts_vals       = NULL; - -        /* Checks if any session is active or not */ -        ret = dict_get_int32 (dict, "gsync-count", &gsync_count); -        if (ret) { -                ret = dict_get_str (dict, "master", &master); - -                ret = dict_get_str (dict, "slave", &slave); - -                if (master) { -                        if (slave) -                                snprintf (errmsg, sizeof(errmsg), "No active " -                                          "geo-replication sessions between %s" -                                          " and %s", master, slave); -                        else -                                snprintf (errmsg, sizeof(errmsg), "No active " -                                          "geo-replication sessions for %s", -                                          master); -                } else -                        snprintf (errmsg, sizeof(errmsg), "No active " -                                  "geo-replication sessions"); - -                gf_log ("cli", GF_LOG_INFO, "%s", errmsg); -                cli_out ("%s", errmsg); -                ret = -1; -                goto out; -        } - -        for (i = 0; i < num_of_fields; i++) -                spacing[i] = strlen(title_values[i]); +gf_cli_read_status_data(dict_t *dict, gf_gsync_status_t **sts_vals, +                        int *spacing, int gsync_count, int number_of_fields) +{ +    char *tmp = NULL; +    char sts_val_name[PATH_MAX] = ""; +    int ret = 0; +    int i = 0; +    int j = 0; + +    /* Storing per node status info in each object */ +    for (i = 0; i < gsync_count; i++) { +        snprintf(sts_val_name, sizeof(sts_val_name), "status_value%d", i); + +        /* Fetching the values from dict, and calculating +           the max length for each field */ +        ret = dict_get_bin(dict, sts_val_name, (void **)&(sts_vals[i])); +        if (ret) +            goto out; -        /* gsync_count = number of nodes reporting output. -           each sts_val object will store output of each -           node */ -        sts_vals = GF_MALLOC (gsync_count * sizeof (gf_gsync_status_t *), -                              gf_common_mt_char); -        if (!sts_vals) { +        for (j = 0; j < number_of_fields; j++) { +            tmp = get_struct_variable(j, sts_vals[i]); +            if (!tmp) { +                gf_log("", GF_LOG_ERROR, "struct member empty.");                  ret = -1;                  goto out; +            } +            if (strlen(tmp) > spacing[j]) +                spacing[j] = strlen(tmp);          } -        for (i = 0; i < gsync_count; i++) { -                sts_vals[i] = GF_CALLOC (1, sizeof (gf_gsync_status_t), -                                         gf_common_mt_char); -                if (!sts_vals[i]) { -                        ret = -1; -                        goto out; -                } -        } +    } -        ret = gf_cli_read_status_data (dict, sts_vals, spacing, -                                       gsync_count, num_of_fields); -        if (ret) { -                gf_log ("", GF_LOG_ERROR, "Unable to read status data"); -                goto out; -        } - -        ret = gf_cli_print_status (title_values, sts_vals, spacing, gsync_count, -                                   num_of_fields, is_detail); -        if (ret) { -                gf_log ("", GF_LOG_ERROR, "Unable to print status output"); -                goto out; -        } +    /* Sort based on Session Slave */ +    qsort(sts_vals, gsync_count, sizeof(gf_gsync_status_t *), +          gf_gsync_status_t_comparator);  out: -        if (sts_vals) -                GF_FREE (sts_vals); +    return ret; +} -        return ret; +int +gf_cli_gsync_status_output(dict_t *dict, gf_boolean_t is_detail) +{ +    int gsync_count = 0; +    int i = 0; +    int ret = 0; +    int spacing[16] = {0}; +    int num_of_fields = 16; +    char errmsg[1024] = ""; +    char *master = NULL; +    char *slave = NULL; +    char *title_values[] = {"MASTER NODE", +                            "MASTER VOL", +                            "MASTER BRICK", +                            "SLAVE USER", +                            "SLAVE", +                            "SLAVE NODE", +                            "STATUS", +                            "CRAWL STATUS", +                            "LAST_SYNCED", +                            "ENTRY", +                            "DATA", +                            "META", +                            "FAILURES", +                            "CHECKPOINT TIME", +                            "CHECKPOINT COMPLETED", +                            "CHECKPOINT COMPLETION TIME"}; +    gf_gsync_status_t **sts_vals = NULL; + +    /* Checks if any session is active or not */ +    ret = dict_get_int32(dict, "gsync-count", &gsync_count); +    if (ret) { +        ret = dict_get_str(dict, "master", &master); + +        ret = dict_get_str(dict, "slave", &slave); + +        if (master) { +            if (slave) +                snprintf(errmsg, sizeof(errmsg), +                         "No active " +                         "geo-replication sessions between %s" +                         " and %s", +                         master, slave); +            else +                snprintf(errmsg, sizeof(errmsg), +                         "No active " +                         "geo-replication sessions for %s", +                         master); +        } else +            snprintf(errmsg, sizeof(errmsg), +                     "No active " +                     "geo-replication sessions"); + +        gf_log("cli", GF_LOG_INFO, "%s", errmsg); +        cli_out("%s", errmsg); +        ret = -1; +        goto out; +    } + +    for (i = 0; i < num_of_fields; i++) +        spacing[i] = strlen(title_values[i]); + +    /* gsync_count = number of nodes reporting output. +       each sts_val object will store output of each +       node */ +    sts_vals = GF_MALLOC(gsync_count * sizeof(gf_gsync_status_t *), +                         gf_common_mt_char); +    if (!sts_vals) { +        ret = -1; +        goto out; +    } +    for (i = 0; i < gsync_count; i++) { +        sts_vals[i] = GF_CALLOC(1, sizeof(gf_gsync_status_t), +                                gf_common_mt_char); +        if (!sts_vals[i]) { +            ret = -1; +            goto out; +        } +    } + +    ret = gf_cli_read_status_data(dict, sts_vals, spacing, gsync_count, +                                  num_of_fields); +    if (ret) { +        gf_log("", GF_LOG_ERROR, "Unable to read status data"); +        goto out; +    } + +    ret = gf_cli_print_status(title_values, sts_vals, spacing, gsync_count, +                              num_of_fields, is_detail); +    if (ret) { +        gf_log("", GF_LOG_ERROR, "Unable to print status output"); +        goto out; +    } + +out: +    if (sts_vals) +        GF_FREE(sts_vals); + +    return ret;  }  static int32_t -write_contents_to_common_pem_file (dict_t *dict, int output_count) -{ -        char            *workdir                   = NULL; -        char             common_pem_file[PATH_MAX] = ""; -        char            *output                    = NULL; -        char             output_name[PATH_MAX]     = ""; -        int              bytes_written             = 0; -        int              fd                        = -1; -        int              ret                       = -1; -        int              i                         = -1; - -        ret = dict_get_str (dict, "glusterd_workdir", &workdir); -        if (ret || !workdir) { -                gf_log ("", GF_LOG_ERROR, "Unable to fetch workdir"); +write_contents_to_common_pem_file(dict_t *dict, int output_count) +{ +    char *workdir = NULL; +    char common_pem_file[PATH_MAX] = ""; +    char *output = NULL; +    char output_name[PATH_MAX] = ""; +    int bytes_written = 0; +    int fd = -1; +    int ret = -1; +    int i = -1; + +    ret = dict_get_str(dict, "glusterd_workdir", &workdir); +    if (ret || !workdir) { +        gf_log("", GF_LOG_ERROR, "Unable to fetch workdir"); +        ret = -1; +        goto out; +    } + +    snprintf(common_pem_file, sizeof(common_pem_file), +             "%s/geo-replication/common_secret.pem.pub", workdir); + +    sys_unlink(common_pem_file); + +    fd = open(common_pem_file, O_WRONLY | O_CREAT, 0600); +    if (fd == -1) { +        gf_log("", GF_LOG_ERROR, +               "Failed to open %s" +               " Error : %s", +               common_pem_file, strerror(errno)); +        ret = -1; +        goto out; +    } + +    for (i = 1; i <= output_count; i++) { +        snprintf(output_name, sizeof(output_name), "output_%d", i); +        ret = dict_get_str(dict, output_name, &output); +        if (ret) { +            gf_log("", GF_LOG_ERROR, "Failed to get %s.", output_name); +            cli_out("Unable to fetch output."); +        } +        if (output) { +            bytes_written = sys_write(fd, output, strlen(output)); +            if (bytes_written != strlen(output)) { +                gf_log("", GF_LOG_ERROR, +                       "Failed to write " +                       "to %s", +                       common_pem_file);                  ret = -1;                  goto out; -        } - -        snprintf (common_pem_file, sizeof(common_pem_file), -                  "%s/geo-replication/common_secret.pem.pub", -                  workdir); - -        sys_unlink (common_pem_file); - -        fd = open (common_pem_file, O_WRONLY | O_CREAT, 0600); -        if (fd == -1) { -                gf_log ("", GF_LOG_ERROR, "Failed to open %s" -                        " Error : %s", common_pem_file, -                        strerror (errno)); +            } +            /* Adding the new line character */ +            bytes_written = sys_write(fd, "\n", 1); +            if (bytes_written != 1) { +                gf_log("", GF_LOG_ERROR, "Failed to add new line char");                  ret = -1;                  goto out; +            } +            output = NULL;          } +    } -        for (i = 1; i <= output_count; i++) { -                snprintf (output_name, sizeof (output_name), -                          "output_%d", i); -                ret = dict_get_str (dict, output_name, &output); -                if (ret) { -                        gf_log ("", GF_LOG_ERROR, "Failed to get %s.", -                                output_name); -                        cli_out ("Unable to fetch output."); -                } -                if (output) { -                        bytes_written = sys_write (fd, output, strlen(output)); -                        if (bytes_written != strlen(output)) { -                                gf_log ("", GF_LOG_ERROR, "Failed to write " -                                        "to %s", common_pem_file); -                                ret = -1; -                                goto out; -                        } -                        /* Adding the new line character */ -                        bytes_written = sys_write (fd, "\n", 1); -                        if (bytes_written != 1) { -                                gf_log ("", GF_LOG_ERROR, -                                        "Failed to add new line char"); -                                ret = -1; -                                goto out; -                        } -                        output = NULL; -                } -        } - -        cli_out ("Common secret pub file present at %s", common_pem_file); -        ret = 0; +    cli_out("Common secret pub file present at %s", common_pem_file); +    ret = 0;  out: -        if (fd >= 0) -                sys_close (fd); +    if (fd >= 0) +        sys_close(fd); -        gf_log ("", GF_LOG_DEBUG, "Returning %d", ret); -        return ret; +    gf_log("", GF_LOG_DEBUG, "Returning %d", ret); +    return ret;  }  int -gf_cli_sys_exec_cbk (struct rpc_req *req, struct iovec *iov, -                     int count, void *myframe) -{ -        int                     ret     = -1; -        int                     output_count     = -1; -        int                     i     = -1; -        char                   *output  = NULL; -        char                   *command = NULL; -        char                    output_name[PATH_MAX] = ""; -        gf_cli_rsp              rsp     = {0, }; -        dict_t                  *dict   = NULL; - -        GF_ASSERT (myframe); - -        if (req->rpc_status == -1) { -                goto out; -        } - -        ret = xdr_to_generic (*iov, &rsp, (xdrproc_t)xdr_gf_cli_rsp); -        if (ret < 0) { -                gf_log (((call_frame_t *) myframe)->this->name, GF_LOG_ERROR, -                        "Failed to decode xdr response"); -                goto out; -       } - -        dict = dict_new (); - -        if (!dict) { -                ret = -1; -                goto out; -        } - -        ret = dict_unserialize (rsp.dict.dict_val, rsp.dict.dict_len, &dict); +gf_cli_sys_exec_cbk(struct rpc_req *req, struct iovec *iov, int count, +                    void *myframe) +{ +    int ret = -1; +    int output_count = -1; +    int i = -1; +    char *output = NULL; +    char *command = NULL; +    char output_name[PATH_MAX] = ""; +    gf_cli_rsp rsp = { +        0, +    }; +    dict_t *dict = NULL; + +    GF_ASSERT(myframe); + +    if (req->rpc_status == -1) { +        goto out; +    } + +    ret = xdr_to_generic(*iov, &rsp, (xdrproc_t)xdr_gf_cli_rsp); +    if (ret < 0) { +        gf_log(((call_frame_t *)myframe)->this->name, GF_LOG_ERROR, +               "Failed to decode xdr response"); +        goto out; +    } + +    dict = dict_new(); + +    if (!dict) { +        ret = -1; +        goto out; +    } + +    ret = dict_unserialize(rsp.dict.dict_val, rsp.dict.dict_len, &dict); + +    if (ret) +        goto out; + +    if (rsp.op_ret) { +        cli_err("%s", rsp.op_errstr ? rsp.op_errstr : "Command failed."); +        ret = rsp.op_ret; +        goto out; +    } -        if (ret) -                goto out; +    ret = dict_get_int32(dict, "output_count", &output_count); +    if (ret) { +        cli_out("Command executed successfully."); +        ret = 0; +        goto out; +    } -        if (rsp.op_ret) { -                cli_err ("%s", rsp.op_errstr ? rsp.op_errstr : -                         "Command failed."); -                ret = rsp.op_ret; -                goto out; -        } +    ret = dict_get_str(dict, "command", &command); +    if (ret) { +        gf_log("", GF_LOG_ERROR, "Unable to get command from dict"); +        goto out; +    } -        ret = dict_get_int32 (dict, "output_count", &output_count); -        if (ret) { -                cli_out ("Command executed successfully."); -                ret = 0; -                goto out; -        } +    if (!strcmp(command, "gsec_create")) { +        ret = write_contents_to_common_pem_file(dict, output_count); +        if (!ret) +            goto out; +    } -        ret = dict_get_str (dict, "command", &command); +    for (i = 1; i <= output_count; i++) { +        snprintf(output_name, sizeof(output_name), "output_%d", i); +        ret = dict_get_str(dict, output_name, &output);          if (ret) { -                gf_log ("", GF_LOG_ERROR, -                        "Unable to get command from dict"); -                goto out; +            gf_log("", GF_LOG_ERROR, "Failed to get %s.", output_name); +            cli_out("Unable to fetch output.");          } - -        if (!strcmp (command, "gsec_create")) { -                ret = write_contents_to_common_pem_file (dict, output_count); -                if (!ret) -                        goto out; +        if (output) { +            cli_out("%s", output); +            output = NULL;          } +    } -        for (i = 1; i <= output_count; i++) { -                snprintf (output_name, sizeof (output_name), -                          "output_%d", i); -                ret = dict_get_str (dict, output_name, &output); -                if (ret) { -                        gf_log ("", GF_LOG_ERROR, "Failed to get %s.", -                                output_name); -                        cli_out ("Unable to fetch output."); -                } -                if (output) { -                        cli_out ("%s", output); -                        output = NULL; -                } -        } - -        ret = 0; +    ret = 0;  out: -        if (dict) -                dict_unref (dict); -        cli_cmd_broadcast_response (ret); +    if (dict) +        dict_unref(dict); +    cli_cmd_broadcast_response(ret); -        free (rsp.dict.dict_val); +    free(rsp.dict.dict_val); -        return ret; +    return ret;  }  int -gf_cli_copy_file_cbk (struct rpc_req *req, struct iovec *iov, -                      int count, void *myframe) +gf_cli_copy_file_cbk(struct rpc_req *req, struct iovec *iov, int count, +                     void *myframe)  { -        int                     ret     = -1; -        gf_cli_rsp              rsp     = {0, }; -        dict_t                  *dict   = NULL; +    int ret = -1; +    gf_cli_rsp rsp = { +        0, +    }; +    dict_t *dict = NULL; -        GF_ASSERT (myframe); +    GF_ASSERT(myframe); -        if (req->rpc_status == -1) { -                goto out; -        } +    if (req->rpc_status == -1) { +        goto out; +    } -        ret = xdr_to_generic (*iov, &rsp, (xdrproc_t)xdr_gf_cli_rsp); -        if (ret < 0) { -                gf_log (((call_frame_t *) myframe)->this->name, GF_LOG_ERROR, -                        "Failed to decode xdr response"); -                goto out; -       } +    ret = xdr_to_generic(*iov, &rsp, (xdrproc_t)xdr_gf_cli_rsp); +    if (ret < 0) { +        gf_log(((call_frame_t *)myframe)->this->name, GF_LOG_ERROR, +               "Failed to decode xdr response"); +        goto out; +    } -        dict = dict_new (); +    dict = dict_new(); -        if (!dict) { -                ret = -1; -                goto out; -        } +    if (!dict) { +        ret = -1; +        goto out; +    } -        ret = dict_unserialize (rsp.dict.dict_val, rsp.dict.dict_len, &dict); +    ret = dict_unserialize(rsp.dict.dict_val, rsp.dict.dict_len, &dict); -       if (ret) -                goto out; +    if (ret) +        goto out; -        if (rsp.op_ret) { -                cli_err ("%s", rsp.op_errstr ? rsp.op_errstr : -                         "Copy unsuccessful"); -                ret = rsp.op_ret; -                goto out; -        } +    if (rsp.op_ret) { +        cli_err("%s", rsp.op_errstr ? rsp.op_errstr : "Copy unsuccessful"); +        ret = rsp.op_ret; +        goto out; +    } -        cli_out ("Successfully copied file."); +    cli_out("Successfully copied file.");  out: -        if (dict) -                dict_unref (dict); -        cli_cmd_broadcast_response (ret); +    if (dict) +        dict_unref(dict); +    cli_cmd_broadcast_response(ret); -        free (rsp.dict.dict_val); +    free(rsp.dict.dict_val); -        return ret; +    return ret;  }  int -gf_cli_gsync_set_cbk (struct rpc_req *req, struct iovec *iov, -                         int count, void *myframe) -{ -        int                     ret     = -1; -        gf_cli_rsp              rsp     = {0, }; -        dict_t                  *dict   = NULL; -        char                    *gsync_status = NULL; -        char                    *master = NULL; -        char                    *slave  = NULL; -        int32_t                  type   = 0; -        gf_boolean_t             status_detail = _gf_false; - -        GF_ASSERT (myframe); - -        if (req->rpc_status == -1) { -                goto out; -        } - -        ret = xdr_to_generic (*iov, &rsp, (xdrproc_t)xdr_gf_cli_rsp); -        if (ret < 0) { -                gf_log (((call_frame_t *) myframe)->this->name, GF_LOG_ERROR, -                        "Failed to decode xdr response"); -                goto out; -        } - -        dict = dict_new (); - -        if (!dict) { -                ret = -1; -                goto out; -        } - -        ret = dict_unserialize (rsp.dict.dict_val, rsp.dict.dict_len, &dict); - +gf_cli_gsync_set_cbk(struct rpc_req *req, struct iovec *iov, int count, +                     void *myframe) +{ +    int ret = -1; +    gf_cli_rsp rsp = { +        0, +    }; +    dict_t *dict = NULL; +    char *gsync_status = NULL; +    char *master = NULL; +    char *slave = NULL; +    int32_t type = 0; +    gf_boolean_t status_detail = _gf_false; + +    GF_ASSERT(myframe); + +    if (req->rpc_status == -1) { +        goto out; +    } + +    ret = xdr_to_generic(*iov, &rsp, (xdrproc_t)xdr_gf_cli_rsp); +    if (ret < 0) { +        gf_log(((call_frame_t *)myframe)->this->name, GF_LOG_ERROR, +               "Failed to decode xdr response"); +        goto out; +    } + +    dict = dict_new(); + +    if (!dict) { +        ret = -1; +        goto out; +    } + +    ret = dict_unserialize(rsp.dict.dict_val, rsp.dict.dict_len, &dict); + +    if (ret) +        goto out; + +    if (global_state->mode & GLUSTER_MODE_XML) { +        ret = cli_xml_output_vol_gsync(dict, rsp.op_ret, rsp.op_errno, +                                       rsp.op_errstr);          if (ret) -                goto out; +            gf_log("cli", GF_LOG_ERROR, "Error outputting to xml"); +        goto out; +    } -        if (global_state->mode & GLUSTER_MODE_XML) { -                ret = cli_xml_output_vol_gsync (dict, rsp.op_ret, rsp.op_errno, -                                                rsp.op_errstr); -                if (ret) -                        gf_log ("cli", GF_LOG_ERROR, -                                "Error outputting to xml"); -                goto out; -        } - -        if (rsp.op_ret) { -                cli_err ("%s", rsp.op_errstr ? rsp.op_errstr : -                         GEOREP" command unsuccessful"); -                ret = rsp.op_ret; -                goto out; -        } - -        ret = dict_get_str (dict, "gsync-status", &gsync_status); -        if (!ret) -                cli_out ("%s", gsync_status); - -        ret = dict_get_int32 (dict, "type", &type); -        if (ret) { -                gf_log (((call_frame_t *) myframe)->this->name, GF_LOG_ERROR, -                        "failed to get type"); -                goto out; -        } - -        switch (type) { -                case GF_GSYNC_OPTION_TYPE_START: -                case GF_GSYNC_OPTION_TYPE_STOP: -                        if (dict_get_str (dict, "master", &master) != 0) -                                master = "???"; -                        if (dict_get_str (dict, "slave", &slave) != 0) -                                slave = "???"; - -                        cli_out ("%s " GEOREP " session between %s & %s" -                                 " has been successful", -                                 type == GF_GSYNC_OPTION_TYPE_START ? -                                  "Starting" : "Stopping", -                                 master, slave); -                break; - -                case GF_GSYNC_OPTION_TYPE_PAUSE: -                case GF_GSYNC_OPTION_TYPE_RESUME: -                        if (dict_get_str (dict, "master", &master) != 0) -                                master = "???"; -                        if (dict_get_str (dict, "slave", &slave) != 0) -                                slave = "???"; - -                        cli_out ("%s " GEOREP " session between %s & %s" -                                 " has been successful", -                                 type == GF_GSYNC_OPTION_TYPE_PAUSE ? -                                  "Pausing" : "Resuming", -                                 master, slave); -                break; - -                case GF_GSYNC_OPTION_TYPE_CONFIG: -                        ret = gf_cli_gsync_config_command (dict); -                break; - -                case GF_GSYNC_OPTION_TYPE_STATUS: -                        status_detail = dict_get_str_boolean (dict, -                                                              "status-detail", -                                                              _gf_false); -                        ret = gf_cli_gsync_status_output (dict, status_detail); -                break; - -                case GF_GSYNC_OPTION_TYPE_DELETE: -                        if (dict_get_str (dict, "master", &master) != 0) -                                master = "???"; -                        if (dict_get_str (dict, "slave", &slave) != 0) -                                slave = "???"; -                        cli_out ("Deleting " GEOREP " session between %s & %s" -                                 " has been successful", master, slave); -                break; - -                case GF_GSYNC_OPTION_TYPE_CREATE: -                        if (dict_get_str (dict, "master", &master) != 0) -                                master = "???"; -                        if (dict_get_str (dict, "slave", &slave) != 0) -                                slave = "???"; -                        cli_out ("Creating " GEOREP " session between %s & %s" -                                 " has been successful", master, slave); -                break; +    if (rsp.op_ret) { +        cli_err("%s", +                rsp.op_errstr ? rsp.op_errstr : GEOREP " command unsuccessful"); +        ret = rsp.op_ret; +        goto out; +    } + +    ret = dict_get_str(dict, "gsync-status", &gsync_status); +    if (!ret) +        cli_out("%s", gsync_status); + +    ret = dict_get_int32(dict, "type", &type); +    if (ret) { +        gf_log(((call_frame_t *)myframe)->this->name, GF_LOG_ERROR, +               "failed to get type"); +        goto out; +    } + +    switch (type) { +        case GF_GSYNC_OPTION_TYPE_START: +        case GF_GSYNC_OPTION_TYPE_STOP: +            if (dict_get_str(dict, "master", &master) != 0) +                master = "???"; +            if (dict_get_str(dict, "slave", &slave) != 0) +                slave = "???"; + +            cli_out( +                "%s " GEOREP +                " session between %s & %s" +                " has been successful", +                type == GF_GSYNC_OPTION_TYPE_START ? "Starting" : "Stopping", +                master, slave); +            break; + +        case GF_GSYNC_OPTION_TYPE_PAUSE: +        case GF_GSYNC_OPTION_TYPE_RESUME: +            if (dict_get_str(dict, "master", &master) != 0) +                master = "???"; +            if (dict_get_str(dict, "slave", &slave) != 0) +                slave = "???"; + +            cli_out("%s " GEOREP +                    " session between %s & %s" +                    " has been successful", +                    type == GF_GSYNC_OPTION_TYPE_PAUSE ? "Pausing" : "Resuming", +                    master, slave); +            break; + +        case GF_GSYNC_OPTION_TYPE_CONFIG: +            ret = gf_cli_gsync_config_command(dict); +            break; + +        case GF_GSYNC_OPTION_TYPE_STATUS: +            status_detail = dict_get_str_boolean(dict, "status-detail", +                                                 _gf_false); +            ret = gf_cli_gsync_status_output(dict, status_detail); +            break; + +        case GF_GSYNC_OPTION_TYPE_DELETE: +            if (dict_get_str(dict, "master", &master) != 0) +                master = "???"; +            if (dict_get_str(dict, "slave", &slave) != 0) +                slave = "???"; +            cli_out("Deleting " GEOREP +                    " session between %s & %s" +                    " has been successful", +                    master, slave); +            break; + +        case GF_GSYNC_OPTION_TYPE_CREATE: +            if (dict_get_str(dict, "master", &master) != 0) +                master = "???"; +            if (dict_get_str(dict, "slave", &slave) != 0) +                slave = "???"; +            cli_out("Creating " GEOREP +                    " session between %s & %s" +                    " has been successful", +                    master, slave); +            break; -                default: -                        cli_out (GEOREP" command executed successfully"); -        } +        default: +            cli_out(GEOREP " command executed successfully"); +    }  out: -        if (dict) -                dict_unref (dict); -        cli_cmd_broadcast_response (ret); +    if (dict) +        dict_unref(dict); +    cli_cmd_broadcast_response(ret); -        free (rsp.dict.dict_val); +    free(rsp.dict.dict_val); -        return ret; +    return ret;  }  int32_t -gf_cli_sys_exec (call_frame_t *frame, xlator_t *this, void *data) +gf_cli_sys_exec(call_frame_t *frame, xlator_t *this, void *data)  { -        int                      ret    = 0; -        dict_t                  *dict   = NULL; -        gf_cli_req               req = {{0,}}; +    int ret = 0; +    dict_t *dict = NULL; +    gf_cli_req req = {{ +        0, +    }}; -        if (!frame || !this || !data) { -                ret = -1; -                gf_log ("cli", GF_LOG_ERROR, "Invalid data"); -                goto out; -        } +    if (!frame || !this || !data) { +        ret = -1; +        gf_log("cli", GF_LOG_ERROR, "Invalid data"); +        goto out; +    } -        dict = data; +    dict = data; -        ret = cli_to_glusterd (&req, frame, gf_cli_sys_exec_cbk, -                               (xdrproc_t) xdr_gf_cli_req, dict, -                               GLUSTER_CLI_SYS_EXEC, this, cli_rpc_prog, -                               NULL); +    ret = cli_to_glusterd(&req, frame, gf_cli_sys_exec_cbk, +                          (xdrproc_t)xdr_gf_cli_req, dict, GLUSTER_CLI_SYS_EXEC, +                          this, cli_rpc_prog, NULL);  out: -        GF_FREE (req.dict.dict_val); -        return ret; +    GF_FREE(req.dict.dict_val); +    return ret;  }  int32_t -gf_cli_copy_file (call_frame_t *frame, xlator_t *this, void *data) +gf_cli_copy_file(call_frame_t *frame, xlator_t *this, void *data)  { -        int                      ret    = 0; -        dict_t                  *dict   = NULL; -        gf_cli_req               req = {{0,}}; +    int ret = 0; +    dict_t *dict = NULL; +    gf_cli_req req = {{ +        0, +    }}; -        if (!frame || !this || !data) { -                ret = -1; -                gf_log ("cli", GF_LOG_ERROR, "Invalid data"); -                goto out; -        } +    if (!frame || !this || !data) { +        ret = -1; +        gf_log("cli", GF_LOG_ERROR, "Invalid data"); +        goto out; +    } -        dict = data; +    dict = data; -        ret = cli_to_glusterd (&req, frame, gf_cli_copy_file_cbk, -                               (xdrproc_t) xdr_gf_cli_req, dict, -                               GLUSTER_CLI_COPY_FILE, this, cli_rpc_prog, -                               NULL); +    ret = cli_to_glusterd(&req, frame, gf_cli_copy_file_cbk, +                          (xdrproc_t)xdr_gf_cli_req, dict, +                          GLUSTER_CLI_COPY_FILE, this, cli_rpc_prog, NULL);  out: -        GF_FREE (req.dict.dict_val); -        return ret; +    GF_FREE(req.dict.dict_val); +    return ret;  }  int32_t -gf_cli_gsync_set (call_frame_t *frame, xlator_t *this, -                     void *data) +gf_cli_gsync_set(call_frame_t *frame, xlator_t *this, void *data)  { -        int                      ret    = 0; -        dict_t                  *dict   = NULL; -        gf_cli_req               req = {{0,}}; +    int ret = 0; +    dict_t *dict = NULL; +    gf_cli_req req = {{ +        0, +    }}; -        if (!frame || !this || !data) { -                ret = -1; -                goto out; -        } +    if (!frame || !this || !data) { +        ret = -1; +        goto out; +    } -        dict = data; +    dict = data; -        ret = cli_to_glusterd (&req, frame, gf_cli_gsync_set_cbk, -                               (xdrproc_t) xdr_gf_cli_req, dict, -                               GLUSTER_CLI_GSYNC_SET, this, cli_rpc_prog, -                               NULL); +    ret = cli_to_glusterd(&req, frame, gf_cli_gsync_set_cbk, +                          (xdrproc_t)xdr_gf_cli_req, dict, +                          GLUSTER_CLI_GSYNC_SET, this, cli_rpc_prog, NULL);  out: -        GF_FREE (req.dict.dict_val); +    GF_FREE(req.dict.dict_val); -        return ret; +    return ret;  } -  int -cli_profile_info_percentage_cmp (void *a, void *b) -{ -        cli_profile_info_t *ia = NULL; -        cli_profile_info_t *ib = NULL; -        int                ret = 0; - -        ia = a; -        ib = b; -        if (ia->percentage_avg_latency < ib->percentage_avg_latency) -                ret = -1; -        else if (ia->percentage_avg_latency > ib->percentage_avg_latency) -                ret = 1; -        else -                ret = 0; -        return ret; +cli_profile_info_percentage_cmp(void *a, void *b) +{ +    cli_profile_info_t *ia = NULL; +    cli_profile_info_t *ib = NULL; +    int ret = 0; + +    ia = a; +    ib = b; +    if (ia->percentage_avg_latency < ib->percentage_avg_latency) +        ret = -1; +    else if (ia->percentage_avg_latency > ib->percentage_avg_latency) +        ret = 1; +    else +        ret = 0; +    return ret;  } -  void -cmd_profile_volume_brick_out (dict_t *dict, int count, int interval) -{ -        char                    key[256] = {0}; -        int                     i = 0; -        uint64_t                sec = 0; -        uint64_t                r_count = 0; -        uint64_t                w_count = 0; -        uint64_t                rb_counts[32] = {0}; -        uint64_t                wb_counts[32] = {0}; -        cli_profile_info_t      profile_info[GF_FOP_MAXVALUE] = {{0}}; -        cli_profile_info_t      upcall_info[GF_UPCALL_FLAGS_MAXVALUE] = {{0},}; -        char                    output[128] = {0}; -        int                     per_line = 0; -        char                    read_blocks[128] = {0}; -        char                    write_blocks[128] = {0}; -        int                     index = 0; -        int                     is_header_printed = 0; -        int                     ret = 0; -        double                  total_percentage_latency = 0; - -        for (i = 0; i < 32; i++) { -                snprintf (key, sizeof (key), "%d-%d-read-%d", count, -                          interval, (1 << i)); -                ret = dict_get_uint64 (dict, key, &rb_counts[i]); -                if (ret) { -                        gf_log ("cli", GF_LOG_DEBUG, -                                "failed to get %s from dict", key); -                } +cmd_profile_volume_brick_out(dict_t *dict, int count, int interval) +{ +    char key[256] = {0}; +    int i = 0; +    uint64_t sec = 0; +    uint64_t r_count = 0; +    uint64_t w_count = 0; +    uint64_t rb_counts[32] = {0}; +    uint64_t wb_counts[32] = {0}; +    cli_profile_info_t profile_info[GF_FOP_MAXVALUE] = {{0}}; +    cli_profile_info_t upcall_info[GF_UPCALL_FLAGS_MAXVALUE] = { +        {0}, +    }; +    char output[128] = {0}; +    int per_line = 0; +    char read_blocks[128] = {0}; +    char write_blocks[128] = {0}; +    int index = 0; +    int is_header_printed = 0; +    int ret = 0; +    double total_percentage_latency = 0; + +    for (i = 0; i < 32; i++) { +        snprintf(key, sizeof(key), "%d-%d-read-%d", count, interval, (1 << i)); +        ret = dict_get_uint64(dict, key, &rb_counts[i]); +        if (ret) { +            gf_log("cli", GF_LOG_DEBUG, "failed to get %s from dict", key);          } +    } -        for (i = 0; i < 32; i++) { -                snprintf (key, sizeof (key), "%d-%d-write-%d", count, interval, -                          (1<<i)); -                ret = dict_get_uint64 (dict, key, &wb_counts[i]); -                if (ret) { -                        gf_log ("cli", GF_LOG_DEBUG, -                                "failed to get %s from dict", key); -                } +    for (i = 0; i < 32; i++) { +        snprintf(key, sizeof(key), "%d-%d-write-%d", count, interval, (1 << i)); +        ret = dict_get_uint64(dict, key, &wb_counts[i]); +        if (ret) { +            gf_log("cli", GF_LOG_DEBUG, "failed to get %s from dict", key);          } +    } -        for (i = 0; i < GF_UPCALL_FLAGS_MAXVALUE; i++) { -                snprintf (key, sizeof (key), "%d-%d-%d-upcall-hits", count, -                          interval, i); -                ret = dict_get_uint64 (dict, key, &upcall_info[i].fop_hits); -                if (ret) { -                        gf_log ("cli", GF_LOG_DEBUG, -                                "failed to get %s from dict", key); -                } -                upcall_info[i].fop_name = (char *)gf_upcall_list[i]; +    for (i = 0; i < GF_UPCALL_FLAGS_MAXVALUE; i++) { +        snprintf(key, sizeof(key), "%d-%d-%d-upcall-hits", count, interval, i); +        ret = dict_get_uint64(dict, key, &upcall_info[i].fop_hits); +        if (ret) { +            gf_log("cli", GF_LOG_DEBUG, "failed to get %s from dict", key);          } +        upcall_info[i].fop_name = (char *)gf_upcall_list[i]; +    } -        for (i = 0; i < GF_FOP_MAXVALUE; i++) { -                snprintf (key, sizeof (key), "%d-%d-%d-hits", count, -                          interval, i); -                ret = dict_get_uint64 (dict, key, &profile_info[i].fop_hits); -                if (ret) { -                        gf_log ("cli", GF_LOG_DEBUG, -                                "failed to get %s from dict", key); -                } - -                snprintf (key, sizeof (key), "%d-%d-%d-avglatency", count, -                          interval, i); -                ret = dict_get_double (dict, key, &profile_info[i].avg_latency); -                if (ret) { -                        gf_log ("cli", GF_LOG_DEBUG, -                                "failed to get %s from dict", key); -                } - -                snprintf (key, sizeof (key), "%d-%d-%d-minlatency", count, -                          interval, i); -                ret = dict_get_double (dict, key, &profile_info[i].min_latency); -                if (ret) { -                        gf_log ("cli", GF_LOG_DEBUG, -                                "failed to get %s from dict", key); -                } - -                snprintf (key, sizeof (key), "%d-%d-%d-maxlatency", count, -                          interval, i); -                ret = dict_get_double (dict, key, &profile_info[i].max_latency); -                if (ret) { -                        gf_log ("cli", GF_LOG_DEBUG, -                                "failed to get %s from dict", key); -                } -                profile_info[i].fop_name = (char *)gf_fop_list[i]; - -                total_percentage_latency += -                       (profile_info[i].fop_hits * profile_info[i].avg_latency); -        } -        if (total_percentage_latency) { -                for (i = 0; i < GF_FOP_MAXVALUE; i++) { -                        profile_info[i].percentage_avg_latency = 100 * ( -                     (profile_info[i].avg_latency* profile_info[i].fop_hits) / -                                total_percentage_latency); -                } -                gf_array_insertionsort (profile_info, 1, GF_FOP_MAXVALUE - 1, -                                    sizeof (cli_profile_info_t), -                                    cli_profile_info_percentage_cmp); -        } -        snprintf (key, sizeof (key), "%d-%d-duration", count, interval); -        ret = dict_get_uint64 (dict, key, &sec); +    for (i = 0; i < GF_FOP_MAXVALUE; i++) { +        snprintf(key, sizeof(key), "%d-%d-%d-hits", count, interval, i); +        ret = dict_get_uint64(dict, key, &profile_info[i].fop_hits);          if (ret) { -                gf_log ("cli", GF_LOG_DEBUG, "failed to get %s from dict", key); +            gf_log("cli", GF_LOG_DEBUG, "failed to get %s from dict", key);          } -        snprintf (key, sizeof (key), "%d-%d-total-read", count, interval); -        ret = dict_get_uint64 (dict, key, &r_count); +        snprintf(key, sizeof(key), "%d-%d-%d-avglatency", count, interval, i); +        ret = dict_get_double(dict, key, &profile_info[i].avg_latency);          if (ret) { -                gf_log ("cli", GF_LOG_DEBUG, "failed to get %s from dict", key); +            gf_log("cli", GF_LOG_DEBUG, "failed to get %s from dict", key);          } -        snprintf (key, sizeof (key), "%d-%d-total-write", count, interval); -        ret = dict_get_uint64 (dict, key, &w_count); +        snprintf(key, sizeof(key), "%d-%d-%d-minlatency", count, interval, i); +        ret = dict_get_double(dict, key, &profile_info[i].min_latency);          if (ret) { -                gf_log ("cli", GF_LOG_DEBUG, "failed to get %s from dict", key); +            gf_log("cli", GF_LOG_DEBUG, "failed to get %s from dict", key);          } -        if (interval == -1) -                cli_out ("Cumulative Stats:"); -        else -                cli_out ("Interval %d Stats:", interval); -        snprintf (output, sizeof (output), "%14s", "Block Size:"); -        snprintf (read_blocks, sizeof (read_blocks), "%14s", "No. of Reads:"); -        snprintf (write_blocks, sizeof (write_blocks), "%14s", "No. of Writes:"); -        index = 14; -        for (i = 0; i < 32; i++) { -                if ((rb_counts[i] == 0) && (wb_counts[i] == 0)) -                        continue; -                per_line++; -                snprintf (output+index, sizeof (output)-index, "%19db+ ", (1<<i)); -                if (rb_counts[i]) { -                        snprintf (read_blocks+index, sizeof (read_blocks)-index, -                                  "%21"PRId64" ", rb_counts[i]); -                } else { -                        snprintf (read_blocks+index, sizeof (read_blocks)-index, -                                  "%21s ", "0"); -                } -                if (wb_counts[i]) { -                        snprintf (write_blocks+index, sizeof (write_blocks)-index, -                                  "%21"PRId64" ", wb_counts[i]); -                } else { -                        snprintf (write_blocks+index, sizeof (write_blocks)-index, -                                  "%21s ", "0"); -                } -                index += 22; -                if (per_line == 3) { -                        cli_out ("%s", output); -                        cli_out ("%s", read_blocks); -                        cli_out ("%s", write_blocks); -                        cli_out (" "); -                        per_line = 0; -                        snprintf (output, sizeof (output), "%14s", "Block Size:"); -                        snprintf (read_blocks, sizeof (read_blocks), "%14s", -                                  "No. of Reads:"); -                        snprintf (write_blocks, sizeof (write_blocks), "%14s", -                                  "No. of Writes:"); -                        index = 14; -                } +        snprintf(key, sizeof(key), "%d-%d-%d-maxlatency", count, interval, i); +        ret = dict_get_double(dict, key, &profile_info[i].max_latency); +        if (ret) { +            gf_log("cli", GF_LOG_DEBUG, "failed to get %s from dict", key);          } +        profile_info[i].fop_name = (char *)gf_fop_list[i]; -        if (per_line != 0) { -                cli_out ("%s", output); -                cli_out ("%s", read_blocks); -                cli_out ("%s", write_blocks); -        } +        total_percentage_latency += (profile_info[i].fop_hits * +                                     profile_info[i].avg_latency); +    } +    if (total_percentage_latency) {          for (i = 0; i < GF_FOP_MAXVALUE; i++) { -                if (profile_info[i].fop_hits == 0) -                        continue; -                if (is_header_printed == 0) { -                        cli_out ("%10s %13s %13s %13s %14s %11s", "%-latency", -                                 "Avg-latency", "Min-Latency", "Max-Latency", -                                 "No. of calls", "Fop"); -                        cli_out ("%10s %13s %13s %13s %14s %11s", "---------", -                                 "-----------", "-----------", "-----------", -                                 "------------", "----"); -                        is_header_printed = 1; -                } -                if (profile_info[i].fop_hits) { -                        cli_out ("%10.2lf %10.2lf us %10.2lf us %10.2lf us" -                                 " %14"PRId64" %11s", -                                 profile_info[i].percentage_avg_latency, -                                 profile_info[i].avg_latency, -                                 profile_info[i].min_latency, -                                 profile_info[i].max_latency, -                                 profile_info[i].fop_hits, -                                 profile_info[i].fop_name); -                } -        } - -        for (i = 0; i < GF_UPCALL_FLAGS_MAXVALUE; i++) { -                if (upcall_info[i].fop_hits == 0) -                        continue; -                if (upcall_info[i].fop_hits) { -                        cli_out ("%10.2lf %10.2lf us %10.2lf us %10.2lf us" -                                 " %14"PRId64" %11s", -                                 upcall_info[i].percentage_avg_latency, -                                 upcall_info[i].avg_latency, -                                 upcall_info[i].min_latency, -                                 upcall_info[i].max_latency, -                                 upcall_info[i].fop_hits, -                                 upcall_info[i].fop_name); -                } +            profile_info[i] +                .percentage_avg_latency = 100 * ((profile_info[i].avg_latency * +                                                  profile_info[i].fop_hits) / +                                                 total_percentage_latency); +        } +        gf_array_insertionsort(profile_info, 1, GF_FOP_MAXVALUE - 1, +                               sizeof(cli_profile_info_t), +                               cli_profile_info_percentage_cmp); +    } +    snprintf(key, sizeof(key), "%d-%d-duration", count, interval); +    ret = dict_get_uint64(dict, key, &sec); +    if (ret) { +        gf_log("cli", GF_LOG_DEBUG, "failed to get %s from dict", key); +    } + +    snprintf(key, sizeof(key), "%d-%d-total-read", count, interval); +    ret = dict_get_uint64(dict, key, &r_count); +    if (ret) { +        gf_log("cli", GF_LOG_DEBUG, "failed to get %s from dict", key); +    } + +    snprintf(key, sizeof(key), "%d-%d-total-write", count, interval); +    ret = dict_get_uint64(dict, key, &w_count); +    if (ret) { +        gf_log("cli", GF_LOG_DEBUG, "failed to get %s from dict", key); +    } + +    if (interval == -1) +        cli_out("Cumulative Stats:"); +    else +        cli_out("Interval %d Stats:", interval); +    snprintf(output, sizeof(output), "%14s", "Block Size:"); +    snprintf(read_blocks, sizeof(read_blocks), "%14s", "No. of Reads:"); +    snprintf(write_blocks, sizeof(write_blocks), "%14s", "No. of Writes:"); +    index = 14; +    for (i = 0; i < 32; i++) { +        if ((rb_counts[i] == 0) && (wb_counts[i] == 0)) +            continue; +        per_line++; +        snprintf(output + index, sizeof(output) - index, "%19db+ ", (1 << i)); +        if (rb_counts[i]) { +            snprintf(read_blocks + index, sizeof(read_blocks) - index, +                     "%21" PRId64 " ", rb_counts[i]); +        } else { +            snprintf(read_blocks + index, sizeof(read_blocks) - index, "%21s ", +                     "0");          } - -        cli_out (" "); -        cli_out ("%12s: %"PRId64" seconds", "Duration", sec); -        cli_out ("%12s: %"PRId64" bytes", "Data Read", r_count); -        cli_out ("%12s: %"PRId64" bytes", "Data Written", w_count); -        cli_out (" "); +        if (wb_counts[i]) { +            snprintf(write_blocks + index, sizeof(write_blocks) - index, +                     "%21" PRId64 " ", wb_counts[i]); +        } else { +            snprintf(write_blocks + index, sizeof(write_blocks) - index, +                     "%21s ", "0"); +        } +        index += 22; +        if (per_line == 3) { +            cli_out("%s", output); +            cli_out("%s", read_blocks); +            cli_out("%s", write_blocks); +            cli_out(" "); +            per_line = 0; +            snprintf(output, sizeof(output), "%14s", "Block Size:"); +            snprintf(read_blocks, sizeof(read_blocks), "%14s", "No. of Reads:"); +            snprintf(write_blocks, sizeof(write_blocks), "%14s", +                     "No. of Writes:"); +            index = 14; +        } +    } + +    if (per_line != 0) { +        cli_out("%s", output); +        cli_out("%s", read_blocks); +        cli_out("%s", write_blocks); +    } +    for (i = 0; i < GF_FOP_MAXVALUE; i++) { +        if (profile_info[i].fop_hits == 0) +            continue; +        if (is_header_printed == 0) { +            cli_out("%10s %13s %13s %13s %14s %11s", "%-latency", "Avg-latency", +                    "Min-Latency", "Max-Latency", "No. of calls", "Fop"); +            cli_out("%10s %13s %13s %13s %14s %11s", "---------", "-----------", +                    "-----------", "-----------", "------------", "----"); +            is_header_printed = 1; +        } +        if (profile_info[i].fop_hits) { +            cli_out( +                "%10.2lf %10.2lf us %10.2lf us %10.2lf us" +                " %14" PRId64 " %11s", +                profile_info[i].percentage_avg_latency, +                profile_info[i].avg_latency, profile_info[i].min_latency, +                profile_info[i].max_latency, profile_info[i].fop_hits, +                profile_info[i].fop_name); +        } +    } + +    for (i = 0; i < GF_UPCALL_FLAGS_MAXVALUE; i++) { +        if (upcall_info[i].fop_hits == 0) +            continue; +        if (upcall_info[i].fop_hits) { +            cli_out( +                "%10.2lf %10.2lf us %10.2lf us %10.2lf us" +                " %14" PRId64 " %11s", +                upcall_info[i].percentage_avg_latency, +                upcall_info[i].avg_latency, upcall_info[i].min_latency, +                upcall_info[i].max_latency, upcall_info[i].fop_hits, +                upcall_info[i].fop_name); +        } +    } + +    cli_out(" "); +    cli_out("%12s: %" PRId64 " seconds", "Duration", sec); +    cli_out("%12s: %" PRId64 " bytes", "Data Read", r_count); +    cli_out("%12s: %" PRId64 " bytes", "Data Written", w_count); +    cli_out(" ");  }  int32_t -gf_cli_profile_volume_cbk (struct rpc_req *req, struct iovec *iov, -                              int count, void *myframe) -{ -        gf_cli_rsp                        rsp   = {0,}; -        int                               ret   = -1; -        dict_t                            *dict = NULL; -        gf1_cli_stats_op                  op = GF_CLI_STATS_NONE; -        char                              key[256] = {0}; -        int                               interval = 0; -        int                               i = 1; -        int32_t                           brick_count = 0; -        char                              *volname = NULL; -        char                              *brick = NULL; -        char                              str[1024] = {0,}; -        int                               stats_cleared = 0; -        gf1_cli_info_op                   info_op = GF_CLI_INFO_NONE; - -        GF_ASSERT (myframe); - -        if (-1 == req->rpc_status) { -                goto out; +gf_cli_profile_volume_cbk(struct rpc_req *req, struct iovec *iov, int count, +                          void *myframe) +{ +    gf_cli_rsp rsp = { +        0, +    }; +    int ret = -1; +    dict_t *dict = NULL; +    gf1_cli_stats_op op = GF_CLI_STATS_NONE; +    char key[256] = {0}; +    int interval = 0; +    int i = 1; +    int32_t brick_count = 0; +    char *volname = NULL; +    char *brick = NULL; +    char str[1024] = { +        0, +    }; +    int stats_cleared = 0; +    gf1_cli_info_op info_op = GF_CLI_INFO_NONE; + +    GF_ASSERT(myframe); + +    if (-1 == req->rpc_status) { +        goto out; +    } + +    gf_log("cli", GF_LOG_DEBUG, "Received resp to profile"); +    ret = xdr_to_generic(*iov, &rsp, (xdrproc_t)xdr_gf_cli_rsp); +    if (ret < 0) { +        gf_log(((call_frame_t *)myframe)->this->name, GF_LOG_ERROR, +               "Failed to decode xdr response"); +        goto out; +    } + +    dict = dict_new(); + +    if (!dict) { +        ret = -1; +        goto out; +    } + +    ret = dict_unserialize(rsp.dict.dict_val, rsp.dict.dict_len, &dict); + +    if (ret) { +        gf_log("", GF_LOG_ERROR, "Unable to allocate memory"); +        goto out; +    } else { +        dict->extra_stdfree = rsp.dict.dict_val; +    } + +    if (global_state->mode & GLUSTER_MODE_XML) { +        ret = cli_xml_output_vol_profile(dict, rsp.op_ret, rsp.op_errno, +                                         rsp.op_errstr); +        if (ret) +            gf_log("cli", GF_LOG_ERROR, "Error outputting to xml"); +        goto out; +    } + +    ret = dict_get_str(dict, "volname", &volname); +    if (ret) +        goto out; + +    ret = dict_get_int32(dict, "op", (int32_t *)&op); +    if (ret) +        goto out; + +    if (rsp.op_ret && strcmp(rsp.op_errstr, "")) { +        cli_err("%s", rsp.op_errstr); +    } else { +        switch (op) { +            case GF_CLI_STATS_START: +                cli_out("Starting volume profile on %s has been %s ", volname, +                        (rsp.op_ret) ? "unsuccessful" : "successful"); +                break; +            case GF_CLI_STATS_STOP: +                cli_out("Stopping volume profile on %s has been %s ", volname, +                        (rsp.op_ret) ? "unsuccessful" : "successful"); +                break; +            case GF_CLI_STATS_INFO: +                break; +            default: +                cli_out("volume profile on %s has been %s ", volname, +                        (rsp.op_ret) ? "unsuccessful" : "successful"); +                break;          } +    } -        gf_log ("cli", GF_LOG_DEBUG, "Received resp to profile"); -        ret = xdr_to_generic (*iov, &rsp, (xdrproc_t)xdr_gf_cli_rsp); -        if (ret < 0) { -                gf_log (((call_frame_t *) myframe)->this->name, GF_LOG_ERROR, -                        "Failed to decode xdr response"); -                goto out; -        } +    if (rsp.op_ret) { +        ret = rsp.op_ret; +        goto out; +    } -        dict = dict_new (); +    if (GF_CLI_STATS_INFO != op) { +        ret = 0; +        goto out; +    } -        if (!dict) { -                ret = -1; -                goto out; -        } +    ret = dict_get_int32(dict, "info-op", (int32_t *)&info_op); +    if (ret) +        goto out; + +    ret = dict_get_int32(dict, "count", &brick_count); +    if (ret) +        goto out; -        ret = dict_unserialize (rsp.dict.dict_val, -                                rsp.dict.dict_len, -                                &dict); +    if (!brick_count) { +        cli_err("All bricks of volume %s are down.", volname); +        goto out; +    } +    while (i <= brick_count) { +        snprintf(key, sizeof(key), "%d-brick", i); +        ret = dict_get_str(dict, key, &brick);          if (ret) { -                gf_log ("", GF_LOG_ERROR, -                                "Unable to allocate memory"); -                goto out; -        } else { -                dict->extra_stdfree = rsp.dict.dict_val; +            gf_log("cli", GF_LOG_ERROR, "Couldn't get brick name"); +            goto out;          } -        if (global_state->mode & GLUSTER_MODE_XML) { -                ret = cli_xml_output_vol_profile (dict, rsp.op_ret, -                                                  rsp.op_errno, -                                                  rsp.op_errstr); -                if (ret) -                        gf_log ("cli", GF_LOG_ERROR, -                                "Error outputting to xml"); -                goto out; -        } +        ret = dict_get_str_boolean(dict, "nfs", _gf_false); -        ret = dict_get_str (dict, "volname", &volname);          if (ret) -                goto out; - -        ret = dict_get_int32 (dict, "op", (int32_t*)&op); -        if (ret) -                goto out; - -        if (rsp.op_ret && strcmp (rsp.op_errstr, "")) { -                cli_err ("%s", rsp.op_errstr); +            snprintf(str, sizeof(str), "NFS Server : %s", brick); +        else +            snprintf(str, sizeof(str), "Brick: %s", brick); +        cli_out("%s", str); +        memset(str, '-', strlen(str)); +        cli_out("%s", str); + +        if (GF_CLI_INFO_CLEAR == info_op) { +            snprintf(key, sizeof(key), "%d-stats-cleared", i); +            ret = dict_get_int32(dict, key, &stats_cleared); +            if (ret) +                goto out; +            cli_out(stats_cleared ? "Cleared stats." +                                  : "Failed to clear stats.");          } else { -                switch (op) { -                case GF_CLI_STATS_START: -                        cli_out ("Starting volume profile on %s has been %s ", -                                 volname, -                                 (rsp.op_ret) ? "unsuccessful": "successful"); -                        break; -                case GF_CLI_STATS_STOP: -                        cli_out ("Stopping volume profile on %s has been %s ", -                                 volname, -                                 (rsp.op_ret) ? "unsuccessful": "successful"); -                        break; -                case GF_CLI_STATS_INFO: -                        break; -                default: -                        cli_out ("volume profile on %s has been %s ", -                                 volname, -                                 (rsp.op_ret) ? "unsuccessful": "successful"); -                        break; -                } -        } - -        if (rsp.op_ret) { -                ret = rsp.op_ret; -                goto out; -        } +            snprintf(key, sizeof(key), "%d-cumulative", i); +            ret = dict_get_int32(dict, key, &interval); +            if (ret == 0) +                cmd_profile_volume_brick_out(dict, i, interval); -        if (GF_CLI_STATS_INFO != op) { -                ret = 0; -                goto out; +            snprintf(key, sizeof(key), "%d-interval", i); +            ret = dict_get_int32(dict, key, &interval); +            if (ret == 0) +                cmd_profile_volume_brick_out(dict, i, interval);          } - -        ret = dict_get_int32 (dict, "info-op", (int32_t*)&info_op); -        if (ret) -                goto out; - -        ret = dict_get_int32 (dict, "count", &brick_count); -        if (ret) -                goto out; - -        if (!brick_count) { -                cli_err ("All bricks of volume %s are down.", volname); -                goto out; -        } - -        while (i <= brick_count) { -                snprintf (key, sizeof (key), "%d-brick", i); -                ret = dict_get_str (dict, key, &brick); -                if (ret) { -                        gf_log ("cli", GF_LOG_ERROR, "Couldn't get brick name"); -                        goto out; -                } - -                ret = dict_get_str_boolean (dict, "nfs", _gf_false); - -                if (ret) -                        snprintf (str, sizeof (str), "NFS Server : %s", brick); -                else -                        snprintf (str, sizeof (str), "Brick: %s", brick); -                cli_out ("%s", str); -                memset (str, '-', strlen (str)); -                cli_out ("%s", str); - -                if (GF_CLI_INFO_CLEAR == info_op) { -                        snprintf (key, sizeof (key), "%d-stats-cleared", i); -                        ret = dict_get_int32 (dict, key, &stats_cleared); -                        if (ret) -                                goto out; -                        cli_out (stats_cleared ? "Cleared stats." : -                                                 "Failed to clear stats."); -                } else { -                        snprintf (key, sizeof (key), "%d-cumulative", i); -                        ret = dict_get_int32 (dict, key, &interval); -                        if (ret == 0) -                                cmd_profile_volume_brick_out (dict, i, -                                                              interval); - -                        snprintf (key, sizeof (key), "%d-interval", i); -                        ret = dict_get_int32 (dict, key, &interval); -                        if (ret == 0) -                                cmd_profile_volume_brick_out (dict, i, -                                                              interval); -                } -                i++; -        } -        ret = rsp.op_ret; +        i++; +    } +    ret = rsp.op_ret;  out: -        if (dict) -                dict_unref (dict); -        free (rsp.op_errstr); -        cli_cmd_broadcast_response (ret); -        return ret; +    if (dict) +        dict_unref(dict); +    free(rsp.op_errstr); +    cli_cmd_broadcast_response(ret); +    return ret;  }  int32_t -gf_cli_profile_volume (call_frame_t *frame, xlator_t *this, void *data) +gf_cli_profile_volume(call_frame_t *frame, xlator_t *this, void *data)  { -        int                        ret   = -1; -        gf_cli_req                 req   = {{0,}}; -        dict_t                     *dict = NULL; +    int ret = -1; +    gf_cli_req req = {{ +        0, +    }}; +    dict_t *dict = NULL; -        GF_ASSERT (frame); -        GF_ASSERT (this); -        GF_ASSERT (data); +    GF_ASSERT(frame); +    GF_ASSERT(this); +    GF_ASSERT(data); -        if (!frame || !this || !data) -                goto out; -        dict = data; +    if (!frame || !this || !data) +        goto out; +    dict = data; -        ret = cli_to_glusterd (&req, frame, gf_cli_profile_volume_cbk, -                               (xdrproc_t) xdr_gf_cli_req, dict, -                               GLUSTER_CLI_PROFILE_VOLUME, this, cli_rpc_prog, -                               NULL); +    ret = cli_to_glusterd(&req, frame, gf_cli_profile_volume_cbk, +                          (xdrproc_t)xdr_gf_cli_req, dict, +                          GLUSTER_CLI_PROFILE_VOLUME, this, cli_rpc_prog, NULL);  out: -        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); +    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret); -        GF_FREE (req.dict.dict_val); -        return ret; +    GF_FREE(req.dict.dict_val); +    return ret;  }  int32_t -gf_cli_top_volume_cbk (struct rpc_req *req, struct iovec *iov, -                              int count, void *myframe) -{ -        gf_cli_rsp                        rsp   = {0,}; -        int                               ret   = -1; -        dict_t                           *dict = NULL; -        gf1_cli_stats_op                  op = GF_CLI_STATS_NONE; -        char                              key[256] = {0}; -        int                               i = 0; -        int32_t                           brick_count = 0; -        char                              brick[1024]; -        int32_t                           members = 0; -        char                             *filename; -        char                             *bricks; -        uint64_t                          value = 0; -        int32_t                           j = 0; -        gf1_cli_top_op                    top_op = GF_CLI_TOP_NONE; -        uint64_t                          nr_open = 0; -        uint64_t                          max_nr_open = 0; -        double                            throughput = 0; -        double                            time = 0; -        int32_t                           time_sec = 0; -        long int                          time_usec = 0; -        char                              timestr[256] = {0, }; -        char                             *openfd_str = NULL; -        gf_boolean_t                      nfs = _gf_false; -        gf_boolean_t                      clear_stats = _gf_false; -        int                               stats_cleared = 0; - -        GF_ASSERT (myframe); - -        if (-1 == req->rpc_status) { -                goto out; -        } +gf_cli_top_volume_cbk(struct rpc_req *req, struct iovec *iov, int count, +                      void *myframe) +{ +    gf_cli_rsp rsp = { +        0, +    }; +    int ret = -1; +    dict_t *dict = NULL; +    gf1_cli_stats_op op = GF_CLI_STATS_NONE; +    char key[256] = {0}; +    int i = 0; +    int32_t brick_count = 0; +    char brick[1024]; +    int32_t members = 0; +    char *filename; +    char *bricks; +    uint64_t value = 0; +    int32_t j = 0; +    gf1_cli_top_op top_op = GF_CLI_TOP_NONE; +    uint64_t nr_open = 0; +    uint64_t max_nr_open = 0; +    double throughput = 0; +    double time = 0; +    int32_t time_sec = 0; +    long int time_usec = 0; +    char timestr[256] = { +        0, +    }; +    char *openfd_str = NULL; +    gf_boolean_t nfs = _gf_false; +    gf_boolean_t clear_stats = _gf_false; +    int stats_cleared = 0; + +    GF_ASSERT(myframe); + +    if (-1 == req->rpc_status) { +        goto out; +    } + +    gf_log("cli", GF_LOG_DEBUG, "Received resp to top"); +    ret = xdr_to_generic(*iov, &rsp, (xdrproc_t)xdr_gf_cli_rsp); +    if (ret < 0) { +        gf_log(((call_frame_t *)myframe)->this->name, GF_LOG_ERROR, +               "Failed to decode xdr response"); +        goto out; +    } + +    if (rsp.op_ret) { +        if (strcmp(rsp.op_errstr, "")) +            cli_err("%s", rsp.op_errstr); +        cli_err("volume top unsuccessful"); +        ret = rsp.op_ret; +        goto out; +    } -        gf_log ("cli", GF_LOG_DEBUG, "Received resp to top"); -        ret = xdr_to_generic (*iov, &rsp, (xdrproc_t)xdr_gf_cli_rsp); -        if (ret < 0) { -                gf_log (((call_frame_t *) myframe)->this->name, GF_LOG_ERROR, -                        "Failed to decode xdr response"); -                goto out; -        } +    dict = dict_new(); -        if (rsp.op_ret) { -                if (strcmp (rsp.op_errstr, "")) -                        cli_err ("%s", rsp.op_errstr); -                cli_err ("volume top unsuccessful"); -                ret = rsp.op_ret; -                goto out; -        } +    if (!dict) { +        ret = -1; +        goto out; +    } -        dict = dict_new (); +    ret = dict_unserialize(rsp.dict.dict_val, rsp.dict.dict_len, &dict); -        if (!dict) { -                ret = -1; -                goto out; -        } +    if (ret) { +        gf_log("", GF_LOG_ERROR, "Unable to allocate memory"); +        goto out; +    } -        ret = dict_unserialize (rsp.dict.dict_val, -                                rsp.dict.dict_len, -                                &dict); +    ret = dict_get_int32(dict, "op", (int32_t *)&op); +    if (op != GF_CLI_STATS_TOP) { +        ret = 0; +        goto out; +    } + +    if (global_state->mode & GLUSTER_MODE_XML) { +        ret = cli_xml_output_vol_top(dict, rsp.op_ret, rsp.op_errno, +                                     rsp.op_errstr);          if (ret) { -                gf_log ("", GF_LOG_ERROR, -                                "Unable to allocate memory"); -                goto out; +            gf_log("cli", GF_LOG_ERROR, "Error outputting to xml");          } +        goto out; +    } -        ret = dict_get_int32 (dict, "op", (int32_t*)&op); +    ret = dict_get_int32(dict, "count", &brick_count); +    if (ret) +        goto out; +    snprintf(key, sizeof(key), "%d-top-op", 1); +    ret = dict_get_int32(dict, key, (int32_t *)&top_op); +    if (ret) +        goto out; -        if (op != GF_CLI_STATS_TOP) { -                ret = 0; +    clear_stats = dict_get_str_boolean(dict, "clear-stats", _gf_false); + +    while (i < brick_count) { +        i++; +        snprintf(brick, sizeof(brick), "%d-brick", i); +        ret = dict_get_str(dict, brick, &bricks); +        if (ret) +            goto out; + +        nfs = dict_get_str_boolean(dict, "nfs", _gf_false); + +        if (clear_stats) { +            snprintf(key, sizeof(key), "%d-stats-cleared", i); +            ret = dict_get_int32(dict, key, &stats_cleared); +            if (ret)                  goto out; +            cli_out(stats_cleared ? "Cleared stats for %s %s" +                                  : "Failed to clear stats for %s %s", +                    nfs ? "NFS server on" : "brick", bricks); +            continue;          } -        if (global_state->mode & GLUSTER_MODE_XML) { -                ret = cli_xml_output_vol_top (dict, rsp.op_ret, -                                              rsp.op_errno, -                                              rsp.op_errstr); -                if (ret) { -                        gf_log ("cli", GF_LOG_ERROR, -                                "Error outputting to xml"); +        if (nfs) +            cli_out("NFS Server : %s", bricks); +        else +            cli_out("Brick: %s", bricks); + +        snprintf(key, sizeof(key), "%d-members", i); +        ret = dict_get_int32(dict, key, &members); + +        switch (top_op) { +            case GF_CLI_TOP_OPEN: +                snprintf(key, sizeof(key), "%d-current-open", i); +                ret = dict_get_uint64(dict, key, &nr_open); +                if (ret) +                    break; +                snprintf(key, sizeof(key), "%d-max-open", i); +                ret = dict_get_uint64(dict, key, &max_nr_open); +                if (ret) +                    goto out; +                snprintf(key, sizeof(key), "%d-max-openfd-time", i); +                ret = dict_get_str(dict, key, &openfd_str); +                if (ret) +                    goto out; +                cli_out("Current open fds: %" PRIu64 +                        ", Max open" +                        " fds: %" PRIu64 ", Max openfd time: %s", +                        nr_open, max_nr_open, openfd_str); +            case GF_CLI_TOP_READ: +            case GF_CLI_TOP_WRITE: +            case GF_CLI_TOP_OPENDIR: +            case GF_CLI_TOP_READDIR: +                if (!members) { +                    continue; +                } +                cli_out("Count\t\tfilename\n======================="); +                break; +            case GF_CLI_TOP_READ_PERF: +            case GF_CLI_TOP_WRITE_PERF: +                snprintf(key, sizeof(key), "%d-throughput", i); +                ret = dict_get_double(dict, key, &throughput); +                if (!ret) { +                    snprintf(key, sizeof(key), "%d-time", i); +                    ret = dict_get_double(dict, key, &time);                  } +                if (!ret) +                    cli_out("Throughput %.2f MBps time %.4f secs", throughput, +                            time / 1e6); + +                if (!members) { +                    continue; +                } +                cli_out("%*s %-*s %-*s", VOL_TOP_PERF_SPEED_WIDTH, "MBps", +                        VOL_TOP_PERF_FILENAME_DEF_WIDTH, "Filename", +                        VOL_TOP_PERF_TIME_WIDTH, "Time"); +                cli_out("%*s %-*s %-*s", VOL_TOP_PERF_SPEED_WIDTH, +                        "====", VOL_TOP_PERF_FILENAME_DEF_WIDTH, +                        "========", VOL_TOP_PERF_TIME_WIDTH, "===="); +                break; +            default:                  goto out;          } -        ret = dict_get_int32 (dict, "count", &brick_count); -        if (ret) -                goto out; -        snprintf (key, sizeof (key), "%d-top-op", 1); -        ret = dict_get_int32 (dict, key, (int32_t*)&top_op); -        if (ret) -                goto out; - -        clear_stats = dict_get_str_boolean (dict, "clear-stats", _gf_false); - -        while (i < brick_count) { -                i++; -                snprintf (brick, sizeof (brick), "%d-brick", i); -                ret = dict_get_str (dict, brick, &bricks); -                if (ret) -                        goto out; - -                nfs = dict_get_str_boolean (dict, "nfs", _gf_false); - -                if (clear_stats) { -                        snprintf (key, sizeof (key), "%d-stats-cleared", i); -                        ret = dict_get_int32 (dict, key, &stats_cleared); -                        if (ret) -                                goto out; -                        cli_out (stats_cleared ? "Cleared stats for %s %s" : -                                 "Failed to clear stats for %s %s", -                                 nfs ? "NFS server on" : "brick", bricks); -                        continue; -                } - -                if (nfs) -                        cli_out ("NFS Server : %s", bricks); +        for (j = 1; j <= members; j++) { +            snprintf(key, sizeof(key), "%d-filename-%d", i, j); +            ret = dict_get_str(dict, key, &filename); +            if (ret) +                break; +            snprintf(key, sizeof(key), "%d-value-%d", i, j); +            ret = dict_get_uint64(dict, key, &value); +            if (ret) +                goto out; +            if (top_op == GF_CLI_TOP_READ_PERF || +                top_op == GF_CLI_TOP_WRITE_PERF) { +                snprintf(key, sizeof(key), "%d-time-sec-%d", i, j); +                ret = dict_get_int32(dict, key, (int32_t *)&time_sec); +                if (ret) +                    goto out; +                snprintf(key, sizeof(key), "%d-time-usec-%d", i, j); +                ret = dict_get_int32(dict, key, (int32_t *)&time_usec); +                if (ret) +                    goto out; +                gf_time_fmt(timestr, sizeof timestr, time_sec, gf_timefmt_FT); +                snprintf(timestr + strlen(timestr), +                         sizeof timestr - strlen(timestr), ".%ld", time_usec); +                if (strlen(filename) < VOL_TOP_PERF_FILENAME_DEF_WIDTH) +                    cli_out("%*" PRIu64 " %-*s %-*s", VOL_TOP_PERF_SPEED_WIDTH, +                            value, VOL_TOP_PERF_FILENAME_DEF_WIDTH, filename, +                            VOL_TOP_PERF_TIME_WIDTH, timestr);                  else -                        cli_out ("Brick: %s", bricks); - -                snprintf(key, sizeof (key), "%d-members", i); -                ret = dict_get_int32 (dict, key, &members); - -                switch (top_op) { -                case GF_CLI_TOP_OPEN: -                        snprintf (key, sizeof (key), "%d-current-open", i); -                        ret = dict_get_uint64 (dict, key, &nr_open); -                        if (ret) -                                break; -                        snprintf (key, sizeof (key), "%d-max-open", i); -                        ret = dict_get_uint64 (dict, key, &max_nr_open); -                        if (ret) -                                goto out; -                        snprintf (key, sizeof (key), "%d-max-openfd-time", i); -                        ret = dict_get_str (dict, key, &openfd_str); -                        if (ret) -                                goto out; -                        cli_out ("Current open fds: %"PRIu64", Max open" -                                " fds: %"PRIu64", Max openfd time: %s", nr_open, -                                 max_nr_open, openfd_str); -                case GF_CLI_TOP_READ: -                case GF_CLI_TOP_WRITE: -                case GF_CLI_TOP_OPENDIR: -                case GF_CLI_TOP_READDIR: -                        if (!members) { -                                continue; -                        } -                        cli_out ("Count\t\tfilename\n======================="); -                        break; -                case GF_CLI_TOP_READ_PERF: -                case GF_CLI_TOP_WRITE_PERF: -                        snprintf (key, sizeof (key), "%d-throughput", i); -                        ret = dict_get_double (dict, key, &throughput); -                        if (!ret) { -                                snprintf (key, sizeof (key), "%d-time", i); -                                ret = dict_get_double (dict, key, &time); -                        } -                        if (!ret) -                                cli_out ("Throughput %.2f MBps time %.4f secs", throughput, -                                          time / 1e6); - -                        if (!members) { -                                continue; -                        } -                        cli_out ("%*s %-*s %-*s", -                                 VOL_TOP_PERF_SPEED_WIDTH, "MBps", -                                 VOL_TOP_PERF_FILENAME_DEF_WIDTH, "Filename", -                                 VOL_TOP_PERF_TIME_WIDTH, "Time"); -                        cli_out ("%*s %-*s %-*s", -                                 VOL_TOP_PERF_SPEED_WIDTH, "====", -                                 VOL_TOP_PERF_FILENAME_DEF_WIDTH, "========", -                                 VOL_TOP_PERF_TIME_WIDTH, "===="); -                        break; -                default: -                        goto out; -                } - -                for (j = 1; j <= members; j++) { -                        snprintf (key, sizeof (key), "%d-filename-%d", i, j); -                        ret = dict_get_str (dict, key, &filename); -                        if (ret) -                                break; -                        snprintf (key, sizeof (key), "%d-value-%d", i, j); -                        ret = dict_get_uint64 (dict, key, &value); -                        if (ret) -                                goto out; -                        if ( top_op == GF_CLI_TOP_READ_PERF || -                                top_op == GF_CLI_TOP_WRITE_PERF) { -                                snprintf (key, sizeof (key), "%d-time-sec-%d", i, j); -                                ret = dict_get_int32 (dict, key, (int32_t *)&time_sec); -                                if (ret) -                                        goto out; -                                snprintf (key, sizeof (key), "%d-time-usec-%d", i, j); -                                ret = dict_get_int32 (dict, key, (int32_t *)&time_usec); -                                if (ret) -                                        goto out; -                                gf_time_fmt (timestr, sizeof timestr, -                                             time_sec, gf_timefmt_FT); -                                snprintf (timestr + strlen (timestr), sizeof timestr - strlen (timestr), -                                  ".%ld", time_usec); -                                if (strlen (filename) < VOL_TOP_PERF_FILENAME_DEF_WIDTH) -                                        cli_out ("%*"PRIu64" %-*s %-*s", -                                                 VOL_TOP_PERF_SPEED_WIDTH, -                                                 value, -                                                 VOL_TOP_PERF_FILENAME_DEF_WIDTH, -                                                 filename, -                                                 VOL_TOP_PERF_TIME_WIDTH, -                                                 timestr); -                                else -                                        cli_out ("%*"PRIu64" ...%-*s %-*s", -                                                 VOL_TOP_PERF_SPEED_WIDTH, -                                                 value, -                                                 VOL_TOP_PERF_FILENAME_ALT_WIDTH , -                                                 filename + strlen (filename) - -                                                 VOL_TOP_PERF_FILENAME_ALT_WIDTH, -                                                 VOL_TOP_PERF_TIME_WIDTH, -                                                 timestr); -                        } else { -                                cli_out ("%"PRIu64"\t\t%s", value, filename); -                        } -                } +                    cli_out("%*" PRIu64 " ...%-*s %-*s", +                            VOL_TOP_PERF_SPEED_WIDTH, value, +                            VOL_TOP_PERF_FILENAME_ALT_WIDTH, +                            filename + strlen(filename) - +                                VOL_TOP_PERF_FILENAME_ALT_WIDTH, +                            VOL_TOP_PERF_TIME_WIDTH, timestr); +            } else { +                cli_out("%" PRIu64 "\t\t%s", value, filename); +            }          } -        ret = rsp.op_ret; +    } +    ret = rsp.op_ret;  out: -        cli_cmd_broadcast_response (ret); +    cli_cmd_broadcast_response(ret); -        if (dict) -                dict_unref (dict); +    if (dict) +        dict_unref(dict); -        free (rsp.dict.dict_val); -        return ret; +    free(rsp.dict.dict_val); +    return ret;  }  int32_t -gf_cli_top_volume (call_frame_t *frame, xlator_t *this, void *data) +gf_cli_top_volume(call_frame_t *frame, xlator_t *this, void *data)  { -        int                        ret   = -1; -        gf_cli_req                 req   = {{0,}}; -        dict_t                     *dict = NULL; +    int ret = -1; +    gf_cli_req req = {{ +        0, +    }}; +    dict_t *dict = NULL; -        GF_ASSERT (frame); -        GF_ASSERT (this); -        GF_ASSERT (data); +    GF_ASSERT(frame); +    GF_ASSERT(this); +    GF_ASSERT(data); -        if (!frame || !this || !data) -                goto out; -        dict = data; +    if (!frame || !this || !data) +        goto out; +    dict = data; -        ret = cli_to_glusterd (&req, frame, gf_cli_top_volume_cbk, -                               (xdrproc_t) xdr_gf_cli_req, dict, -                               GLUSTER_CLI_PROFILE_VOLUME, this, cli_rpc_prog, -                               NULL); +    ret = cli_to_glusterd(&req, frame, gf_cli_top_volume_cbk, +                          (xdrproc_t)xdr_gf_cli_req, dict, +                          GLUSTER_CLI_PROFILE_VOLUME, this, cli_rpc_prog, NULL);  out: -        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); -        GF_FREE (req.dict.dict_val); -        return ret; +    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret); +    GF_FREE(req.dict.dict_val); +    return ret;  } -  int -gf_cli_getwd_cbk (struct rpc_req *req, struct iovec *iov, -                       int count, void *myframe) +gf_cli_getwd_cbk(struct rpc_req *req, struct iovec *iov, int count, +                 void *myframe)  { -        gf1_cli_getwd_rsp rsp   = {0,}; -        int               ret   = -1; +    gf1_cli_getwd_rsp rsp = { +        0, +    }; +    int ret = -1; -        GF_ASSERT (myframe); +    GF_ASSERT(myframe); -        if (-1 == req->rpc_status) { -                goto out; -        } +    if (-1 == req->rpc_status) { +        goto out; +    } -        ret = xdr_to_generic (*iov, &rsp, (xdrproc_t)xdr_gf1_cli_getwd_rsp); -        if (ret < 0) { -                gf_log (((call_frame_t *) myframe)->this->name, GF_LOG_ERROR, -                        "Failed to decode xdr response"); -                goto out; -        } +    ret = xdr_to_generic(*iov, &rsp, (xdrproc_t)xdr_gf1_cli_getwd_rsp); +    if (ret < 0) { +        gf_log(((call_frame_t *)myframe)->this->name, GF_LOG_ERROR, +               "Failed to decode xdr response"); +        goto out; +    } -        if (rsp.op_ret == -1) { -                cli_err ("getwd failed"); -                ret = rsp.op_ret; -                goto out; -        } +    if (rsp.op_ret == -1) { +        cli_err("getwd failed"); +        ret = rsp.op_ret; +        goto out; +    } -        gf_log ("cli", GF_LOG_INFO, "Received resp to getwd"); +    gf_log("cli", GF_LOG_INFO, "Received resp to getwd"); -        cli_out ("%s", rsp.wd); +    cli_out("%s", rsp.wd); -        ret = 0; +    ret = 0;  out: -        cli_cmd_broadcast_response (ret); -        return ret; +    cli_cmd_broadcast_response(ret); +    return ret;  }  int32_t -gf_cli_getwd (call_frame_t *frame, xlator_t *this, void *data) +gf_cli_getwd(call_frame_t *frame, xlator_t *this, void *data)  { -        int                      ret = -1; -        gf1_cli_getwd_req        req = {0,}; +    int ret = -1; +    gf1_cli_getwd_req req = { +        0, +    }; -        GF_ASSERT (frame); -        GF_ASSERT (this); +    GF_ASSERT(frame); +    GF_ASSERT(this); -        if (!frame || !this) -                goto out; +    if (!frame || !this) +        goto out; -        ret = cli_cmd_submit (NULL, &req, frame, cli_rpc_prog, -                              GLUSTER_CLI_GETWD, NULL, -                              this, gf_cli_getwd_cbk, -                              (xdrproc_t) xdr_gf1_cli_getwd_req); +    ret = cli_cmd_submit(NULL, &req, frame, cli_rpc_prog, GLUSTER_CLI_GETWD, +                         NULL, this, gf_cli_getwd_cbk, +                         (xdrproc_t)xdr_gf1_cli_getwd_req);  out: -        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); +    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret); -        return ret; +    return ret;  }  void -cli_print_volume_status_mempool (dict_t *dict, char *prefix) -{ -        int             ret = -1; -        int32_t         mempool_count = 0; -        char            *name = NULL; -        int32_t         hotcount = 0; -        int32_t         coldcount = 0; -        uint64_t        paddedsizeof = 0; -        uint64_t        alloccount = 0; -        int32_t         maxalloc = 0; -        uint64_t        pool_misses = 0; -        int32_t         maxstdalloc = 0; -        char            key[1024] = {0,}; -        int             i = 0; - -        GF_ASSERT (dict); -        GF_ASSERT (prefix); - -        snprintf (key, sizeof (key), "%s.mempool-count",prefix); -        ret = dict_get_int32 (dict, key, &mempool_count); +cli_print_volume_status_mempool(dict_t *dict, char *prefix) +{ +    int ret = -1; +    int32_t mempool_count = 0; +    char *name = NULL; +    int32_t hotcount = 0; +    int32_t coldcount = 0; +    uint64_t paddedsizeof = 0; +    uint64_t alloccount = 0; +    int32_t maxalloc = 0; +    uint64_t pool_misses = 0; +    int32_t maxstdalloc = 0; +    char key[1024] = { +        0, +    }; +    int i = 0; + +    GF_ASSERT(dict); +    GF_ASSERT(prefix); + +    snprintf(key, sizeof(key), "%s.mempool-count", prefix); +    ret = dict_get_int32(dict, key, &mempool_count); +    if (ret) +        goto out; + +    cli_out("Mempool Stats\n-------------"); +    cli_out("%-30s %9s %9s %12s %10s %8s %8s %12s", "Name", "HotCount", +            "ColdCount", "PaddedSizeof", "AllocCount", "MaxAlloc", "Misses", +            "Max-StdAlloc"); +    cli_out("%-30s %9s %9s %12s %10s %8s %8s %12s", "----", "--------", +            "---------", "------------", "----------", "--------", "--------", +            "------------"); + +    for (i = 0; i < mempool_count; i++) { +        snprintf(key, sizeof(key), "%s.pool%d.name", prefix, i); +        ret = dict_get_str(dict, key, &name);          if (ret) -                goto out; +            goto out; -        cli_out ("Mempool Stats\n-------------"); -        cli_out ("%-30s %9s %9s %12s %10s %8s %8s %12s", "Name", "HotCount", -                 "ColdCount", "PaddedSizeof", "AllocCount", "MaxAlloc", -                 "Misses", "Max-StdAlloc"); -        cli_out ("%-30s %9s %9s %12s %10s %8s %8s %12s", "----", "--------", -                 "---------", "------------", "----------", -                 "--------", "--------", "------------"); - -        for (i = 0; i < mempool_count; i++) { -                snprintf (key, sizeof (key), "%s.pool%d.name", prefix, i); -                ret = dict_get_str (dict, key, &name); -                if (ret) -                        goto out; - -                snprintf (key, sizeof (key), "%s.pool%d.hotcount", prefix, i); -                ret = dict_get_int32 (dict, key, &hotcount); -                if (ret) -                        goto out; +        snprintf(key, sizeof(key), "%s.pool%d.hotcount", prefix, i); +        ret = dict_get_int32(dict, key, &hotcount); +        if (ret) +            goto out; -                snprintf (key, sizeof (key), "%s.pool%d.coldcount", prefix, i); -                ret = dict_get_int32 (dict, key, &coldcount); -                if (ret) -                        goto out; +        snprintf(key, sizeof(key), "%s.pool%d.coldcount", prefix, i); +        ret = dict_get_int32(dict, key, &coldcount); +        if (ret) +            goto out; -                snprintf (key, sizeof (key), "%s.pool%d.paddedsizeof", -                          prefix, i); -                ret = dict_get_uint64 (dict, key, &paddedsizeof); -                if (ret) -                        goto out; +        snprintf(key, sizeof(key), "%s.pool%d.paddedsizeof", prefix, i); +        ret = dict_get_uint64(dict, key, &paddedsizeof); +        if (ret) +            goto out; -                snprintf (key, sizeof (key), "%s.pool%d.alloccount", prefix, i); -                ret = dict_get_uint64 (dict, key, &alloccount); -                if (ret) -                        goto out; +        snprintf(key, sizeof(key), "%s.pool%d.alloccount", prefix, i); +        ret = dict_get_uint64(dict, key, &alloccount); +        if (ret) +            goto out; -                snprintf (key, sizeof (key), "%s.pool%d.max_alloc", prefix, i); -                ret = dict_get_int32 (dict, key, &maxalloc); -                if (ret) -                        goto out; +        snprintf(key, sizeof(key), "%s.pool%d.max_alloc", prefix, i); +        ret = dict_get_int32(dict, key, &maxalloc); +        if (ret) +            goto out; -                snprintf (key, sizeof (key), "%s.pool%d.max-stdalloc", prefix, i); -                ret = dict_get_int32 (dict, key, &maxstdalloc); -                if (ret) -                        goto out; +        snprintf(key, sizeof(key), "%s.pool%d.max-stdalloc", prefix, i); +        ret = dict_get_int32(dict, key, &maxstdalloc); +        if (ret) +            goto out; -                snprintf (key, sizeof (key), "%s.pool%d.pool-misses", prefix, i); -                ret = dict_get_uint64 (dict, key, &pool_misses); -                if (ret) -                        goto out; +        snprintf(key, sizeof(key), "%s.pool%d.pool-misses", prefix, i); +        ret = dict_get_uint64(dict, key, &pool_misses); +        if (ret) +            goto out; -                cli_out ("%-30s %9d %9d %12"PRIu64" %10"PRIu64" %8d %8"PRIu64 -                         " %12d", name, hotcount, coldcount, paddedsizeof, -                         alloccount, maxalloc, pool_misses, maxstdalloc); -        } +        cli_out("%-30s %9d %9d %12" PRIu64 " %10" PRIu64 " %8d %8" PRIu64 +                " %12d", +                name, hotcount, coldcount, paddedsizeof, alloccount, maxalloc, +                pool_misses, maxstdalloc); +    }  out: -        return; - +    return;  }  void -cli_print_volume_status_mem (dict_t *dict, gf_boolean_t notbrick) -{ -        int             ret = -1; -        char            *volname = NULL; -        char            *hostname = NULL; -        char            *path = NULL; -        int             online = -1; -        char            key[1024] = {0,}; -        int             brick_index_max = -1; -        int             other_count = 0; -        int             index_max = 0; -        int             val = 0; -        int             i = 0; - -        GF_ASSERT (dict); - -        ret = dict_get_str (dict, "volname", &volname); +cli_print_volume_status_mem(dict_t *dict, gf_boolean_t notbrick) +{ +    int ret = -1; +    char *volname = NULL; +    char *hostname = NULL; +    char *path = NULL; +    int online = -1; +    char key[1024] = { +        0, +    }; +    int brick_index_max = -1; +    int other_count = 0; +    int index_max = 0; +    int val = 0; +    int i = 0; + +    GF_ASSERT(dict); + +    ret = dict_get_str(dict, "volname", &volname); +    if (ret) +        goto out; +    cli_out("Memory status for volume : %s", volname); + +    ret = dict_get_int32(dict, "brick-index-max", &brick_index_max); +    if (ret) +        goto out; +    ret = dict_get_int32(dict, "other-count", &other_count); +    if (ret) +        goto out; + +    index_max = brick_index_max + other_count; + +    for (i = 0; i <= index_max; i++) { +        cli_out("----------------------------------------------"); + +        snprintf(key, sizeof(key), "brick%d.hostname", i); +        ret = dict_get_str(dict, key, &hostname);          if (ret) -                goto out; -        cli_out ("Memory status for volume : %s", volname); - -        ret = dict_get_int32 (dict, "brick-index-max", &brick_index_max); +            continue; +        snprintf(key, sizeof(key), "brick%d.path", i); +        ret = dict_get_str(dict, key, &path);          if (ret) -                goto out; -        ret = dict_get_int32 (dict, "other-count", &other_count); -        if (ret) -                goto out; - -        index_max = brick_index_max + other_count; - -        for (i = 0; i <= index_max; i++) { -                cli_out ("----------------------------------------------"); - -                snprintf (key, sizeof (key), "brick%d.hostname", i); -                ret = dict_get_str (dict, key, &hostname); -                if (ret) -                        continue; -                snprintf (key, sizeof (key), "brick%d.path", i); -                ret = dict_get_str (dict, key, &path); -                if (ret) -                        continue; -                if (notbrick) -                        cli_out ("%s : %s", hostname, path); -                else -                        cli_out ("Brick : %s:%s", hostname, path); - -                snprintf (key, sizeof (key), "brick%d.status", i); -                ret = dict_get_int32 (dict, key, &online); -                if (ret) -                        goto out; -                if (!online) { -                        if (notbrick) -                                cli_out ("%s is offline", hostname); -                        else -                                cli_out ("Brick is offline"); -                        continue; -                } - -                cli_out ("Mallinfo\n--------"); - -                snprintf (key, sizeof (key), "brick%d.mallinfo.arena", i); -                ret = dict_get_int32 (dict, key, &val); -                if (ret) -                        goto out; -                cli_out ("%-8s : %d","Arena", val); - -                snprintf (key, sizeof (key), "brick%d.mallinfo.ordblks", i); -                ret = dict_get_int32 (dict, key, &val); -                if(ret) -                        goto out; -                cli_out ("%-8s : %d","Ordblks", val); - -                snprintf (key, sizeof (key), "brick%d.mallinfo.smblks", i); -                ret = dict_get_int32 (dict, key, &val); -                if(ret) -                        goto out; -                cli_out ("%-8s : %d","Smblks", val); - -                snprintf (key, sizeof (key), "brick%d.mallinfo.hblks", i); -                ret = dict_get_int32 (dict, key, &val); -                if(ret) -                        goto out; -                cli_out ("%-8s : %d", "Hblks", val); - -                snprintf (key, sizeof (key), "brick%d.mallinfo.hblkhd", i); -                ret = dict_get_int32 (dict, key, &val); -                if (ret) -                        goto out; -                cli_out ("%-8s : %d", "Hblkhd", val); - -                snprintf (key, sizeof (key), "brick%d.mallinfo.usmblks", i); -                ret = dict_get_int32 (dict, key, &val); -                if (ret) -                        goto out; -                cli_out ("%-8s : %d", "Usmblks", val); - -                snprintf (key, sizeof (key), "brick%d.mallinfo.fsmblks", i); -                ret = dict_get_int32 (dict, key, &val); -                if (ret) -                        goto out; -                cli_out ("%-8s : %d", "Fsmblks", val); - -                snprintf (key, sizeof (key), "brick%d.mallinfo.uordblks", i); -                ret = dict_get_int32 (dict, key, &val); -                if (ret) -                        goto out; -                cli_out ("%-8s : %d", "Uordblks", val); - -                snprintf (key, sizeof (key), "brick%d.mallinfo.fordblks", i); -                ret = dict_get_int32 (dict, key, &val); -                if (ret) -                        goto out; -                cli_out ("%-8s : %d", "Fordblks", val); - -                snprintf (key, sizeof (key), "brick%d.mallinfo.keepcost", i); -                ret = dict_get_int32 (dict, key, &val); -                if (ret) -                        goto out; -                cli_out ("%-8s : %d", "Keepcost", val); +            continue; +        if (notbrick) +            cli_out("%s : %s", hostname, path); +        else +            cli_out("Brick : %s:%s", hostname, path); -                cli_out (" "); -                snprintf (key, sizeof (key), "brick%d", i); -                cli_print_volume_status_mempool (dict, key); +        snprintf(key, sizeof(key), "brick%d.status", i); +        ret = dict_get_int32(dict, key, &online); +        if (ret) +            goto out; +        if (!online) { +            if (notbrick) +                cli_out("%s is offline", hostname); +            else +                cli_out("Brick is offline"); +            continue;          } -out: -        cli_out ("----------------------------------------------\n"); -        return; -} -void -cli_print_volume_status_client_list (dict_t *dict, gf_boolean_t notbrick) -{ -        int             ret                     = -1; -        char            *volname                = NULL; -        int             client_count            = 0; -        int             current_count           = 0; -        char            key[1024]               = {0,}; -        int             i                       = 0; -        int             total                   = 0; -        char            *name                   = NULL; -        gf_boolean_t    is_fuse_done            = _gf_false; -        gf_boolean_t    is_gfapi_done           = _gf_false; -        gf_boolean_t    is_tierd_done           = _gf_false; -        gf_boolean_t    is_rebalance_done       = _gf_false; -        gf_boolean_t    is_glustershd_done      = _gf_false; -        gf_boolean_t    is_quotad_done          = _gf_false; -        gf_boolean_t    is_snapd_done           = _gf_false; - -        GF_ASSERT (dict); - -        ret = dict_get_str (dict, "volname", &volname); -        if (ret) -                goto out; -        cli_out ("Client connections for volume %s", volname); +        cli_out("Mallinfo\n--------"); -        ret = dict_get_int32 (dict, "client-count", &client_count); +        snprintf(key, sizeof(key), "brick%d.mallinfo.arena", i); +        ret = dict_get_int32(dict, key, &val);          if (ret) -                goto out; +            goto out; +        cli_out("%-8s : %d", "Arena", val); -                cli_out ("%-48s %15s", "Name", "count"); -                cli_out ("%-48s %15s", "-----", "------"); -                for (i = 0; i < client_count; i++) { -                        name = NULL; -                        snprintf (key, sizeof (key), -                                        "client%d.name", i); -                        ret = dict_get_str (dict, key, &name); - -                        if (!strncmp (name, "fuse", 4)) { -                                if (!is_fuse_done) { -                                        is_fuse_done = _gf_true; -                                        ret = dict_get_int32 (dict, -                                                        "fuse-count", -                                                        ¤t_count); -                                        if (ret) -                                                goto out; -                                        total = total + current_count; -                                        goto print; -                                } -                                continue; -                        } else if (!strncmp (name, "gfapi", 5)) { -                                if (!is_gfapi_done) { -                                        is_gfapi_done = _gf_true; -                                        ret = dict_get_int32 (dict, -                                                        "gfapi-count", -                                                        ¤t_count); -                                        if (ret) -                                                goto out; -                                        total = total + current_count; -                                        goto print; -                                } -                                continue; -                        } else if (!strcmp(name, "tierd")) { -                                if (!is_tierd_done) { -                                        is_tierd_done = _gf_true; -                                        ret = dict_get_int32 (dict, -                                                        "tierd-count", -                                                        ¤t_count); -                                        if (ret) -                                                goto out; -                                        total = total + current_count; -                                        goto print; -                                } -                                continue; -                        } else if (!strcmp(name, "rebalance")) { -                                if (!is_rebalance_done) { -                                        is_rebalance_done = _gf_true; -                                        ret = dict_get_int32 (dict, -                                                        "rebalance-count", -                                                        ¤t_count); -                                        if (ret) -                                                goto out; -                                        total = total + current_count; -                                        goto print; -                                } -                                continue; -                        } else if (!strcmp(name, "glustershd")) { -                                if (!is_glustershd_done) { -                                        is_glustershd_done = _gf_true; -                                        ret = dict_get_int32 (dict, -                                                        "glustershd-count", -                                                        ¤t_count); -                                        if (ret) -                                                goto out; -                                        total = total + current_count; -                                        goto print; -                                } -                                continue; -                        } else if (!strcmp(name, "quotad")) { -                                if (!is_quotad_done) { -                                        is_quotad_done = _gf_true; -                                        ret = dict_get_int32 (dict, -                                                        "quotad-count", -                                                        ¤t_count); -                                        if (ret) -                                                goto out; -                                        total = total + current_count; -                                        goto print; -                                } -                                continue; -                        } else if (!strcmp(name, "snapd")) { -                                if (!is_snapd_done) { -                                        is_snapd_done = _gf_true; -                                        ret = dict_get_int32 (dict, -                                                        "snapd-count", -                                                        ¤t_count); -                                        if (ret) -                                                goto out; -                                        total = total + current_count; -                                        goto print; -                                } -                                continue; -                        } - -print: -                cli_out ("%-48s %15d", name, current_count); - -        } -out: -                cli_out ("\ntotal clients for volume %s : %d ", volname, total); -                cli_out ("-----------------------------------------------------------------\n"); -        return; -} - -void -cli_print_volume_status_clients (dict_t *dict, gf_boolean_t notbrick) -{ -        int             ret = -1; -        char            *volname = NULL; -        int             brick_index_max = -1; -        int             other_count = 0; -        int             index_max = 0; -        char            *hostname = NULL; -        char            *path = NULL; -        int             online = -1; -        int             client_count = 0; -        char            *clientname = NULL; -        uint64_t        bytesread = 0; -        uint64_t        byteswrite = 0; -        uint32_t        opversion = 0; -        char            key[1024] = {0,}; -        int             i = 0; -        int             j = 0; - -        GF_ASSERT (dict); - -        ret = dict_get_str (dict, "volname", &volname); +        snprintf(key, sizeof(key), "brick%d.mallinfo.ordblks", i); +        ret = dict_get_int32(dict, key, &val);          if (ret) -                goto out; -        cli_out ("Client connections for volume %s", volname); +            goto out; +        cli_out("%-8s : %d", "Ordblks", val); -        ret = dict_get_int32 (dict, "brick-index-max", &brick_index_max); +        snprintf(key, sizeof(key), "brick%d.mallinfo.smblks", i); +        ret = dict_get_int32(dict, key, &val);          if (ret) -                goto out; -        ret = dict_get_int32 (dict, "other-count", &other_count); +            goto out; +        cli_out("%-8s : %d", "Smblks", val); + +        snprintf(key, sizeof(key), "brick%d.mallinfo.hblks", i); +        ret = dict_get_int32(dict, key, &val);          if (ret) -                goto out; +            goto out; +        cli_out("%-8s : %d", "Hblks", val); -        index_max = brick_index_max + other_count; +        snprintf(key, sizeof(key), "brick%d.mallinfo.hblkhd", i); +        ret = dict_get_int32(dict, key, &val); +        if (ret) +            goto out; +        cli_out("%-8s : %d", "Hblkhd", val); -        for (i = 0; i <= index_max; i++) { -                hostname = NULL; -                path = NULL; -                online = -1; -                client_count = 0; -                clientname = NULL; -                bytesread = 0; -                byteswrite = 0; +        snprintf(key, sizeof(key), "brick%d.mallinfo.usmblks", i); +        ret = dict_get_int32(dict, key, &val); +        if (ret) +            goto out; +        cli_out("%-8s : %d", "Usmblks", val); -                cli_out ("----------------------------------------------"); +        snprintf(key, sizeof(key), "brick%d.mallinfo.fsmblks", i); +        ret = dict_get_int32(dict, key, &val); +        if (ret) +            goto out; +        cli_out("%-8s : %d", "Fsmblks", val); -                snprintf (key, sizeof (key), "brick%d.hostname", i); -                ret = dict_get_str (dict, key, &hostname); +        snprintf(key, sizeof(key), "brick%d.mallinfo.uordblks", i); +        ret = dict_get_int32(dict, key, &val); +        if (ret) +            goto out; +        cli_out("%-8s : %d", "Uordblks", val); -                snprintf (key, sizeof (key), "brick%d.path", i); -                ret = dict_get_str (dict, key, &path); +        snprintf(key, sizeof(key), "brick%d.mallinfo.fordblks", i); +        ret = dict_get_int32(dict, key, &val); +        if (ret) +            goto out; +        cli_out("%-8s : %d", "Fordblks", val); -                if (hostname && path) { -                        if (notbrick) -                                cli_out ("%s : %s", hostname, path); -                        else -                                cli_out ("Brick : %s:%s", hostname, path); -                } -                snprintf (key, sizeof (key), "brick%d.status", i); -                ret = dict_get_int32 (dict, key, &online); -                if (!online) { -                        if (notbrick) -                                cli_out ("%s is offline", hostname); -                        else -                                cli_out ("Brick is offline"); -                        continue; -                } +        snprintf(key, sizeof(key), "brick%d.mallinfo.keepcost", i); +        ret = dict_get_int32(dict, key, &val); +        if (ret) +            goto out; +        cli_out("%-8s : %d", "Keepcost", val); -                snprintf (key, sizeof (key), "brick%d.clientcount", i); -                ret = dict_get_int32 (dict, key, &client_count); - -                if (hostname && path) -                        cli_out ("Clients connected : %d", client_count); -                if (client_count == 0) -                        continue; - -                cli_out ("%-48s %15s %15s %15s", "Hostname", "BytesRead", -                         "BytesWritten", "OpVersion"); -                cli_out ("%-48s %15s %15s %15s", "--------", "---------", -                         "------------", "---------"); -                for (j =0; j < client_count; j++) { -                        snprintf (key, sizeof (key), -                                  "brick%d.client%d.hostname", i, j); -                        ret = dict_get_str (dict, key, &clientname); - -                        snprintf (key, sizeof (key), -                                  "brick%d.client%d.bytesread", i, j); -                        ret = dict_get_uint64 (dict, key, &bytesread); - -                        snprintf (key, sizeof (key), -                                 "brick%d.client%d.byteswrite", i, j); -                        ret = dict_get_uint64 (dict, key, &byteswrite); - -                        snprintf (key, sizeof (key), -                                 "brick%d.client%d.opversion", i, j); -                        ret = dict_get_uint32 (dict, key, &opversion); - -                        cli_out ("%-48s %15"PRIu64" %15"PRIu64" %15"PRIu32, -                                  clientname, bytesread, byteswrite, -                                  opversion); -                } -        } +        cli_out(" "); +        snprintf(key, sizeof(key), "brick%d", i); +        cli_print_volume_status_mempool(dict, key); +    }  out: -        cli_out ("----------------------------------------------\n"); -        return; +    cli_out("----------------------------------------------\n"); +    return;  }  void -cli_print_volume_status_inode_entry (dict_t *dict, char *prefix) -{ -        int             ret = -1; -        char            key[1024] = {0,}; -        char            *gfid = NULL; -        uint64_t        nlookup = 0; -        uint32_t        ref = 0; -        int             ia_type = 0; -        char            inode_type; - -        GF_ASSERT (dict); -        GF_ASSERT (prefix); - -        snprintf (key, sizeof (key), "%s.gfid", prefix); -        ret = dict_get_str (dict, key, &gfid); -        if (ret) -                goto out; - -        snprintf (key, sizeof (key), "%s.nlookup", prefix); -        ret = dict_get_uint64 (dict, key, &nlookup); -        if (ret) -                goto out; - -        snprintf (key, sizeof (key), "%s.ref", prefix); -        ret = dict_get_uint32 (dict, key, &ref); -        if (ret) -                goto out; +cli_print_volume_status_client_list(dict_t *dict, gf_boolean_t notbrick) +{ +    int ret = -1; +    char *volname = NULL; +    int client_count = 0; +    int current_count = 0; +    char key[1024] = { +        0, +    }; +    int i = 0; +    int total = 0; +    char *name = NULL; +    gf_boolean_t is_fuse_done = _gf_false; +    gf_boolean_t is_gfapi_done = _gf_false; +    gf_boolean_t is_tierd_done = _gf_false; +    gf_boolean_t is_rebalance_done = _gf_false; +    gf_boolean_t is_glustershd_done = _gf_false; +    gf_boolean_t is_quotad_done = _gf_false; +    gf_boolean_t is_snapd_done = _gf_false; + +    GF_ASSERT(dict); + +    ret = dict_get_str(dict, "volname", &volname); +    if (ret) +        goto out; +    cli_out("Client connections for volume %s", volname); + +    ret = dict_get_int32(dict, "client-count", &client_count); +    if (ret) +        goto out; + +    cli_out("%-48s %15s", "Name", "count"); +    cli_out("%-48s %15s", "-----", "------"); +    for (i = 0; i < client_count; i++) { +        name = NULL; +        snprintf(key, sizeof(key), "client%d.name", i); +        ret = dict_get_str(dict, key, &name); + +        if (!strncmp(name, "fuse", 4)) { +            if (!is_fuse_done) { +                is_fuse_done = _gf_true; +                ret = dict_get_int32(dict, "fuse-count", ¤t_count); +                if (ret) +                    goto out; +                total = total + current_count; +                goto print; +            } +            continue; +        } else if (!strncmp(name, "gfapi", 5)) { +            if (!is_gfapi_done) { +                is_gfapi_done = _gf_true; +                ret = dict_get_int32(dict, "gfapi-count", ¤t_count); +                if (ret) +                    goto out; +                total = total + current_count; +                goto print; +            } +            continue; +        } else if (!strcmp(name, "tierd")) { +            if (!is_tierd_done) { +                is_tierd_done = _gf_true; +                ret = dict_get_int32(dict, "tierd-count", ¤t_count); +                if (ret) +                    goto out; +                total = total + current_count; +                goto print; +            } +            continue; +        } else if (!strcmp(name, "rebalance")) { +            if (!is_rebalance_done) { +                is_rebalance_done = _gf_true; +                ret = dict_get_int32(dict, "rebalance-count", ¤t_count); +                if (ret) +                    goto out; +                total = total + current_count; +                goto print; +            } +            continue; +        } else if (!strcmp(name, "glustershd")) { +            if (!is_glustershd_done) { +                is_glustershd_done = _gf_true; +                ret = dict_get_int32(dict, "glustershd-count", ¤t_count); +                if (ret) +                    goto out; +                total = total + current_count; +                goto print; +            } +            continue; +        } else if (!strcmp(name, "quotad")) { +            if (!is_quotad_done) { +                is_quotad_done = _gf_true; +                ret = dict_get_int32(dict, "quotad-count", ¤t_count); +                if (ret) +                    goto out; +                total = total + current_count; +                goto print; +            } +            continue; +        } else if (!strcmp(name, "snapd")) { +            if (!is_snapd_done) { +                is_snapd_done = _gf_true; +                ret = dict_get_int32(dict, "snapd-count", ¤t_count); +                if (ret) +                    goto out; +                total = total + current_count; +                goto print; +            } +            continue; +        } + +    print: +        cli_out("%-48s %15d", name, current_count); +    } +out: +    cli_out("\ntotal clients for volume %s : %d ", volname, total); +    cli_out( +        "-----------------------------------------------------------------\n"); +    return; +} -        snprintf (key, sizeof (key), "%s.ia_type", prefix); -        ret = dict_get_int32 (dict, key, &ia_type); -        if (ret) -                goto out; +void +cli_print_volume_status_clients(dict_t *dict, gf_boolean_t notbrick) +{ +    int ret = -1; +    char *volname = NULL; +    int brick_index_max = -1; +    int other_count = 0; +    int index_max = 0; +    char *hostname = NULL; +    char *path = NULL; +    int online = -1; +    int client_count = 0; +    char *clientname = NULL; +    uint64_t bytesread = 0; +    uint64_t byteswrite = 0; +    uint32_t opversion = 0; +    char key[1024] = { +        0, +    }; +    int i = 0; +    int j = 0; + +    GF_ASSERT(dict); + +    ret = dict_get_str(dict, "volname", &volname); +    if (ret) +        goto out; +    cli_out("Client connections for volume %s", volname); + +    ret = dict_get_int32(dict, "brick-index-max", &brick_index_max); +    if (ret) +        goto out; +    ret = dict_get_int32(dict, "other-count", &other_count); +    if (ret) +        goto out; + +    index_max = brick_index_max + other_count; + +    for (i = 0; i <= index_max; i++) { +        hostname = NULL; +        path = NULL; +        online = -1; +        client_count = 0; +        clientname = NULL; +        bytesread = 0; +        byteswrite = 0; + +        cli_out("----------------------------------------------"); + +        snprintf(key, sizeof(key), "brick%d.hostname", i); +        ret = dict_get_str(dict, key, &hostname); + +        snprintf(key, sizeof(key), "brick%d.path", i); +        ret = dict_get_str(dict, key, &path); + +        if (hostname && path) { +            if (notbrick) +                cli_out("%s : %s", hostname, path); +            else +                cli_out("Brick : %s:%s", hostname, path); +        } +        snprintf(key, sizeof(key), "brick%d.status", i); +        ret = dict_get_int32(dict, key, &online); +        if (!online) { +            if (notbrick) +                cli_out("%s is offline", hostname); +            else +                cli_out("Brick is offline"); +            continue; +        } + +        snprintf(key, sizeof(key), "brick%d.clientcount", i); +        ret = dict_get_int32(dict, key, &client_count); + +        if (hostname && path) +            cli_out("Clients connected : %d", client_count); +        if (client_count == 0) +            continue; + +        cli_out("%-48s %15s %15s %15s", "Hostname", "BytesRead", "BytesWritten", +                "OpVersion"); +        cli_out("%-48s %15s %15s %15s", "--------", "---------", "------------", +                "---------"); +        for (j = 0; j < client_count; j++) { +            snprintf(key, sizeof(key), "brick%d.client%d.hostname", i, j); +            ret = dict_get_str(dict, key, &clientname); + +            snprintf(key, sizeof(key), "brick%d.client%d.bytesread", i, j); +            ret = dict_get_uint64(dict, key, &bytesread); + +            snprintf(key, sizeof(key), "brick%d.client%d.byteswrite", i, j); +            ret = dict_get_uint64(dict, key, &byteswrite); + +            snprintf(key, sizeof(key), "brick%d.client%d.opversion", i, j); +            ret = dict_get_uint32(dict, key, &opversion); + +            cli_out("%-48s %15" PRIu64 " %15" PRIu64 " %15" PRIu32, clientname, +                    bytesread, byteswrite, opversion); +        } +    } +out: +    cli_out("----------------------------------------------\n"); +    return; +} -        switch (ia_type) { +void +cli_print_volume_status_inode_entry(dict_t *dict, char *prefix) +{ +    int ret = -1; +    char key[1024] = { +        0, +    }; +    char *gfid = NULL; +    uint64_t nlookup = 0; +    uint32_t ref = 0; +    int ia_type = 0; +    char inode_type; + +    GF_ASSERT(dict); +    GF_ASSERT(prefix); + +    snprintf(key, sizeof(key), "%s.gfid", prefix); +    ret = dict_get_str(dict, key, &gfid); +    if (ret) +        goto out; + +    snprintf(key, sizeof(key), "%s.nlookup", prefix); +    ret = dict_get_uint64(dict, key, &nlookup); +    if (ret) +        goto out; + +    snprintf(key, sizeof(key), "%s.ref", prefix); +    ret = dict_get_uint32(dict, key, &ref); +    if (ret) +        goto out; + +    snprintf(key, sizeof(key), "%s.ia_type", prefix); +    ret = dict_get_int32(dict, key, &ia_type); +    if (ret) +        goto out; + +    switch (ia_type) {          case IA_IFREG: -                inode_type = 'R'; -                break; +            inode_type = 'R'; +            break;          case IA_IFDIR: -                inode_type = 'D'; -                break; +            inode_type = 'D'; +            break;          case IA_IFLNK: -                inode_type = 'L'; -                break; +            inode_type = 'L'; +            break;          case IA_IFBLK: -                inode_type = 'B'; -                break; +            inode_type = 'B'; +            break;          case IA_IFCHR: -                inode_type = 'C'; -                break; +            inode_type = 'C'; +            break;          case IA_IFIFO: -                inode_type = 'F'; -                break; +            inode_type = 'F'; +            break;          case IA_IFSOCK: -                inode_type = 'S'; -                break; +            inode_type = 'S'; +            break;          default: -                inode_type = 'I'; -                break; -        } +            inode_type = 'I'; +            break; +    } -        cli_out ("%-40s %14"PRIu64" %14"PRIu32" %9c", -                 gfid, nlookup, ref, inode_type); +    cli_out("%-40s %14" PRIu64 " %14" PRIu32 " %9c", gfid, nlookup, ref, +            inode_type);  out: -        return; - +    return;  }  void -cli_print_volume_status_itables (dict_t *dict, char *prefix) -{ -        int             ret = -1; -        char            key[1024] = {0,}; -        uint32_t        active_size = 0; -        uint32_t        lru_size = 0; -        uint32_t        purge_size = 0; -        int             i =0; - -        GF_ASSERT (dict); -        GF_ASSERT (prefix); +cli_print_volume_status_itables(dict_t *dict, char *prefix) +{ +    int ret = -1; +    char key[1024] = { +        0, +    }; +    uint32_t active_size = 0; +    uint32_t lru_size = 0; +    uint32_t purge_size = 0; +    int i = 0; + +    GF_ASSERT(dict); +    GF_ASSERT(prefix); + +    snprintf(key, sizeof(key), "%s.active_size", prefix); +    ret = dict_get_uint32(dict, key, &active_size); +    if (ret) +        goto out; +    if (active_size != 0) { +        cli_out("Active inodes:"); +        cli_out("%-40s %14s %14s %9s", "GFID", "Lookups", "Ref", "IA type"); +        cli_out("%-40s %14s %14s %9s", "----", "-------", "---", "-------"); +    } +    for (i = 0; i < active_size; i++) { +        snprintf(key, sizeof(key), "%s.active%d", prefix, i); +        cli_print_volume_status_inode_entry(dict, key); +    } +    cli_out(" "); + +    snprintf(key, sizeof(key), "%s.lru_size", prefix); +    ret = dict_get_uint32(dict, key, &lru_size); +    if (ret) +        goto out; +    if (lru_size != 0) { +        cli_out("LRU inodes:"); +        cli_out("%-40s %14s %14s %9s", "GFID", "Lookups", "Ref", "IA type"); +        cli_out("%-40s %14s %14s %9s", "----", "-------", "---", "-------"); +    } +    for (i = 0; i < lru_size; i++) { +        snprintf(key, sizeof(key), "%s.lru%d", prefix, i); +        cli_print_volume_status_inode_entry(dict, key); +    } +    cli_out(" "); + +    snprintf(key, sizeof(key), "%s.purge_size", prefix); +    ret = dict_get_uint32(dict, key, &purge_size); +    if (ret) +        goto out; +    if (purge_size != 0) { +        cli_out("Purged inodes:"); +        cli_out("%-40s %14s %14s %9s", "GFID", "Lookups", "Ref", "IA type"); +        cli_out("%-40s %14s %14s %9s", "----", "-------", "---", "-------"); +    } +    for (i = 0; i < purge_size; i++) { +        snprintf(key, sizeof(key), "%s.purge%d", prefix, i); +        cli_print_volume_status_inode_entry(dict, key); +    } + +out: +    return; +} -        snprintf (key, sizeof (key), "%s.active_size", prefix); -        ret = dict_get_uint32 (dict, key, &active_size); +void +cli_print_volume_status_inode(dict_t *dict, gf_boolean_t notbrick) +{ +    int ret = -1; +    char *volname = NULL; +    int brick_index_max = -1; +    int other_count = 0; +    int index_max = 0; +    char *hostname = NULL; +    char *path = NULL; +    int online = -1; +    int conn_count = 0; +    char key[1024] = { +        0, +    }; +    int i = 0; +    int j = 0; + +    GF_ASSERT(dict); + +    ret = dict_get_str(dict, "volname", &volname); +    if (ret) +        goto out; +    cli_out("Inode tables for volume %s", volname); + +    ret = dict_get_int32(dict, "brick-index-max", &brick_index_max); +    if (ret) +        goto out; +    ret = dict_get_int32(dict, "other-count", &other_count); +    if (ret) +        goto out; + +    index_max = brick_index_max + other_count; + +    for (i = 0; i <= index_max; i++) { +        cli_out("----------------------------------------------"); + +        snprintf(key, sizeof(key), "brick%d.hostname", i); +        ret = dict_get_str(dict, key, &hostname);          if (ret) -                goto out; -        if (active_size != 0) { -                cli_out ("Active inodes:"); -                cli_out ("%-40s %14s %14s %9s", "GFID", "Lookups", "Ref", -                         "IA type"); -                cli_out ("%-40s %14s %14s %9s", "----", "-------", "---", -                         "-------"); -        } -        for (i = 0; i < active_size; i++) { -                snprintf (key, sizeof (key), "%s.active%d", prefix, i); -                cli_print_volume_status_inode_entry (dict, key); -        } -        cli_out (" "); +            goto out; +        snprintf(key, sizeof(key), "brick%d.path", i); +        ret = dict_get_str(dict, key, &path); +        if (ret) +            goto out; +        if (notbrick) +            cli_out("%s : %s", hostname, path); +        else +            cli_out("Brick : %s:%s", hostname, path); -        snprintf (key, sizeof (key), "%s.lru_size", prefix); -        ret = dict_get_uint32 (dict, key, &lru_size); +        snprintf(key, sizeof(key), "brick%d.status", i); +        ret = dict_get_int32(dict, key, &online);          if (ret) -                goto out; -        if (lru_size != 0) { -                cli_out ("LRU inodes:"); -                cli_out ("%-40s %14s %14s %9s", "GFID", "Lookups", "Ref", -                         "IA type"); -                cli_out ("%-40s %14s %14s %9s", "----", "-------", "---", -                         "-------"); -        } -        for (i = 0; i < lru_size; i++) { -                snprintf (key, sizeof (key), "%s.lru%d", prefix, i); -                cli_print_volume_status_inode_entry (dict, key); +            goto out; +        if (!online) { +            if (notbrick) +                cli_out("%s is offline", hostname); +            else +                cli_out("Brick is offline"); +            continue;          } -        cli_out (" "); -        snprintf (key, sizeof (key), "%s.purge_size", prefix); -        ret = dict_get_uint32 (dict, key, &purge_size); +        snprintf(key, sizeof(key), "brick%d.conncount", i); +        ret = dict_get_int32(dict, key, &conn_count);          if (ret) -                goto out; -        if (purge_size != 0) { -                cli_out ("Purged inodes:"); -                cli_out ("%-40s %14s %14s %9s", "GFID", "Lookups", "Ref", -                         "IA type"); -                cli_out ("%-40s %14s %14s %9s", "----", "-------", "---", -                         "-------"); -        } -        for (i = 0; i < purge_size; i++) { -                snprintf (key, sizeof (key), "%s.purge%d", prefix, i); -                cli_print_volume_status_inode_entry (dict, key); -        } +            goto out; + +        for (j = 0; j < conn_count; j++) { +            if (conn_count > 1) +                cli_out("Connection %d:", j + 1); +            snprintf(key, sizeof(key), "brick%d.conn%d.itable", i, j); +            cli_print_volume_status_itables(dict, key); +            cli_out(" "); +        } +    }  out: -        return; +    cli_out("----------------------------------------------"); +    return;  }  void -cli_print_volume_status_inode (dict_t *dict, gf_boolean_t notbrick) -{ -        int             ret = -1; -        char            *volname = NULL; -        int             brick_index_max = -1; -        int             other_count = 0; -        int             index_max = 0; -        char            *hostname = NULL; -        char            *path = NULL; -        int             online = -1; -        int             conn_count = 0; -        char            key[1024] = {0,}; -        int             i = 0; -        int             j = 0; - -        GF_ASSERT (dict); - -        ret = dict_get_str (dict, "volname", &volname); +cli_print_volume_status_fdtable(dict_t *dict, char *prefix) +{ +    int ret = -1; +    char key[1024] = { +        0, +    }; +    int refcount = 0; +    uint32_t maxfds = 0; +    int firstfree = 0; +    int openfds = 0; +    int fd_pid = 0; +    int fd_refcount = 0; +    int fd_flags = 0; +    int i = 0; + +    GF_ASSERT(dict); +    GF_ASSERT(prefix); + +    snprintf(key, sizeof(key), "%s.refcount", prefix); +    ret = dict_get_int32(dict, key, &refcount); +    if (ret) +        goto out; + +    snprintf(key, sizeof(key), "%s.maxfds", prefix); +    ret = dict_get_uint32(dict, key, &maxfds); +    if (ret) +        goto out; + +    snprintf(key, sizeof(key), "%s.firstfree", prefix); +    ret = dict_get_int32(dict, key, &firstfree); +    if (ret) +        goto out; + +    cli_out("RefCount = %d  MaxFDs = %d  FirstFree = %d", refcount, maxfds, +            firstfree); + +    snprintf(key, sizeof(key), "%s.openfds", prefix); +    ret = dict_get_int32(dict, key, &openfds); +    if (ret) +        goto out; +    if (0 == openfds) { +        cli_err("No open fds"); +        goto out; +    } + +    cli_out("%-19s %-19s %-19s %-19s", "FD Entry", "PID", "RefCount", "Flags"); +    cli_out("%-19s %-19s %-19s %-19s", "--------", "---", "--------", "-----"); + +    for (i = 0; i < maxfds; i++) { +        snprintf(key, sizeof(key), "%s.fdentry%d.pid", prefix, i); +        ret = dict_get_int32(dict, key, &fd_pid);          if (ret) -                goto out; -        cli_out ("Inode tables for volume %s", volname); +            continue; -        ret = dict_get_int32 (dict, "brick-index-max", &brick_index_max); +        snprintf(key, sizeof(key), "%s.fdentry%d.refcount", prefix, i); +        ret = dict_get_int32(dict, key, &fd_refcount);          if (ret) -                goto out; -        ret = dict_get_int32 (dict, "other-count", &other_count); -        if (ret) -                goto out; - -        index_max = brick_index_max + other_count; +            continue; -        for ( i = 0; i <= index_max; i++) { -                cli_out ("----------------------------------------------"); - -                snprintf (key, sizeof (key), "brick%d.hostname", i); -                ret = dict_get_str (dict, key, &hostname); -                if (ret) -                        goto out; -                snprintf (key, sizeof (key), "brick%d.path", i); -                ret = dict_get_str (dict, key, &path); -                if (ret) -                        goto out; -                if (notbrick) -                        cli_out ("%s : %s", hostname, path); -                else -                        cli_out ("Brick : %s:%s", hostname, path); - -                snprintf (key, sizeof (key), "brick%d.status", i); -                ret = dict_get_int32 (dict, key, &online); -                if (ret) -                        goto out; -                if (!online) { -                        if (notbrick) -                                cli_out ("%s is offline", hostname); -                        else -                                cli_out ("Brick is offline"); -                        continue; -                } - -                snprintf (key, sizeof (key), "brick%d.conncount", i); -                ret = dict_get_int32 (dict, key, &conn_count); -                if (ret) -                        goto out; +        snprintf(key, sizeof(key), "%s.fdentry%d.flags", prefix, i); +        ret = dict_get_int32(dict, key, &fd_flags); +        if (ret) +            continue; -                for (j = 0; j < conn_count; j++) { -                        if (conn_count > 1) -                                cli_out ("Connection %d:", j+1); +        cli_out("%-19d %-19d %-19d %-19d", i, fd_pid, fd_refcount, fd_flags); +    } -                        snprintf (key, sizeof (key), "brick%d.conn%d.itable", -                                  i, j); -                        cli_print_volume_status_itables (dict, key); -                        cli_out (" "); -                } -        }  out: -        cli_out ("----------------------------------------------"); -        return; +    return;  }  void -cli_print_volume_status_fdtable (dict_t *dict, char *prefix) -{ -        int             ret = -1; -        char            key[1024] = {0,}; -        int             refcount = 0; -        uint32_t        maxfds = 0; -        int             firstfree = 0; -        int             openfds = 0; -        int             fd_pid = 0; -        int             fd_refcount = 0; -        int             fd_flags = 0; -        int             i = 0; - -        GF_ASSERT (dict); -        GF_ASSERT (prefix); - -        snprintf (key, sizeof (key), "%s.refcount", prefix); -        ret = dict_get_int32 (dict, key, &refcount); +cli_print_volume_status_fd(dict_t *dict, gf_boolean_t notbrick) +{ +    int ret = -1; +    char *volname = NULL; +    int brick_index_max = -1; +    int other_count = 0; +    int index_max = 0; +    char *hostname = NULL; +    char *path = NULL; +    int online = -1; +    int conn_count = 0; +    char key[1024] = { +        0, +    }; +    int i = 0; +    int j = 0; + +    GF_ASSERT(dict); + +    ret = dict_get_str(dict, "volname", &volname); +    if (ret) +        goto out; +    cli_out("FD tables for volume %s", volname); + +    ret = dict_get_int32(dict, "brick-index-max", &brick_index_max); +    if (ret) +        goto out; +    ret = dict_get_int32(dict, "other-count", &other_count); +    if (ret) +        goto out; + +    index_max = brick_index_max + other_count; + +    for (i = 0; i <= index_max; i++) { +        cli_out("----------------------------------------------"); + +        snprintf(key, sizeof(key), "brick%d.hostname", i); +        ret = dict_get_str(dict, key, &hostname);          if (ret) -                goto out; - -        snprintf (key, sizeof (key), "%s.maxfds", prefix); -        ret = dict_get_uint32 (dict, key, &maxfds); +            goto out; +        snprintf(key, sizeof(key), "brick%d.path", i); +        ret = dict_get_str(dict, key, &path);          if (ret) -                goto out; - -        snprintf (key, sizeof (key), "%s.firstfree", prefix); -        ret = dict_get_int32 (dict, key, &firstfree); -        if (ret) -                goto out; +            goto out; -        cli_out ("RefCount = %d  MaxFDs = %d  FirstFree = %d", -                 refcount, maxfds, firstfree); +        if (notbrick) +            cli_out("%s : %s", hostname, path); +        else +            cli_out("Brick : %s:%s", hostname, path); -        snprintf (key, sizeof (key), "%s.openfds", prefix); -        ret = dict_get_int32 (dict, key, &openfds); +        snprintf(key, sizeof(key), "brick%d.status", i); +        ret = dict_get_int32(dict, key, &online);          if (ret) -                goto out; -        if (0 == openfds) { -                cli_err ("No open fds"); -                goto out; +            goto out; +        if (!online) { +            if (notbrick) +                cli_out("%s is offline", hostname); +            else +                cli_out("Brick is offline"); +            continue;          } -        cli_out ("%-19s %-19s %-19s %-19s", "FD Entry", "PID", -                 "RefCount", "Flags"); -        cli_out ("%-19s %-19s %-19s %-19s", "--------", "---", -                 "--------", "-----"); - -        for (i = 0; i < maxfds ; i++) { -                snprintf (key, sizeof (key), "%s.fdentry%d.pid", prefix, i); -                ret = dict_get_int32 (dict, key, &fd_pid); -                if (ret) -                        continue; - -                snprintf (key, sizeof (key), "%s.fdentry%d.refcount", -                          prefix, i); -                ret = dict_get_int32 (dict, key, &fd_refcount); -                if (ret) -                        continue; +        snprintf(key, sizeof(key), "brick%d.conncount", i); +        ret = dict_get_int32(dict, key, &conn_count); +        if (ret) +            goto out; -                snprintf (key, sizeof (key), "%s.fdentry%d.flags", prefix, i); -                ret = dict_get_int32 (dict, key, &fd_flags); -                if (ret) -                        continue; +        for (j = 0; j < conn_count; j++) { +            cli_out("Connection %d:", j + 1); -                cli_out ("%-19d %-19d %-19d %-19d", i, fd_pid, fd_refcount, -                         fd_flags); +            snprintf(key, sizeof(key), "brick%d.conn%d.fdtable", i, j); +            cli_print_volume_status_fdtable(dict, key); +            cli_out(" ");          } - +    }  out: -        return; +    cli_out("----------------------------------------------"); +    return;  }  void -cli_print_volume_status_fd (dict_t *dict, gf_boolean_t notbrick) -{ -        int             ret = -1; -        char            *volname = NULL; -        int             brick_index_max = -1; -        int             other_count = 0; -        int             index_max = 0; -        char            *hostname = NULL; -        char            *path = NULL; -        int             online = -1; -        int             conn_count = 0; -        char            key[1024] = {0,}; -        int             i = 0; -        int             j = 0; - -        GF_ASSERT (dict); - -        ret = dict_get_str (dict, "volname", &volname); -        if (ret) -                goto out; -        cli_out ("FD tables for volume %s", volname); +cli_print_volume_status_call_frame(dict_t *dict, char *prefix) +{ +    int ret = -1; +    char key[1024] = { +        0, +    }; +    int ref_count = 0; +    char *translator = 0; +    int complete = 0; +    char *parent = NULL; +    char *wind_from = NULL; +    char *wind_to = NULL; +    char *unwind_from = NULL; +    char *unwind_to = NULL; + +    if (!dict || !prefix) +        return; -        ret = dict_get_int32 (dict, "brick-index-max", &brick_index_max); -        if (ret) -                goto out; -        ret = dict_get_int32 (dict, "other-count", &other_count); -        if (ret) -                goto out; +    snprintf(key, sizeof(key), "%s.refcount", prefix); +    ret = dict_get_int32(dict, key, &ref_count); +    if (ret) +        return; -        index_max = brick_index_max + other_count; +    snprintf(key, sizeof(key), "%s.translator", prefix); +    ret = dict_get_str(dict, key, &translator); +    if (ret) +        return; -        for (i = 0; i <= index_max; i++) { -                cli_out ("----------------------------------------------"); +    snprintf(key, sizeof(key), "%s.complete", prefix); +    ret = dict_get_int32(dict, key, &complete); +    if (ret) +        return; -                snprintf (key, sizeof (key), "brick%d.hostname", i); -                ret = dict_get_str (dict, key, &hostname); -                if (ret) -                        goto out; -                snprintf (key, sizeof (key), "brick%d.path", i); -                ret = dict_get_str (dict, key, &path); -                if (ret) -                        goto out; +    cli_out("  Ref Count   = %d", ref_count); +    cli_out("  Translator  = %s", translator); +    cli_out("  Completed   = %s", (complete ? "Yes" : "No")); -                if (notbrick) -                        cli_out ("%s : %s", hostname, path); -                else -                        cli_out ("Brick : %s:%s", hostname, path); +    snprintf(key, sizeof(key), "%s.parent", prefix); +    ret = dict_get_str(dict, key, &parent); +    if (!ret) +        cli_out("  Parent      = %s", parent); -                snprintf (key, sizeof (key), "brick%d.status", i); -                ret = dict_get_int32 (dict, key, &online); -                if (ret) -                        goto out; -                if (!online) { -                        if (notbrick) -                                cli_out ("%s is offline", hostname); -                        else -                                cli_out ("Brick is offline"); -                        continue; -                } +    snprintf(key, sizeof(key), "%s.windfrom", prefix); +    ret = dict_get_str(dict, key, &wind_from); +    if (!ret) +        cli_out("  Wind From   = %s", wind_from); -                snprintf (key, sizeof (key), "brick%d.conncount", i); -                ret = dict_get_int32 (dict, key, &conn_count); -                if (ret) -                        goto out; +    snprintf(key, sizeof(key), "%s.windto", prefix); +    ret = dict_get_str(dict, key, &wind_to); +    if (!ret) +        cli_out("  Wind To     = %s", wind_to); -                for (j = 0; j < conn_count; j++) { -                        cli_out ("Connection %d:", j+1); +    snprintf(key, sizeof(key), "%s.unwindfrom", prefix); +    ret = dict_get_str(dict, key, &unwind_from); +    if (!ret) +        cli_out("  Unwind From = %s", unwind_from); -                        snprintf (key, sizeof (key), "brick%d.conn%d.fdtable", -                                  i, j); -                        cli_print_volume_status_fdtable (dict, key); -                        cli_out (" "); -                } -        } -out: -        cli_out ("----------------------------------------------"); -        return; +    snprintf(key, sizeof(key), "%s.unwindto", prefix); +    ret = dict_get_str(dict, key, &unwind_to); +    if (!ret) +        cli_out("  Unwind To   = %s", unwind_to);  }  void -cli_print_volume_status_call_frame (dict_t *dict, char *prefix) -{ -        int             ret = -1; -        char            key[1024] = {0,}; -        int             ref_count = 0; -        char            *translator = 0; -        int             complete = 0; -        char            *parent = NULL; -        char            *wind_from = NULL; -        char            *wind_to = NULL; -        char            *unwind_from = NULL; -        char            *unwind_to = NULL; +cli_print_volume_status_call_stack(dict_t *dict, char *prefix) +{ +    int ret = -1; +    char key[1024] = { +        0, +    }; +    int uid = 0; +    int gid = 0; +    int pid = 0; +    uint64_t unique = 0; +    // char            *op = NULL; +    int count = 0; +    int i = 0; + +    if (!dict || !prefix) +        return; -        if (!dict || !prefix) -                return; +    snprintf(key, sizeof(key), "%s.uid", prefix); +    ret = dict_get_int32(dict, key, &uid); +    if (ret) +        return; -        snprintf (key, sizeof (key), "%s.refcount", prefix); -        ret = dict_get_int32 (dict, key, &ref_count); -        if (ret) -                return; +    snprintf(key, sizeof(key), "%s.gid", prefix); +    ret = dict_get_int32(dict, key, &gid); +    if (ret) +        return; -        snprintf (key, sizeof (key), "%s.translator", prefix); -        ret = dict_get_str (dict, key, &translator); -        if (ret) -                return; +    snprintf(key, sizeof(key), "%s.pid", prefix); +    ret = dict_get_int32(dict, key, &pid); +    if (ret) +        return; -        snprintf (key, sizeof (key), "%s.complete", prefix); -        ret = dict_get_int32 (dict, key, &complete); -        if (ret) -                return; +    snprintf(key, sizeof(key), "%s.unique", prefix); +    ret = dict_get_uint64(dict, key, &unique); +    if (ret) +        return; -        cli_out ("  Ref Count   = %d", ref_count); -        cli_out ("  Translator  = %s", translator); -        cli_out ("  Completed   = %s", (complete ? "Yes" : "No")); +    /* +    snprintf (key, sizeof (key), "%s.op", prefix); +    ret = dict_get_str (dict, key, &op); +    if (ret) +            return; +    */ -        snprintf (key, sizeof (key), "%s.parent", prefix); -        ret = dict_get_str (dict, key, &parent); -        if (!ret) -                cli_out ("  Parent      = %s", parent); +    snprintf(key, sizeof(key), "%s.count", prefix); +    ret = dict_get_int32(dict, key, &count); +    if (ret) +        return; -        snprintf (key, sizeof (key), "%s.windfrom", prefix); -        ret = dict_get_str (dict, key, &wind_from); -        if (!ret) -                cli_out ("  Wind From   = %s", wind_from); +    cli_out(" UID    : %d", uid); +    cli_out(" GID    : %d", gid); +    cli_out(" PID    : %d", pid); +    cli_out(" Unique : %" PRIu64, unique); +    // cli_out ("\tOp     : %s", op); +    cli_out(" Frames : %d", count); -        snprintf (key, sizeof (key), "%s.windto", prefix); -        ret = dict_get_str (dict, key, &wind_to); -        if (!ret) -                cli_out ("  Wind To     = %s", wind_to); +    for (i = 0; i < count; i++) { +        cli_out(" Frame %d", i + 1); -        snprintf (key, sizeof (key), "%s.unwindfrom", prefix); -        ret = dict_get_str (dict, key, &unwind_from); -        if (!ret) -                cli_out ("  Unwind From = %s", unwind_from); +        snprintf(key, sizeof(key), "%s.frame%d", prefix, i); +        cli_print_volume_status_call_frame(dict, key); +    } -        snprintf (key, sizeof (key), "%s.unwindto", prefix); -        ret = dict_get_str (dict, key, &unwind_to); -        if (!ret) -                cli_out ("  Unwind To   = %s", unwind_to); +    cli_out(" ");  }  void -cli_print_volume_status_call_stack (dict_t *dict, char *prefix) -{ -        int             ret = -1; -        char            key[1024] = {0,}; -        int             uid = 0; -        int             gid = 0; -        int             pid = 0; -        uint64_t        unique = 0; -        //char            *op = NULL; -        int             count = 0; -        int             i = 0; - -        if (!dict || !prefix) -                return; - -        snprintf (key, sizeof (key), "%s.uid", prefix); -        ret = dict_get_int32 (dict, key, &uid); -        if (ret) -                return; - -        snprintf (key, sizeof (key), "%s.gid", prefix); -        ret = dict_get_int32 (dict, key, &gid); +cli_print_volume_status_callpool(dict_t *dict, gf_boolean_t notbrick) +{ +    int ret = -1; +    char *volname = NULL; +    int brick_index_max = -1; +    int other_count = 0; +    int index_max = 0; +    char *hostname = NULL; +    char *path = NULL; +    int online = -1; +    int call_count = 0; +    char key[1024] = { +        0, +    }; +    int i = 0; +    int j = 0; + +    GF_ASSERT(dict); + +    ret = dict_get_str(dict, "volname", &volname); +    if (ret) +        goto out; +    cli_out("Pending calls for volume %s", volname); + +    ret = dict_get_int32(dict, "brick-index-max", &brick_index_max); +    if (ret) +        goto out; +    ret = dict_get_int32(dict, "other-count", &other_count); +    if (ret) +        goto out; + +    index_max = brick_index_max + other_count; + +    for (i = 0; i <= index_max; i++) { +        cli_out("----------------------------------------------"); + +        snprintf(key, sizeof(key), "brick%d.hostname", i); +        ret = dict_get_str(dict, key, &hostname);          if (ret) -                return; - -        snprintf (key, sizeof (key), "%s.pid", prefix); -        ret = dict_get_int32 (dict, key, &pid); -        if (ret) -                return; - -        snprintf (key, sizeof (key), "%s.unique", prefix); -        ret = dict_get_uint64 (dict, key, &unique); +            goto out; +        snprintf(key, sizeof(key), "brick%d.path", i); +        ret = dict_get_str(dict, key, &path);          if (ret) -                return; - -        /* -        snprintf (key, sizeof (key), "%s.op", prefix); -        ret = dict_get_str (dict, key, &op); -        if (ret) -                return; -        */ +            goto out; +        if (notbrick) +            cli_out("%s : %s", hostname, path); +        else +            cli_out("Brick : %s:%s", hostname, path); -        snprintf (key, sizeof (key), "%s.count", prefix); -        ret = dict_get_int32 (dict, key, &count); +        snprintf(key, sizeof(key), "brick%d.status", i); +        ret = dict_get_int32(dict, key, &online);          if (ret) -                return; - -        cli_out (" UID    : %d", uid); -        cli_out (" GID    : %d", gid); -        cli_out (" PID    : %d", pid); -        cli_out (" Unique : %"PRIu64, unique); -        //cli_out ("\tOp     : %s", op); -        cli_out (" Frames : %d", count); - -        for (i = 0; i < count; i++) { -                cli_out (" Frame %d", i+1); - -                snprintf (key, sizeof (key), "%s.frame%d", prefix, i); -                cli_print_volume_status_call_frame (dict, key); +            goto out; +        if (!online) { +            if (notbrick) +                cli_out("%s is offline", hostname); +            else +                cli_out("Brick is offline"); +            continue;          } -        cli_out (" "); -} - -void -cli_print_volume_status_callpool (dict_t *dict, gf_boolean_t notbrick) -{ -        int             ret = -1; -        char            *volname = NULL; -        int             brick_index_max = -1; -        int             other_count = 0; -        int             index_max = 0; -        char            *hostname = NULL; -        char            *path = NULL; -        int             online = -1; -        int             call_count = 0; -        char            key[1024] = {0,}; -        int             i = 0; -        int             j = 0; - -        GF_ASSERT (dict); - -        ret = dict_get_str (dict, "volname", &volname); -        if (ret) -                goto out; -        cli_out ("Pending calls for volume %s", volname); - -        ret = dict_get_int32 (dict, "brick-index-max", &brick_index_max); +        snprintf(key, sizeof(key), "brick%d.callpool.count", i); +        ret = dict_get_int32(dict, key, &call_count);          if (ret) -                goto out; -        ret = dict_get_int32 (dict, "other-count", &other_count); -        if (ret) -                goto out; +            goto out; +        cli_out("Pending calls: %d", call_count); -        index_max = brick_index_max + other_count; +        if (0 == call_count) +            continue; -        for (i = 0; i <= index_max; i++) { -                cli_out ("----------------------------------------------"); +        for (j = 0; j < call_count; j++) { +            cli_out("Call Stack%d", j + 1); -                snprintf (key, sizeof (key), "brick%d.hostname", i); -                ret = dict_get_str (dict, key, &hostname); -                if (ret) -                        goto out; -                snprintf (key, sizeof (key), "brick%d.path", i); -                ret = dict_get_str (dict, key, &path); -                if (ret) -                        goto out; - -                if (notbrick) -                        cli_out ("%s : %s", hostname, path); -                else -                        cli_out ("Brick : %s:%s", hostname, path); - -                snprintf (key, sizeof (key), "brick%d.status", i); -                ret = dict_get_int32 (dict, key, &online); -                if (ret) -                        goto out; -                if (!online) { -                        if (notbrick) -                                cli_out ("%s is offline", hostname); -                        else -                                cli_out ("Brick is offline"); -                        continue; -                } - -                snprintf (key, sizeof (key), "brick%d.callpool.count", i); -                ret = dict_get_int32 (dict, key, &call_count); -                if (ret) -                        goto out; -                cli_out ("Pending calls: %d", call_count); - -                if (0 == call_count) -                        continue; - -                for (j = 0; j < call_count; j++) { -                        cli_out ("Call Stack%d", j+1); - -                        snprintf (key, sizeof (key), -                                  "brick%d.callpool.stack%d", i, j); -                        cli_print_volume_status_call_stack (dict, key); -                } +            snprintf(key, sizeof(key), "brick%d.callpool.stack%d", i, j); +            cli_print_volume_status_call_stack(dict, key);          } +    }  out: -        cli_out ("----------------------------------------------"); -        return; +    cli_out("----------------------------------------------"); +    return;  }  static void -cli_print_volume_status_tasks (dict_t *dict) -{ -        int             ret         = -1; -        int             i           = 0; -        int             j           = 0; -        int             count       = 0; -        int             task_count  = 0; -        int             status      = 0; -        char           *op          = NULL; -        char           *task_id_str = NULL; -        char           *volname     = NULL; -        char            key[64]     = {0,}; -        char            task[32]    = {0,}; -        char           *brick       = NULL; - -        ret = dict_get_str (dict, "volname", &volname); -        if (ret) -                goto out; - -        ret = dict_get_int32 (dict, "tasks", &task_count); -        if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Failed to get tasks count"); -                return; -        } +cli_print_volume_status_tasks(dict_t *dict) +{ +    int ret = -1; +    int i = 0; +    int j = 0; +    int count = 0; +    int task_count = 0; +    int status = 0; +    char *op = NULL; +    char *task_id_str = NULL; +    char *volname = NULL; +    char key[64] = { +        0, +    }; +    char task[32] = { +        0, +    }; +    char *brick = NULL; + +    ret = dict_get_str(dict, "volname", &volname); +    if (ret) +        goto out; + +    ret = dict_get_int32(dict, "tasks", &task_count); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, "Failed to get tasks count"); +        return; +    } -        cli_out ("Task Status of Volume %s", volname); -        cli_print_line (CLI_BRICK_STATUS_LINE_LEN); +    cli_out("Task Status of Volume %s", volname); +    cli_print_line(CLI_BRICK_STATUS_LINE_LEN); -        if (task_count == 0) { -                cli_out ("There are no active volume tasks"); -                cli_out (" "); -                return; -        } +    if (task_count == 0) { +        cli_out("There are no active volume tasks"); +        cli_out(" "); +        return; +    } -        for (i = 0; i < task_count; i++) { -                snprintf (key, sizeof (key), "task%d.type", i); -                ret = dict_get_str(dict, key, &op); -                if (ret) -                        return; -                cli_out ("%-20s : %-20s", "Task", op); +    for (i = 0; i < task_count; i++) { +        snprintf(key, sizeof(key), "task%d.type", i); +        ret = dict_get_str(dict, key, &op); +        if (ret) +            return; +        cli_out("%-20s : %-20s", "Task", op); -                snprintf (key, sizeof (key), "task%d.id", i); -                ret = dict_get_str (dict, key, &task_id_str); -                if (ret) -                        return; -                cli_out ("%-20s : %-20s", "ID", task_id_str); +        snprintf(key, sizeof(key), "task%d.id", i); +        ret = dict_get_str(dict, key, &task_id_str); +        if (ret) +            return; +        cli_out("%-20s : %-20s", "ID", task_id_str); -                snprintf (key, sizeof (key), "task%d.status", i); -                ret = dict_get_int32 (dict, key, &status); -                if (ret) -                        return; +        snprintf(key, sizeof(key), "task%d.status", i); +        ret = dict_get_int32(dict, key, &status); +        if (ret) +            return; -                snprintf (task, sizeof (task), "task%d", i); +        snprintf(task, sizeof(task), "task%d", i); -                if (!strcmp (op, "Remove brick")) { -                        snprintf (key, sizeof (key), "%s.count", task); -                        ret = dict_get_int32 (dict, key, &count); -                        if (ret) -                                goto out; +        if (!strcmp(op, "Remove brick")) { +            snprintf(key, sizeof(key), "%s.count", task); +            ret = dict_get_int32(dict, key, &count); +            if (ret) +                goto out; -                        cli_out ("%-20s", "Removed bricks:"); +            cli_out("%-20s", "Removed bricks:"); -                        for (j = 1; j <= count; j++) { -                                snprintf (key, sizeof (key),"%s.brick%d", -                                          task, j); -                                ret = dict_get_str (dict, key, &brick); -                                if (ret) -                                        goto out; +            for (j = 1; j <= count; j++) { +                snprintf(key, sizeof(key), "%s.brick%d", task, j); +                ret = dict_get_str(dict, key, &brick); +                if (ret) +                    goto out; -                                cli_out ("%-20s", brick); -                        } -                } -                cli_out ("%-20s : %-20s", "Status", -                         cli_vol_task_status_str[status]); -                cli_out (" "); +                cli_out("%-20s", brick); +            }          } +        cli_out("%-20s : %-20s", "Status", cli_vol_task_status_str[status]); +        cli_out(" "); +    }  out: -        return; +    return;  }  static int -gf_cli_status_cbk (struct rpc_req *req, struct iovec *iov, -                      int count, void *myframe) -{ -        int                             ret             = -1; -        int                             brick_index_max = -1; -        int                             other_count     = 0; -        int                             index_max       = 0; -        int                             i               = 0; -        int                             type            = -1; -        int                             hot_brick_count = -1; -        int                             pid             = -1; -        uint32_t                        cmd             = 0; -        gf_boolean_t                    notbrick        = _gf_false; -        char                            key[1024]       = {0,}; -        char                           *hostname        = NULL; -        char                           *path            = NULL; -        char                           *volname         = NULL; -        dict_t                         *dict            = NULL; -        gf_cli_rsp                      rsp             = {0,}; -        cli_volume_status_t             status          = {0}; -        cli_local_t                    *local           = NULL; -        gf_boolean_t                    wipe_local      = _gf_false; -        char                            msg[1024]       = {0,}; - -        GF_ASSERT (myframe); - -        if (req->rpc_status == -1) -                goto out; - -        ret = xdr_to_generic (*iov, &rsp, (xdrproc_t)xdr_gf_cli_rsp); -        if (ret < 0) { -                gf_log (((call_frame_t *) myframe)->this->name, GF_LOG_ERROR, -                        "Failed to decode xdr response"); -                goto out; -        } - -        gf_log ("cli", GF_LOG_DEBUG, "Received response to status cmd"); - -        local = ((call_frame_t *) myframe)->local; +gf_cli_status_cbk(struct rpc_req *req, struct iovec *iov, int count, +                  void *myframe) +{ +    int ret = -1; +    int brick_index_max = -1; +    int other_count = 0; +    int index_max = 0; +    int i = 0; +    int type = -1; +    int hot_brick_count = -1; +    int pid = -1; +    uint32_t cmd = 0; +    gf_boolean_t notbrick = _gf_false; +    char key[1024] = { +        0, +    }; +    char *hostname = NULL; +    char *path = NULL; +    char *volname = NULL; +    dict_t *dict = NULL; +    gf_cli_rsp rsp = { +        0, +    }; +    cli_volume_status_t status = {0}; +    cli_local_t *local = NULL; +    gf_boolean_t wipe_local = _gf_false; +    char msg[1024] = { +        0, +    }; + +    GF_ASSERT(myframe); + +    if (req->rpc_status == -1) +        goto out; + +    ret = xdr_to_generic(*iov, &rsp, (xdrproc_t)xdr_gf_cli_rsp); +    if (ret < 0) { +        gf_log(((call_frame_t *)myframe)->this->name, GF_LOG_ERROR, +               "Failed to decode xdr response"); +        goto out; +    } + +    gf_log("cli", GF_LOG_DEBUG, "Received response to status cmd"); + +    local = ((call_frame_t *)myframe)->local; +    if (!local) { +        local = cli_local_get();          if (!local) { -                local = cli_local_get (); -                if (!local) { -                        ret = -1; -                        gf_log ("cli", GF_LOG_ERROR, "Failed to get local"); -                        goto out; -                } -                wipe_local = _gf_true; +            ret = -1; +            gf_log("cli", GF_LOG_ERROR, "Failed to get local"); +            goto out;          } +        wipe_local = _gf_true; +    } -        if (rsp.op_ret) { -                if (strcmp (rsp.op_errstr, "")) -                        snprintf (msg, sizeof (msg), "%s", rsp.op_errstr); -                else -                        snprintf (msg, sizeof (msg), "Unable to obtain volume " -                                  "status information."); - -                if (global_state->mode & GLUSTER_MODE_XML) { -                        if (!local->all) -                                cli_xml_output_str ("volStatus", msg, -                                                    rsp.op_ret, rsp.op_errno, -                                                    rsp.op_errstr); -                        ret = 0; -                        goto out; -                } +    if (rsp.op_ret) { +        if (strcmp(rsp.op_errstr, "")) +            snprintf(msg, sizeof(msg), "%s", rsp.op_errstr); +        else +            snprintf(msg, sizeof(msg), +                     "Unable to obtain volume " +                     "status information."); -                cli_err ("%s", msg); -                if (local && local->all) { -                        ret = 0; -                        cli_out (" "); -                } else -                        ret = -1; +        if (global_state->mode & GLUSTER_MODE_XML) { +            if (!local->all) +                cli_xml_output_str("volStatus", msg, rsp.op_ret, rsp.op_errno, +                                   rsp.op_errstr); +            ret = 0; +            goto out; +        } + +        cli_err("%s", msg); +        if (local && local->all) { +            ret = 0; +            cli_out(" "); +        } else +            ret = -1; + +        goto out; +    } + +    dict = dict_new(); +    if (!dict) +        goto out; + +    ret = dict_unserialize(rsp.dict.dict_val, rsp.dict.dict_len, &dict); +    if (ret) +        goto out; + +    ret = dict_get_uint32(dict, "cmd", &cmd); +    if (ret) +        goto out; + +    if ((cmd & GF_CLI_STATUS_ALL)) { +        if (local && local->dict) { +            dict_ref(dict); +            ret = dict_set_static_ptr(local->dict, "rsp-dict", dict); +            ret = 0; +        } else { +            gf_log("cli", GF_LOG_ERROR, "local not found"); +            ret = -1; +        } +        goto out; +    } + +    if ((cmd & GF_CLI_STATUS_NFS) || (cmd & GF_CLI_STATUS_SHD) || +        (cmd & GF_CLI_STATUS_QUOTAD) || (cmd & GF_CLI_STATUS_SNAPD) || +        (cmd & GF_CLI_STATUS_BITD) || (cmd & GF_CLI_STATUS_SCRUB) || +        (cmd & GF_CLI_STATUS_TIERD)) +        notbrick = _gf_true; + +    if (global_state->mode & GLUSTER_MODE_XML) { +        if (!local->all) { +            ret = cli_xml_output_vol_status_begin(local, rsp.op_ret, +                                                  rsp.op_errno, rsp.op_errstr); +            if (ret) { +                gf_log("cli", GF_LOG_ERROR, "Error outputting to xml"); +                goto xml_end; +            } +        } +        if (cmd & GF_CLI_STATUS_TASKS) { +            ret = cli_xml_output_vol_status_tasks_detail(local, dict); +            if (ret) { +                gf_log("cli", GF_LOG_ERROR, +                       "Error outputting " +                       "to xml"); +                goto xml_end; +            } +        } else { +            ret = cli_xml_output_vol_status(local, dict); +            if (ret) { +                gf_log("cli", GF_LOG_ERROR, "Error outputting to xml"); +                goto xml_end; +            } +        } + +    xml_end: +        if (!local->all) { +            ret = cli_xml_output_vol_status_end(local); +            if (ret) { +                gf_log("cli", GF_LOG_ERROR, "Error outputting to xml"); +            } +        } +        goto out; +    } + +    status.brick = GF_MALLOC(PATH_MAX + 256, gf_common_mt_strdup); +    if (!status.brick) { +        errno = ENOMEM; +        ret = -1; +        goto out; +    } +    switch (cmd & GF_CLI_STATUS_MASK) { +        case GF_CLI_STATUS_MEM: +            cli_print_volume_status_mem(dict, notbrick); +            goto cont; +            break; +        case GF_CLI_STATUS_CLIENTS: +            cli_print_volume_status_clients(dict, notbrick); +            goto cont; +            break; +        case GF_CLI_STATUS_CLIENT_LIST: +            cli_print_volume_status_client_list(dict, notbrick); +            goto cont; +            break; +        case GF_CLI_STATUS_INODE: +            cli_print_volume_status_inode(dict, notbrick); +            goto cont; +            break; +        case GF_CLI_STATUS_FD: +            cli_print_volume_status_fd(dict, notbrick); +            goto cont; +            break; +        case GF_CLI_STATUS_CALLPOOL: +            cli_print_volume_status_callpool(dict, notbrick); +            goto cont; +            break; +        case GF_CLI_STATUS_TASKS: +            cli_print_volume_status_tasks(dict); +            goto cont; +            break; +        default: +            break; +    } -                goto out; -        } +    ret = dict_get_str(dict, "volname", &volname); +    if (ret) +        goto out; -        dict = dict_new (); -        if (!dict) -                goto out; +    ret = dict_get_int32(dict, "brick-index-max", &brick_index_max); +    if (ret) +        goto out; -        ret = dict_unserialize (rsp.dict.dict_val, -                                rsp.dict.dict_len, -                                &dict); -        if (ret) -                goto out; +    ret = dict_get_int32(dict, "other-count", &other_count); +    if (ret) +        goto out; -        ret = dict_get_uint32 (dict, "cmd", &cmd); -        if (ret) -                goto out; +    index_max = brick_index_max + other_count; -        if ((cmd & GF_CLI_STATUS_ALL)) { -                if (local && local->dict) { -                        dict_ref (dict); -                        ret = dict_set_static_ptr (local->dict, "rsp-dict", dict); -                        ret = 0; -                } else { -                        gf_log ("cli", GF_LOG_ERROR, "local not found"); -                        ret = -1; -                } -                goto out; -        } - -        if ((cmd & GF_CLI_STATUS_NFS) || (cmd & GF_CLI_STATUS_SHD) || -            (cmd & GF_CLI_STATUS_QUOTAD) || (cmd & GF_CLI_STATUS_SNAPD) || -            (cmd & GF_CLI_STATUS_BITD) || (cmd & GF_CLI_STATUS_SCRUB) || -            (cmd & GF_CLI_STATUS_TIERD)) -                notbrick = _gf_true; +    ret = dict_get_int32(dict, "type", &type); +    if (ret) +        goto out; -        if (global_state->mode & GLUSTER_MODE_XML) { -                if (!local->all) { -                        ret = cli_xml_output_vol_status_begin (local, -                                                               rsp.op_ret, -                                                               rsp.op_errno, -                                                               rsp.op_errstr); -                        if (ret) { -                                gf_log ("cli", GF_LOG_ERROR, -                                        "Error outputting to xml"); -                                goto xml_end; -                        } -                } -                if (cmd & GF_CLI_STATUS_TASKS) { -                        ret = cli_xml_output_vol_status_tasks_detail (local, -                                                                      dict); -                        if (ret) { -                                gf_log ("cli", GF_LOG_ERROR,"Error outputting " -                                        "to xml"); -                                goto xml_end; -                        } -                } else { -                        ret = cli_xml_output_vol_status (local, dict); -                        if (ret) { -                                gf_log ("cli", GF_LOG_ERROR, -                                        "Error outputting to xml"); -                                goto xml_end; -                        } -                } +    ret = dict_get_int32(dict, "hot_brick_count", &hot_brick_count); +    if (ret) +        goto out; -xml_end: -                if (!local->all) { -                        ret = cli_xml_output_vol_status_end (local); -                        if (ret) { -                                gf_log ("cli", GF_LOG_ERROR, -                                        "Error outputting to xml"); -                        } -                } -                goto out; -        } +    cli_out("Status of volume: %s", volname); -        status.brick = GF_MALLOC (PATH_MAX + 256, gf_common_mt_strdup); -        if (!status.brick) { -                errno   = ENOMEM; -                ret     = -1; -                goto out; +    if ((cmd & GF_CLI_STATUS_DETAIL) == 0) { +        cli_out("%-*s %s  %s  %s  %s", CLI_VOL_STATUS_BRICK_LEN, +                "Gluster process", "TCP Port", "RDMA Port", "Online", "Pid"); +        cli_print_line(CLI_BRICK_STATUS_LINE_LEN); +    } +    if (type == GF_CLUSTER_TYPE_TIER) { +        cli_out("Hot Bricks:"); +    } +    for (i = 0; i <= index_max; i++) { +        if (type == GF_CLUSTER_TYPE_TIER && i == hot_brick_count) { +            cli_out("Cold Bricks:");          } -        switch (cmd & GF_CLI_STATUS_MASK) { -                case GF_CLI_STATUS_MEM: -                        cli_print_volume_status_mem (dict, notbrick); -                        goto cont; -                        break; -                case GF_CLI_STATUS_CLIENTS: -                        cli_print_volume_status_clients (dict, notbrick); -                        goto cont; -                        break; -                case GF_CLI_STATUS_CLIENT_LIST: -                        cli_print_volume_status_client_list (dict, notbrick); -                        goto cont; -                        break; -                case GF_CLI_STATUS_INODE: -                        cli_print_volume_status_inode (dict, notbrick); -                        goto cont; -                        break; -                case GF_CLI_STATUS_FD: -                        cli_print_volume_status_fd (dict, notbrick); -                        goto cont; -                        break; -                case GF_CLI_STATUS_CALLPOOL: -                        cli_print_volume_status_callpool (dict, notbrick); -                        goto cont; -                        break; -                case GF_CLI_STATUS_TASKS: -                        cli_print_volume_status_tasks (dict); -                        goto cont; -                        break; -                default: -                        break; -        } - -        ret = dict_get_str (dict, "volname", &volname); -        if (ret) -                goto out; +        status.rdma_port = 0; -        ret = dict_get_int32 (dict, "brick-index-max", &brick_index_max); +        snprintf(key, sizeof(key), "brick%d.hostname", i); +        ret = dict_get_str(dict, key, &hostname);          if (ret) -                goto out; +            continue; -        ret = dict_get_int32 (dict, "other-count", &other_count); +        snprintf(key, sizeof(key), "brick%d.path", i); +        ret = dict_get_str(dict, key, &path);          if (ret) -                goto out; +            continue; -        index_max = brick_index_max + other_count; +        /* Brick/not-brick is handled separately here as all +         * types of nodes are contained in the default output +         */ +        memset(status.brick, 0, PATH_MAX + 255); +        if (!strcmp(hostname, "NFS Server") || +            !strcmp(hostname, "Self-heal Daemon") || +            !strcmp(hostname, "Quota Daemon") || +            !strcmp(hostname, "Snapshot Daemon") || +            !strcmp(hostname, "Scrubber Daemon") || +            !strcmp(hostname, "Bitrot Daemon") || +            !strcmp(hostname, "Tier Daemon")) +            snprintf(status.brick, PATH_MAX + 255, "%s on %s", hostname, path); +        else { +            snprintf(key, sizeof(key), "brick%d.rdma_port", i); +            ret = dict_get_int32(dict, key, &(status.rdma_port)); +            if (ret) +                continue; +            snprintf(status.brick, PATH_MAX + 255, "Brick %s:%s", hostname, +                     path); +        } -        ret = dict_get_int32 (dict, "type", &type); +        snprintf(key, sizeof(key), "brick%d.port", i); +        ret = dict_get_int32(dict, key, &(status.port));          if (ret) -                goto out; +            continue; -        ret = dict_get_int32 (dict, "hot_brick_count", &hot_brick_count); +        snprintf(key, sizeof(key), "brick%d.status", i); +        ret = dict_get_int32(dict, key, &(status.online));          if (ret) -                goto out; - -        cli_out ("Status of volume: %s", volname); - -        if ((cmd & GF_CLI_STATUS_DETAIL) == 0) { -                cli_out ("%-*s %s  %s  %s  %s", CLI_VOL_STATUS_BRICK_LEN, -                         "Gluster process", "TCP Port", "RDMA Port", -                         "Online", "Pid"); -                cli_print_line (CLI_BRICK_STATUS_LINE_LEN); -        } -        if (type == GF_CLUSTER_TYPE_TIER) { -                cli_out ("Hot Bricks:"); -        } -        for (i = 0; i <= index_max; i++) { - -                if (type == GF_CLUSTER_TYPE_TIER && i == hot_brick_count) { -                        cli_out ("Cold Bricks:"); -                } -                status.rdma_port = 0; - -                snprintf (key, sizeof (key), "brick%d.hostname", i); -                ret = dict_get_str (dict, key, &hostname); -                if (ret) -                        continue; - -                snprintf (key, sizeof (key), "brick%d.path", i); -                ret = dict_get_str (dict, key, &path); -                if (ret) -                        continue; - -                /* Brick/not-brick is handled separately here as all -                 * types of nodes are contained in the default output -                 */ -                memset (status.brick, 0, PATH_MAX + 255); -                if (!strcmp (hostname, "NFS Server") || -                    !strcmp (hostname, "Self-heal Daemon") || -                    !strcmp (hostname, "Quota Daemon") || -                    !strcmp (hostname, "Snapshot Daemon") || -                    !strcmp (hostname, "Scrubber Daemon") || -                    !strcmp (hostname, "Bitrot Daemon") || -                    !strcmp (hostname, "Tier Daemon")) -                        snprintf (status.brick, PATH_MAX + 255, "%s on %s", -                                  hostname, path); -                else { -                        snprintf (key, sizeof (key), "brick%d.rdma_port", i); -                        ret = dict_get_int32 (dict, key, &(status.rdma_port)); -                        if (ret) -                                continue; -                        snprintf (status.brick, PATH_MAX + 255, "Brick %s:%s", -                                  hostname, path); -                } +            continue; -                snprintf (key, sizeof (key), "brick%d.port", i); -                ret = dict_get_int32 (dict, key, &(status.port)); -                if (ret) -                        continue; - -                snprintf (key, sizeof (key), "brick%d.status", i); -                ret = dict_get_int32 (dict, key, &(status.online)); -                if (ret) -                        continue; - -                snprintf (key, sizeof (key), "brick%d.pid", i); -                ret = dict_get_int32 (dict, key, &pid); -                if (ret) -                        continue; -                if (pid == -1) -                        ret = gf_asprintf (&(status.pid_str), "%s", "N/A"); -                else -                        ret = gf_asprintf (&(status.pid_str), "%d", pid); - -                if (ret == -1) -                        goto out; +        snprintf(key, sizeof(key), "brick%d.pid", i); +        ret = dict_get_int32(dict, key, &pid); +        if (ret) +            continue; +        if (pid == -1) +            ret = gf_asprintf(&(status.pid_str), "%s", "N/A"); +        else +            ret = gf_asprintf(&(status.pid_str), "%d", pid); -                if ((cmd & GF_CLI_STATUS_DETAIL)) { -                        ret = cli_get_detail_status (dict, i, &status); -                        if (ret) -                                goto out; -                        cli_print_line (CLI_BRICK_STATUS_LINE_LEN); -                        cli_print_detailed_status (&status); -                } else { -                        cli_print_brick_status (&status); -                } +        if (ret == -1) +            goto out; +        if ((cmd & GF_CLI_STATUS_DETAIL)) { +            ret = cli_get_detail_status(dict, i, &status); +            if (ret) +                goto out; +            cli_print_line(CLI_BRICK_STATUS_LINE_LEN); +            cli_print_detailed_status(&status); +        } else { +            cli_print_brick_status(&status);          } -        cli_out (" "); +    } +    cli_out(" "); -        if ((cmd & GF_CLI_STATUS_MASK) == GF_CLI_STATUS_NONE) -                cli_print_volume_status_tasks (dict); +    if ((cmd & GF_CLI_STATUS_MASK) == GF_CLI_STATUS_NONE) +        cli_print_volume_status_tasks(dict);  cont: -        ret = rsp.op_ret; +    ret = rsp.op_ret;  out: -        if (dict) -                dict_unref (dict); -        GF_FREE (status.brick); -        if (local && wipe_local) { -                cli_local_wipe (local); -        } +    if (dict) +        dict_unref(dict); +    GF_FREE(status.brick); +    if (local && wipe_local) { +        cli_local_wipe(local); +    } -        cli_cmd_broadcast_response (ret); -        return ret; +    cli_cmd_broadcast_response(ret); +    return ret;  }  int32_t -gf_cli_status_volume (call_frame_t *frame, xlator_t *this, -                         void *data) +gf_cli_status_volume(call_frame_t *frame, xlator_t *this, void *data)  { -        gf_cli_req                      req  = {{0,}}; -        int                             ret  = -1; -        dict_t                         *dict = NULL; +    gf_cli_req req = {{ +        0, +    }}; +    int ret = -1; +    dict_t *dict = NULL; -        if (!frame || !this || !data) -                goto out; +    if (!frame || !this || !data) +        goto out; -        dict = data; +    dict = data; -        ret = cli_to_glusterd (&req, frame, gf_cli_status_cbk, -                               (xdrproc_t) xdr_gf_cli_req, dict, -                               GLUSTER_CLI_STATUS_VOLUME, this, cli_rpc_prog, -                               NULL); - out: -        gf_log ("cli", GF_LOG_DEBUG, "Returning: %d", ret); -        return ret; +    ret = cli_to_glusterd(&req, frame, gf_cli_status_cbk, +                          (xdrproc_t)xdr_gf_cli_req, dict, +                          GLUSTER_CLI_STATUS_VOLUME, this, cli_rpc_prog, NULL); +out: +    gf_log("cli", GF_LOG_DEBUG, "Returning: %d", ret); +    return ret;  }  int -gf_cli_status_volume_all (call_frame_t *frame, xlator_t *this, void *data) -{ -        int              i            = 0; -        int              ret          = -1; -        int              vol_count    = -1; -        uint32_t         cmd          = 0; -        char             key[1024]    = {0}; -        char            *volname      = NULL; -        void            *vol_dict     = NULL; -        dict_t          *dict         = NULL; -        cli_local_t     *local        = NULL; - -        if (!frame) -                goto out; +gf_cli_status_volume_all(call_frame_t *frame, xlator_t *this, void *data) +{ +    int i = 0; +    int ret = -1; +    int vol_count = -1; +    uint32_t cmd = 0; +    char key[1024] = {0}; +    char *volname = NULL; +    void *vol_dict = NULL; +    dict_t *dict = NULL; +    cli_local_t *local = NULL; -        if (!frame->local) -                goto out; +    if (!frame) +        goto out; -        local = frame->local; +    if (!frame->local) +        goto out; -        ret = dict_get_uint32 (local->dict, "cmd", &cmd); -        if (ret) -                goto out; +    local = frame->local; -        local->all = _gf_true; +    ret = dict_get_uint32(local->dict, "cmd", &cmd); +    if (ret) +        goto out; -        ret = gf_cli_status_volume (frame, this, data); +    local->all = _gf_true; -        if (ret) -                goto out; +    ret = gf_cli_status_volume(frame, this, data); -        ret = dict_get_ptr (local->dict, "rsp-dict", &vol_dict); -        if (ret) -                goto out; +    if (ret) +        goto out; -        ret = dict_get_int32 ((dict_t *)vol_dict, "vol_count", &vol_count); -        if (ret) { -                cli_err ("Failed to get names of volumes"); -                goto out; -        } +    ret = dict_get_ptr(local->dict, "rsp-dict", &vol_dict); +    if (ret) +        goto out; -        /* remove the "all" flag in cmd */ -        cmd &= ~GF_CLI_STATUS_ALL; -        cmd |= GF_CLI_STATUS_VOL; +    ret = dict_get_int32((dict_t *)vol_dict, "vol_count", &vol_count); +    if (ret) { +        cli_err("Failed to get names of volumes"); +        goto out; +    } -        if (global_state->mode & GLUSTER_MODE_XML) { -                //TODO: Pass proper op_* values -                ret = cli_xml_output_vol_status_begin (local, 0,0, NULL); -                if (ret) { -                        gf_log ("cli", GF_LOG_ERROR, -                                "Error outputting to xml"); -                        goto xml_end; -                } -        } +    /* remove the "all" flag in cmd */ +    cmd &= ~GF_CLI_STATUS_ALL; +    cmd |= GF_CLI_STATUS_VOL; -        if (vol_count == 0 && !(global_state->mode & GLUSTER_MODE_XML)) { -                cli_err ("No volumes present"); -                ret = 0; -                goto out; +    if (global_state->mode & GLUSTER_MODE_XML) { +        // TODO: Pass proper op_* values +        ret = cli_xml_output_vol_status_begin(local, 0, 0, NULL); +        if (ret) { +            gf_log("cli", GF_LOG_ERROR, "Error outputting to xml"); +            goto xml_end;          } +    } -        for (i = 0; i < vol_count; i++) { +    if (vol_count == 0 && !(global_state->mode & GLUSTER_MODE_XML)) { +        cli_err("No volumes present"); +        ret = 0; +        goto out; +    } -                dict = dict_new (); -                if (!dict) -                        goto out; +    for (i = 0; i < vol_count; i++) { +        dict = dict_new(); +        if (!dict) +            goto out; -                snprintf (key, sizeof (key), "vol%d", i); -                ret = dict_get_str (vol_dict, key, &volname); -                if (ret) -                        goto out; +        snprintf(key, sizeof(key), "vol%d", i); +        ret = dict_get_str(vol_dict, key, &volname); +        if (ret) +            goto out; -                ret = dict_set_str (dict, "volname", volname); -                if (ret) -                        goto out; +        ret = dict_set_str(dict, "volname", volname); +        if (ret) +            goto out; -                ret = dict_set_uint32 (dict, "cmd", cmd); -                if (ret) -                        goto out; +        ret = dict_set_uint32(dict, "cmd", cmd); +        if (ret) +            goto out; -                ret = gf_cli_status_volume (frame, this, dict); -                if (ret) -                        goto out; +        ret = gf_cli_status_volume(frame, this, dict); +        if (ret) +            goto out; -                dict_unref (dict); -        } +        dict_unref(dict); +    }  xml_end: -        if (global_state->mode & GLUSTER_MODE_XML) { -                ret = cli_xml_output_vol_status_end (local); -        } +    if (global_state->mode & GLUSTER_MODE_XML) { +        ret = cli_xml_output_vol_status_end(local); +    } - out: -        if (ret) -                gf_log ("cli", GF_LOG_ERROR, "status all failed"); +out: +    if (ret) +        gf_log("cli", GF_LOG_ERROR, "status all failed"); -        if (vol_dict) -                dict_unref (vol_dict); +    if (vol_dict) +        dict_unref(vol_dict); -        if (ret && dict) -                dict_unref (dict); +    if (ret && dict) +        dict_unref(dict); -        if (local) -                cli_local_wipe (local); +    if (local) +        cli_local_wipe(local); -        if (frame) -                frame->local = NULL; +    if (frame) +        frame->local = NULL; -        return ret; +    return ret;  }  static int -gf_cli_mount_cbk (struct rpc_req *req, struct iovec *iov, -                  int count, void *myframe) +gf_cli_mount_cbk(struct rpc_req *req, struct iovec *iov, int count, +                 void *myframe)  { -        gf1_cli_mount_rsp rsp   = {0,}; -        int               ret   = -1; +    gf1_cli_mount_rsp rsp = { +        0, +    }; +    int ret = -1; -        GF_ASSERT (myframe); +    GF_ASSERT(myframe); -        if (-1 == req->rpc_status) { -                goto out; -        } +    if (-1 == req->rpc_status) { +        goto out; +    } -        ret = xdr_to_generic (*iov, &rsp, (xdrproc_t)xdr_gf1_cli_mount_rsp); -        if (ret < 0) { -                gf_log (((call_frame_t *) myframe)->this->name, GF_LOG_ERROR, -                        "Failed to decode xdr response"); -                goto out; -        } +    ret = xdr_to_generic(*iov, &rsp, (xdrproc_t)xdr_gf1_cli_mount_rsp); +    if (ret < 0) { +        gf_log(((call_frame_t *)myframe)->this->name, GF_LOG_ERROR, +               "Failed to decode xdr response"); +        goto out; +    } -        gf_log ("cli", GF_LOG_INFO, "Received resp to mount"); +    gf_log("cli", GF_LOG_INFO, "Received resp to mount"); -        if (rsp.op_ret == 0) { -                ret = 0; -                cli_out ("%s", rsp.path); -        } else { -                /* weird sounding but easy to parse... */ -                cli_err ("%d : failed with this errno (%s)", -                         rsp.op_errno, strerror (rsp.op_errno)); -                ret = -1; -        } +    if (rsp.op_ret == 0) { +        ret = 0; +        cli_out("%s", rsp.path); +    } else { +        /* weird sounding but easy to parse... */ +        cli_err("%d : failed with this errno (%s)", rsp.op_errno, +                strerror(rsp.op_errno)); +        ret = -1; +    }  out: -        cli_cmd_broadcast_response (ret); -        return ret; +    cli_cmd_broadcast_response(ret); +    return ret;  }  int32_t -gf_cli_mount (call_frame_t *frame, xlator_t *this, void *data) +gf_cli_mount(call_frame_t *frame, xlator_t *this, void *data)  { -        gf1_cli_mount_req  req  = {0,}; -        int                ret  = -1; -        void            **dataa = data; -        char             *label = NULL; -        dict_t            *dict = NULL; +    gf1_cli_mount_req req = { +        0, +    }; +    int ret = -1; +    void **dataa = data; +    char *label = NULL; +    dict_t *dict = NULL; -        if (!frame || !this || !data) -                goto out; +    if (!frame || !this || !data) +        goto out; -        label = dataa[0]; -        dict  = dataa[1]; +    label = dataa[0]; +    dict = dataa[1]; -        req.label = label; -        ret = dict_allocate_and_serialize (dict, &req.dict.dict_val, -                                           &req.dict.dict_len); -        if (ret) { -                ret = -1; -                goto out; -        } +    req.label = label; +    ret = dict_allocate_and_serialize(dict, &req.dict.dict_val, +                                      &req.dict.dict_len); +    if (ret) { +        ret = -1; +        goto out; +    } -        ret = cli_cmd_submit (NULL, &req, frame, cli_rpc_prog, -                              GLUSTER_CLI_MOUNT, NULL, -                              this, gf_cli_mount_cbk, -                              (xdrproc_t)xdr_gf1_cli_mount_req); +    ret = cli_cmd_submit(NULL, &req, frame, cli_rpc_prog, GLUSTER_CLI_MOUNT, +                         NULL, this, gf_cli_mount_cbk, +                         (xdrproc_t)xdr_gf1_cli_mount_req);  out: -        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); -        return ret; +    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret); +    return ret;  }  static int -gf_cli_umount_cbk (struct rpc_req *req, struct iovec *iov, -                   int count, void *myframe) +gf_cli_umount_cbk(struct rpc_req *req, struct iovec *iov, int count, +                  void *myframe)  { -        gf1_cli_umount_rsp rsp   = {0,}; -        int               ret   = -1; +    gf1_cli_umount_rsp rsp = { +        0, +    }; +    int ret = -1; -        GF_ASSERT (myframe); +    GF_ASSERT(myframe); -        if (-1 == req->rpc_status) { -                goto out; -        } +    if (-1 == req->rpc_status) { +        goto out; +    } -        ret = xdr_to_generic (*iov, &rsp, (xdrproc_t)xdr_gf1_cli_umount_rsp); -        if (ret < 0) { -                gf_log (((call_frame_t *) myframe)->this->name, GF_LOG_ERROR, -                        "Failed to decode xdr response"); -                goto out; -        } +    ret = xdr_to_generic(*iov, &rsp, (xdrproc_t)xdr_gf1_cli_umount_rsp); +    if (ret < 0) { +        gf_log(((call_frame_t *)myframe)->this->name, GF_LOG_ERROR, +               "Failed to decode xdr response"); +        goto out; +    } -        gf_log ("cli", GF_LOG_INFO, "Received resp to mount"); +    gf_log("cli", GF_LOG_INFO, "Received resp to mount"); -        if (rsp.op_ret == 0) -                ret = 0; -        else { -                cli_err ("umount failed"); -                ret = -1; -        } +    if (rsp.op_ret == 0) +        ret = 0; +    else { +        cli_err("umount failed"); +        ret = -1; +    }  out: -        cli_cmd_broadcast_response (ret); -        return ret; +    cli_cmd_broadcast_response(ret); +    return ret;  }  int32_t -gf_cli_umount (call_frame_t *frame, xlator_t *this, void *data) +gf_cli_umount(call_frame_t *frame, xlator_t *this, void *data)  { -        gf1_cli_umount_req  req  = {0,}; -        int                ret  = -1; -        dict_t            *dict = NULL; +    gf1_cli_umount_req req = { +        0, +    }; +    int ret = -1; +    dict_t *dict = NULL; -        if (!frame || !this || !data) -                goto out; +    if (!frame || !this || !data) +        goto out; -        dict = data; +    dict = data; -        ret = dict_get_str (dict, "path", &req.path); -        if (ret == 0) -                ret = dict_get_int32 (dict, "lazy", &req.lazy); +    ret = dict_get_str(dict, "path", &req.path); +    if (ret == 0) +        ret = dict_get_int32(dict, "lazy", &req.lazy); -        if (ret) { -                ret = -1; -                goto out; -        } +    if (ret) { +        ret = -1; +        goto out; +    } -        ret = cli_cmd_submit (NULL, &req, frame, cli_rpc_prog, -                              GLUSTER_CLI_UMOUNT, NULL, -                              this, gf_cli_umount_cbk, -                              (xdrproc_t)xdr_gf1_cli_umount_req); +    ret = cli_cmd_submit(NULL, &req, frame, cli_rpc_prog, GLUSTER_CLI_UMOUNT, +                         NULL, this, gf_cli_umount_cbk, +                         (xdrproc_t)xdr_gf1_cli_umount_req); - out: -        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); -        return ret; +out: +    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret); +    return ret;  }  void -cmd_heal_volume_statistics_out (dict_t *dict, int  brick) -{ - -        uint64_t        num_entries = 0; -        int             ret = 0; -        char            key[256] = {0}; -        char            *hostname = NULL; -        uint64_t        i = 0; -        uint64_t        healed_count = 0; -        uint64_t        split_brain_count = 0; -        uint64_t        heal_failed_count = 0; -        char            *start_time_str = NULL; -        char            *end_time_str = NULL; -        char            *crawl_type = NULL; -        int             progress = -1; - -        snprintf (key, sizeof key, "%d-hostname", brick); -        ret = dict_get_str (dict, key, &hostname); +cmd_heal_volume_statistics_out(dict_t *dict, int brick) +{ +    uint64_t num_entries = 0; +    int ret = 0; +    char key[256] = {0}; +    char *hostname = NULL; +    uint64_t i = 0; +    uint64_t healed_count = 0; +    uint64_t split_brain_count = 0; +    uint64_t heal_failed_count = 0; +    char *start_time_str = NULL; +    char *end_time_str = NULL; +    char *crawl_type = NULL; +    int progress = -1; + +    snprintf(key, sizeof key, "%d-hostname", brick); +    ret = dict_get_str(dict, key, &hostname); +    if (ret) +        goto out; +    cli_out("------------------------------------------------"); +    cli_out("\nCrawl statistics for brick no %d", brick); +    cli_out("Hostname of brick %s", hostname); + +    snprintf(key, sizeof key, "statistics-%d-count", brick); +    ret = dict_get_uint64(dict, key, &num_entries); +    if (ret) +        goto out; + +    for (i = 0; i < num_entries; i++) { +        snprintf(key, sizeof key, "statistics_crawl_type-%d-%" PRIu64, brick, +                 i); +        ret = dict_get_str(dict, key, &crawl_type);          if (ret) -                goto out; -        cli_out ("------------------------------------------------"); -        cli_out ("\nCrawl statistics for brick no %d", brick); -        cli_out ("Hostname of brick %s", hostname); +            goto out; -        snprintf (key, sizeof key, "statistics-%d-count", brick); -        ret = dict_get_uint64 (dict, key, &num_entries); +        snprintf(key, sizeof key, "statistics_healed_cnt-%d-%" PRIu64, brick, +                 i); +        ret = dict_get_uint64(dict, key, &healed_count);          if (ret) -                goto out; - -        for (i = 0; i < num_entries; i++) -        { -                snprintf (key, sizeof key, "statistics_crawl_type-%d-%"PRIu64, -                          brick, i); -                ret = dict_get_str (dict, key, &crawl_type); -                if (ret) -                        goto out; - -                snprintf (key, sizeof key, "statistics_healed_cnt-%d-%"PRIu64, -                          brick,i); -                ret = dict_get_uint64 (dict, key, &healed_count); -                if (ret) -                        goto out; - -                snprintf (key, sizeof key, "statistics_sb_cnt-%d-%"PRIu64, -                          brick, i); -                ret = dict_get_uint64 (dict, key, &split_brain_count); -                if (ret) -                        goto out; -                snprintf (key, sizeof key, "statistics_heal_failed_cnt-%d-%"PRIu64, -                          brick, i); -                ret = dict_get_uint64 (dict, key, &heal_failed_count); -                if (ret) -                        goto out; -                snprintf (key, sizeof key, "statistics_strt_time-%d-%"PRIu64, -                          brick, i); -                ret = dict_get_str (dict, key,  &start_time_str); -                if (ret) -                        goto out; -                snprintf (key, sizeof key, "statistics_end_time-%d-%"PRIu64, -                          brick, i); -                ret = dict_get_str (dict, key, &end_time_str); -                if (ret) -                        goto out; -                snprintf (key, sizeof key, "statistics_inprogress-%d-%"PRIu64, -                          brick, i); -                ret = dict_get_int32 (dict, key, &progress); -                if (ret) -                        goto out; +            goto out; -                cli_out ("\nStarting time of crawl: %s", start_time_str); -                if (progress == 1) -                        cli_out ("Crawl is in progress"); -                else -                        cli_out ("Ending time of crawl: %s", end_time_str); - -                cli_out ("Type of crawl: %s", crawl_type); -                cli_out ("No. of entries healed: %"PRIu64, -                         healed_count); -                cli_out ("No. of entries in split-brain: %"PRIu64, -                        split_brain_count); -                cli_out ("No. of heal failed entries: %"PRIu64, -                         heal_failed_count); +        snprintf(key, sizeof key, "statistics_sb_cnt-%d-%" PRIu64, brick, i); +        ret = dict_get_uint64(dict, key, &split_brain_count); +        if (ret) +            goto out; +        snprintf(key, sizeof key, "statistics_heal_failed_cnt-%d-%" PRIu64, +                 brick, i); +        ret = dict_get_uint64(dict, key, &heal_failed_count); +        if (ret) +            goto out; +        snprintf(key, sizeof key, "statistics_strt_time-%d-%" PRIu64, brick, i); +        ret = dict_get_str(dict, key, &start_time_str); +        if (ret) +            goto out; +        snprintf(key, sizeof key, "statistics_end_time-%d-%" PRIu64, brick, i); +        ret = dict_get_str(dict, key, &end_time_str); +        if (ret) +            goto out; +        snprintf(key, sizeof key, "statistics_inprogress-%d-%" PRIu64, brick, +                 i); +        ret = dict_get_int32(dict, key, &progress); +        if (ret) +            goto out; -        } +        cli_out("\nStarting time of crawl: %s", start_time_str); +        if (progress == 1) +            cli_out("Crawl is in progress"); +        else +            cli_out("Ending time of crawl: %s", end_time_str); +        cli_out("Type of crawl: %s", crawl_type); +        cli_out("No. of entries healed: %" PRIu64, healed_count); +        cli_out("No. of entries in split-brain: %" PRIu64, split_brain_count); +        cli_out("No. of heal failed entries: %" PRIu64, heal_failed_count); +    }  out: -        return; +    return;  }  void -cmd_heal_volume_brick_out (dict_t *dict, int brick) -{ -        uint64_t        num_entries = 0; -        int             ret = 0; -        char            key[256] = {0}; -        char           *hostname = NULL; -        char           *path = NULL; -        char           *status = NULL; -        uint64_t        i = 0; -        uint32_t        time = 0; -        char            timestr[32] = {0}; -        char            *shd_status = NULL; - -        snprintf (key, sizeof key, "%d-hostname", brick); -        ret = dict_get_str (dict, key, &hostname); -        if (ret) -                goto out; -        snprintf (key, sizeof key, "%d-path", brick); -        ret = dict_get_str (dict, key, &path); -        if (ret) -                goto out; -        cli_out ("\nBrick %s:%s", hostname, path); - -        snprintf (key, sizeof key, "%d-status", brick); -        ret = dict_get_str (dict, key, &status); -        if (status && strlen (status)) -                cli_out ("Status: %s", status); - -        snprintf (key, sizeof key, "%d-shd-status",brick); -        ret = dict_get_str (dict, key, &shd_status); - -        if (!shd_status) { -                snprintf (key, sizeof key, "%d-count", brick); -                ret = dict_get_uint64 (dict, key, &num_entries); -                cli_out ("Number of entries: %"PRIu64, num_entries); - - -                for (i = 0; i < num_entries; i++) { -                        snprintf (key, sizeof key, "%d-%"PRIu64, brick, i); -                        ret = dict_get_str (dict, key, &path); -                        if (ret) -                                continue; -                        time = 0; -                        snprintf (key, sizeof key, "%d-%"PRIu64"-time", -                                  brick, i); -                        ret = dict_get_uint32 (dict, key, &time); -                        if (ret || !time) { -                                cli_out ("%s", path); -                        } else { -                                gf_time_fmt (timestr, sizeof timestr, -                                             time, gf_timefmt_FT); -                                if (i == 0) { -                                cli_out ("at                    path on brick"); -                                cli_out ("-----------------------------------"); -                                } -                                cli_out ("%s %s", timestr, path); -                        } -                } -        } - -out: -        return; +cmd_heal_volume_brick_out(dict_t *dict, int brick) +{ +    uint64_t num_entries = 0; +    int ret = 0; +    char key[256] = {0}; +    char *hostname = NULL; +    char *path = NULL; +    char *status = NULL; +    uint64_t i = 0; +    uint32_t time = 0; +    char timestr[32] = {0}; +    char *shd_status = NULL; + +    snprintf(key, sizeof key, "%d-hostname", brick); +    ret = dict_get_str(dict, key, &hostname); +    if (ret) +        goto out; +    snprintf(key, sizeof key, "%d-path", brick); +    ret = dict_get_str(dict, key, &path); +    if (ret) +        goto out; +    cli_out("\nBrick %s:%s", hostname, path); + +    snprintf(key, sizeof key, "%d-status", brick); +    ret = dict_get_str(dict, key, &status); +    if (status && strlen(status)) +        cli_out("Status: %s", status); + +    snprintf(key, sizeof key, "%d-shd-status", brick); +    ret = dict_get_str(dict, key, &shd_status); + +    if (!shd_status) { +        snprintf(key, sizeof key, "%d-count", brick); +        ret = dict_get_uint64(dict, key, &num_entries); +        cli_out("Number of entries: %" PRIu64, num_entries); + +        for (i = 0; i < num_entries; i++) { +            snprintf(key, sizeof key, "%d-%" PRIu64, brick, i); +            ret = dict_get_str(dict, key, &path); +            if (ret) +                continue; +            time = 0; +            snprintf(key, sizeof key, "%d-%" PRIu64 "-time", brick, i); +            ret = dict_get_uint32(dict, key, &time); +            if (ret || !time) { +                cli_out("%s", path); +            } else { +                gf_time_fmt(timestr, sizeof timestr, time, gf_timefmt_FT); +                if (i == 0) { +                    cli_out("at                    path on brick"); +                    cli_out("-----------------------------------"); +                } +                cli_out("%s %s", timestr, path); +            } +        } +    } + +out: +    return;  } -  void -cmd_heal_volume_statistics_heal_count_out (dict_t *dict, int brick) -{ -        uint64_t        num_entries = 0; -        int             ret = 0; -        char            key[256] = {0}; -        char           *hostname = NULL; -        char           *path = NULL; -        char           *status = NULL; -        char            *shd_status = NULL; - -        snprintf (key, sizeof key, "%d-hostname", brick); -        ret = dict_get_str (dict, key, &hostname); +cmd_heal_volume_statistics_heal_count_out(dict_t *dict, int brick) +{ +    uint64_t num_entries = 0; +    int ret = 0; +    char key[256] = {0}; +    char *hostname = NULL; +    char *path = NULL; +    char *status = NULL; +    char *shd_status = NULL; + +    snprintf(key, sizeof key, "%d-hostname", brick); +    ret = dict_get_str(dict, key, &hostname); +    if (ret) +        goto out; +    snprintf(key, sizeof key, "%d-path", brick); +    ret = dict_get_str(dict, key, &path); +    if (ret) +        goto out; +    cli_out("\nBrick %s:%s", hostname, path); + +    snprintf(key, sizeof key, "%d-status", brick); +    ret = dict_get_str(dict, key, &status); +    if (status && strlen(status)) +        cli_out("Status: %s", status); + +    snprintf(key, sizeof key, "%d-shd-status", brick); +    ret = dict_get_str(dict, key, &shd_status); + +    if (!shd_status) { +        snprintf(key, sizeof key, "%d-hardlinks", brick); +        ret = dict_get_uint64(dict, key, &num_entries);          if (ret) -                goto out; -        snprintf (key, sizeof key, "%d-path", brick); -        ret = dict_get_str (dict, key, &path); -        if (ret) -                goto out; -        cli_out ("\nBrick %s:%s", hostname, path); - -        snprintf (key, sizeof key, "%d-status", brick); -        ret = dict_get_str (dict, key, &status); -        if (status && strlen (status)) -                cli_out ("Status: %s", status); - -        snprintf (key, sizeof key, "%d-shd-status",brick); -        ret = dict_get_str (dict, key, &shd_status); - -        if(!shd_status) -        { -                snprintf (key, sizeof key, "%d-hardlinks", brick); -                ret = dict_get_uint64 (dict, key, &num_entries); -                if (ret) -                        cli_out ("No gathered input for this brick"); -                else -                        cli_out ("Number of entries: %"PRIu64, num_entries); - - -        } +            cli_out("No gathered input for this brick"); +        else +            cli_out("Number of entries: %" PRIu64, num_entries); +    }  out: -        return; +    return;  }  int -gf_is_cli_heal_get_command (gf_xl_afr_op_t heal_op) -{ -        /* If the command is get command value is 1 otherwise 0, for -           invalid commands -1 */ -        int    get_cmds[GF_SHD_OP_HEAL_DISABLE + 1] = { -                       [GF_SHD_OP_INVALID] = -1, -                       [GF_SHD_OP_HEAL_INDEX] = 0, -                       [GF_SHD_OP_HEAL_FULL] = 0, -                       [GF_SHD_OP_INDEX_SUMMARY] = 1, -                       [GF_SHD_OP_HEALED_FILES] = 1, -                       [GF_SHD_OP_HEAL_FAILED_FILES] = 1, -                       [GF_SHD_OP_SPLIT_BRAIN_FILES] = 1, -                       [GF_SHD_OP_STATISTICS] = 1, -                       [GF_SHD_OP_STATISTICS_HEAL_COUNT] = 1, -                       [GF_SHD_OP_STATISTICS_HEAL_COUNT_PER_REPLICA] = 1, -                       [GF_SHD_OP_HEAL_ENABLE] = 0, -                       [GF_SHD_OP_HEAL_DISABLE] = 0, -                }; - -        if (heal_op > GF_SHD_OP_INVALID && heal_op <= GF_SHD_OP_HEAL_DISABLE) -                return get_cmds[heal_op] == 1; -        return _gf_false; +gf_is_cli_heal_get_command(gf_xl_afr_op_t heal_op) +{ +    /* If the command is get command value is 1 otherwise 0, for +       invalid commands -1 */ +    int get_cmds[GF_SHD_OP_HEAL_DISABLE + 1] = { +        [GF_SHD_OP_INVALID] = -1, +        [GF_SHD_OP_HEAL_INDEX] = 0, +        [GF_SHD_OP_HEAL_FULL] = 0, +        [GF_SHD_OP_INDEX_SUMMARY] = 1, +        [GF_SHD_OP_HEALED_FILES] = 1, +        [GF_SHD_OP_HEAL_FAILED_FILES] = 1, +        [GF_SHD_OP_SPLIT_BRAIN_FILES] = 1, +        [GF_SHD_OP_STATISTICS] = 1, +        [GF_SHD_OP_STATISTICS_HEAL_COUNT] = 1, +        [GF_SHD_OP_STATISTICS_HEAL_COUNT_PER_REPLICA] = 1, +        [GF_SHD_OP_HEAL_ENABLE] = 0, +        [GF_SHD_OP_HEAL_DISABLE] = 0, +    }; + +    if (heal_op > GF_SHD_OP_INVALID && heal_op <= GF_SHD_OP_HEAL_DISABLE) +        return get_cmds[heal_op] == 1; +    return _gf_false;  }  int -gf_cli_heal_volume_cbk (struct rpc_req *req, struct iovec *iov, -                             int count, void *myframe) -{ -        gf_cli_rsp              rsp   = {0,}; -        int                     ret   = -1; -        cli_local_t             *local = NULL; -        char                    *volname = NULL; -        call_frame_t            *frame = NULL; -        dict_t                  *dict = NULL; -        int                     brick_count = 0; -        int                     i = 0; -        gf_xl_afr_op_t          heal_op = GF_SHD_OP_INVALID; -        char                    *operation = NULL; -        char                    *substr = NULL; -        char                    *heal_op_str = NULL; - -        GF_ASSERT (myframe); - -        if (-1 == req->rpc_status) { -                goto out; -        } - -        frame = myframe; - -        GF_ASSERT (frame->local); - -        local = frame->local; - -        ret = xdr_to_generic (*iov, &rsp, (xdrproc_t)xdr_gf_cli_rsp); -        if (ret < 0) { -                gf_log (frame->this->name, GF_LOG_ERROR, -                        "Failed to decode xdr response"); -                goto out; -        } - -        ret = dict_get_int32 (local->dict, "heal-op", (int32_t *)&heal_op); -//TODO: Proper XML output -//#if (HAVE_LIB_XML) -//        if (global_state->mode & GLUSTER_MODE_XML) { -//                ret = cli_xml_output_dict ("volHeal", dict, rsp.op_ret, -//                                           rsp.op_errno, rsp.op_errstr); -//                if (ret) -//                        gf_log ("cli", GF_LOG_ERROR, -//                                "Error outputting to xml"); -//                goto out; -//        } -//#endif - -        ret = dict_get_str (local->dict, "volname", &volname); -        if (ret) { -                gf_log (frame->this->name, GF_LOG_ERROR, "failed to get volname"); -                goto out; -        } - -        gf_log ("cli", GF_LOG_INFO, "Received resp to heal volume"); - -        operation = "Gathering "; -        substr = ""; -        switch (heal_op) { -        case    GF_SHD_OP_HEAL_INDEX: -                operation   = "Launching heal operation "; -                heal_op_str = "to perform index self heal"; -                substr      = "\nUse heal info commands to check" -                              " status."; -                break; -        case    GF_SHD_OP_HEAL_FULL: -                operation   = "Launching heal operation "; -                heal_op_str = "to perform full self heal"; -                substr      = "\nUse heal info commands to check" -                              " status."; -                break; -        case    GF_SHD_OP_INDEX_SUMMARY: -                heal_op_str = "list of entries to be healed"; -                break; -        case    GF_SHD_OP_HEALED_FILES: -                heal_op_str = "list of healed entries"; -                break; -        case    GF_SHD_OP_HEAL_FAILED_FILES: -                heal_op_str = "list of heal failed entries"; -                break; -        case    GF_SHD_OP_SPLIT_BRAIN_FILES: -                heal_op_str = "list of split brain entries"; -                break; -        case    GF_SHD_OP_STATISTICS: -                heal_op_str =  "crawl statistics"; -                break; -        case    GF_SHD_OP_STATISTICS_HEAL_COUNT: -                heal_op_str = "count of entries to be healed"; -                break; -        case    GF_SHD_OP_STATISTICS_HEAL_COUNT_PER_REPLICA: -                heal_op_str = "count of entries to be healed per replica"; -                break; +gf_cli_heal_volume_cbk(struct rpc_req *req, struct iovec *iov, int count, +                       void *myframe) +{ +    gf_cli_rsp rsp = { +        0, +    }; +    int ret = -1; +    cli_local_t *local = NULL; +    char *volname = NULL; +    call_frame_t *frame = NULL; +    dict_t *dict = NULL; +    int brick_count = 0; +    int i = 0; +    gf_xl_afr_op_t heal_op = GF_SHD_OP_INVALID; +    char *operation = NULL; +    char *substr = NULL; +    char *heal_op_str = NULL; + +    GF_ASSERT(myframe); + +    if (-1 == req->rpc_status) { +        goto out; +    } + +    frame = myframe; + +    GF_ASSERT(frame->local); + +    local = frame->local; + +    ret = xdr_to_generic(*iov, &rsp, (xdrproc_t)xdr_gf_cli_rsp); +    if (ret < 0) { +        gf_log(frame->this->name, GF_LOG_ERROR, +               "Failed to decode xdr response"); +        goto out; +    } + +    ret = dict_get_int32(local->dict, "heal-op", (int32_t *)&heal_op); +    // TODO: Proper XML output +    //#if (HAVE_LIB_XML) +    //        if (global_state->mode & GLUSTER_MODE_XML) { +    //                ret = cli_xml_output_dict ("volHeal", dict, rsp.op_ret, +    //                                           rsp.op_errno, rsp.op_errstr); +    //                if (ret) +    //                        gf_log ("cli", GF_LOG_ERROR, +    //                                "Error outputting to xml"); +    //                goto out; +    //        } +    //#endif + +    ret = dict_get_str(local->dict, "volname", &volname); +    if (ret) { +        gf_log(frame->this->name, GF_LOG_ERROR, "failed to get volname"); +        goto out; +    } + +    gf_log("cli", GF_LOG_INFO, "Received resp to heal volume"); + +    operation = "Gathering "; +    substr = ""; +    switch (heal_op) { +        case GF_SHD_OP_HEAL_INDEX: +            operation = "Launching heal operation "; +            heal_op_str = "to perform index self heal"; +            substr = +                "\nUse heal info commands to check" +                " status."; +            break; +        case GF_SHD_OP_HEAL_FULL: +            operation = "Launching heal operation "; +            heal_op_str = "to perform full self heal"; +            substr = +                "\nUse heal info commands to check" +                " status."; +            break; +        case GF_SHD_OP_INDEX_SUMMARY: +            heal_op_str = "list of entries to be healed"; +            break; +        case GF_SHD_OP_HEALED_FILES: +            heal_op_str = "list of healed entries"; +            break; +        case GF_SHD_OP_HEAL_FAILED_FILES: +            heal_op_str = "list of heal failed entries"; +            break; +        case GF_SHD_OP_SPLIT_BRAIN_FILES: +            heal_op_str = "list of split brain entries"; +            break; +        case GF_SHD_OP_STATISTICS: +            heal_op_str = "crawl statistics"; +            break; +        case GF_SHD_OP_STATISTICS_HEAL_COUNT: +            heal_op_str = "count of entries to be healed"; +            break; +        case GF_SHD_OP_STATISTICS_HEAL_COUNT_PER_REPLICA: +            heal_op_str = "count of entries to be healed per replica"; +            break;          /* The below 4 cases are never hit; they're coded only to make           * compiler warnings go away.*/ -        case    GF_SHD_OP_SBRAIN_HEAL_FROM_BIGGER_FILE: -        case    GF_SHD_OP_SBRAIN_HEAL_FROM_LATEST_MTIME: -        case    GF_SHD_OP_SBRAIN_HEAL_FROM_BRICK: -        case    GF_SHD_OP_HEAL_SUMMARY: -                break; - -        case    GF_SHD_OP_INVALID: -                heal_op_str = "invalid heal op"; -                break; -        case    GF_SHD_OP_HEAL_ENABLE: -                operation   = ""; -                heal_op_str = "Enable heal"; -                break; -        case    GF_SHD_OP_HEAL_DISABLE: -                operation   = ""; -                heal_op_str = "Disable heal"; -                break; -        case    GF_SHD_OP_GRANULAR_ENTRY_HEAL_ENABLE: -                operation   = ""; -                heal_op_str = "Enable granular entry heal"; -                break; -        case    GF_SHD_OP_GRANULAR_ENTRY_HEAL_DISABLE: -                operation   = ""; -                heal_op_str = "Disable granular entry heal"; -                break; -        } - -        if (rsp.op_ret) { -                if (strcmp (rsp.op_errstr, "")) { -                        cli_err ("%s%s on volume %s has been unsuccessful:", -                                 operation, heal_op_str, volname); -                        cli_err ("%s", rsp.op_errstr); -                } -                ret = rsp.op_ret; -                goto out; -        } else { -                cli_out ("%s%s on volume %s has been successful %s", operation, -                         heal_op_str, volname, substr); +        case GF_SHD_OP_SBRAIN_HEAL_FROM_BIGGER_FILE: +        case GF_SHD_OP_SBRAIN_HEAL_FROM_LATEST_MTIME: +        case GF_SHD_OP_SBRAIN_HEAL_FROM_BRICK: +        case GF_SHD_OP_HEAL_SUMMARY: +            break; + +        case GF_SHD_OP_INVALID: +            heal_op_str = "invalid heal op"; +            break; +        case GF_SHD_OP_HEAL_ENABLE: +            operation = ""; +            heal_op_str = "Enable heal"; +            break; +        case GF_SHD_OP_HEAL_DISABLE: +            operation = ""; +            heal_op_str = "Disable heal"; +            break; +        case GF_SHD_OP_GRANULAR_ENTRY_HEAL_ENABLE: +            operation = ""; +            heal_op_str = "Enable granular entry heal"; +            break; +        case GF_SHD_OP_GRANULAR_ENTRY_HEAL_DISABLE: +            operation = ""; +            heal_op_str = "Disable granular entry heal"; +            break; +    } + +    if (rsp.op_ret) { +        if (strcmp(rsp.op_errstr, "")) { +            cli_err("%s%s on volume %s has been unsuccessful:", operation, +                    heal_op_str, volname); +            cli_err("%s", rsp.op_errstr);          } -          ret = rsp.op_ret; -        if (!gf_is_cli_heal_get_command (heal_op)) -                goto out; - -        dict = dict_new (); -        if (!dict) { -                ret = -1; -                goto out; -        } - -        ret = dict_unserialize (rsp.dict.dict_val, -                                rsp.dict.dict_len, -                                &dict); - -        if (ret) { -                gf_log ("", GF_LOG_ERROR, -                                "Unable to allocate memory"); -                goto out; -        } else { -                dict->extra_stdfree = rsp.dict.dict_val; -        } -        ret = dict_get_int32 (dict, "count", &brick_count); -        if (ret) -                goto out; - -        if (!brick_count) { -                cli_err ("All bricks of volume %s are down.", volname); -                goto out; -        } - -        switch (heal_op) { +        goto out; +    } else { +        cli_out("%s%s on volume %s has been successful %s", operation, +                heal_op_str, volname, substr); +    } + +    ret = rsp.op_ret; +    if (!gf_is_cli_heal_get_command(heal_op)) +        goto out; + +    dict = dict_new(); +    if (!dict) { +        ret = -1; +        goto out; +    } + +    ret = dict_unserialize(rsp.dict.dict_val, rsp.dict.dict_len, &dict); + +    if (ret) { +        gf_log("", GF_LOG_ERROR, "Unable to allocate memory"); +        goto out; +    } else { +        dict->extra_stdfree = rsp.dict.dict_val; +    } +    ret = dict_get_int32(dict, "count", &brick_count); +    if (ret) +        goto out; + +    if (!brick_count) { +        cli_err("All bricks of volume %s are down.", volname); +        goto out; +    } + +    switch (heal_op) {          case GF_SHD_OP_STATISTICS: -                for (i = 0; i < brick_count; i++) -                        cmd_heal_volume_statistics_out (dict, i); -                break; +            for (i = 0; i < brick_count; i++) +                cmd_heal_volume_statistics_out(dict, i); +            break;          case GF_SHD_OP_STATISTICS_HEAL_COUNT:          case GF_SHD_OP_STATISTICS_HEAL_COUNT_PER_REPLICA: -                for (i = 0; i < brick_count; i++) -                        cmd_heal_volume_statistics_heal_count_out (dict, -                                                                   i); -                break; +            for (i = 0; i < brick_count; i++) +                cmd_heal_volume_statistics_heal_count_out(dict, i); +            break;          case GF_SHD_OP_INDEX_SUMMARY:          case GF_SHD_OP_HEALED_FILES:          case GF_SHD_OP_HEAL_FAILED_FILES:          case GF_SHD_OP_SPLIT_BRAIN_FILES: -                for (i = 0; i < brick_count; i++) -                        cmd_heal_volume_brick_out (dict, i); -                break; +            for (i = 0; i < brick_count; i++) +                cmd_heal_volume_brick_out(dict, i); +            break;          default: -                break; -        } +            break; +    } -        ret = rsp.op_ret; +    ret = rsp.op_ret;  out: -        cli_cmd_broadcast_response (ret); -        free (rsp.op_errstr); -        if (dict) -                dict_unref (dict); -        return ret; +    cli_cmd_broadcast_response(ret); +    free(rsp.op_errstr); +    if (dict) +        dict_unref(dict); +    return ret;  }  int32_t -gf_cli_heal_volume (call_frame_t *frame, xlator_t *this, -                         void *data) +gf_cli_heal_volume(call_frame_t *frame, xlator_t *this, void *data)  { -        gf_cli_req              req = {{0,}}; -        int                     ret = 0; -        dict_t                  *dict = NULL; +    gf_cli_req req = {{ +        0, +    }}; +    int ret = 0; +    dict_t *dict = NULL; -        if (!frame || !this ||  !data) { -                ret = -1; -                goto out; -        } +    if (!frame || !this || !data) { +        ret = -1; +        goto out; +    } -        dict = data; +    dict = data; -        ret = cli_to_glusterd (&req, frame, gf_cli_heal_volume_cbk, -                               (xdrproc_t) xdr_gf_cli_req, dict, -                               GLUSTER_CLI_HEAL_VOLUME, this, cli_rpc_prog, -                               NULL); +    ret = cli_to_glusterd(&req, frame, gf_cli_heal_volume_cbk, +                          (xdrproc_t)xdr_gf_cli_req, dict, +                          GLUSTER_CLI_HEAL_VOLUME, this, cli_rpc_prog, NULL);  out: -        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); +    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret); -        GF_FREE (req.dict.dict_val); +    GF_FREE(req.dict.dict_val); -        return ret; +    return ret;  }  int32_t -gf_cli_statedump_volume_cbk (struct rpc_req *req, struct iovec *iov, -                                int count, void *myframe) -{ -        gf_cli_rsp                      rsp = {0,}; -        int                             ret = -1; -        char                            msg[1024] = {0,}; - -        GF_ASSERT (myframe); - -        if (-1 == req->rpc_status) -                goto out; - -        ret = xdr_to_generic (*iov, &rsp, (xdrproc_t)xdr_gf_cli_rsp); -        if (ret < 0) { -                gf_log (((call_frame_t *) myframe)->this->name, GF_LOG_ERROR, -                        "Failed to decode xdr response"); -                goto out; -        } -        gf_log ("cli", GF_LOG_DEBUG, "Received response to statedump"); -        if (rsp.op_ret) -                snprintf (msg, sizeof(msg), "%s", rsp.op_errstr); -        else -                snprintf (msg, sizeof (msg), "Volume statedump successful"); - -        if (global_state->mode & GLUSTER_MODE_XML) { -                ret = cli_xml_output_str ("volStatedump", msg, rsp.op_ret, -                                          rsp.op_errno, rsp.op_errstr); -                if (ret) -                        gf_log ("cli", GF_LOG_ERROR, -                                "Error outputting to xml"); -                goto out; -        } +gf_cli_statedump_volume_cbk(struct rpc_req *req, struct iovec *iov, int count, +                            void *myframe) +{ +    gf_cli_rsp rsp = { +        0, +    }; +    int ret = -1; +    char msg[1024] = { +        0, +    }; + +    GF_ASSERT(myframe); + +    if (-1 == req->rpc_status) +        goto out; + +    ret = xdr_to_generic(*iov, &rsp, (xdrproc_t)xdr_gf_cli_rsp); +    if (ret < 0) { +        gf_log(((call_frame_t *)myframe)->this->name, GF_LOG_ERROR, +               "Failed to decode xdr response"); +        goto out; +    } +    gf_log("cli", GF_LOG_DEBUG, "Received response to statedump"); +    if (rsp.op_ret) +        snprintf(msg, sizeof(msg), "%s", rsp.op_errstr); +    else +        snprintf(msg, sizeof(msg), "Volume statedump successful"); + +    if (global_state->mode & GLUSTER_MODE_XML) { +        ret = cli_xml_output_str("volStatedump", msg, rsp.op_ret, rsp.op_errno, +                                 rsp.op_errstr); +        if (ret) +            gf_log("cli", GF_LOG_ERROR, "Error outputting to xml"); +        goto out; +    } -        if (rsp.op_ret) -                cli_err ("volume statedump: failed: %s", msg); -        else -                cli_out ("volume statedump: success"); -        ret = rsp.op_ret; +    if (rsp.op_ret) +        cli_err("volume statedump: failed: %s", msg); +    else +        cli_out("volume statedump: success"); +    ret = rsp.op_ret;  out: -        cli_cmd_broadcast_response (ret); -        return ret; +    cli_cmd_broadcast_response(ret); +    return ret;  }  int32_t -gf_cli_statedump_volume (call_frame_t *frame, xlator_t *this, -                            void *data) +gf_cli_statedump_volume(call_frame_t *frame, xlator_t *this, void *data)  { -        gf_cli_req                      req = {{0,}}; -        dict_t                          *options = NULL; -        int                             ret = -1; +    gf_cli_req req = {{ +        0, +    }}; +    dict_t *options = NULL; +    int ret = -1; -        if (!frame || !this || !data) -                goto out; +    if (!frame || !this || !data) +        goto out; -        options = data; +    options = data; -        ret = cli_to_glusterd (&req, frame, gf_cli_statedump_volume_cbk, -                               (xdrproc_t) xdr_gf_cli_req, options, -                               GLUSTER_CLI_STATEDUMP_VOLUME, this, cli_rpc_prog, -                               NULL); +    ret = cli_to_glusterd( +        &req, frame, gf_cli_statedump_volume_cbk, (xdrproc_t)xdr_gf_cli_req, +        options, GLUSTER_CLI_STATEDUMP_VOLUME, this, cli_rpc_prog, NULL);  out: -        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); +    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret); -        GF_FREE (req.dict.dict_val); -        return ret; +    GF_FREE(req.dict.dict_val); +    return ret;  }  int32_t -gf_cli_list_volume_cbk (struct rpc_req *req, struct iovec *iov, -                                int count, void *myframe) -{ -        int             ret = -1; -        gf_cli_rsp      rsp = {0,}; -        dict_t          *dict = NULL; -        int             vol_count = 0;; -        char            *volname = NULL; -        char            key[1024] = {0,}; -        int             i = 0; - -        GF_ASSERT (myframe); - -        if (-1 == req->rpc_status) -                goto out; - -        ret = xdr_to_generic (*iov, &rsp, -                              (xdrproc_t)xdr_gf_cli_rsp); -        if (ret < 0) { -                gf_log (((call_frame_t *) myframe)->this->name, GF_LOG_ERROR, -                        "Failed to decode xdr response"); -                goto out; -        } - -        dict = dict_new (); -        if (!dict) { -                ret = -1; -                goto out; -        } +gf_cli_list_volume_cbk(struct rpc_req *req, struct iovec *iov, int count, +                       void *myframe) +{ +    int ret = -1; +    gf_cli_rsp rsp = { +        0, +    }; +    dict_t *dict = NULL; +    int vol_count = 0; +    ; +    char *volname = NULL; +    char key[1024] = { +        0, +    }; +    int i = 0; + +    GF_ASSERT(myframe); + +    if (-1 == req->rpc_status) +        goto out; + +    ret = xdr_to_generic(*iov, &rsp, (xdrproc_t)xdr_gf_cli_rsp); +    if (ret < 0) { +        gf_log(((call_frame_t *)myframe)->this->name, GF_LOG_ERROR, +               "Failed to decode xdr response"); +        goto out; +    } + +    dict = dict_new(); +    if (!dict) { +        ret = -1; +        goto out; +    } + +    ret = dict_unserialize(rsp.dict.dict_val, rsp.dict.dict_len, &dict); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, "Unable to allocate memory"); +        goto out; +    } + +    if (global_state->mode & GLUSTER_MODE_XML) { +        ret = cli_xml_output_vol_list(dict, rsp.op_ret, rsp.op_errno, +                                      rsp.op_errstr); +        if (ret) +            gf_log("cli", GF_LOG_ERROR, "Error outputting to xml"); +        goto out; +    } + +    if (rsp.op_ret) +        cli_err("%s", rsp.op_errstr); +    else { +        ret = dict_get_int32(dict, "count", &vol_count); +        if (ret) +            goto out; -        ret = dict_unserialize (rsp.dict.dict_val, rsp.dict.dict_len, &dict); -        if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Unable to allocate memory"); -                goto out; +        if (vol_count == 0) { +            cli_err("No volumes present in cluster"); +            goto out;          } - -        if (global_state->mode & GLUSTER_MODE_XML) { -                ret = cli_xml_output_vol_list (dict, rsp.op_ret, rsp.op_errno, -                                               rsp.op_errstr); -                if (ret) -                        gf_log ("cli", GF_LOG_ERROR, -                                "Error outputting to xml"); +        for (i = 0; i < vol_count; i++) { +            snprintf(key, sizeof(key), "volume%d", i); +            ret = dict_get_str(dict, key, &volname); +            if (ret)                  goto out; +            cli_out("%s", volname);          } +    } -        if (rsp.op_ret) -                cli_err ("%s", rsp.op_errstr); -        else { -                ret = dict_get_int32 (dict, "count", &vol_count); -                if (ret) -                        goto out; - -                if (vol_count == 0) { -                        cli_err ("No volumes present in cluster"); -                        goto out; -                } -                for (i = 0; i < vol_count; i++) { -                        snprintf (key, sizeof (key), "volume%d", i); -                        ret = dict_get_str (dict, key, &volname); -                        if (ret) -                                goto out; -                        cli_out ("%s", volname); -                } -        } - -        ret = rsp.op_ret; +    ret = rsp.op_ret;  out: -        cli_cmd_broadcast_response (ret); -        return ret; +    cli_cmd_broadcast_response(ret); +    return ret;  }  int32_t -gf_cli_list_volume (call_frame_t *frame, xlator_t *this, void *data) +gf_cli_list_volume(call_frame_t *frame, xlator_t *this, void *data)  { -        int             ret = -1; -        gf_cli_req      req = {{0,}}; +    int ret = -1; +    gf_cli_req req = {{ +        0, +    }}; -        if (!frame || !this) -                goto out; +    if (!frame || !this) +        goto out; -        ret = cli_cmd_submit (NULL, &req, frame, cli_rpc_prog, -                              GLUSTER_CLI_LIST_VOLUME, NULL, -                              this, gf_cli_list_volume_cbk, -                              (xdrproc_t)xdr_gf_cli_req); +    ret = cli_cmd_submit(NULL, &req, frame, cli_rpc_prog, +                         GLUSTER_CLI_LIST_VOLUME, NULL, this, +                         gf_cli_list_volume_cbk, (xdrproc_t)xdr_gf_cli_req);  out: -        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); -        return ret; +    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret); +    return ret;  }  int32_t -gf_cli_clearlocks_volume_cbk (struct rpc_req *req, struct iovec *iov, -                                  int count, void *myframe) -{ -        gf_cli_rsp                      rsp = {0,}; -        int                             ret = -1; -        char                            *lk_summary = NULL; -        char                            *volname = NULL; -        dict_t                          *dict = NULL; - -        GF_ASSERT (myframe); - -        if (-1 == req->rpc_status) -                goto out; - -        ret = xdr_to_generic (*iov, &rsp, -                              (xdrproc_t)xdr_gf_cli_rsp); -        if (ret < 0) { -                gf_log (((call_frame_t *) myframe)->this->name, GF_LOG_ERROR, -                        "Failed to decode xdr response"); -                goto out; +gf_cli_clearlocks_volume_cbk(struct rpc_req *req, struct iovec *iov, int count, +                             void *myframe) +{ +    gf_cli_rsp rsp = { +        0, +    }; +    int ret = -1; +    char *lk_summary = NULL; +    char *volname = NULL; +    dict_t *dict = NULL; + +    GF_ASSERT(myframe); + +    if (-1 == req->rpc_status) +        goto out; + +    ret = xdr_to_generic(*iov, &rsp, (xdrproc_t)xdr_gf_cli_rsp); +    if (ret < 0) { +        gf_log(((call_frame_t *)myframe)->this->name, GF_LOG_ERROR, +               "Failed to decode xdr response"); +        goto out; +    } +    gf_log("cli", GF_LOG_DEBUG, "Received response to clear-locks"); + +    if (rsp.op_ret) { +        cli_err("Volume clear-locks unsuccessful"); +        cli_err("%s", rsp.op_errstr); + +    } else { +        if (!rsp.dict.dict_len) { +            cli_err("Possibly no locks cleared"); +            ret = 0; +            goto out;          } -        gf_log ("cli", GF_LOG_DEBUG, "Received response to clear-locks"); - -        if (rsp.op_ret) { -                cli_err ("Volume clear-locks unsuccessful"); -                cli_err ("%s", rsp.op_errstr); - -        } else { -                if (!rsp.dict.dict_len) { -                        cli_err ("Possibly no locks cleared"); -                        ret = 0; -                        goto out; -                } -                dict = dict_new (); +        dict = dict_new(); -                if (!dict) { -                        ret = -1; -                        goto out; -                } +        if (!dict) { +            ret = -1; +            goto out; +        } -                ret = dict_unserialize (rsp.dict.dict_val, -                                        rsp.dict.dict_len, -                                        &dict); +        ret = dict_unserialize(rsp.dict.dict_val, rsp.dict.dict_len, &dict); -                if (ret) { -                        gf_log ("cli", GF_LOG_ERROR, -                                "Unable to serialize response dictionary"); -                        goto out; -                } - -                ret = dict_get_str (dict, "volname", &volname); -                if (ret) { -                        gf_log ("cli", GF_LOG_ERROR, "Unable to get volname " -                                "from dictionary"); -                        goto out; -                } +        if (ret) { +            gf_log("cli", GF_LOG_ERROR, +                   "Unable to serialize response dictionary"); +            goto out; +        } -                ret = dict_get_str (dict, "lk-summary", &lk_summary); -                if (ret) { -                        gf_log ("cli", GF_LOG_ERROR, "Unable to get lock " -                                "summary from dictionary"); -                        goto out; -                } -                cli_out ("Volume clear-locks successful"); -                cli_out ("%s", lk_summary); +        ret = dict_get_str(dict, "volname", &volname); +        if (ret) { +            gf_log("cli", GF_LOG_ERROR, +                   "Unable to get volname " +                   "from dictionary"); +            goto out; +        } +        ret = dict_get_str(dict, "lk-summary", &lk_summary); +        if (ret) { +            gf_log("cli", GF_LOG_ERROR, +                   "Unable to get lock " +                   "summary from dictionary"); +            goto out;          } +        cli_out("Volume clear-locks successful"); +        cli_out("%s", lk_summary); +    } -        ret = rsp.op_ret; +    ret = rsp.op_ret;  out: -        if (dict) -                dict_unref (dict); -        cli_cmd_broadcast_response (ret); -        return ret; +    if (dict) +        dict_unref(dict); +    cli_cmd_broadcast_response(ret); +    return ret;  }  int32_t -gf_cli_clearlocks_volume (call_frame_t *frame, xlator_t *this, -                             void *data) +gf_cli_clearlocks_volume(call_frame_t *frame, xlator_t *this, void *data)  { -        gf_cli_req                      req = {{0,}}; -        dict_t                          *options = NULL; -        int                             ret = -1; +    gf_cli_req req = {{ +        0, +    }}; +    dict_t *options = NULL; +    int ret = -1; -        if (!frame || !this || !data) -                goto out; +    if (!frame || !this || !data) +        goto out; -        options = data; +    options = data; -        ret = cli_to_glusterd (&req, frame, gf_cli_clearlocks_volume_cbk, -                               (xdrproc_t) xdr_gf_cli_req, options, -                               GLUSTER_CLI_CLRLOCKS_VOLUME, this, cli_rpc_prog, -                               NULL); +    ret = cli_to_glusterd( +        &req, frame, gf_cli_clearlocks_volume_cbk, (xdrproc_t)xdr_gf_cli_req, +        options, GLUSTER_CLI_CLRLOCKS_VOLUME, this, cli_rpc_prog, NULL);  out: -        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); +    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret); -        GF_FREE (req.dict.dict_val); -        return ret; +    GF_FREE(req.dict.dict_val); +    return ret;  }  int32_t -cli_snapshot_remove_reply (gf_cli_rsp *rsp, dict_t *dict, call_frame_t *frame) +cli_snapshot_remove_reply(gf_cli_rsp *rsp, dict_t *dict, call_frame_t *frame)  { -        int32_t         ret             = -1; -        char            *snap_name      = NULL; -        int32_t         delete_cmd      = -1; -        cli_local_t     *local          = NULL; +    int32_t ret = -1; +    char *snap_name = NULL; +    int32_t delete_cmd = -1; +    cli_local_t *local = NULL; -        GF_ASSERT (frame); -        GF_ASSERT (rsp); -        GF_ASSERT (dict); +    GF_ASSERT(frame); +    GF_ASSERT(rsp); +    GF_ASSERT(dict); -        local = frame->local; +    local = frame->local; -        ret = dict_get_int32 (dict, "sub-cmd", &delete_cmd); -        if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Could not get sub-cmd"); -                goto end; -        } +    ret = dict_get_int32(dict, "sub-cmd", &delete_cmd); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, "Could not get sub-cmd"); +        goto end; +    } -        if ((global_state->mode & GLUSTER_MODE_XML) && -            (delete_cmd == GF_SNAP_DELETE_TYPE_SNAP)) { -                ret = cli_xml_output_snap_delete_begin (local, rsp->op_ret, -                                                        rsp->op_errno, -                                                        rsp->op_errstr); -                if (ret) { -                        gf_log ("cli", GF_LOG_ERROR, "Failed to create " -                                "xml output for delete"); -                        goto end; -                } +    if ((global_state->mode & GLUSTER_MODE_XML) && +        (delete_cmd == GF_SNAP_DELETE_TYPE_SNAP)) { +        ret = cli_xml_output_snap_delete_begin(local, rsp->op_ret, +                                               rsp->op_errno, rsp->op_errstr); +        if (ret) { +            gf_log("cli", GF_LOG_ERROR, +                   "Failed to create " +                   "xml output for delete"); +            goto end; +        } +    } + +    if (rsp->op_ret && !(global_state->mode & GLUSTER_MODE_XML)) { +        cli_err("snapshot delete: failed: %s", +                rsp->op_errstr ? rsp->op_errstr +                               : "Please check log file for details"); +        ret = rsp->op_ret; +        goto out; +    } + +    if (delete_cmd == GF_SNAP_DELETE_TYPE_ALL || +        delete_cmd == GF_SNAP_DELETE_TYPE_VOL) { +        local = ((call_frame_t *)frame)->local; +        if (!local) { +            ret = -1; +            gf_log("cli", GF_LOG_ERROR, "frame->local is NULL"); +            goto out;          } +        /* During first call back of snapshot delete of type +         * ALL and VOL, We will get the snapcount and snapnames. +         * Hence to make the subsequent rpc calls for individual +         * snapshot delete, We need to save it in local dictionary. +         */ +        dict_copy(dict, local->dict); +        ret = 0; +        goto out; +    } -        if (rsp->op_ret && !(global_state->mode & GLUSTER_MODE_XML)) { -                        cli_err ("snapshot delete: failed: %s", -                                  rsp->op_errstr ? rsp->op_errstr : -                                 "Please check log file for details"); -                ret = rsp->op_ret; -                goto out; +    if (global_state->mode & GLUSTER_MODE_XML) { +        ret = cli_xml_snapshot_delete(local, dict, rsp); +        if (ret) { +            gf_log("cli", GF_LOG_ERROR, +                   "Failed to create " +                   "xml output for snapshot delete command"); +            goto out;          } - -        if (delete_cmd == GF_SNAP_DELETE_TYPE_ALL || -            delete_cmd == GF_SNAP_DELETE_TYPE_VOL) { -                local = ((call_frame_t *) frame) -> local; -                if (!local) { -                        ret = -1; -                        gf_log ("cli", GF_LOG_ERROR, "frame->local is NULL"); -                        goto out; -                } - -                /* During first call back of snapshot delete of type -                 * ALL and VOL, We will get the snapcount and snapnames. -                 * Hence to make the subsequent rpc calls for individual -                 * snapshot delete, We need to save it in local dictionary. -                 */ -                dict_copy (dict, local->dict); -                ret = 0; -                goto out; +        /* Error out in case of the op already failed */ +        if (rsp->op_ret) { +            ret = rsp->op_ret; +            goto out;          } - -        if (global_state->mode & GLUSTER_MODE_XML) { -                ret = cli_xml_snapshot_delete (local, dict, rsp); -                if (ret) { -                        gf_log ("cli", GF_LOG_ERROR, "Failed to create " -                                "xml output for snapshot delete command"); -                        goto out; -                } -                /* Error out in case of the op already failed */ -                if (rsp->op_ret) { -                        ret = rsp->op_ret; -                        goto out; -                } -        } else { -                ret = dict_get_str (dict, "snapname", &snap_name); -                if (ret) { -                        gf_log ("cli", GF_LOG_ERROR, "Failed to get snapname"); -                        goto out; -                } - -                cli_out ("snapshot delete: %s: snap removed successfully", -                         snap_name); +    } else { +        ret = dict_get_str(dict, "snapname", &snap_name); +        if (ret) { +            gf_log("cli", GF_LOG_ERROR, "Failed to get snapname"); +            goto out;          } -        ret = 0; + +        cli_out("snapshot delete: %s: snap removed successfully", snap_name); +    } +    ret = 0;  out: -        if ((global_state->mode & GLUSTER_MODE_XML) && -            (delete_cmd == GF_SNAP_DELETE_TYPE_SNAP)) { -                ret = cli_xml_output_snap_delete_end (local); -        } +    if ((global_state->mode & GLUSTER_MODE_XML) && +        (delete_cmd == GF_SNAP_DELETE_TYPE_SNAP)) { +        ret = cli_xml_output_snap_delete_end(local); +    }  end: -        return ret; +    return ret;  }  int -cli_snapshot_config_display (dict_t *dict, gf_cli_rsp *rsp) -{ -        char                buf[PATH_MAX]        = ""; -        char               *volname              = NULL; -        int                 ret                  = -1; -        int                 config_command       = 0; -        uint64_t            value                = 0; -        uint64_t            hard_limit           = 0; -        uint64_t            soft_limit           = 0; -        uint64_t            i                    = 0; -        uint64_t            voldisplaycount      = 0; -        char               *auto_delete          = NULL; -        char               *snap_activate        = NULL; - -        GF_ASSERT (dict); -        GF_ASSERT (rsp); +cli_snapshot_config_display(dict_t *dict, gf_cli_rsp *rsp) +{ +    char buf[PATH_MAX] = ""; +    char *volname = NULL; +    int ret = -1; +    int config_command = 0; +    uint64_t value = 0; +    uint64_t hard_limit = 0; +    uint64_t soft_limit = 0; +    uint64_t i = 0; +    uint64_t voldisplaycount = 0; +    char *auto_delete = NULL; +    char *snap_activate = NULL; + +    GF_ASSERT(dict); +    GF_ASSERT(rsp); + +    if (rsp->op_ret) { +        cli_err("Snapshot Config : failed: %s", +                rsp->op_errstr ? rsp->op_errstr +                               : "Please check log file for details"); +        ret = rsp->op_ret; +        goto out; +    } + +    ret = dict_get_int32(dict, "config-command", &config_command); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, "Could not fetch config type"); +        goto out; +    } + +    ret = dict_get_str(dict, "volname", &volname); +    /* Ignore the error, as volname is optional */ + +    if (!volname) { +        volname = "System"; +    } + +    ret = dict_get_uint64(dict, "snap-max-hard-limit", &hard_limit); +    /* Ignore the error, as the key specified is optional */ +    ret = dict_get_uint64(dict, "snap-max-soft-limit", &soft_limit); + +    ret = dict_get_str(dict, "auto-delete", &auto_delete); + +    ret = dict_get_str(dict, "snap-activate-on-create", &snap_activate); + +    if (!hard_limit && !soft_limit && +        config_command != GF_SNAP_CONFIG_DISPLAY && !auto_delete && +        !snap_activate) { +        ret = -1; +        gf_log(THIS->name, GF_LOG_ERROR, "Could not fetch config-key"); +        goto out; +    } + +    switch (config_command) { +        case GF_SNAP_CONFIG_TYPE_SET: +            if (hard_limit && soft_limit) { +                cli_out( +                    "snapshot config: snap-max-hard-limit " +                    "& snap-max-soft-limit for system set " +                    "successfully"); +            } else if (hard_limit) { +                cli_out( +                    "snapshot config: snap-max-hard-limit " +                    "for %s set successfully", +                    volname); +            } else if (soft_limit) { +                cli_out( +                    "snapshot config: snap-max-soft-limit " +                    "for %s set successfully", +                    volname); +            } else if (auto_delete) { +                cli_out( +                    "snapshot config: auto-delete " +                    "successfully set"); +            } else if (snap_activate) { +                cli_out( +                    "snapshot config: activate-on-create " +                    "successfully set"); +            } +            break; -        if (rsp->op_ret) { -                cli_err ("Snapshot Config : failed: %s", -                         rsp->op_errstr ? rsp->op_errstr : -                         "Please check log file for details"); -                ret = rsp->op_ret; +        case GF_SNAP_CONFIG_DISPLAY: +            cli_out("\nSnapshot System Configuration:"); +            ret = dict_get_uint64(dict, "snap-max-hard-limit", &value); +            if (ret) { +                gf_log("cli", GF_LOG_ERROR, +                       "Could not fetch " +                       "snap_max_hard_limit for %s", +                       volname); +                ret = -1;                  goto out; -        } +            } +            cli_out("snap-max-hard-limit : %" PRIu64, value); -        ret = dict_get_int32 (dict, "config-command", &config_command); -        if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Could not fetch config type"); +            ret = dict_get_uint64(dict, "snap-max-soft-limit", &soft_limit); +            if (ret) { +                gf_log("cli", GF_LOG_ERROR, +                       "Could not fetch " +                       "snap-max-soft-limit for %s", +                       volname); +                ret = -1;                  goto out; -        } - -        ret = dict_get_str (dict, "volname", &volname); -        /* Ignore the error, as volname is optional */ +            } +            cli_out("snap-max-soft-limit : %" PRIu64 "%%", soft_limit); -        if (!volname) { -                volname = "System"; -        } +            cli_out("auto-delete : %s", auto_delete); -        ret = dict_get_uint64 (dict, "snap-max-hard-limit", &hard_limit); -        /* Ignore the error, as the key specified is optional */ -        ret = dict_get_uint64 (dict, "snap-max-soft-limit", &soft_limit); +            cli_out("activate-on-create : %s\n", snap_activate); -        ret = dict_get_str (dict, "auto-delete", &auto_delete); +            cli_out("Snapshot Volume Configuration:"); -        ret = dict_get_str (dict, "snap-activate-on-create", &snap_activate); - -        if (!hard_limit && !soft_limit -                        && config_command != GF_SNAP_CONFIG_DISPLAY -                        && !auto_delete && !snap_activate) { +            ret = dict_get_uint64(dict, "voldisplaycount", &voldisplaycount); +            if (ret) { +                gf_log("cli", GF_LOG_ERROR, "Could not fetch voldisplaycount");                  ret = -1; -                gf_log(THIS->name, GF_LOG_ERROR, -                       "Could not fetch config-key");                  goto out; -        } - -        switch (config_command) { -        case GF_SNAP_CONFIG_TYPE_SET: -                if (hard_limit && soft_limit) { -                        cli_out ("snapshot config: snap-max-hard-limit " -                                "& snap-max-soft-limit for system set " -                                 "successfully"); -                } else if (hard_limit) { -                        cli_out ("snapshot config: snap-max-hard-limit " -                                 "for %s set successfully", -                                 volname); -                } else if (soft_limit) { -                        cli_out ("snapshot config: snap-max-soft-limit " -                                 "for %s set successfully", -                                 volname); -                } else if (auto_delete) { -                        cli_out ("snapshot config: auto-delete " -                                 "successfully set"); -                } else if (snap_activate) { -                        cli_out ("snapshot config: activate-on-create " -                                 "successfully set"); -                } -                break; +            } -        case GF_SNAP_CONFIG_DISPLAY: -                cli_out ("\nSnapshot System Configuration:"); -                ret = dict_get_uint64 (dict, "snap-max-hard-limit", -                                       &value); +            for (i = 0; i < voldisplaycount; i++) { +                snprintf(buf, sizeof(buf), "volume%" PRIu64 "-volname", i); +                ret = dict_get_str(dict, buf, &volname);                  if (ret) { -                        gf_log ("cli", GF_LOG_ERROR, "Could not fetch " -                                "snap_max_hard_limit for %s", volname); -                        ret = -1; -                        goto out; -                } -                cli_out ("snap-max-hard-limit : %"PRIu64, value); - -                ret = dict_get_uint64 (dict, "snap-max-soft-limit", -                                       &soft_limit); +                    gf_log("cli", GF_LOG_ERROR, +                           "Could not fetch " +                           " %s", +                           buf); +                    ret = -1; +                    goto out; +                } +                cli_out("\nVolume : %s", volname); + +                snprintf(buf, sizeof(buf), +                         "volume%" PRIu64 "-snap-max-hard-limit", i); +                ret = dict_get_uint64(dict, buf, &value);                  if (ret) { -                        gf_log ("cli", GF_LOG_ERROR, "Could not fetch " -                               "snap-max-soft-limit for %s", volname); -                        ret = -1; -                        goto out; -                } -                cli_out ("snap-max-soft-limit : %"PRIu64"%%", -                         soft_limit); - -                cli_out ("auto-delete : %s", auto_delete); - -                cli_out ("activate-on-create : %s\n", snap_activate); - -                cli_out ("Snapshot Volume Configuration:"); - -                ret = dict_get_uint64 (dict, "voldisplaycount", -                                       &voldisplaycount); +                    gf_log("cli", GF_LOG_ERROR, +                           "Could not fetch " +                           " %s", +                           buf); +                    ret = -1; +                    goto out; +                } +                cli_out("snap-max-hard-limit : %" PRIu64, value); + +                snprintf(buf, sizeof(buf), +                         "volume%" PRIu64 "-active-hard-limit", i); +                ret = dict_get_uint64(dict, buf, &value);                  if (ret) { -                        gf_log ("cli", GF_LOG_ERROR, -                               "Could not fetch voldisplaycount"); -                        ret = -1; -                        goto out; -                } - -                for (i = 0; i < voldisplaycount; i++) { -                        snprintf (buf, sizeof(buf), "volume%"PRIu64"-volname", i); -                        ret = dict_get_str (dict, buf, &volname); -                        if (ret) { -                                gf_log ("cli", GF_LOG_ERROR, "Could not fetch " -                                       " %s", buf); -                                ret = -1; -                                goto out; -                        } -                        cli_out ("\nVolume : %s", volname); - -                        snprintf (buf, sizeof(buf), -                                  "volume%"PRIu64"-snap-max-hard-limit", i); -                        ret = dict_get_uint64 (dict, buf, &value); -                        if (ret) { -                                gf_log ("cli", GF_LOG_ERROR, "Could not fetch " -                                       " %s", buf); -                                ret = -1; -                                goto out; -                        } -                        cli_out ("snap-max-hard-limit : %"PRIu64, value); - -                        snprintf (buf, sizeof(buf), -                                  "volume%"PRIu64"-active-hard-limit", i); -                        ret = dict_get_uint64 (dict, buf, &value); -                        if (ret) { -                                 gf_log ("cli", GF_LOG_ERROR, "Could not fetch" -                                        " effective snap_max_hard_limit for " -                                        "%s", volname); -                                ret = -1; -                                goto out; -                        } -                        cli_out ("Effective snap-max-hard-limit : %"PRIu64, -                                 value); - -                        snprintf (buf, sizeof(buf), -                                      "volume%"PRIu64"-snap-max-soft-limit", i); -                        ret = dict_get_uint64 (dict, buf, &value); -                        if (ret) { -                                gf_log ("cli", GF_LOG_ERROR, "Could not fetch " -                                       " %s", buf); -                                ret = -1; -                                goto out; -                        } -                        cli_out ("Effective snap-max-soft-limit : %"PRIu64" " -                                 "(%"PRIu64"%%)", value, soft_limit); -                } -                break; +                    gf_log("cli", GF_LOG_ERROR, +                           "Could not fetch" +                           " effective snap_max_hard_limit for " +                           "%s", +                           volname); +                    ret = -1; +                    goto out; +                } +                cli_out("Effective snap-max-hard-limit : %" PRIu64, value); + +                snprintf(buf, sizeof(buf), +                         "volume%" PRIu64 "-snap-max-soft-limit", i); +                ret = dict_get_uint64(dict, buf, &value); +                if (ret) { +                    gf_log("cli", GF_LOG_ERROR, +                           "Could not fetch " +                           " %s", +                           buf); +                    ret = -1; +                    goto out; +                } +                cli_out("Effective snap-max-soft-limit : %" PRIu64 +                        " " +                        "(%" PRIu64 "%%)", +                        value, soft_limit); +            } +            break;          default: -                break; -        } +            break; +    } -        ret = 0; +    ret = 0;  out: -        return ret; +    return ret;  }  /* This function is used to print the volume related information @@ -9749,91 +9706,86 @@ out:   * arg - 1, prefix str : snaplist.snap{0..}.vol{0..}.*   */  int -cli_get_each_volinfo_in_snap (dict_t *dict, char *keyprefix, -                              gf_boolean_t snap_driven) { -        char             key[PATH_MAX]  =  ""; -        char            *get_buffer     =  NULL; -        int              value          =  0; -        int              ret            = -1; -        char             indent[5]      = "\t"; -        char            *volname        =  NULL; - -        GF_ASSERT (dict); -        GF_ASSERT (keyprefix); - -        if (snap_driven) { -                ret = snprintf (key, sizeof (key), "%s.volname", keyprefix); -                if (ret < 0) { -                        goto out; -                } - -                ret = dict_get_str (dict, key, &get_buffer); -                if (ret) { -                        gf_log ("cli", GF_LOG_ERROR, "Failed to get %s", key); -                        goto out; -                } -                cli_out ("%s" INDENT_MAIN_HEAD "%s", indent, -                        "Snap Volume Name", ":", get_buffer); - -                ret = snprintf (key, sizeof (key), -                                "%s.origin-volname", keyprefix); -                if (ret < 0) { -                        goto out; -                } +cli_get_each_volinfo_in_snap(dict_t *dict, char *keyprefix, +                             gf_boolean_t snap_driven) +{ +    char key[PATH_MAX] = ""; +    char *get_buffer = NULL; +    int value = 0; +    int ret = -1; +    char indent[5] = "\t"; +    char *volname = NULL; -                ret = dict_get_str (dict, key, &volname); -                if (ret) { -                        gf_log ("cli", GF_LOG_WARNING, "Failed to get %s", key); -                        cli_out ("%-12s", "Origin:"); -                } -                cli_out ("%s" INDENT_MAIN_HEAD "%s", indent, -                        "Origin Volume name", ":", volname); +    GF_ASSERT(dict); +    GF_ASSERT(keyprefix); +    if (snap_driven) { +        ret = snprintf(key, sizeof(key), "%s.volname", keyprefix); +        if (ret < 0) { +            goto out; +        } -                ret = snprintf (key, sizeof (key), "%s.snapcount", -                                keyprefix); -                if (ret < 0) { -                        goto out; -                } +        ret = dict_get_str(dict, key, &get_buffer); +        if (ret) { +            gf_log("cli", GF_LOG_ERROR, "Failed to get %s", key); +            goto out; +        } +        cli_out("%s" INDENT_MAIN_HEAD "%s", indent, "Snap Volume Name", ":", +                get_buffer); -                ret = dict_get_int32 (dict, key, &value); -                if (ret) { -                        gf_log ("cli", GF_LOG_ERROR, "Failed to get %s", key); -                        goto out; -                } -                cli_out ("%s%s %s      %s %d", indent, "Snaps taken for", -                        volname, ":", value); +        ret = snprintf(key, sizeof(key), "%s.origin-volname", keyprefix); +        if (ret < 0) { +            goto out; +        } -                ret = snprintf (key, sizeof (key), "%s.snaps-available", -                                keyprefix); -                if (ret < 0) { -                        goto out; -                } +        ret = dict_get_str(dict, key, &volname); +        if (ret) { +            gf_log("cli", GF_LOG_WARNING, "Failed to get %s", key); +            cli_out("%-12s", "Origin:"); +        } +        cli_out("%s" INDENT_MAIN_HEAD "%s", indent, "Origin Volume name", ":", +                volname); -                ret = dict_get_int32 (dict, key, &value); -                if (ret) { -                        gf_log ("cli", GF_LOG_ERROR, "Failed to get %s", key); -                        goto out; -                } -                cli_out ("%s%s %s  %s %d", indent, "Snaps available for", -                         volname, ":", value); +        ret = snprintf(key, sizeof(key), "%s.snapcount", keyprefix); +        if (ret < 0) { +            goto out;          } +        ret = dict_get_int32(dict, key, &value); +        if (ret) { +            gf_log("cli", GF_LOG_ERROR, "Failed to get %s", key); +            goto out; +        } +        cli_out("%s%s %s      %s %d", indent, "Snaps taken for", volname, ":", +                value); -        ret = snprintf (key, sizeof (key), "%s.vol-status", keyprefix); +        ret = snprintf(key, sizeof(key), "%s.snaps-available", keyprefix);          if (ret < 0) { -                goto out; +            goto out;          } -        ret = dict_get_str (dict, key, &get_buffer); +        ret = dict_get_int32(dict, key, &value);          if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Failed to get %s", key); -                goto out; +            gf_log("cli", GF_LOG_ERROR, "Failed to get %s", key); +            goto out;          } -        cli_out ("%s" INDENT_MAIN_HEAD "%s", indent, "Status", -                 ":", get_buffer); +        cli_out("%s%s %s  %s %d", indent, "Snaps available for", volname, ":", +                value); +    } + +    ret = snprintf(key, sizeof(key), "%s.vol-status", keyprefix); +    if (ret < 0) { +        goto out; +    } + +    ret = dict_get_str(dict, key, &get_buffer); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, "Failed to get %s", key); +        goto out; +    } +    cli_out("%s" INDENT_MAIN_HEAD "%s", indent, "Status", ":", get_buffer);  out: -        return ret; +    return ret;  }  /* This function is used to print snap related information @@ -9841,924 +9793,890 @@ out:   * arg - 1, prefix_str : snaplist.snap{0..}.*   */  int -cli_get_volinfo_in_snap (dict_t *dict, char *keyprefix) { +cli_get_volinfo_in_snap(dict_t *dict, char *keyprefix) +{ +    char key[PATH_MAX] = ""; +    int i = 0; +    int volcount = 0; +    int ret = -1; -        char            key[PATH_MAX]   = ""; -        int             i               = 0; -        int             volcount        = 0; -        int             ret             = -1; +    GF_ASSERT(dict); +    GF_ASSERT(keyprefix); -        GF_ASSERT (dict); -        GF_ASSERT (keyprefix); +    ret = snprintf(key, sizeof(key), "%s.vol-count", keyprefix); +    if (ret < 0) { +        goto out; +    } -        ret = snprintf (key, sizeof (key), "%s.vol-count", keyprefix); +    ret = dict_get_int32(dict, key, &volcount); +    for (i = 1; i <= volcount; i++) { +        ret = snprintf(key, sizeof(key), "%s.vol%d", keyprefix, i);          if (ret < 0) { -                goto out; +            goto out;          } - -        ret = dict_get_int32 (dict, key, &volcount); -        for (i = 1 ; i <= volcount ; i++) { -                ret = snprintf (key, sizeof (key), -                                "%s.vol%d", keyprefix, i); -                if (ret < 0) { -                        goto out; -                } -                ret = cli_get_each_volinfo_in_snap (dict, key, _gf_true); -                if (ret) { -                        gf_log ("cli", GF_LOG_ERROR, "Could not list " -                                "details of volume in a snap"); -                        goto out; -                } -                cli_out (" "); +        ret = cli_get_each_volinfo_in_snap(dict, key, _gf_true); +        if (ret) { +            gf_log("cli", GF_LOG_ERROR, +                   "Could not list " +                   "details of volume in a snap"); +            goto out;          } +        cli_out(" "); +    }  out: -        return ret; +    return ret;  }  int -cli_get_each_snap_info (dict_t *dict, char *prefix_str, -                        gf_boolean_t snap_driven) { -        char            key_buffer[PATH_MAX] = ""; -        char           *get_buffer           = NULL; -        int             ret                  = -1; -        char            indent[5]            = ""; - -        GF_ASSERT (dict); -        GF_ASSERT (prefix_str); - -        if (!snap_driven) -                strcat (indent, "\t"); - -        ret = snprintf (key_buffer, sizeof (key_buffer), "%s.snapname", -                        prefix_str); -        if (ret < 0) { -                goto out; -        } - -        ret = dict_get_str (dict, key_buffer, &get_buffer); -        if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Unable to fetch snapname %s ", -                        key_buffer); -                goto out; -        } -        cli_out ("%s" INDENT_MAIN_HEAD "%s", indent, "Snapshot", -                ":", get_buffer); - -        ret = snprintf (key_buffer, sizeof (key_buffer), "%s.snap-id", -                        prefix_str); -        if (ret < 0) { -                goto out; -        } - -        ret = dict_get_str (dict, key_buffer, &get_buffer); +cli_get_each_snap_info(dict_t *dict, char *prefix_str, gf_boolean_t snap_driven) +{ +    char key_buffer[PATH_MAX] = ""; +    char *get_buffer = NULL; +    int ret = -1; +    char indent[5] = ""; + +    GF_ASSERT(dict); +    GF_ASSERT(prefix_str); + +    if (!snap_driven) +        strcat(indent, "\t"); + +    ret = snprintf(key_buffer, sizeof(key_buffer), "%s.snapname", prefix_str); +    if (ret < 0) { +        goto out; +    } + +    ret = dict_get_str(dict, key_buffer, &get_buffer); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, "Unable to fetch snapname %s ", key_buffer); +        goto out; +    } +    cli_out("%s" INDENT_MAIN_HEAD "%s", indent, "Snapshot", ":", get_buffer); + +    ret = snprintf(key_buffer, sizeof(key_buffer), "%s.snap-id", prefix_str); +    if (ret < 0) { +        goto out; +    } + +    ret = dict_get_str(dict, key_buffer, &get_buffer); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, "Unable to fetch snap-id %s ", key_buffer); +        goto out; +    } +    cli_out("%s" INDENT_MAIN_HEAD "%s", indent, "Snap UUID", ":", get_buffer); + +    ret = snprintf(key_buffer, sizeof(key_buffer), "%s.snap-desc", prefix_str); +    if (ret < 0) { +        goto out; +    } + +    ret = dict_get_str(dict, key_buffer, &get_buffer); +    if (!ret) { +        /* Ignore error for description */ +        cli_out("%s" INDENT_MAIN_HEAD "%s", indent, "Description", ":", +                get_buffer); +    } + +    ret = snprintf(key_buffer, sizeof(key_buffer), "%s.snap-time", prefix_str); +    if (ret < 0) { +        goto out; +    } + +    ret = dict_get_str(dict, key_buffer, &get_buffer); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, "Unable to fetch snap-time %s ", +               prefix_str); +        goto out; +    } +    cli_out("%s" INDENT_MAIN_HEAD "%s", indent, "Created", ":", get_buffer); + +    if (snap_driven) { +        cli_out("%-12s", "Snap Volumes:\n"); +        ret = cli_get_volinfo_in_snap(dict, prefix_str);          if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Unable to fetch snap-id %s ", -                        key_buffer); -                goto out; -        } -        cli_out ("%s" INDENT_MAIN_HEAD "%s", indent, "Snap UUID", -                ":", get_buffer); - -        ret = snprintf (key_buffer, sizeof (key_buffer), "%s.snap-desc", -                        prefix_str); -        if (ret < 0) { -                goto out; -        } - -        ret = dict_get_str (dict, key_buffer, &get_buffer); -        if (!ret) { -                /* Ignore error for description */ -                cli_out ("%s" INDENT_MAIN_HEAD "%s", indent, -                         "Description", ":", get_buffer); -        } - -        ret = snprintf (key_buffer, sizeof (key_buffer), "%s.snap-time", -                        prefix_str); -        if (ret < 0) { -                goto out; -        } - -        ret = dict_get_str (dict, key_buffer, &get_buffer); -        if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Unable to fetch snap-time %s ", -                        prefix_str); -                goto out; -        } -        cli_out ("%s" INDENT_MAIN_HEAD "%s", indent, "Created", -                ":", get_buffer); - -        if (snap_driven) { -                cli_out ("%-12s", "Snap Volumes:\n"); -                ret = cli_get_volinfo_in_snap (dict, prefix_str); -                if (ret) { -                        gf_log ("cli", GF_LOG_ERROR, "Unable to list details " -                                "of the snaps"); -                        goto out; -                } +            gf_log("cli", GF_LOG_ERROR, +                   "Unable to list details " +                   "of the snaps"); +            goto out;          } +    }  out: -        return ret; +    return ret;  }  /* This is a generic function to print snap related information.   * arg - 0, dict : Response Dictionary   */  int -cli_call_snapshot_info (dict_t *dict, gf_boolean_t bool_snap_driven) { -        int             snap_count       =  0; -        char            key[PATH_MAX]    =  ""; -        int             ret              =  -1; -        int             i                =   0; +cli_call_snapshot_info(dict_t *dict, gf_boolean_t bool_snap_driven) +{ +    int snap_count = 0; +    char key[PATH_MAX] = ""; +    int ret = -1; +    int i = 0; -        GF_ASSERT (dict); +    GF_ASSERT(dict); -        ret = dict_get_int32 (dict, "snapcount", &snap_count); -        if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Unable to get snapcount"); -                goto out; -        } +    ret = dict_get_int32(dict, "snapcount", &snap_count); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, "Unable to get snapcount"); +        goto out; +    } -        if (snap_count == 0) { -                cli_out ("No snapshots present"); -        } +    if (snap_count == 0) { +        cli_out("No snapshots present"); +    } -        for (i = 1 ; i <= snap_count ; i++) { -                ret = snprintf (key, sizeof (key), "snap%d", i); -                if (ret < 0) { -                        goto out; -                } -                ret = cli_get_each_snap_info (dict, key, bool_snap_driven); -                if (ret) { -                        gf_log ("cli", GF_LOG_ERROR, -                                "Unable to print snap details"); -                        goto out; -                } +    for (i = 1; i <= snap_count; i++) { +        ret = snprintf(key, sizeof(key), "snap%d", i); +        if (ret < 0) { +            goto out; +        } +        ret = cli_get_each_snap_info(dict, key, bool_snap_driven); +        if (ret) { +            gf_log("cli", GF_LOG_ERROR, "Unable to print snap details"); +            goto out;          } +    }  out: -        return ret; +    return ret;  }  int -cli_get_snaps_in_volume (dict_t *dict) { -        int      ret             =  -1; -        int      i               =  0; -        int      count           =  0; -        int      avail           =  0; -        char     key[PATH_MAX]   =  ""; -        char    *get_buffer      =  NULL; - -        GF_ASSERT (dict); - -        ret = dict_get_str (dict, "origin-volname", &get_buffer); +cli_get_snaps_in_volume(dict_t *dict) +{ +    int ret = -1; +    int i = 0; +    int count = 0; +    int avail = 0; +    char key[PATH_MAX] = ""; +    char *get_buffer = NULL; + +    GF_ASSERT(dict); + +    ret = dict_get_str(dict, "origin-volname", &get_buffer); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, "Could not fetch origin-volname"); +        goto out; +    } +    cli_out(INDENT_MAIN_HEAD "%s", "Volume Name", ":", get_buffer); + +    ret = dict_get_int32(dict, "snapcount", &avail); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, "Could not fetch snapcount"); +        goto out; +    } +    cli_out(INDENT_MAIN_HEAD "%d", "Snaps Taken", ":", avail); + +    ret = dict_get_int32(dict, "snaps-available", &count); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, "Could not fetch snaps-available"); +        goto out; +    } +    cli_out(INDENT_MAIN_HEAD "%d", "Snaps Available", ":", count); + +    for (i = 1; i <= avail; i++) { +        snprintf(key, sizeof(key), "snap%d", i); +        ret = cli_get_each_snap_info(dict, key, _gf_false);          if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Could not fetch origin-volname"); -                goto out; +            gf_log("cli", GF_LOG_ERROR, "Unable to print snap details"); +            goto out;          } -        cli_out (INDENT_MAIN_HEAD "%s", "Volume Name", ":", get_buffer); -        ret = dict_get_int32 (dict, "snapcount", &avail); -        if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Could not fetch snapcount"); -                goto out; +        ret = snprintf(key, sizeof(key), "snap%d.vol1", i); +        if (ret < 0) { +            goto out;          } -        cli_out (INDENT_MAIN_HEAD "%d", "Snaps Taken", ":", avail); - -        ret = dict_get_int32 (dict, "snaps-available", &count); +        ret = cli_get_each_volinfo_in_snap(dict, key, _gf_false);          if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Could not fetch snaps-available"); -                goto out; +            gf_log("cli", GF_LOG_ERROR, +                   "Could not get volume " +                   "related information"); +            goto out;          } -        cli_out (INDENT_MAIN_HEAD "%d", "Snaps Available", ":", count); - -        for (i = 1 ; i <= avail ; i++) { -                snprintf (key, sizeof (key), "snap%d", i); -                ret = cli_get_each_snap_info (dict, key, _gf_false); -                if (ret) { -                        gf_log ("cli", GF_LOG_ERROR, -                                "Unable to print snap details"); -                        goto out; -                } - -                ret = snprintf (key, sizeof (key), "snap%d.vol1", i); -                if (ret < 0) { -                        goto out; -                } -                ret = cli_get_each_volinfo_in_snap (dict, key, _gf_false); -                if (ret) { -                        gf_log ("cli", GF_LOG_ERROR, "Could not get volume " -                                "related information"); -                        goto out; -                } -                cli_out (" "); -        } +        cli_out(" "); +    }  out: -        return ret; +    return ret;  }  int -cli_snapshot_list (dict_t *dict) { -        int     snapcount       =       0; -        char    key[PATH_MAX]   =       ""; -        int     ret             =       -1; -        int     i               =       0; -        char    *get_buffer     =       NULL; - -        GF_ASSERT (dict); - -        ret = dict_get_int32 (dict, "snapcount", &snapcount); -        if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Could not fetch snap count"); -                goto out; -        } - -        if (snapcount == 0) { -                cli_out ("No snapshots present"); -        } - -        for (i = 1 ; i <= snapcount ; i++) { -                ret = snprintf (key, sizeof (key), "snapname%d", i); -                if (ret < 0) { -                        goto out; -                } +cli_snapshot_list(dict_t *dict) +{ +    int snapcount = 0; +    char key[PATH_MAX] = ""; +    int ret = -1; +    int i = 0; +    char *get_buffer = NULL; -                ret = dict_get_str (dict, key, &get_buffer); -                if (ret) { -                        gf_log ("cli", GF_LOG_ERROR, "Could not get %s ", key); -                        goto out; -                } else { -                        cli_out ("%s", get_buffer); -                } -        } -out: -        return ret; -} +    GF_ASSERT(dict); -int -cli_get_snap_volume_status (dict_t *dict, char *key_prefix) -{ -        int             ret             =       -1; -        char            key[PATH_MAX]   =       ""; -        char            *buffer         =       NULL; -        int             brickcount      =       0; -        int             i               =       0; -        int             pid             =       0; +    ret = dict_get_int32(dict, "snapcount", &snapcount); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, "Could not fetch snap count"); +        goto out; +    } -        GF_ASSERT (dict); -        GF_ASSERT (key_prefix); +    if (snapcount == 0) { +        cli_out("No snapshots present"); +    } -        ret = snprintf (key, sizeof (key), "%s.brickcount", key_prefix); +    for (i = 1; i <= snapcount; i++) { +        ret = snprintf(key, sizeof(key), "snapname%d", i);          if (ret < 0) { -                goto out; -        } -        ret = dict_get_int32 (dict, key, &brickcount); -        if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Failed to fetch brickcount"); -                goto out; +            goto out;          } -        for (i = 0 ; i < brickcount ; i++) { -                ret = snprintf (key, sizeof (key), "%s.brick%d.path", -                                key_prefix, i); -                if (ret < 0) { -                        goto out; -                } - -                ret = dict_get_str (dict, key, &buffer); -                if (ret) { -                        gf_log ("cli", GF_LOG_INFO, -                                "Unable to get Brick Path"); -                        continue; -                } -                cli_out ("\n\t%-17s %s   %s", "Brick Path", ":", buffer); - -                ret = snprintf (key, sizeof (key), "%s.brick%d.vgname", -                                key_prefix, i); -                if (ret < 0) { -                        goto out; -                } - -                ret = dict_get_str (dict, key, &buffer); -                if (ret) { -                        gf_log ("cli", GF_LOG_INFO, -                                "Unable to get Volume Group"); -                        cli_out ("\t%-17s %s   %s", "Volume Group", ":", -                                 "N/A"); -                } else -                        cli_out ("\t%-17s %s   %s", "Volume Group", ":", -                                 buffer); - -                ret = snprintf (key, sizeof (key), "%s.brick%d.status", -                                key_prefix, i); -                if (ret < 0) { -                        goto out; -                } - -                ret = dict_get_str (dict, key, &buffer); -                if (ret) { -                        gf_log ("cli", GF_LOG_INFO, -                                "Unable to get Brick Running"); -                        cli_out ("\t%-17s %s   %s", "Brick Running", ":", -                                 "N/A"); -                } else -                        cli_out ("\t%-17s %s   %s", "Brick Running", ":", -                                 buffer); - -                ret = snprintf (key, sizeof (key), "%s.brick%d.pid", -                                key_prefix, i); -                if (ret < 0) { -                        goto out; -                } - -                ret = dict_get_int32 (dict, key, &pid); -                if (ret) { -                        gf_log ("cli", GF_LOG_INFO, -                                "Unable to get pid"); -                        cli_out ("\t%-17s %s   %s", "Brick PID", ":", "N/A"); -                } else -                        cli_out ("\t%-17s %s   %d", "Brick PID", ":", pid); - -                ret = snprintf (key, sizeof (key), "%s.brick%d.data", -                                key_prefix, i); -                if (ret < 0) { -                        goto out; -                } - -                ret = dict_get_str (dict, key, &buffer); -                if (ret) { -                        gf_log ("cli", GF_LOG_INFO, -                                "Unable to get Data Percent"); -                        cli_out ("\t%-17s %s   %s", "Data Percentage", ":", -                                 "N/A"); -                } else -                        cli_out ("\t%-17s %s   %s", "Data Percentage", ":", -                                 buffer); - -                ret = snprintf (key, sizeof (key), "%s.brick%d.lvsize", -                                key_prefix, i); -                if (ret < 0) { -                        goto out; -                } -                ret = dict_get_str (dict, key, &buffer); -                if (ret) { -                        gf_log ("cli", GF_LOG_INFO, "Unable to get LV Size"); -                        cli_out ("\t%-17s %s   %s", "LV Size", ":", "N/A"); -                } else -                        cli_out ("\t%-17s %s   %s", "LV Size", ":", buffer); - +        ret = dict_get_str(dict, key, &get_buffer); +        if (ret) { +            gf_log("cli", GF_LOG_ERROR, "Could not get %s ", key); +            goto out; +        } else { +            cli_out("%s", get_buffer);          } - -        ret = 0; +    }  out: -        return ret; +    return ret;  } - -  int -cli_get_single_snap_status (dict_t *dict, char *keyprefix) -{ -        int             ret             =       -1; -        char            key[PATH_MAX]   =       ""; -        int             i               =       0; -        int             volcount        =       0; -        char            *get_buffer     =       NULL; - -        GF_ASSERT (dict); -        GF_ASSERT (keyprefix); - -        ret = snprintf (key, sizeof (key), "%s.snapname", keyprefix); +cli_get_snap_volume_status(dict_t *dict, char *key_prefix) +{ +    int ret = -1; +    char key[PATH_MAX] = ""; +    char *buffer = NULL; +    int brickcount = 0; +    int i = 0; +    int pid = 0; + +    GF_ASSERT(dict); +    GF_ASSERT(key_prefix); + +    ret = snprintf(key, sizeof(key), "%s.brickcount", key_prefix); +    if (ret < 0) { +        goto out; +    } +    ret = dict_get_int32(dict, key, &brickcount); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, "Failed to fetch brickcount"); +        goto out; +    } + +    for (i = 0; i < brickcount; i++) { +        ret = snprintf(key, sizeof(key), "%s.brick%d.path", key_prefix, i);          if (ret < 0) { -                goto out; +            goto out;          } -        ret = dict_get_str (dict, key, &get_buffer); +        ret = dict_get_str(dict, key, &buffer);          if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Unable to get snapname"); -                goto out; +            gf_log("cli", GF_LOG_INFO, "Unable to get Brick Path"); +            continue;          } -        cli_out ("\nSnap Name : %s", get_buffer); +        cli_out("\n\t%-17s %s   %s", "Brick Path", ":", buffer); -        ret = snprintf (key, sizeof (key), "%s.uuid", keyprefix); +        ret = snprintf(key, sizeof(key), "%s.brick%d.vgname", key_prefix, i);          if (ret < 0) { -                goto out; +            goto out;          } -        ret = dict_get_str (dict, key, &get_buffer); +        ret = dict_get_str(dict, key, &buffer);          if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Unable to get snap UUID"); -                goto out; -        } -        cli_out ("Snap UUID : %s", get_buffer); +            gf_log("cli", GF_LOG_INFO, "Unable to get Volume Group"); +            cli_out("\t%-17s %s   %s", "Volume Group", ":", "N/A"); +        } else +            cli_out("\t%-17s %s   %s", "Volume Group", ":", buffer); -        ret = snprintf (key, sizeof (key), "%s.volcount", keyprefix); +        ret = snprintf(key, sizeof(key), "%s.brick%d.status", key_prefix, i);          if (ret < 0) { -                goto out; +            goto out;          } -        ret = dict_get_int32 (dict, key, &volcount); +        ret = dict_get_str(dict, key, &buffer);          if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Unable to get volume count"); -                goto out; -        } +            gf_log("cli", GF_LOG_INFO, "Unable to get Brick Running"); +            cli_out("\t%-17s %s   %s", "Brick Running", ":", "N/A"); +        } else +            cli_out("\t%-17s %s   %s", "Brick Running", ":", buffer); -        for (i = 0 ; i < volcount ; i++) { -                ret = snprintf (key, sizeof (key), "%s.vol%d", keyprefix, i); -                if (ret < 0) { -                        goto out; -                } - -                ret = cli_get_snap_volume_status (dict, key); -                if (ret) { -                        gf_log ("cli", GF_LOG_ERROR, -                                "Could not get snap volume status"); -                        goto out; -                } +        ret = snprintf(key, sizeof(key), "%s.brick%d.pid", key_prefix, i); +        if (ret < 0) { +            goto out;          } -out: -        return ret; -} - -int32_t -cli_populate_req_dict_for_delete (dict_t *snap_dict, dict_t *dict, size_t index) -{ -        int32_t         ret             = -1; -        char            key[PATH_MAX]   = ""; -        char            *buffer         = NULL; - -        GF_ASSERT (snap_dict); -        GF_ASSERT (dict); -        ret = dict_set_int32 (snap_dict, "sub-cmd", -                              GF_SNAP_DELETE_TYPE_ITER); +        ret = dict_get_int32(dict, key, &pid);          if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Could not save command " -                        "type in snap dictionary"); -                goto out; -        } +            gf_log("cli", GF_LOG_INFO, "Unable to get pid"); +            cli_out("\t%-17s %s   %s", "Brick PID", ":", "N/A"); +        } else +            cli_out("\t%-17s %s   %d", "Brick PID", ":", pid); -        ret = snprintf (key, sizeof (key), "snapname%zu", index); +        ret = snprintf(key, sizeof(key), "%s.brick%d.data", key_prefix, i);          if (ret < 0) { -                goto out; +            goto out;          } -        ret = dict_get_str (dict, key, &buffer); +        ret = dict_get_str(dict, key, &buffer);          if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Failed to get snapname"); -                goto out; -        } +            gf_log("cli", GF_LOG_INFO, "Unable to get Data Percent"); +            cli_out("\t%-17s %s   %s", "Data Percentage", ":", "N/A"); +        } else +            cli_out("\t%-17s %s   %s", "Data Percentage", ":", buffer); -        ret = dict_set_dynstr_with_alloc (snap_dict, "snapname", buffer); -        if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Failed to save snapname"); -                goto out; +        ret = snprintf(key, sizeof(key), "%s.brick%d.lvsize", key_prefix, i); +        if (ret < 0) { +            goto out;          } - -        ret = dict_set_int32 (snap_dict, "type", GF_SNAP_OPTION_TYPE_DELETE); +        ret = dict_get_str(dict, key, &buffer);          if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Failed to save command type"); -                goto out; -        } +            gf_log("cli", GF_LOG_INFO, "Unable to get LV Size"); +            cli_out("\t%-17s %s   %s", "LV Size", ":", "N/A"); +        } else +            cli_out("\t%-17s %s   %s", "LV Size", ":", buffer); +    } -        ret = dict_set_dynstr_with_alloc (snap_dict, "cmd-str", -                                       "snapshot delete"); -        if (ret) { -                gf_log ("cli", GF_LOG_ERROR, -                        "Could not save command string as delete"); -                goto out; -        } +    ret = 0;  out: -        return ret; +    return ret;  }  int -cli_populate_req_dict_for_status (dict_t *snap_dict, dict_t *dict, int index) -{ -        int             ret             =       -1; -        char            key[PATH_MAX]   =       ""; -        char            *buffer         =       NULL; - -        GF_ASSERT (snap_dict); -        GF_ASSERT (dict); - -        ret = dict_set_uint32 (snap_dict, "sub-cmd", -                               GF_SNAP_STATUS_TYPE_ITER); -        if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Could not save command " -                        "type in snap dict"); -                goto out; +cli_get_single_snap_status(dict_t *dict, char *keyprefix) +{ +    int ret = -1; +    char key[PATH_MAX] = ""; +    int i = 0; +    int volcount = 0; +    char *get_buffer = NULL; + +    GF_ASSERT(dict); +    GF_ASSERT(keyprefix); + +    ret = snprintf(key, sizeof(key), "%s.snapname", keyprefix); +    if (ret < 0) { +        goto out; +    } + +    ret = dict_get_str(dict, key, &get_buffer); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, "Unable to get snapname"); +        goto out; +    } +    cli_out("\nSnap Name : %s", get_buffer); + +    ret = snprintf(key, sizeof(key), "%s.uuid", keyprefix); +    if (ret < 0) { +        goto out; +    } + +    ret = dict_get_str(dict, key, &get_buffer); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, "Unable to get snap UUID"); +        goto out; +    } +    cli_out("Snap UUID : %s", get_buffer); + +    ret = snprintf(key, sizeof(key), "%s.volcount", keyprefix); +    if (ret < 0) { +        goto out; +    } + +    ret = dict_get_int32(dict, key, &volcount); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, "Unable to get volume count"); +        goto out; +    } + +    for (i = 0; i < volcount; i++) { +        ret = snprintf(key, sizeof(key), "%s.vol%d", keyprefix, i); +        if (ret < 0) { +            goto out;          } -        ret = snprintf (key, sizeof (key), "status.snap%d.snapname", index); -         if (ret < 0) { -                 goto out; -         } - -        ret = dict_get_str (dict, key, &buffer); +        ret = cli_get_snap_volume_status(dict, key);          if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Could not get snapname"); -                goto out; +            gf_log("cli", GF_LOG_ERROR, "Could not get snap volume status"); +            goto out;          } +    } +out: +    return ret; +} -        ret = dict_set_str (snap_dict, "snapname", buffer); -        if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Could not save snapname " -                        "in snap dict"); -                goto out; - -        } +int32_t +cli_populate_req_dict_for_delete(dict_t *snap_dict, dict_t *dict, size_t index) +{ +    int32_t ret = -1; +    char key[PATH_MAX] = ""; +    char *buffer = NULL; + +    GF_ASSERT(snap_dict); +    GF_ASSERT(dict); + +    ret = dict_set_int32(snap_dict, "sub-cmd", GF_SNAP_DELETE_TYPE_ITER); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, +               "Could not save command " +               "type in snap dictionary"); +        goto out; +    } + +    ret = snprintf(key, sizeof(key), "snapname%zu", index); +    if (ret < 0) { +        goto out; +    } + +    ret = dict_get_str(dict, key, &buffer); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, "Failed to get snapname"); +        goto out; +    } + +    ret = dict_set_dynstr_with_alloc(snap_dict, "snapname", buffer); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, "Failed to save snapname"); +        goto out; +    } + +    ret = dict_set_int32(snap_dict, "type", GF_SNAP_OPTION_TYPE_DELETE); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, "Failed to save command type"); +        goto out; +    } + +    ret = dict_set_dynstr_with_alloc(snap_dict, "cmd-str", "snapshot delete"); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, "Could not save command string as delete"); +        goto out; +    } +out: +    return ret; +} -        ret = dict_set_int32 (snap_dict, "type", GF_SNAP_OPTION_TYPE_STATUS); -        if (ret) { -                gf_log ("cli", GF_LOG_ERROR, -                        "Could not save command type"); -                goto out; -        } +int +cli_populate_req_dict_for_status(dict_t *snap_dict, dict_t *dict, int index) +{ +    int ret = -1; +    char key[PATH_MAX] = ""; +    char *buffer = NULL; + +    GF_ASSERT(snap_dict); +    GF_ASSERT(dict); + +    ret = dict_set_uint32(snap_dict, "sub-cmd", GF_SNAP_STATUS_TYPE_ITER); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, +               "Could not save command " +               "type in snap dict"); +        goto out; +    } + +    ret = snprintf(key, sizeof(key), "status.snap%d.snapname", index); +    if (ret < 0) { +        goto out; +    } + +    ret = dict_get_str(dict, key, &buffer); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, "Could not get snapname"); +        goto out; +    } + +    ret = dict_set_str(snap_dict, "snapname", buffer); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, +               "Could not save snapname " +               "in snap dict"); +        goto out; +    } + +    ret = dict_set_int32(snap_dict, "type", GF_SNAP_OPTION_TYPE_STATUS); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, "Could not save command type"); +        goto out; +    } + +    ret = dict_set_dynstr_with_alloc(snap_dict, "cmd-str", "snapshot status"); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, "Could not save command string as status"); +        goto out; +    } + +    ret = dict_set_int32(snap_dict, "hold_vol_locks", _gf_false); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, "Setting volume lock flag failed"); +        goto out; +    } + +out: +    return ret; +} -        ret = dict_set_dynstr_with_alloc (snap_dict, "cmd-str", -                                       "snapshot status"); +int +cli_snapshot_status(dict_t *dict, gf_cli_rsp *rsp, call_frame_t *frame) +{ +    char key[PATH_MAX] = ""; +    int ret = -1; +    int status_cmd = -1; +    cli_local_t *local = NULL; + +    GF_ASSERT(dict); +    GF_ASSERT(rsp); +    GF_ASSERT(frame); + +    local = ((call_frame_t *)frame)->local; +    if (!local) { +        gf_log("cli", GF_LOG_ERROR, "frame->local is NULL"); +        goto out; +    } + +    if (rsp->op_ret) { +        if (rsp->op_errstr) { +            ret = dict_set_dynstr_with_alloc(local->dict, "op_err_str", +                                             rsp->op_errstr); +            if (ret) { +                gf_log("cli", GF_LOG_ERROR, +                       "Failed to set " +                       "op_errstr in local dictionary"); +                goto out; +            } +        } +        ret = rsp->op_ret; +        goto out; +    } + +    ret = dict_get_int32(dict, "sub-cmd", &status_cmd); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, "Could not fetch status type"); +        goto out; +    } + +    if ((status_cmd != GF_SNAP_STATUS_TYPE_SNAP) && +        (status_cmd != GF_SNAP_STATUS_TYPE_ITER)) { +        dict_copy(dict, local->dict); +        goto out; +    } + +    ret = snprintf(key, sizeof(key), "status.snap0"); +    if (ret < 0) { +        goto out; +    } + +    if (global_state->mode & GLUSTER_MODE_XML) { +        ret = cli_xml_snapshot_status_single_snap(local, dict, key);          if (ret) { -                gf_log ("cli", GF_LOG_ERROR, -                        "Could not save command string as status"); -                goto out; +            gf_log("cli", GF_LOG_ERROR, +                   "Failed to create " +                   "xml output for snapshot status"); +            goto out;          } - -        ret = dict_set_int32 (snap_dict, "hold_vol_locks", _gf_false); +    } else { +        ret = cli_get_single_snap_status(dict, key);          if (ret) { -                gf_log ("cli", GF_LOG_ERROR, -                        "Setting volume lock flag failed"); -                goto out; +            gf_log("cli", GF_LOG_ERROR, +                   "Could not fetch " +                   "status of snap"); +            goto out;          } +    } +    ret = 0;  out: -        return ret; +    return ret;  }  int -cli_snapshot_status (dict_t *dict, gf_cli_rsp *rsp, -                             call_frame_t *frame) -{ -        char            key[PATH_MAX]   =       ""; -        int             ret             =       -1; -        int             status_cmd      =       -1; -        cli_local_t     *local          =       NULL; - -        GF_ASSERT (dict); -        GF_ASSERT (rsp); -        GF_ASSERT (frame); - -        local = ((call_frame_t *) frame) -> local; -        if (!local) { -                gf_log ("cli", GF_LOG_ERROR, "frame->local is NULL"); -                goto out; -        } - -        if (rsp->op_ret) { -                if (rsp->op_errstr) { -                        ret = dict_set_dynstr_with_alloc (local->dict, -                                                          "op_err_str", -                                                          rsp->op_errstr); -                        if (ret) { -                                gf_log ("cli", GF_LOG_ERROR, "Failed to set " -                                        "op_errstr in local dictionary"); -                                goto out; -                        } -                } -                ret = rsp->op_ret; -                goto out; -        } - -        ret = dict_get_int32 (dict, "sub-cmd", &status_cmd); -        if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Could not fetch status type"); +gf_cli_generate_snapshot_event(gf_cli_rsp *rsp, dict_t *dict, int32_t type, +                               char *snap_name, char *volname, char *snap_uuid, +                               char *clone_name) +{ +    int ret = -1; +    int config_command = 0; +    int32_t delete_cmd = -1; +    uint64_t hard_limit = 0; +    uint64_t soft_limit = 0; +    char *auto_delete = NULL; +    char *snap_activate = NULL; +    char msg[PATH_MAX] = { +        0, +    }; +    char option[512] = { +        0, +    }; + +    GF_VALIDATE_OR_GOTO("cli", dict, out); +    GF_VALIDATE_OR_GOTO("cli", rsp, out); + +    switch (type) { +        case GF_SNAP_OPTION_TYPE_CREATE: +            if (!snap_name) { +                gf_log("cli", GF_LOG_ERROR, "Failed to get snap name");                  goto out; -        } +            } -        if ((status_cmd != GF_SNAP_STATUS_TYPE_SNAP) && -            (status_cmd != GF_SNAP_STATUS_TYPE_ITER)) { -                dict_copy (dict, local->dict); +            if (!volname) { +                gf_log("cli", GF_LOG_ERROR, "Failed to get volume name");                  goto out; -        } +            } +            if (rsp->op_ret != 0) { +                gf_event(EVENT_SNAPSHOT_CREATE_FAILED, +                         "snapshot_name=%s;volume_name=%s;error=%s", snap_name, +                         volname, +                         rsp->op_errstr ? rsp->op_errstr +                                        : "Please check log file for details"); +                ret = 0; +                break; +            } -        ret = snprintf (key, sizeof (key), "status.snap0"); -        if (ret < 0) { +            if (!snap_uuid) { +                gf_log("cli", GF_LOG_ERROR, "Failed to get snap uuid");                  goto out; -        } +            } -        if (global_state->mode & GLUSTER_MODE_XML) { -                ret = cli_xml_snapshot_status_single_snap (local, dict, key); -                if (ret) { -                        gf_log ("cli", GF_LOG_ERROR, "Failed to create " -                                "xml output for snapshot status"); -                        goto out; -                } -        } else { -                ret = cli_get_single_snap_status (dict, key); -                if (ret) { -                        gf_log ("cli", GF_LOG_ERROR, "Could not fetch " -                                "status of snap"); -                        goto out; -                } -        } +            gf_event(EVENT_SNAPSHOT_CREATED, +                     "snapshot_name=%s;" +                     "volume_name=%s;snapshot_uuid=%s", +                     snap_name, volname, snap_uuid); -        ret = 0; -out: -        return ret; -} - -int -gf_cli_generate_snapshot_event (gf_cli_rsp *rsp, dict_t *dict, -                                int32_t type, char *snap_name, -                                char *volname, char *snap_uuid, -                                char *clone_name) -{ -        int         ret               = -1; -        int         config_command    = 0; -        int32_t     delete_cmd        = -1; -        uint64_t    hard_limit        = 0; -        uint64_t    soft_limit        = 0; -        char       *auto_delete       = NULL; -        char       *snap_activate     = NULL; -        char        msg[PATH_MAX]     = {0, }; -        char        option[512]       = {0, }; - -        GF_VALIDATE_OR_GOTO ("cli", dict, out); -        GF_VALIDATE_OR_GOTO ("cli", rsp, out); - -        switch (type) { -        case GF_SNAP_OPTION_TYPE_CREATE: -                if (!snap_name) { -                        gf_log ("cli", GF_LOG_ERROR, -                                "Failed to get snap name"); -                        goto out; -                } - -                if (!volname) { -                        gf_log ("cli", GF_LOG_ERROR, -                                "Failed to get volume name"); -                        goto out; -                } - -                if (rsp->op_ret != 0) { -                        gf_event (EVENT_SNAPSHOT_CREATE_FAILED, -                                  "snapshot_name=%s;volume_name=%s;error=%s", -                                  snap_name, volname, -                                  rsp->op_errstr ? rsp->op_errstr : -                                  "Please check log file for details"); -                        ret = 0; -                        break; -                } - -                if (!snap_uuid) { -                        gf_log ("cli", GF_LOG_ERROR, "Failed to get snap uuid"); -                        goto out; -                } +            ret = 0; +            break; -                gf_event (EVENT_SNAPSHOT_CREATED, "snapshot_name=%s;" -                          "volume_name=%s;snapshot_uuid=%s", snap_name, -                          volname, snap_uuid); +        case GF_SNAP_OPTION_TYPE_ACTIVATE: +            if (!snap_name) { +                gf_log("cli", GF_LOG_ERROR, "Failed to get snap name"); +                goto out; +            } +            if (rsp->op_ret != 0) { +                gf_event(EVENT_SNAPSHOT_ACTIVATE_FAILED, +                         "snapshot_name=%s;error=%s", snap_name, +                         rsp->op_errstr ? rsp->op_errstr +                                        : "Please check log file for details");                  ret = 0;                  break; +            } -        case GF_SNAP_OPTION_TYPE_ACTIVATE: -                if (!snap_name) { -                        gf_log ("cli", GF_LOG_ERROR, -                                "Failed to get snap name"); -                        goto out; -                } +            if (!snap_uuid) { +                gf_log("cli", GF_LOG_ERROR, "Failed to get snap uuid"); +                goto out; +            } -                if (rsp->op_ret != 0) { -                        gf_event (EVENT_SNAPSHOT_ACTIVATE_FAILED, -                                  "snapshot_name=%s;error=%s", snap_name, -                                  rsp->op_errstr ? rsp->op_errstr : -                                  "Please check log file for details"); -                        ret = 0; -                        break; -                } +            gf_event(EVENT_SNAPSHOT_ACTIVATED, +                     "snapshot_name=%s;" +                     "snapshot_uuid=%s", +                     snap_name, snap_uuid); -                if (!snap_uuid) { -                        gf_log ("cli", GF_LOG_ERROR, "Failed to get snap uuid"); -                        goto out; -                } +            ret = 0; +            break; -                gf_event (EVENT_SNAPSHOT_ACTIVATED, "snapshot_name=%s;" -                          "snapshot_uuid=%s", snap_name, snap_uuid); +        case GF_SNAP_OPTION_TYPE_DEACTIVATE: +            if (!snap_name) { +                gf_log("cli", GF_LOG_ERROR, "Failed to get snap name"); +                goto out; +            } +            if (rsp->op_ret != 0) { +                gf_event(EVENT_SNAPSHOT_DEACTIVATE_FAILED, +                         "snapshot_name=%s;error=%s", snap_name, +                         rsp->op_errstr ? rsp->op_errstr +                                        : "Please check log file for details");                  ret = 0;                  break; +            } -        case GF_SNAP_OPTION_TYPE_DEACTIVATE: -                if (!snap_name) { -                        gf_log ("cli", GF_LOG_ERROR, -                                "Failed to get snap name"); -                        goto out; -                } +            if (!snap_uuid) { +                gf_log("cli", GF_LOG_ERROR, "Failed to get snap uuid"); +                goto out; +            } -                if (rsp->op_ret != 0) { -                        gf_event (EVENT_SNAPSHOT_DEACTIVATE_FAILED, -                                  "snapshot_name=%s;error=%s", snap_name, -                                  rsp->op_errstr ? rsp->op_errstr : -                                  "Please check log file for details"); -                        ret = 0; -                        break; -                } +            gf_event(EVENT_SNAPSHOT_DEACTIVATED, +                     "snapshot_name=%s;" +                     "snapshot_uuid=%s", +                     snap_name, snap_uuid); -                if (!snap_uuid) { -                        gf_log ("cli", GF_LOG_ERROR, "Failed to get snap uuid"); -                        goto out; -                } +            ret = 0; +            break; -                gf_event (EVENT_SNAPSHOT_DEACTIVATED, "snapshot_name=%s;" -                          "snapshot_uuid=%s", snap_name, snap_uuid); +        case GF_SNAP_OPTION_TYPE_RESTORE: +            if (!snap_name) { +                gf_log("cli", GF_LOG_ERROR, "Failed to get snap name"); +                goto out; +            } +            if (rsp->op_ret != 0) { +                gf_event(EVENT_SNAPSHOT_RESTORE_FAILED, +                         "snapshot_name=%s;error=%s", snap_name, +                         rsp->op_errstr ? rsp->op_errstr +                                        : "Please check log file for details");                  ret = 0;                  break; +            } -        case GF_SNAP_OPTION_TYPE_RESTORE: -                if (!snap_name) { -                        gf_log ("cli", GF_LOG_ERROR, -                                "Failed to get snap name"); -                        goto out; -                } +            if (!snap_uuid) { +                gf_log("cli", GF_LOG_ERROR, "Failed to get snap uuid"); +                goto out; +            } -                if (rsp->op_ret != 0) { -                        gf_event (EVENT_SNAPSHOT_RESTORE_FAILED, -                                  "snapshot_name=%s;error=%s", snap_name, -                                  rsp->op_errstr ? rsp->op_errstr : -                                  "Please check log file for details"); -                        ret = 0; -                        break; -                } +            if (!volname) { +                gf_log("cli", GF_LOG_ERROR, "Failed to get volname"); +                goto out; +            } -                if (!snap_uuid) { -                        gf_log ("cli", GF_LOG_ERROR, "Failed to get snap uuid"); -                        goto out; -                } +            gf_event(EVENT_SNAPSHOT_RESTORED, +                     "snapshot_name=%s;" +                     "snapshot_uuid=%s;volume_name=%s", +                     snap_name, snap_uuid, volname); -                if (!volname) { -                        gf_log ("cli", GF_LOG_ERROR, "Failed to get volname"); -                        goto out; -                } +            ret = 0; +            break; -                gf_event (EVENT_SNAPSHOT_RESTORED, "snapshot_name=%s;" -                          "snapshot_uuid=%s;volume_name=%s", -                          snap_name, snap_uuid, volname); +        case GF_SNAP_OPTION_TYPE_DELETE: +            ret = dict_get_int32(dict, "sub-cmd", &delete_cmd); +            if (ret) { +                gf_log("cli", GF_LOG_ERROR, "Could not get sub-cmd"); +                goto out; +            } +            /* +             * Need not generate any event (success or failure) for delete * +             * all, as it will trigger individual delete for all snapshots * +             */ +            if (delete_cmd == GF_SNAP_DELETE_TYPE_ALL) {                  ret = 0;                  break; +            } -        case GF_SNAP_OPTION_TYPE_DELETE: -                ret = dict_get_int32 (dict, "sub-cmd", &delete_cmd); -                if (ret) { -                        gf_log ("cli", GF_LOG_ERROR, "Could not get sub-cmd"); -                        goto out; -                } +            if (!snap_name) { +                gf_log("cli", GF_LOG_ERROR, "Failed to get snap name"); +                goto out; +            } -                /* -                 * Need not generate any event (success or failure) for delete * -                 * all, as it will trigger individual delete for all snapshots * -                 */ -                if (delete_cmd == GF_SNAP_DELETE_TYPE_ALL) { -                        ret = 0; -                        break; -                } +            if (rsp->op_ret != 0) { +                gf_event(EVENT_SNAPSHOT_DELETE_FAILED, +                         "snapshot_name=%s;error=%s", snap_name, +                         rsp->op_errstr ? rsp->op_errstr +                                        : "Please check log file for details"); +                ret = 0; +                break; +            } -                if (!snap_name) { -                        gf_log ("cli", GF_LOG_ERROR, -                                "Failed to get snap name"); -                        goto out; -                } +            if (!snap_uuid) { +                gf_log("cli", GF_LOG_ERROR, "Failed to get snap uuid"); +                goto out; +            } -                if (rsp->op_ret != 0) { -                        gf_event (EVENT_SNAPSHOT_DELETE_FAILED, -                                  "snapshot_name=%s;error=%s", snap_name, -                                  rsp->op_errstr ? rsp->op_errstr : -                                  "Please check log file for details"); -                        ret = 0; -                        break; -                } +            gf_event(EVENT_SNAPSHOT_DELETED, +                     "snapshot_name=%s;" +                     "snapshot_uuid=%s", +                     snap_name, snap_uuid); -                if (!snap_uuid) { -                        gf_log ("cli", GF_LOG_ERROR, "Failed to get snap uuid"); -                        goto out; -                } +            ret = 0; +            break; -                gf_event (EVENT_SNAPSHOT_DELETED, "snapshot_name=%s;" -                          "snapshot_uuid=%s", snap_name, snap_uuid); +        case GF_SNAP_OPTION_TYPE_CLONE: +            if (!clone_name) { +                gf_log("cli", GF_LOG_ERROR, "Failed to get clone name"); +                goto out; +            } + +            if (!snap_name) { +                gf_log("cli", GF_LOG_ERROR, "Failed to get snapname name"); +                goto out; +            } +            if (rsp->op_ret != 0) { +                gf_event(EVENT_SNAPSHOT_CLONE_FAILED, +                         "snapshot_name=%s;clone_name=%s;" +                         "error=%s", +                         snap_name, clone_name, +                         rsp->op_errstr ? rsp->op_errstr +                                        : "Please check log file for details");                  ret = 0;                  break; +            } -        case GF_SNAP_OPTION_TYPE_CLONE: -                if (!clone_name) { -                        gf_log ("cli", GF_LOG_ERROR, -                                "Failed to get clone name"); -                        goto out; -                } +            if (!snap_uuid) { +                gf_log("cli", GF_LOG_ERROR, "Failed to get snap uuid"); +                goto out; +            } -                if (!snap_name) { -                        gf_log ("cli", GF_LOG_ERROR, -                                "Failed to get snapname name"); -                        goto out; -                } +            gf_event(EVENT_SNAPSHOT_CLONED, +                     "snapshot_name=%s;" +                     "clone_name=%s;clone_uuid=%s", +                     snap_name, clone_name, snap_uuid); -                if (rsp->op_ret != 0) { -                        gf_event (EVENT_SNAPSHOT_CLONE_FAILED, -                                  "snapshot_name=%s;clone_name=%s;" -                                  "error=%s", snap_name, clone_name, -                                  rsp->op_errstr ? rsp->op_errstr : -                                  "Please check log file for details"); -                        ret = 0; -                        break; -                } +            ret = 0; +            break; -                if (!snap_uuid) { -                        gf_log ("cli", GF_LOG_ERROR, "Failed to get snap uuid"); -                        goto out; -                } +        case GF_SNAP_OPTION_TYPE_CONFIG: +            if (rsp->op_ret != 0) { +                gf_event(EVENT_SNAPSHOT_CONFIG_UPDATE_FAILED, "error=%s", +                         rsp->op_errstr ? rsp->op_errstr +                                        : "Please check log file for details"); +                ret = 0; +                break; +            } -                gf_event (EVENT_SNAPSHOT_CLONED, "snapshot_name=%s;" -                          "clone_name=%s;clone_uuid=%s", -                          snap_name, clone_name, snap_uuid); +            ret = dict_get_int32(dict, "config-command", &config_command); +            if (ret) { +                gf_log("cli", GF_LOG_ERROR, "Could not fetch config type"); +                goto out; +            } +            if (config_command == GF_SNAP_CONFIG_DISPLAY) {                  ret = 0;                  break; +            } -        case GF_SNAP_OPTION_TYPE_CONFIG: -                if (rsp->op_ret != 0) { -                        gf_event (EVENT_SNAPSHOT_CONFIG_UPDATE_FAILED, -                                  "error=%s", -                                  rsp->op_errstr ? rsp->op_errstr : -                                  "Please check log file for details"); -                        ret = 0; -                        break; -                } +            /* These are optional parameters therefore ignore the error */ +            ret = dict_get_uint64(dict, "snap-max-hard-limit", &hard_limit); +            ret = dict_get_uint64(dict, "snap-max-soft-limit", &soft_limit); +            ret = dict_get_str(dict, "auto-delete", &auto_delete); +            ret = dict_get_str(dict, "snap-activate-on-create", &snap_activate); -                ret = dict_get_int32 (dict, "config-command", &config_command); -                if (ret) { -                        gf_log ("cli", GF_LOG_ERROR, -                                "Could not fetch config type"); -                        goto out; -                } - -                if (config_command == GF_SNAP_CONFIG_DISPLAY) { -                        ret = 0; -                        break; -                } +            if (!hard_limit && !soft_limit && !auto_delete && !snap_activate) { +                ret = -1; +                gf_log("cli", GF_LOG_ERROR, +                       "At least one option from " +                       "snap-max-hard-limit, snap-max-soft-limit, " +                       "auto-delete and snap-activate-on-create " +                       "should be set"); +                goto out; +            } -                /* These are optional parameters therefore ignore the error */ -                ret = dict_get_uint64 (dict, "snap-max-hard-limit", -                                       &hard_limit); -                ret = dict_get_uint64 (dict, "snap-max-soft-limit", -                                       &soft_limit); -                ret = dict_get_str (dict, "auto-delete", -                                    &auto_delete); -                ret = dict_get_str (dict, "snap-activate-on-create", -                                    &snap_activate); - -                if (!hard_limit && !soft_limit && -                    !auto_delete && !snap_activate) { -                        ret = -1; -                        gf_log ("cli", GF_LOG_ERROR, "At least one option from " -                                "snap-max-hard-limit, snap-max-soft-limit, " -                                "auto-delete and snap-activate-on-create " -                                "should be set"); -                        goto out; -                } +            volname = NULL; +            ret = dict_get_str(dict, "volname", &volname); -                volname = NULL; -                ret = dict_get_str (dict, "volname", &volname); - -                if (hard_limit || soft_limit) { -                        snprintf (option, sizeof(option), "%s=%"PRIu64, -                                  hard_limit ? "hard_limit" : "soft_limit", -                                  hard_limit ? hard_limit:soft_limit); -                } else if (auto_delete || snap_activate) { -                        snprintf (option, sizeof(option), "%s=%s", -                                  auto_delete ? "auto-delete" : "snap-activate", -                                  auto_delete ? auto_delete:snap_activate); -                } +            if (hard_limit || soft_limit) { +                snprintf(option, sizeof(option), "%s=%" PRIu64, +                         hard_limit ? "hard_limit" : "soft_limit", +                         hard_limit ? hard_limit : soft_limit); +            } else if (auto_delete || snap_activate) { +                snprintf(option, sizeof(option), "%s=%s", +                         auto_delete ? "auto-delete" : "snap-activate", +                         auto_delete ? auto_delete : snap_activate); +            } -                snprintf (msg, sizeof(msg), "config_type=%s;%s", -                          volname?"volume_config":"system_config", option); +            snprintf(msg, sizeof(msg), "config_type=%s;%s", +                     volname ? "volume_config" : "system_config", option); -                gf_event (EVENT_SNAPSHOT_CONFIG_UPDATED, "%s", msg); +            gf_event(EVENT_SNAPSHOT_CONFIG_UPDATED, "%s", msg); -                ret = 0; -                break; +            ret = 0; +            break;          default: -                gf_log ("cli", GF_LOG_WARNING, -                        "Cannot generate event for unknown type."); -                ret = 0; -                goto out; -        } +            gf_log("cli", GF_LOG_WARNING, +                   "Cannot generate event for unknown type."); +            ret = 0; +            goto out; +    }  out: -        return ret; +    return ret;  }  /* @@ -10766,1415 +10684,1463 @@ out:   * repeating the same code again and again.               *   */  int -gf_cli_snapshot_get_data_from_dict (dict_t *dict, char **snap_name, -                                    char **volname, char **snap_uuid, -                                    int8_t *soft_limit_flag, -                                    char **clone_name) +gf_cli_snapshot_get_data_from_dict(dict_t *dict, char **snap_name, +                                   char **volname, char **snap_uuid, +                                   int8_t *soft_limit_flag, char **clone_name)  { -        int     ret = -1; +    int ret = -1; -        GF_VALIDATE_OR_GOTO ("cli", dict, out); +    GF_VALIDATE_OR_GOTO("cli", dict, out); -        if (snap_name) { -                ret = dict_get_str (dict, "snapname", snap_name); -                if (ret) { -                        gf_log ("cli", GF_LOG_DEBUG, -                                "failed to get snapname from dict"); -                } +    if (snap_name) { +        ret = dict_get_str(dict, "snapname", snap_name); +        if (ret) { +            gf_log("cli", GF_LOG_DEBUG, "failed to get snapname from dict");          } +    } -        if (volname) { -                ret = dict_get_str (dict, "volname1", volname); -                if (ret) { -                        gf_log ("cli", GF_LOG_DEBUG, -                                "failed to get volname1 from dict"); -                } +    if (volname) { +        ret = dict_get_str(dict, "volname1", volname); +        if (ret) { +            gf_log("cli", GF_LOG_DEBUG, "failed to get volname1 from dict");          } +    } -        if (snap_uuid) { -                ret = dict_get_str (dict, "snapuuid", snap_uuid); -                if (ret) { -                        gf_log ("cli", GF_LOG_DEBUG, -                                "failed to get snapuuid from dict"); -                } +    if (snap_uuid) { +        ret = dict_get_str(dict, "snapuuid", snap_uuid); +        if (ret) { +            gf_log("cli", GF_LOG_DEBUG, "failed to get snapuuid from dict");          } +    } -        if (soft_limit_flag) { -                ret = dict_get_int8 (dict, "soft-limit-reach", -                                     soft_limit_flag); -                if (ret) { -                        gf_log ("cli", GF_LOG_DEBUG, -                                "failed to get soft-limit-reach from dict"); -                } +    if (soft_limit_flag) { +        ret = dict_get_int8(dict, "soft-limit-reach", soft_limit_flag); +        if (ret) { +            gf_log("cli", GF_LOG_DEBUG, +                   "failed to get soft-limit-reach from dict");          } +    } -        if (clone_name) { -                ret = dict_get_str (dict, "clonename", clone_name); -                if (ret) { -                        gf_log ("cli", GF_LOG_DEBUG, -                                "failed to get clonename from dict"); -                } +    if (clone_name) { +        ret = dict_get_str(dict, "clonename", clone_name); +        if (ret) { +            gf_log("cli", GF_LOG_DEBUG, "failed to get clonename from dict");          } +    } -        ret = 0; +    ret = 0;  out: -        return ret; +    return ret;  }  int -gf_cli_snapshot_cbk (struct rpc_req *req, struct iovec *iov, -                     int count, void *myframe) -{ -        int                   ret                      = -1; -        gf_cli_rsp            rsp                      = {0, }; -        dict_t               *dict                     = NULL; -        char                 *snap_name                = NULL; -        char                 *clone_name               = NULL; -        int32_t               type                     =  0; -        call_frame_t         *frame                    = NULL; -        gf_boolean_t         snap_driven               = _gf_false; -        int8_t               soft_limit_flag           = -1; -        char                 *volname                  = NULL; -        char                 *snap_uuid                = NULL; - -        GF_ASSERT (myframe); - -        if (req->rpc_status == -1) { -                goto out; -        } - -        frame = myframe; - -        ret = xdr_to_generic (*iov, &rsp, (xdrproc_t)xdr_gf_cli_rsp); -        if (ret < 0) { -                gf_log (frame->this->name, GF_LOG_ERROR, -                        "Failed to decode xdr response"); -                goto out; -        } +gf_cli_snapshot_cbk(struct rpc_req *req, struct iovec *iov, int count, +                    void *myframe) +{ +    int ret = -1; +    gf_cli_rsp rsp = { +        0, +    }; +    dict_t *dict = NULL; +    char *snap_name = NULL; +    char *clone_name = NULL; +    int32_t type = 0; +    call_frame_t *frame = NULL; +    gf_boolean_t snap_driven = _gf_false; +    int8_t soft_limit_flag = -1; +    char *volname = NULL; +    char *snap_uuid = NULL; + +    GF_ASSERT(myframe); + +    if (req->rpc_status == -1) { +        goto out; +    } + +    frame = myframe; + +    ret = xdr_to_generic(*iov, &rsp, (xdrproc_t)xdr_gf_cli_rsp); +    if (ret < 0) { +        gf_log(frame->this->name, GF_LOG_ERROR, +               "Failed to decode xdr response"); +        goto out; +    } + +    dict = dict_new(); + +    if (!dict) { +        ret = -1; +        goto out; +    } + +    ret = dict_unserialize(rsp.dict.dict_val, rsp.dict.dict_len, &dict); + +    if (ret) +        goto out; + +    ret = dict_get_int32(dict, "type", &type); +    if (ret) { +        gf_log(frame->this->name, GF_LOG_ERROR, "failed to get type"); +        goto out; +    } + +    ret = gf_cli_snapshot_get_data_from_dict( +        dict, &snap_name, &volname, &snap_uuid, &soft_limit_flag, &clone_name); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, "Failed to fetch data from dict."); +        goto out; +    } -        dict = dict_new (); - -        if (!dict) { -                ret = -1; -                goto out; -        } - -        ret = dict_unserialize (rsp.dict.dict_val, rsp.dict.dict_len, &dict); - -        if (ret) -                goto out; +#if (USE_EVENTS) +    ret = gf_cli_generate_snapshot_event(&rsp, dict, type, snap_name, volname, +                                         snap_uuid, clone_name); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, "Failed to generate snapshot event"); +        goto out; +    } +#endif -        ret = dict_get_int32 (dict, "type", &type); +    /* Snapshot status and delete command is handled separately */ +    if (global_state->mode & GLUSTER_MODE_XML && +        GF_SNAP_OPTION_TYPE_STATUS != type && +        GF_SNAP_OPTION_TYPE_DELETE != type) { +        ret = cli_xml_output_snapshot(type, dict, rsp.op_ret, rsp.op_errno, +                                      rsp.op_errstr);          if (ret) { -                gf_log (frame->this->name, GF_LOG_ERROR, "failed to get type"); -                goto out; +            gf_log("cli", GF_LOG_ERROR, "Error outputting to xml");          } -        ret = gf_cli_snapshot_get_data_from_dict (dict, &snap_name, &volname, -                                                  &snap_uuid, &soft_limit_flag, -                                                  &clone_name); -        if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Failed to fetch data from dict."); -                goto out; -        } +        goto out; +    } -#if (USE_EVENTS) -        ret = gf_cli_generate_snapshot_event (&rsp, dict, type, snap_name, -                                              volname, snap_uuid, clone_name); -        if (ret) { -                gf_log ("cli", GF_LOG_ERROR, -                        "Failed to generate snapshot event"); +    switch (type) { +        case GF_SNAP_OPTION_TYPE_CREATE: +            if (rsp.op_ret) { +                cli_err("snapshot create: failed: %s", +                        rsp.op_errstr ? rsp.op_errstr +                                      : "Please check log file for details"); +                ret = rsp.op_ret;                  goto out; -        } -#endif - -        /* Snapshot status and delete command is handled separately */ -        if (global_state->mode & GLUSTER_MODE_XML && -            GF_SNAP_OPTION_TYPE_STATUS != type && -            GF_SNAP_OPTION_TYPE_DELETE != type) { -                ret = cli_xml_output_snapshot (type, dict, rsp.op_ret, -                                               rsp.op_errno, rsp.op_errstr); -                if (ret) { -                        gf_log ("cli", GF_LOG_ERROR, "Error outputting to xml"); -                } +            } +            if (!snap_name) { +                gf_log("cli", GF_LOG_ERROR, "Failed to get snap name");                  goto out; -        } +            } -        switch (type) { -        case GF_SNAP_OPTION_TYPE_CREATE: -                if (rsp.op_ret) { -                        cli_err("snapshot create: failed: %s", -                                 rsp.op_errstr ? rsp.op_errstr : -                                 "Please check log file for details"); -                                 ret = rsp.op_ret; -                                 goto out; -                } - -                if (!snap_name) { -                        gf_log ("cli", GF_LOG_ERROR, -                                "Failed to get snap name"); -                        goto out; -                } - -                if (!volname) { -                        gf_log ("cli", GF_LOG_ERROR, -                                "Failed to get volume name"); -                        goto out; -                } +            if (!volname) { +                gf_log("cli", GF_LOG_ERROR, "Failed to get volume name"); +                goto out; +            } -                cli_out ("snapshot create: success: Snap %s created " -                                        "successfully", snap_name); +            cli_out( +                "snapshot create: success: Snap %s created " +                "successfully", +                snap_name); -                if (soft_limit_flag == 1) { -                        cli_out ("Warning: Soft-limit of volume (%s) is " -                                "reached. Snapshot creation is not possible " -                                "once hard-limit is reached.", volname); -                } -                ret = 0; -                break; +            if (soft_limit_flag == 1) { +                cli_out( +                    "Warning: Soft-limit of volume (%s) is " +                    "reached. Snapshot creation is not possible " +                    "once hard-limit is reached.", +                    volname); +            } +            ret = 0; +            break;          case GF_SNAP_OPTION_TYPE_CLONE: -                if (rsp.op_ret) { -                        cli_err("snapshot clone: failed: %s", -                                 rsp.op_errstr ? rsp.op_errstr : -                                 "Please check log file for details"); -                                 ret = rsp.op_ret; -                                 goto out; -                } +            if (rsp.op_ret) { +                cli_err("snapshot clone: failed: %s", +                        rsp.op_errstr ? rsp.op_errstr +                                      : "Please check log file for details"); +                ret = rsp.op_ret; +                goto out; +            } -                if (!clone_name) { -                        gf_log ("cli", GF_LOG_ERROR, -                                "Failed to get clone name"); -                        goto out; -                } +            if (!clone_name) { +                gf_log("cli", GF_LOG_ERROR, "Failed to get clone name"); +                goto out; +            } -                if (!snap_name) { -                        gf_log ("cli", GF_LOG_ERROR, -                                "Failed to get snapname name"); -                        goto out; -                } +            if (!snap_name) { +                gf_log("cli", GF_LOG_ERROR, "Failed to get snapname name"); +                goto out; +            } -                cli_out ("snapshot clone: success: Clone %s created " -                                        "successfully", clone_name); +            cli_out( +                "snapshot clone: success: Clone %s created " +                "successfully", +                clone_name); -                ret = 0; -                break; +            ret = 0; +            break;          case GF_SNAP_OPTION_TYPE_RESTORE: -                if (rsp.op_ret) { -                        cli_err("snapshot restore: failed: %s", -                                 rsp.op_errstr ? rsp.op_errstr : -                                 "Please check log file for details"); -                                 ret = rsp.op_ret; -                                 goto out; -                } +            if (rsp.op_ret) { +                cli_err("snapshot restore: failed: %s", +                        rsp.op_errstr ? rsp.op_errstr +                                      : "Please check log file for details"); +                ret = rsp.op_ret; +                goto out; +            } -                if (!snap_name) { -                        gf_log ("cli", GF_LOG_ERROR, -                                "Failed to get snap name"); -                        goto out; -                } +            if (!snap_name) { +                gf_log("cli", GF_LOG_ERROR, "Failed to get snap name"); +                goto out; +            } -                cli_out ("Snapshot restore: %s: Snap restored " -                                 "successfully", snap_name); +            cli_out( +                "Snapshot restore: %s: Snap restored " +                "successfully", +                snap_name); -                ret = 0; -                break; +            ret = 0; +            break;          case GF_SNAP_OPTION_TYPE_ACTIVATE: -                if (rsp.op_ret) { -                        cli_err("snapshot activate: failed: %s", -                                 rsp.op_errstr ? rsp.op_errstr : -                                 "Please check log file for details"); -                                 ret = rsp.op_ret; -                                 goto out; -                } +            if (rsp.op_ret) { +                cli_err("snapshot activate: failed: %s", +                        rsp.op_errstr ? rsp.op_errstr +                                      : "Please check log file for details"); +                ret = rsp.op_ret; +                goto out; +            } -                if (!snap_name) { -                        gf_log ("cli", GF_LOG_ERROR, -                                "Failed to get snap name"); -                        goto out; -                } +            if (!snap_name) { +                gf_log("cli", GF_LOG_ERROR, "Failed to get snap name"); +                goto out; +            } -                cli_out ("Snapshot activate: %s: Snap activated " -                                 "successfully", snap_name); +            cli_out( +                "Snapshot activate: %s: Snap activated " +                "successfully", +                snap_name); -                ret = 0; -                break; +            ret = 0; +            break;          case GF_SNAP_OPTION_TYPE_DEACTIVATE: -                if (rsp.op_ret) { -                        cli_err("snapshot deactivate: failed: %s", -                                 rsp.op_errstr ? rsp.op_errstr : -                                 "Please check log file for details"); -                                 ret = rsp.op_ret; -                                 goto out; -                } +            if (rsp.op_ret) { +                cli_err("snapshot deactivate: failed: %s", +                        rsp.op_errstr ? rsp.op_errstr +                                      : "Please check log file for details"); +                ret = rsp.op_ret; +                goto out; +            } -                if (!snap_name) { -                        gf_log ("cli", GF_LOG_ERROR, -                                "Failed to get snap name"); -                        goto out; -                } +            if (!snap_name) { +                gf_log("cli", GF_LOG_ERROR, "Failed to get snap name"); +                goto out; +            } -                cli_out ("Snapshot deactivate: %s: Snap deactivated " -                                 "successfully", snap_name); +            cli_out( +                "Snapshot deactivate: %s: Snap deactivated " +                "successfully", +                snap_name); -                ret = 0; -                break; +            ret = 0; +            break;          case GF_SNAP_OPTION_TYPE_INFO: -                if (rsp.op_ret) { -                        cli_err ("Snapshot info : failed: %s", -                                  rsp.op_errstr ? rsp.op_errstr : -                                  "Please check log file for details"); -                        ret = rsp.op_ret; -                        goto out; -                } +            if (rsp.op_ret) { +                cli_err("Snapshot info : failed: %s", +                        rsp.op_errstr ? rsp.op_errstr +                                      : "Please check log file for details"); +                ret = rsp.op_ret; +                goto out; +            } -                snap_driven = dict_get_str_boolean (dict, "snap-driven", -                                                    _gf_false); -                if (snap_driven == _gf_true) { -                        ret = cli_call_snapshot_info  (dict, snap_driven); -                        if (ret) { -                                gf_log ("cli", GF_LOG_ERROR, -                                        "Snapshot info failed"); -                                goto out; -                        } -                } else if (snap_driven == _gf_false) { -                        ret = cli_get_snaps_in_volume (dict); -                        if (ret) { -                                gf_log ("cli", GF_LOG_ERROR, -                                        "Snapshot info failed"); -                                goto out; -                        } +            snap_driven = dict_get_str_boolean(dict, "snap-driven", _gf_false); +            if (snap_driven == _gf_true) { +                ret = cli_call_snapshot_info(dict, snap_driven); +                if (ret) { +                    gf_log("cli", GF_LOG_ERROR, "Snapshot info failed"); +                    goto out;                  } -                break; - -        case GF_SNAP_OPTION_TYPE_CONFIG: -                ret = cli_snapshot_config_display (dict, &rsp); +            } else if (snap_driven == _gf_false) { +                ret = cli_get_snaps_in_volume(dict);                  if (ret) { -                        gf_log ("cli", GF_LOG_ERROR, "Failed to display " -                                "snapshot config output."); -                        goto out; +                    gf_log("cli", GF_LOG_ERROR, "Snapshot info failed"); +                    goto out;                  } -                break; +            } +            break; + +        case GF_SNAP_OPTION_TYPE_CONFIG: +            ret = cli_snapshot_config_display(dict, &rsp); +            if (ret) { +                gf_log("cli", GF_LOG_ERROR, +                       "Failed to display " +                       "snapshot config output."); +                goto out; +            } +            break;          case GF_SNAP_OPTION_TYPE_LIST: -                if (rsp.op_ret) { -                        cli_err ("Snapshot list : failed: %s", -                                 rsp.op_errstr ? rsp.op_errstr : -                                "Please check log file for details"); -                        ret = rsp.op_ret; -                        goto out; -                } +            if (rsp.op_ret) { +                cli_err("Snapshot list : failed: %s", +                        rsp.op_errstr ? rsp.op_errstr +                                      : "Please check log file for details"); +                ret = rsp.op_ret; +                goto out; +            } -                ret = cli_snapshot_list (dict); -                if (ret) { -                        gf_log ("cli", GF_LOG_ERROR, "Failed to display " -                                "snapshot list"); -                        goto out; -                } -                break; +            ret = cli_snapshot_list(dict); +            if (ret) { +                gf_log("cli", GF_LOG_ERROR, +                       "Failed to display " +                       "snapshot list"); +                goto out; +            } +            break;          case GF_SNAP_OPTION_TYPE_DELETE: -                ret = cli_snapshot_remove_reply (&rsp, dict, frame); -                if (ret) { -                        gf_log ("cli", GF_LOG_ERROR, -                                "Failed to delete snap"); -                        goto out; -                } -                break; +            ret = cli_snapshot_remove_reply(&rsp, dict, frame); +            if (ret) { +                gf_log("cli", GF_LOG_ERROR, "Failed to delete snap"); +                goto out; +            } +            break;          case GF_SNAP_OPTION_TYPE_STATUS: -                ret = cli_snapshot_status (dict, &rsp, frame); -                if (ret) { -                        gf_log ("cli", GF_LOG_ERROR, "Failed to display " -                                "snapshot status output."); -                        goto out; -                } -                break; +            ret = cli_snapshot_status(dict, &rsp, frame); +            if (ret) { +                gf_log("cli", GF_LOG_ERROR, +                       "Failed to display " +                       "snapshot status output."); +                goto out; +            } +            break;          default: -                cli_err ("Unknown command executed"); -                ret = -1; -                goto out; -        } +            cli_err("Unknown command executed"); +            ret = -1; +            goto out; +    }  out: -        if (dict) -                dict_unref (dict); -        cli_cmd_broadcast_response (ret); +    if (dict) +        dict_unref(dict); +    cli_cmd_broadcast_response(ret); -        free (rsp.dict.dict_val); -        free (rsp.op_errstr); +    free(rsp.dict.dict_val); +    free(rsp.op_errstr); -        return ret; +    return ret;  }  int32_t -gf_cli_snapshot_for_delete (call_frame_t *frame, xlator_t *this, -                            void *data) -{ -        gf_cli_req      req                     = {{0,}}; -        int32_t         ret                     = -1; -        int32_t         cmd                     = -1; -        cli_local_t     *local                  = NULL; -        dict_t          *snap_dict              = NULL; -        int32_t         snapcount               = 0; -        int             i                       = 0; -        char            question[PATH_MAX]      = ""; -        char            *volname                = NULL; -        gf_answer_t     answer                  = GF_ANSWER_NO; - -        GF_VALIDATE_OR_GOTO ("cli", frame,  out); -        GF_VALIDATE_OR_GOTO ("cli", frame->local, out); -        GF_VALIDATE_OR_GOTO ("cli", this, out); -        GF_VALIDATE_OR_GOTO ("cli", data, out); - -        local = frame->local; - -        ret = dict_get_int32 (local->dict, "sub-cmd", &cmd); -        if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Failed to get " -                        "sub-cmd"); -                goto out; -        } - -        /* No need multiple RPCs for individual snapshot delete*/ -        if (cmd == GF_SNAP_DELETE_TYPE_SNAP) { -                ret = 0; -                goto out; -        } - -        ret = dict_get_int32 (local->dict, "snapcount", -                              &snapcount); +gf_cli_snapshot_for_delete(call_frame_t *frame, xlator_t *this, void *data) +{ +    gf_cli_req req = {{ +        0, +    }}; +    int32_t ret = -1; +    int32_t cmd = -1; +    cli_local_t *local = NULL; +    dict_t *snap_dict = NULL; +    int32_t snapcount = 0; +    int i = 0; +    char question[PATH_MAX] = ""; +    char *volname = NULL; +    gf_answer_t answer = GF_ANSWER_NO; + +    GF_VALIDATE_OR_GOTO("cli", frame, out); +    GF_VALIDATE_OR_GOTO("cli", frame->local, out); +    GF_VALIDATE_OR_GOTO("cli", this, out); +    GF_VALIDATE_OR_GOTO("cli", data, out); + +    local = frame->local; + +    ret = dict_get_int32(local->dict, "sub-cmd", &cmd); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, +               "Failed to get " +               "sub-cmd"); +        goto out; +    } + +    /* No need multiple RPCs for individual snapshot delete*/ +    if (cmd == GF_SNAP_DELETE_TYPE_SNAP) { +        ret = 0; +        goto out; +    } + +    ret = dict_get_int32(local->dict, "snapcount", &snapcount); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, +               "Could not get " +               "snapcount"); +        goto out; +    } + +    if (global_state->mode & GLUSTER_MODE_XML) { +#ifdef HAVE_LIB_XML +        ret = xmlTextWriterWriteFormatElement( +            local->writer, (xmlChar *)"snapCount", "%d", snapcount);          if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Could not get " -                        "snapcount"); -                goto out; +            gf_log("cli", GF_LOG_ERROR, +                   "Failed to write " +                   "xml element \"snapCount\""); +            goto out;          } - -        if (global_state->mode & GLUSTER_MODE_XML) { -#ifdef HAVE_LIB_XML -                ret = xmlTextWriterWriteFormatElement (local->writer, -                                                (xmlChar *)"snapCount", -                                                "%d", snapcount); -                if (ret) { -                        gf_log ("cli", GF_LOG_ERROR, "Failed to write " -                                "xml element \"snapCount\""); -                        goto out; -                }  #endif /* HAVE_LIB_XML */ -        } else if (snapcount == 0) { -                cli_out ("No snapshots present"); -                goto out; +    } else if (snapcount == 0) { +        cli_out("No snapshots present"); +        goto out; +    } + +    if (cmd == GF_SNAP_DELETE_TYPE_ALL) { +        snprintf(question, sizeof(question), +                 "System contains %d " +                 "snapshot(s).\nDo you still " +                 "want to continue and delete them? ", +                 snapcount); +    } else { +        ret = dict_get_str(local->dict, "volname", &volname); +        if (ret) { +            gf_log("cli", GF_LOG_ERROR, +                   "Failed to fetch " +                   "volname from local dictionary"); +            goto out;          } -        if (cmd == GF_SNAP_DELETE_TYPE_ALL) { -                snprintf (question, sizeof (question), "System contains %d " -                          "snapshot(s).\nDo you still " -                          "want to continue and delete them? ", -                           snapcount); -        } else { -                ret = dict_get_str (local->dict, "volname", &volname); -                if (ret) { -                        gf_log ("cli", GF_LOG_ERROR, "Failed to fetch " -                                "volname from local dictionary"); -                        goto out; -                } +        snprintf(question, sizeof(question), +                 "Volume (%s) contains " +                 "%d snapshot(s).\nDo you still want to " +                 "continue and delete them? ", +                 volname, snapcount); +    } -                snprintf (question, sizeof (question), "Volume (%s) contains " -                          "%d snapshot(s).\nDo you still want to " -                           "continue and delete them? ", volname, -                           snapcount); -        } - -        answer = cli_cmd_get_confirmation (global_state, question); -        if (GF_ANSWER_NO == answer) { -                ret = 0; -                gf_log ("cli", GF_LOG_DEBUG, "User cancelled " -                        "snapshot delete operation for snap delete"); -                goto out; -        } +    answer = cli_cmd_get_confirmation(global_state, question); +    if (GF_ANSWER_NO == answer) { +        ret = 0; +        gf_log("cli", GF_LOG_DEBUG, +               "User cancelled " +               "snapshot delete operation for snap delete"); +        goto out; +    } -        for (i = 1 ; i <= snapcount ; i++) { -                ret = -1; +    for (i = 1; i <= snapcount; i++) { +        ret = -1; -                snap_dict = dict_new(); -                if (!snap_dict) -                        goto out; +        snap_dict = dict_new(); +        if (!snap_dict) +            goto out; -                ret = cli_populate_req_dict_for_delete (snap_dict, -                                                       local->dict, i); -                if (ret) { -                        gf_log ("cli", GF_LOG_ERROR, "Could not " -                                "populate snap request dictionary"); -                        goto out; -                } +        ret = cli_populate_req_dict_for_delete(snap_dict, local->dict, i); +        if (ret) { +            gf_log("cli", GF_LOG_ERROR, +                   "Could not " +                   "populate snap request dictionary"); +            goto out; +        } -                ret = cli_to_glusterd (&req, frame, -                                gf_cli_snapshot_cbk, -                                (xdrproc_t) xdr_gf_cli_req, snap_dict, -                                GLUSTER_CLI_SNAP, this, cli_rpc_prog, -                                NULL); -                if (ret) { -                        /* Fail the operation if deleting one of the -                         * snapshots is failed -                         */ -                        gf_log ("cli", GF_LOG_ERROR, "cli_to_glusterd " -                                "for snapshot delete failed"); -                        goto out; -                } -                dict_unref (snap_dict); -                snap_dict = NULL; +        ret = cli_to_glusterd(&req, frame, gf_cli_snapshot_cbk, +                              (xdrproc_t)xdr_gf_cli_req, snap_dict, +                              GLUSTER_CLI_SNAP, this, cli_rpc_prog, NULL); +        if (ret) { +            /* Fail the operation if deleting one of the +             * snapshots is failed +             */ +            gf_log("cli", GF_LOG_ERROR, +                   "cli_to_glusterd " +                   "for snapshot delete failed"); +            goto out;          } +        dict_unref(snap_dict); +        snap_dict = NULL; +    }  out: -        if (snap_dict) -                dict_unref (snap_dict); +    if (snap_dict) +        dict_unref(snap_dict); -        return ret; +    return ret;  }  int32_t -gf_cli_snapshot_for_status (call_frame_t *frame, xlator_t *this, -                            void *data) -{ - -        gf_cli_req        req           = {{0,}}; -        int               ret           = -1; -        int32_t           cmd           = -1; -        cli_local_t      *local         = NULL; -        dict_t           *snap_dict     = NULL; -        int              snapcount      =  0; -        int              i              =  0; +gf_cli_snapshot_for_status(call_frame_t *frame, xlator_t *this, void *data) +{ +    gf_cli_req req = {{ +        0, +    }}; +    int ret = -1; +    int32_t cmd = -1; +    cli_local_t *local = NULL; +    dict_t *snap_dict = NULL; +    int snapcount = 0; +    int i = 0; + +    GF_VALIDATE_OR_GOTO("cli", frame, out); +    GF_VALIDATE_OR_GOTO("cli", frame->local, out); +    GF_VALIDATE_OR_GOTO("cli", this, out); +    GF_VALIDATE_OR_GOTO("cli", data, out); + +    local = frame->local; + +    ret = dict_get_int32(local->dict, "sub-cmd", &cmd); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, "Failed to get sub-cmd"); +        goto out; +    } + +    /* Snapshot status of single snap (i.e. GF_SNAP_STATUS_TYPE_SNAP) +     * is already handled. Therefore we can return from here. +     * If want to get status of all snaps in the system or volume then +     * we should get them one by one.*/ +    if ((cmd == GF_SNAP_STATUS_TYPE_SNAP) || +        (cmd == GF_SNAP_STATUS_TYPE_ITER)) { +        ret = 0; +        goto out; +    } -        GF_VALIDATE_OR_GOTO ("cli", frame, out); -        GF_VALIDATE_OR_GOTO ("cli", frame->local, out); -        GF_VALIDATE_OR_GOTO ("cli", this, out); -        GF_VALIDATE_OR_GOTO ("cli", data, out); +    ret = dict_get_int32(local->dict, "status.snapcount", &snapcount); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, "Could not get snapcount"); +        goto out; +    } -        local = frame->local; +    if (snapcount == 0 && !(global_state->mode & GLUSTER_MODE_XML)) { +        cli_out("No snapshots present"); +    } -        ret = dict_get_int32 (local->dict, "sub-cmd", &cmd); -        if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Failed to get sub-cmd"); -                goto out; -        } +    for (i = 0; i < snapcount; i++) { +        ret = -1; -        /* Snapshot status of single snap (i.e. GF_SNAP_STATUS_TYPE_SNAP) -         * is already handled. Therefore we can return from here. -         * If want to get status of all snaps in the system or volume then -         * we should get them one by one.*/ -        if ((cmd == GF_SNAP_STATUS_TYPE_SNAP) || -            (cmd == GF_SNAP_STATUS_TYPE_ITER)) { -                ret = 0; -                goto out; -        } +        snap_dict = dict_new(); +        if (!snap_dict) +            goto out; -        ret = dict_get_int32 (local->dict, "status.snapcount", &snapcount); +        ret = cli_populate_req_dict_for_status(snap_dict, local->dict, i);          if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Could not get snapcount"); -                goto out; +            gf_log("cli", GF_LOG_ERROR, +                   "Could not " +                   "populate snap request dictionary"); +            goto out;          } -        if (snapcount == 0 && !(global_state->mode & GLUSTER_MODE_XML)) { -                cli_out ("No snapshots present"); -        } +        ret = cli_to_glusterd(&req, frame, gf_cli_snapshot_cbk, +                              (xdrproc_t)xdr_gf_cli_req, snap_dict, +                              GLUSTER_CLI_SNAP, this, cli_rpc_prog, NULL); -        for (i = 0 ; i < snapcount; i++) { -                ret = -1; - -                snap_dict = dict_new(); -                if (!snap_dict) -                        goto out; - -                ret = cli_populate_req_dict_for_status (snap_dict, -                                local->dict, i); -                if (ret) { -                        gf_log ("cli", GF_LOG_ERROR, "Could not " -                                        "populate snap request dictionary"); -                        goto out; -                } - -                ret = cli_to_glusterd (&req, frame, -                                gf_cli_snapshot_cbk, -                                (xdrproc_t) xdr_gf_cli_req, snap_dict, -                                GLUSTER_CLI_SNAP, this, cli_rpc_prog, -                                NULL); - -                /* Ignore the return value and error for snapshot -                 * status of type "ALL" or "VOL" -                 * -                 * Scenario : There might be case where status command -                 * and delete command might be issued at the same time. -                 * In that case when status tried to fetch detail of -                 * snap which has been deleted by concurrent command, -                 * then it will show snapshot not present. Which will -                 * not be appropriate. -                 */ -                if (ret && -                    (cmd != GF_SNAP_STATUS_TYPE_ALL && -                     cmd != GF_SNAP_STATUS_TYPE_VOL)) { -                        gf_log ("cli", GF_LOG_ERROR, -                                "cli_to_glusterd for snapshot status failed"); -                        goto out; -                } -                dict_unref (snap_dict); -                snap_dict = NULL; +        /* Ignore the return value and error for snapshot +         * status of type "ALL" or "VOL" +         * +         * Scenario : There might be case where status command +         * and delete command might be issued at the same time. +         * In that case when status tried to fetch detail of +         * snap which has been deleted by concurrent command, +         * then it will show snapshot not present. Which will +         * not be appropriate. +         */ +        if (ret && (cmd != GF_SNAP_STATUS_TYPE_ALL && +                    cmd != GF_SNAP_STATUS_TYPE_VOL)) { +            gf_log("cli", GF_LOG_ERROR, +                   "cli_to_glusterd for snapshot status failed"); +            goto out;          } +        dict_unref(snap_dict); +        snap_dict = NULL; +    } -        ret = 0; +    ret = 0;  out: -        if (snap_dict) -                dict_unref (snap_dict); +    if (snap_dict) +        dict_unref(snap_dict); -        return ret; +    return ret;  }  int32_t -gf_cli_snapshot (call_frame_t *frame, xlator_t *this, -                 void *data) -{ -        gf_cli_req        req           = {{0,}}; -        dict_t           *options       = NULL; -        int               ret           = -1; -        int               tmp_ret       = -1; -        cli_local_t      *local         = NULL; -        char             *err_str       = NULL; -        int              type           =  -1; - -        if (!frame || !this || !data) -                goto out; - -        if (!frame->local) -                goto out; +gf_cli_snapshot(call_frame_t *frame, xlator_t *this, void *data) +{ +    gf_cli_req req = {{ +        0, +    }}; +    dict_t *options = NULL; +    int ret = -1; +    int tmp_ret = -1; +    cli_local_t *local = NULL; +    char *err_str = NULL; +    int type = -1; -        local = frame->local; +    if (!frame || !this || !data) +        goto out; -        options = data; +    if (!frame->local) +        goto out; -        ret = dict_get_int32 (local->dict, "type", &type); +    local = frame->local; -        if (global_state->mode & GLUSTER_MODE_XML) { -                ret = cli_xml_snapshot_begin_composite_op (local); -                if (ret) { -                        gf_log ("cli", GF_LOG_ERROR, "Failed to begin " -                                "snapshot xml composite op"); -                        goto out; -                } -        } +    options = data; +    ret = dict_get_int32(local->dict, "type", &type); -        ret = cli_to_glusterd (&req, frame, gf_cli_snapshot_cbk, -                               (xdrproc_t) xdr_gf_cli_req, options, -                               GLUSTER_CLI_SNAP, this, cli_rpc_prog, -                               NULL); +    if (global_state->mode & GLUSTER_MODE_XML) { +        ret = cli_xml_snapshot_begin_composite_op(local);          if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "cli_to_glusterd for " -                        "snapshot failed"); -                goto xmlend; +            gf_log("cli", GF_LOG_ERROR, +                   "Failed to begin " +                   "snapshot xml composite op"); +            goto out; +        } +    } + +    ret = cli_to_glusterd(&req, frame, gf_cli_snapshot_cbk, +                          (xdrproc_t)xdr_gf_cli_req, options, GLUSTER_CLI_SNAP, +                          this, cli_rpc_prog, NULL); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, +               "cli_to_glusterd for " +               "snapshot failed"); +        goto xmlend; +    } + +    if (GF_SNAP_OPTION_TYPE_STATUS == type) { +        ret = gf_cli_snapshot_for_status(frame, this, data); +        if (ret) { +            gf_log("cli", GF_LOG_ERROR, +                   "cli to glusterd " +                   "for snapshot status command failed");          } -        if (GF_SNAP_OPTION_TYPE_STATUS == type) { -                ret = gf_cli_snapshot_for_status (frame, this, data); -                if (ret) { -                        gf_log ("cli", GF_LOG_ERROR, "cli to glusterd " -                                "for snapshot status command failed"); -                } +        goto xmlend; +    } -                goto xmlend; +    if (GF_SNAP_OPTION_TYPE_DELETE == type) { +        ret = gf_cli_snapshot_for_delete(frame, this, data); +        if (ret) { +            gf_log("cli", GF_LOG_ERROR, +                   "cli to glusterd " +                   "for snapshot delete command failed");          } -        if (GF_SNAP_OPTION_TYPE_DELETE == type) { -                ret = gf_cli_snapshot_for_delete (frame, this, data); -                if (ret) { -                        gf_log ("cli", GF_LOG_ERROR, "cli to glusterd " -                                "for snapshot delete command failed"); -                } +        goto xmlend; +    } -                goto xmlend; -        } - -        ret = 0; +    ret = 0;  xmlend: -        if (global_state->mode & GLUSTER_MODE_XML) { -                ret = cli_xml_snapshot_end_composite_op (local); -                if (ret) { -                        gf_log ("cli", GF_LOG_ERROR, "Failed to end " -                                "snapshot xml composite op"); -                        goto out; -                } -        } -out: -        if (ret && local && GF_SNAP_OPTION_TYPE_STATUS == type) { -                tmp_ret = dict_get_str (local->dict, "op_err_str", &err_str); -                if (tmp_ret || !err_str) { -                        cli_err ("Snapshot Status : failed: %s", "Please " -                                 "check log file for details"); -                } else { -                        cli_err ("Snapshot Status : failed: %s", err_str); -                        dict_del (local->dict, "op_err_str"); -                } +    if (global_state->mode & GLUSTER_MODE_XML) { +        ret = cli_xml_snapshot_end_composite_op(local); +        if (ret) { +            gf_log("cli", GF_LOG_ERROR, +                   "Failed to end " +                   "snapshot xml composite op"); +            goto out; +        } +    } +out: +    if (ret && local && GF_SNAP_OPTION_TYPE_STATUS == type) { +        tmp_ret = dict_get_str(local->dict, "op_err_str", &err_str); +        if (tmp_ret || !err_str) { +            cli_err("Snapshot Status : failed: %s", +                    "Please " +                    "check log file for details"); +        } else { +            cli_err("Snapshot Status : failed: %s", err_str); +            dict_del(local->dict, "op_err_str");          } +    } -        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); +    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret); -        GF_FREE (req.dict.dict_val); +    GF_FREE(req.dict.dict_val); -        if (global_state->mode & GLUSTER_MODE_XML) { -                /* XML mode handles its own error */ -                ret = 0; -        } -        return ret; +    if (global_state->mode & GLUSTER_MODE_XML) { +        /* XML mode handles its own error */ +        ret = 0; +    } +    return ret;  }  int32_t -gf_cli_barrier_volume_cbk (struct rpc_req *req, struct iovec *iov, -                                  int count, void *myframe) -{ -        gf_cli_rsp                      rsp = {0,}; -        int                             ret = -1; - -        GF_ASSERT (myframe); - -        if (-1 == req->rpc_status) -                goto out; - -        ret = xdr_to_generic (*iov, &rsp, (xdrproc_t)xdr_gf_cli_rsp); -        if (ret < 0) { -                gf_log (((call_frame_t *) myframe)->this->name, GF_LOG_ERROR, -                        "Failed to decode xdr response"); -                goto out; -        } -        gf_log ("cli", GF_LOG_DEBUG, "Received response to barrier"); - -        if (rsp.op_ret) { -                if (rsp.op_errstr && (strlen (rsp.op_errstr) > 1)) { -                        cli_err ("volume barrier: command unsuccessful : %s", -                                 rsp.op_errstr); -                } else { -                        cli_err ("volume barrier: command unsuccessful"); -                } +gf_cli_barrier_volume_cbk(struct rpc_req *req, struct iovec *iov, int count, +                          void *myframe) +{ +    gf_cli_rsp rsp = { +        0, +    }; +    int ret = -1; + +    GF_ASSERT(myframe); + +    if (-1 == req->rpc_status) +        goto out; + +    ret = xdr_to_generic(*iov, &rsp, (xdrproc_t)xdr_gf_cli_rsp); +    if (ret < 0) { +        gf_log(((call_frame_t *)myframe)->this->name, GF_LOG_ERROR, +               "Failed to decode xdr response"); +        goto out; +    } +    gf_log("cli", GF_LOG_DEBUG, "Received response to barrier"); + +    if (rsp.op_ret) { +        if (rsp.op_errstr && (strlen(rsp.op_errstr) > 1)) { +            cli_err("volume barrier: command unsuccessful : %s", rsp.op_errstr);          } else { -                cli_out ("volume barrier: command successful"); +            cli_err("volume barrier: command unsuccessful");          } -        ret = rsp.op_ret; +    } else { +        cli_out("volume barrier: command successful"); +    } +    ret = rsp.op_ret;  out: -        free (rsp.op_errstr); -        free (rsp.dict.dict_val); -        cli_cmd_broadcast_response (ret); -        return ret; +    free(rsp.op_errstr); +    free(rsp.dict.dict_val); +    cli_cmd_broadcast_response(ret); +    return ret;  }  int -gf_cli_barrier_volume (call_frame_t *frame, xlator_t *this, void *data) +gf_cli_barrier_volume(call_frame_t *frame, xlator_t *this, void *data)  { -        gf_cli_req                      req = {{0,}}; -        dict_t                          *options = NULL; -        int                             ret = -1; +    gf_cli_req req = {{ +        0, +    }}; +    dict_t *options = NULL; +    int ret = -1; -        if (!frame || !this || !data) -                goto out; +    if (!frame || !this || !data) +        goto out; -        options = data; +    options = data; -        ret = cli_to_glusterd (&req, frame, gf_cli_barrier_volume_cbk, -                               (xdrproc_t) xdr_gf_cli_req, options, -                               GLUSTER_CLI_BARRIER_VOLUME, this, cli_rpc_prog, -                               NULL); +    ret = cli_to_glusterd(&req, frame, gf_cli_barrier_volume_cbk, +                          (xdrproc_t)xdr_gf_cli_req, options, +                          GLUSTER_CLI_BARRIER_VOLUME, this, cli_rpc_prog, NULL);  out: -        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); +    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret); -        GF_FREE (req.dict.dict_val); -        return ret; +    GF_FREE(req.dict.dict_val); +    return ret;  }  int32_t -gf_cli_get_vol_opt_cbk (struct rpc_req *req, struct iovec *iov, int count, -                        void *myframe) -{ -        gf_cli_rsp   rsp  = {0,}; -        int          ret  = -1; -        dict_t      *dict = NULL; -        char        *key  = NULL; -        char        *value = NULL; -        char         msg[1024] = {0,}; -        int          i     = 0; -        char         dict_key[50] = {0,}; - -        GF_ASSERT (myframe); - -        if (-1 == req->rpc_status) -                goto out; - -        ret = xdr_to_generic (*iov, &rsp, (xdrproc_t)xdr_gf_cli_rsp); -        if (ret < 0) { -                gf_log (((call_frame_t *) myframe)->this->name, GF_LOG_ERROR, -                        "Failed to decode xdr response"); -                goto out; -        } -        gf_log ("cli", GF_LOG_DEBUG, "Received response to get volume option"); - -        if (rsp.op_ret) { -                if (strcmp (rsp.op_errstr, "")) -                        snprintf (msg, sizeof (msg), "volume get option: " -                                  "failed: %s", rsp.op_errstr); -                else -                        snprintf (msg, sizeof (msg), "volume get option: " -                                  "failed"); - -                if (global_state->mode & GLUSTER_MODE_XML) { -                        ret = cli_xml_output_str ("volGetopts", msg, rsp.op_ret, -                                          rsp.op_errno, rsp.op_errstr); -                        if (ret) { -                                gf_log ("cli", GF_LOG_ERROR, -                                        "Error outputting to xml"); -                        } -                } else { -                        cli_err ("%s", msg); -                } -                ret = rsp.op_ret; -                goto out_nolog; -        } -        dict = dict_new (); - -        if (!dict) { -                ret = -1; -                goto out; -        } - -        ret = dict_unserialize (rsp.dict.dict_val, rsp.dict.dict_len, &dict); -        if (ret) { -                gf_log ("cli", GF_LOG_ERROR, -                        "Failed rsp_dict unserialization"); -                goto out; -        } +gf_cli_get_vol_opt_cbk(struct rpc_req *req, struct iovec *iov, int count, +                       void *myframe) +{ +    gf_cli_rsp rsp = { +        0, +    }; +    int ret = -1; +    dict_t *dict = NULL; +    char *key = NULL; +    char *value = NULL; +    char msg[1024] = { +        0, +    }; +    int i = 0; +    char dict_key[50] = { +        0, +    }; + +    GF_ASSERT(myframe); + +    if (-1 == req->rpc_status) +        goto out; + +    ret = xdr_to_generic(*iov, &rsp, (xdrproc_t)xdr_gf_cli_rsp); +    if (ret < 0) { +        gf_log(((call_frame_t *)myframe)->this->name, GF_LOG_ERROR, +               "Failed to decode xdr response"); +        goto out; +    } +    gf_log("cli", GF_LOG_DEBUG, "Received response to get volume option"); + +    if (rsp.op_ret) { +        if (strcmp(rsp.op_errstr, "")) +            snprintf(msg, sizeof(msg), +                     "volume get option: " +                     "failed: %s", +                     rsp.op_errstr); +        else +            snprintf(msg, sizeof(msg), +                     "volume get option: " +                     "failed");          if (global_state->mode & GLUSTER_MODE_XML) { -                ret = cli_xml_output_vol_getopts (dict, rsp.op_ret, -                                                  rsp.op_errno, -                                                  rsp.op_errstr); -                if (ret) { -                        gf_log ("cli", GF_LOG_ERROR, "xml output generation " -                                "failed"); -                        ret = 0; -                } -                goto out; -        } - -        ret = dict_get_str (dict, "warning", &value); -        if (!ret) { -                cli_out ("%s", value); +            ret = cli_xml_output_str("volGetopts", msg, rsp.op_ret, +                                     rsp.op_errno, rsp.op_errstr); +            if (ret) { +                gf_log("cli", GF_LOG_ERROR, "Error outputting to xml"); +            } +        } else { +            cli_err("%s", msg);          } - -        ret = dict_get_int32 (dict, "count", &count); +        ret = rsp.op_ret; +        goto out_nolog; +    } +    dict = dict_new(); + +    if (!dict) { +        ret = -1; +        goto out; +    } + +    ret = dict_unserialize(rsp.dict.dict_val, rsp.dict.dict_len, &dict); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, "Failed rsp_dict unserialization"); +        goto out; +    } + +    if (global_state->mode & GLUSTER_MODE_XML) { +        ret = cli_xml_output_vol_getopts(dict, rsp.op_ret, rsp.op_errno, +                                         rsp.op_errstr);          if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Failed to retrieve count " -                        "from the dictionary"); -                goto out; -        } - -        if (count <= 0) { -                gf_log ("cli", GF_LOG_ERROR, "Value of count :%d is " -                        "invalid", count); -                ret = -1; -                goto out; -        } - -        cli_out ("%-40s%-40s", "Option", "Value"); -        cli_out ("%-40s%-40s", "------", "-----"); -        for (i=1; i<=count; i++) { -                snprintf (dict_key, sizeof dict_key, "key%d", i); -                ret = dict_get_str (dict, dict_key, &key); -                if (ret) { -                        gf_log ("cli", GF_LOG_ERROR, "Failed to" -                                " retrieve %s from the " -                                "dictionary", dict_key); -                        goto out; -                } -                snprintf (dict_key, sizeof dict_key, "value%d", i); -                ret = dict_get_str (dict, dict_key, &value); -                if (ret) { -                        gf_log ("cli", GF_LOG_ERROR, "Failed to " -                                "retrieve key value for %s from" -                                "the dictionary", dict_key); -                        goto out; -                } -                cli_out ("%-40s%-40s", key, value); +            gf_log("cli", GF_LOG_ERROR, +                   "xml output generation " +                   "failed"); +            ret = 0; +        } +        goto out; +    } + +    ret = dict_get_str(dict, "warning", &value); +    if (!ret) { +        cli_out("%s", value); +    } + +    ret = dict_get_int32(dict, "count", &count); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, +               "Failed to retrieve count " +               "from the dictionary"); +        goto out; +    } + +    if (count <= 0) { +        gf_log("cli", GF_LOG_ERROR, +               "Value of count :%d is " +               "invalid", +               count); +        ret = -1; +        goto out; +    } + +    cli_out("%-40s%-40s", "Option", "Value"); +    cli_out("%-40s%-40s", "------", "-----"); +    for (i = 1; i <= count; i++) { +        snprintf(dict_key, sizeof dict_key, "key%d", i); +        ret = dict_get_str(dict, dict_key, &key); +        if (ret) { +            gf_log("cli", GF_LOG_ERROR, +                   "Failed to" +                   " retrieve %s from the " +                   "dictionary", +                   dict_key); +            goto out; +        } +        snprintf(dict_key, sizeof dict_key, "value%d", i); +        ret = dict_get_str(dict, dict_key, &value); +        if (ret) { +            gf_log("cli", GF_LOG_ERROR, +                   "Failed to " +                   "retrieve key value for %s from" +                   "the dictionary", +                   dict_key); +            goto out;          } +        cli_out("%-40s%-40s", key, value); +    }  out: -        if (ret) { -                cli_out ("volume get option failed. Check the cli/glusterd log " -                         "file for more details"); -        } +    if (ret) { +        cli_out( +            "volume get option failed. Check the cli/glusterd log " +            "file for more details"); +    }  out_nolog: -        if (dict) -                dict_unref (dict); -        free (rsp.op_errstr); -        free (rsp.dict.dict_val); -        cli_cmd_broadcast_response (ret); -        return ret; +    if (dict) +        dict_unref(dict); +    free(rsp.op_errstr); +    free(rsp.dict.dict_val); +    cli_cmd_broadcast_response(ret); +    return ret;  }  int -gf_cli_get_vol_opt (call_frame_t *frame, xlator_t *this, void *data) +gf_cli_get_vol_opt(call_frame_t *frame, xlator_t *this, void *data)  { -        gf_cli_req  req     = {{0,}}; -        dict_t     *options = NULL; -        int         ret     = -1; +    gf_cli_req req = {{ +        0, +    }}; +    dict_t *options = NULL; +    int ret = -1; -        if (!frame || !this || !data) -                goto out; +    if (!frame || !this || !data) +        goto out; -        options = data; +    options = data; -        ret = cli_to_glusterd (&req, frame, gf_cli_get_vol_opt_cbk, -                               (xdrproc_t)xdr_gf_cli_req, options, -                               GLUSTER_CLI_GET_VOL_OPT, this, cli_rpc_prog, -                               NULL); +    ret = cli_to_glusterd(&req, frame, gf_cli_get_vol_opt_cbk, +                          (xdrproc_t)xdr_gf_cli_req, options, +                          GLUSTER_CLI_GET_VOL_OPT, this, cli_rpc_prog, NULL);  out: -        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); +    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret); -        GF_FREE (req.dict.dict_val); -        return ret; +    GF_FREE(req.dict.dict_val); +    return ret;  }  int -add_cli_cmd_timeout_to_dict (dict_t *dict) +add_cli_cmd_timeout_to_dict(dict_t *dict)  { -        int      ret     = 0; +    int ret = 0; -        if (cli_default_conn_timeout > 120) { -                ret = dict_set_uint32 (dict, "timeout", cli_default_conn_timeout); -                if (ret) { -                        gf_log ("cli", GF_LOG_INFO, "Failed to save" -                                "timeout to dict"); -                } +    if (cli_default_conn_timeout > 120) { +        ret = dict_set_uint32(dict, "timeout", cli_default_conn_timeout); +        if (ret) { +            gf_log("cli", GF_LOG_INFO, +                   "Failed to save" +                   "timeout to dict");          } -        return ret; +    } +    return ret;  }  int -cli_to_glusterd (gf_cli_req *req, call_frame_t *frame, -                 fop_cbk_fn_t cbkfn, xdrproc_t xdrproc, dict_t *dict, -                 int procnum, xlator_t *this, rpc_clnt_prog_t *prog, -                 struct iobref *iobref) -{ -        int                ret = 0; -        size_t             len = 0; -        char               *cmd = NULL; -        int                i = 0; -        const char         **words = NULL; -        cli_local_t        *local = NULL; - -        if (!this || !frame || !dict) { -                ret = -1; -                goto out; -        } +cli_to_glusterd(gf_cli_req *req, call_frame_t *frame, fop_cbk_fn_t cbkfn, +                xdrproc_t xdrproc, dict_t *dict, int procnum, xlator_t *this, +                rpc_clnt_prog_t *prog, struct iobref *iobref) +{ +    int ret = 0; +    size_t len = 0; +    char *cmd = NULL; +    int i = 0; +    const char **words = NULL; +    cli_local_t *local = NULL; -        if (!frame->local) { -                ret = -1; -                goto out; -        } +    if (!this || !frame || !dict) { +        ret = -1; +        goto out; +    } -        local = frame->local; +    if (!frame->local) { +        ret = -1; +        goto out; +    } -        if (!local->words) { -                ret = -1; -                goto out; -        } +    local = frame->local; -        words = local->words; +    if (!local->words) { +        ret = -1; +        goto out; +    } -        while (words[i]) -                len += strlen (words[i++]) + 1; +    words = local->words; -        cmd = GF_CALLOC (1, len, gf_common_mt_char); +    while (words[i]) +        len += strlen(words[i++]) + 1; -        if (!cmd) { -                ret = -1; -                goto out; -        } +    cmd = GF_CALLOC(1, len, gf_common_mt_char); -        for (i = 0; words[i]; i++) { -                strncat (cmd, words[i], len - 1); -                if (words[i+1] != NULL) -                        strncat (cmd, " ", len - 1); -        } +    if (!cmd) { +        ret = -1; +        goto out; +    } -        cmd [len - 1] = '\0'; +    for (i = 0; words[i]; i++) { +        strncat(cmd, words[i], len - 1); +        if (words[i + 1] != NULL) +            strncat(cmd, " ", len - 1); +    } -        ret = dict_set_dynstr (dict, "cmd-str", cmd); -        if (ret) -                goto out; +    cmd[len - 1] = '\0'; -        ret = add_cli_cmd_timeout_to_dict (dict); +    ret = dict_set_dynstr(dict, "cmd-str", cmd); +    if (ret) +        goto out; -        ret = dict_allocate_and_serialize (dict, &(req->dict).dict_val, -                                           &(req->dict).dict_len); +    ret = add_cli_cmd_timeout_to_dict(dict); -        if (ret < 0) { -                gf_log (this->name, GF_LOG_DEBUG, -                        "failed to get serialized length of dict"); -                goto out; -        } +    ret = dict_allocate_and_serialize(dict, &(req->dict).dict_val, +                                      &(req->dict).dict_len); -        ret = cli_cmd_submit (NULL, req, frame, prog, procnum, iobref, this, -                              cbkfn, (xdrproc_t) xdrproc); -out: -        return ret; +    if (ret < 0) { +        gf_log(this->name, GF_LOG_DEBUG, +               "failed to get serialized length of dict"); +        goto out; +    } +    ret = cli_cmd_submit(NULL, req, frame, prog, procnum, iobref, this, cbkfn, +                         (xdrproc_t)xdrproc); +out: +    return ret;  }  int -gf_cli_print_bitrot_scrub_status (dict_t *dict) -{ -        int            i                = 1; -        int            j                = 0; -        int            ret              = -1; -        int            count            = 0; -        char           key[256]         = {0,}; -        char           *volname         = NULL; -        char           *node_name       = NULL; -        char           *scrub_freq      = NULL; -        char           *state_scrub     = NULL; -        char           *scrub_impact    = NULL; -        char           *bad_file_str    = NULL; -        char           *scrub_log_file  = NULL; -        char           *bitrot_log_file = NULL; -        uint64_t       scrub_files      = 0; -        uint64_t       unsigned_files   = 0; -        uint64_t       scrub_time       = 0; -        uint64_t       days             = 0; -        uint64_t       hours            = 0; -        uint64_t       minutes          = 0; -        uint64_t       seconds          = 0; -        char          *last_scrub       = NULL; -        uint64_t       error_count      = 0; -        int8_t         scrub_running    = 0; -        char          *scrub_state_op   = NULL; - - -        ret = dict_get_str (dict, "volname", &volname); +gf_cli_print_bitrot_scrub_status(dict_t *dict) +{ +    int i = 1; +    int j = 0; +    int ret = -1; +    int count = 0; +    char key[256] = { +        0, +    }; +    char *volname = NULL; +    char *node_name = NULL; +    char *scrub_freq = NULL; +    char *state_scrub = NULL; +    char *scrub_impact = NULL; +    char *bad_file_str = NULL; +    char *scrub_log_file = NULL; +    char *bitrot_log_file = NULL; +    uint64_t scrub_files = 0; +    uint64_t unsigned_files = 0; +    uint64_t scrub_time = 0; +    uint64_t days = 0; +    uint64_t hours = 0; +    uint64_t minutes = 0; +    uint64_t seconds = 0; +    char *last_scrub = NULL; +    uint64_t error_count = 0; +    int8_t scrub_running = 0; +    char *scrub_state_op = NULL; + +    ret = dict_get_str(dict, "volname", &volname); +    if (ret) +        gf_log("cli", GF_LOG_TRACE, "failed to get volume name"); + +    ret = dict_get_str(dict, "features.scrub", &state_scrub); +    if (ret) +        gf_log("cli", GF_LOG_TRACE, "failed to get scrub state value"); + +    ret = dict_get_str(dict, "features.scrub-throttle", &scrub_impact); +    if (ret) +        gf_log("cli", GF_LOG_TRACE, +               "failed to get scrub impact " +               "value"); + +    ret = dict_get_str(dict, "features.scrub-freq", &scrub_freq); +    if (ret) +        gf_log("cli", GF_LOG_TRACE, "failed to get scrub -freq value"); + +    ret = dict_get_str(dict, "bitrot_log_file", &bitrot_log_file); +    if (ret) +        gf_log("cli", GF_LOG_TRACE, +               "failed to get bitrot log file " +               "location"); + +    ret = dict_get_str(dict, "scrub_log_file", &scrub_log_file); +    if (ret) +        gf_log("cli", GF_LOG_TRACE, +               "failed to get scrubber log file " +               "location"); + +    ret = dict_get_int32(dict, "count", &count); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, +               "count not get count value from" +               " dictionary"); +        goto out; +    } + +    for (i = 1; i <= count; i++) { +        snprintf(key, 256, "scrub-running-%d", i); +        ret = dict_get_int8(dict, key, &scrub_running);          if (ret) -                gf_log ("cli", GF_LOG_TRACE, "failed to get volume name"); - -        ret = dict_get_str (dict, "features.scrub", &state_scrub); -        if (ret) -                gf_log ("cli", GF_LOG_TRACE, "failed to get scrub state value"); - -        ret = dict_get_str (dict, "features.scrub-throttle", &scrub_impact); -        if (ret) -                gf_log ("cli", GF_LOG_TRACE, "failed to get scrub impact " -                        "value"); - -        ret = dict_get_str (dict, "features.scrub-freq", &scrub_freq); -        if (ret) -                gf_log ("cli", GF_LOG_TRACE, "failed to get scrub -freq value"); - -        ret = dict_get_str (dict, "bitrot_log_file", &bitrot_log_file); -        if (ret) -                gf_log ("cli", GF_LOG_TRACE, "failed to get bitrot log file " -                        "location"); - -        ret = dict_get_str (dict, "scrub_log_file", &scrub_log_file); -        if (ret) -                gf_log ("cli", GF_LOG_TRACE, "failed to get scrubber log file " -                        "location"); +            gf_log("cli", GF_LOG_TRACE, +                   "failed to get scrubbed " +                   "files"); +        if (scrub_running) +            break; +    } -        ret = dict_get_int32 (dict, "count", &count); -        if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "count not get count value from" -                        " dictionary"); -                goto out; -        } +    if (scrub_running) +        gf_asprintf(&scrub_state_op, "%s (In Progress)", state_scrub); +    else +        gf_asprintf(&scrub_state_op, "%s (Idle)", state_scrub); -        for (i = 1; i <= count; i++) { -                snprintf (key, 256, "scrub-running-%d", i); -                ret = dict_get_int8 (dict, key, &scrub_running); -                if (ret) -                        gf_log ("cli", GF_LOG_TRACE, "failed to get scrubbed " -                                "files"); -                if (scrub_running) -                        break; -        } +    cli_out("\n%s: %s\n", "Volume name ", volname); -        if (scrub_running) -                gf_asprintf (&scrub_state_op, "%s (In Progress)", state_scrub); -        else -                gf_asprintf (&scrub_state_op, "%s (Idle)", state_scrub); +    cli_out("%s: %s\n", "State of scrub", scrub_state_op); -        cli_out ("\n%s: %s\n", "Volume name ", volname); +    cli_out("%s: %s\n", "Scrub impact", scrub_impact); -        cli_out ("%s: %s\n", "State of scrub", scrub_state_op); +    cli_out("%s: %s\n", "Scrub frequency", scrub_freq); -        cli_out ("%s: %s\n", "Scrub impact", scrub_impact); +    cli_out("%s: %s\n", "Bitrot error log location", bitrot_log_file); -        cli_out ("%s: %s\n", "Scrub frequency", scrub_freq); +    cli_out("%s: %s\n", "Scrubber error log location", scrub_log_file); -        cli_out ("%s: %s\n", "Bitrot error log location", bitrot_log_file); +    for (i = 1; i <= count; i++) { +        /* Reset the variables to prevent carryover of values */ +        node_name = NULL; +        last_scrub = NULL; +        scrub_time = 0; +        days = 0; +        hours = 0; +        minutes = 0; +        seconds = 0; +        error_count = 0; +        scrub_files = 0; +        unsigned_files = 0; -        cli_out ("%s: %s\n", "Scrubber error log location", scrub_log_file); +        snprintf(key, 256, "node-name-%d", i); +        ret = dict_get_str(dict, key, &node_name); +        if (ret) +            gf_log("cli", GF_LOG_TRACE, "failed to get node-name"); +        snprintf(key, 256, "scrubbed-files-%d", i); +        ret = dict_get_uint64(dict, key, &scrub_files); +        if (ret) +            gf_log("cli", GF_LOG_TRACE, +                   "failed to get scrubbed " +                   "files"); -        for (i = 1; i <= count; i++) { -                /* Reset the variables to prevent carryover of values */ -                node_name       = NULL; -                last_scrub      = NULL; -                scrub_time      = 0; -                days            = 0; -                hours           = 0; -                minutes         = 0; -                seconds         = 0; -                error_count     = 0; -                scrub_files     = 0; -                unsigned_files  = 0; +        snprintf(key, 256, "unsigned-files-%d", i); +        ret = dict_get_uint64(dict, key, &unsigned_files); +        if (ret) +            gf_log("cli", GF_LOG_TRACE, +                   "failed to get unsigned " +                   "files"); -                snprintf (key, 256, "node-name-%d", i); -                ret = dict_get_str (dict, key, &node_name); -                if (ret) -                        gf_log ("cli", GF_LOG_TRACE, "failed to get node-name"); +        snprintf(key, 256, "scrub-duration-%d", i); +        ret = dict_get_uint64(dict, key, &scrub_time); +        if (ret) +            gf_log("cli", GF_LOG_TRACE, +                   "failed to get last scrub " +                   "duration"); -                snprintf (key, 256, "scrubbed-files-%d", i); -                ret = dict_get_uint64 (dict, key, &scrub_files); -                if (ret) -                        gf_log ("cli", GF_LOG_TRACE, "failed to get scrubbed " -                                "files"); +        snprintf(key, 256, "last-scrub-time-%d", i); +        ret = dict_get_str(dict, key, &last_scrub); +        if (ret) +            gf_log("cli", GF_LOG_TRACE, +                   "failed to get last scrub" +                   " time"); +        snprintf(key, 256, "error-count-%d", i); +        ret = dict_get_uint64(dict, key, &error_count); +        if (ret) +            gf_log("cli", GF_LOG_TRACE, +                   "failed to get error " +                   "count"); -                snprintf (key, 256, "unsigned-files-%d", i); -                ret = dict_get_uint64 (dict, key, &unsigned_files); -                if (ret) -                        gf_log ("cli", GF_LOG_TRACE, "failed to get unsigned " -                                "files"); +        cli_out("\n%s\n", +                "==========================================" +                "==============="); -                snprintf (key, 256, "scrub-duration-%d", i); -                ret = dict_get_uint64 (dict, key, &scrub_time); -                if (ret) -                        gf_log ("cli", GF_LOG_TRACE, "failed to get last scrub " -                                "duration"); +        cli_out("%s: %s\n", "Node", node_name); -                snprintf (key, 256, "last-scrub-time-%d", i); -                ret = dict_get_str (dict, key, &last_scrub); -                if (ret) -                        gf_log ("cli", GF_LOG_TRACE, "failed to get last scrub" -                                " time"); -                snprintf (key, 256, "error-count-%d", i); -                ret = dict_get_uint64 (dict, key, &error_count); -                if (ret) -                        gf_log ("cli", GF_LOG_TRACE, "failed to get error " -                                "count"); +        cli_out("%s: %" PRIu64 "\n", "Number of Scrubbed files", scrub_files); -                cli_out ("\n%s\n", "==========================================" -                         "==============="); +        cli_out("%s: %" PRIu64 "\n", "Number of Skipped files", unsigned_files); -                cli_out ("%s: %s\n", "Node", node_name); +        if ((!last_scrub) || !strcmp(last_scrub, "")) +            cli_out("%s: %s\n", "Last completed scrub time", +                    "Scrubber pending to complete."); +        else +            cli_out("%s: %s\n", "Last completed scrub time", last_scrub); -                cli_out ("%s: %"PRIu64 "\n", "Number of Scrubbed files", -                          scrub_files); +        /* Printing last scrub duration time in human readable form*/ +        seconds = scrub_time % 60; +        minutes = (scrub_time / 60) % 60; +        hours = (scrub_time / 3600) % 24; +        days = scrub_time / 86400; +        cli_out("%s: %" PRIu64 ":%" PRIu64 ":%" PRIu64 ":%" PRIu64 "\n", +                "Duration of last scrub (D:M:H:M:S)", days, hours, minutes, +                seconds); -                cli_out ("%s: %"PRIu64 "\n", "Number of Skipped files", -                          unsigned_files); +        cli_out("%s: %" PRIu64 "\n", "Error count", error_count); -                if ((!last_scrub) || !strcmp (last_scrub, "")) -                        cli_out ("%s: %s\n", "Last completed scrub time", -                                 "Scrubber pending to complete."); -                else -                        cli_out ("%s: %s\n", "Last completed scrub time", -                                 last_scrub); - -                /* Printing last scrub duration time in human readable form*/ -                seconds    = scrub_time%60; -                minutes    = (scrub_time/60)%60; -                hours      = (scrub_time/3600)%24; -                days       = scrub_time/86400; -                cli_out ("%s: %"PRIu64 ":%"PRIu64 ":%"PRIu64 ":%"PRIu64 "\n", -                         "Duration of last scrub (D:M:H:M:S)", -                         days, hours, minutes, seconds); - -                cli_out ("%s: %"PRIu64 "\n", "Error count", error_count); - -                if (error_count) { -                        cli_out ("%s:\n", "Corrupted object's [GFID]"); -                        /* Printing list of bad file's (Corrupted object's)*/ -                        for (j = 0; j < error_count; j++) { -                                snprintf (key, 256, "quarantine-%d-%d", j, i); -                                ret = dict_get_str (dict, key, &bad_file_str); -                                if (!ret) { -                                        cli_out ("%s\n", bad_file_str); -                                } -                        } +        if (error_count) { +            cli_out("%s:\n", "Corrupted object's [GFID]"); +            /* Printing list of bad file's (Corrupted object's)*/ +            for (j = 0; j < error_count; j++) { +                snprintf(key, 256, "quarantine-%d-%d", j, i); +                ret = dict_get_str(dict, key, &bad_file_str); +                if (!ret) { +                    cli_out("%s\n", bad_file_str);                  } +            }          } -        cli_out ("%s\n", "==========================================" -                 "==============="); +    } +    cli_out("%s\n", +            "==========================================" +            "===============");  out: -        GF_FREE (scrub_state_op); -        return 0; +    GF_FREE(scrub_state_op); +    return 0;  }  int -gf_cli_bitrot_cbk (struct rpc_req *req, struct iovec *iov, -                   int count, void *myframe) -{ -        int                  ret                       = -1; -        int                  type                      = 0; -        gf_cli_rsp           rsp                       = {0, }; -        dict_t               *dict                     = NULL; -        char                 *scrub_cmd                = NULL; -        char                 *volname                  = NULL; -        char                 *cmd_str                  = NULL; -        char                 *cmd_op                   = NULL; - -        GF_ASSERT (myframe); - -        if (req->rpc_status == -1) { -                goto out; -        } - -        ret = xdr_to_generic (*iov, &rsp, (xdrproc_t)xdr_gf_cli_rsp); -        if (ret < 0) { -                gf_log (((call_frame_t *) myframe)->this->name, GF_LOG_ERROR, -                        "Failed to decode xdr response"); -                goto out; -        } - -        if (rsp.op_ret) { -                ret = -1; -                if (global_state->mode & GLUSTER_MODE_XML) -                        goto xml_output; - -                if (strcmp (rsp.op_errstr, "")) -                        cli_err ("Bitrot command failed : %s", rsp.op_errstr); -                else -                        cli_err ("Bitrot command : failed"); - -                goto out; -        } +gf_cli_bitrot_cbk(struct rpc_req *req, struct iovec *iov, int count, +                  void *myframe) +{ +    int ret = -1; +    int type = 0; +    gf_cli_rsp rsp = { +        0, +    }; +    dict_t *dict = NULL; +    char *scrub_cmd = NULL; +    char *volname = NULL; +    char *cmd_str = NULL; +    char *cmd_op = NULL; + +    GF_ASSERT(myframe); + +    if (req->rpc_status == -1) { +        goto out; +    } + +    ret = xdr_to_generic(*iov, &rsp, (xdrproc_t)xdr_gf_cli_rsp); +    if (ret < 0) { +        gf_log(((call_frame_t *)myframe)->this->name, GF_LOG_ERROR, +               "Failed to decode xdr response"); +        goto out; +    } + +    if (rsp.op_ret) { +        ret = -1; +        if (global_state->mode & GLUSTER_MODE_XML) +            goto xml_output; -        if (rsp.dict.dict_len) { -                /* Unserialize the dictionary */ -                dict = dict_new (); +        if (strcmp(rsp.op_errstr, "")) +            cli_err("Bitrot command failed : %s", rsp.op_errstr); +        else +            cli_err("Bitrot command : failed"); -                if (!dict) { -                        ret = -1; -                        goto out; -                } +        goto out; +    } -                ret = dict_unserialize (rsp.dict.dict_val, -                                        rsp.dict.dict_len, -                                        &dict); +    if (rsp.dict.dict_len) { +        /* Unserialize the dictionary */ +        dict = dict_new(); -                if (ret) { -                        gf_log ("cli", GF_LOG_ERROR, "failed to unserialize " -                                "req-buffer to dictionary"); -                        goto out; -                } +        if (!dict) { +            ret = -1; +            goto out;          } -        gf_log ("cli", GF_LOG_DEBUG, "Received resp to bit rot command"); +        ret = dict_unserialize(rsp.dict.dict_val, rsp.dict.dict_len, &dict); -        ret = dict_get_int32 (dict, "type", &type);          if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Failed to get command type"); -                goto out; +            gf_log("cli", GF_LOG_ERROR, +                   "failed to unserialize " +                   "req-buffer to dictionary"); +            goto out;          } +    } -        /* Ignoring the error, as using dict val for cli output only */ -        ret = dict_get_str (dict, "scrub-value", &scrub_cmd); -        if (ret) -                gf_log ("cli", GF_LOG_TRACE, "Failed to get scrub command"); +    gf_log("cli", GF_LOG_DEBUG, "Received resp to bit rot command"); -        ret = dict_get_str (dict, "volname", &volname); -        if (ret) -                gf_log ("cli", GF_LOG_TRACE, "failed to get volume name"); +    ret = dict_get_int32(dict, "type", &type); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, "Failed to get command type"); +        goto out; +    } -        ret = dict_get_str (dict, "cmd-str", &cmd_str); -        if (ret) -                gf_log ("cli", GF_LOG_TRACE, "failed to get command string"); +    /* Ignoring the error, as using dict val for cli output only */ +    ret = dict_get_str(dict, "scrub-value", &scrub_cmd); +    if (ret) +        gf_log("cli", GF_LOG_TRACE, "Failed to get scrub command"); -        if (cmd_str) -                cmd_op = strrchr(cmd_str, ' ') + 1; +    ret = dict_get_str(dict, "volname", &volname); +    if (ret) +        gf_log("cli", GF_LOG_TRACE, "failed to get volume name"); -        if ((type == GF_BITROT_CMD_SCRUB_STATUS) && -             !(global_state->mode & GLUSTER_MODE_XML)) { -                ret = gf_cli_print_bitrot_scrub_status (dict); -                if (ret) { -                        gf_log ("cli", GF_LOG_ERROR, "Failed to print bitrot " -                                "scrub status"); -                } -                goto out; -        } +    ret = dict_get_str(dict, "cmd-str", &cmd_str); +    if (ret) +        gf_log("cli", GF_LOG_TRACE, "failed to get command string"); -        switch (type) { -        case  GF_BITROT_OPTION_TYPE_ENABLE: -                cli_out("volume bitrot: success bitrot enabled " -                        "for volume %s", volname); -                ret = 0; -                goto out; +    if (cmd_str) +        cmd_op = strrchr(cmd_str, ' ') + 1; + +    if ((type == GF_BITROT_CMD_SCRUB_STATUS) && +        !(global_state->mode & GLUSTER_MODE_XML)) { +        ret = gf_cli_print_bitrot_scrub_status(dict); +        if (ret) { +            gf_log("cli", GF_LOG_ERROR, +                   "Failed to print bitrot " +                   "scrub status"); +        } +        goto out; +    } + +    switch (type) { +        case GF_BITROT_OPTION_TYPE_ENABLE: +            cli_out( +                "volume bitrot: success bitrot enabled " +                "for volume %s", +                volname); +            ret = 0; +            goto out;          case GF_BITROT_OPTION_TYPE_DISABLE: -                cli_out("volume bitrot: success bitrot disabled " -                        "for volume %s", volname); -                ret = 0; -                goto out; +            cli_out( +                "volume bitrot: success bitrot disabled " +                "for volume %s", +                volname); +            ret = 0; +            goto out;          case GF_BITROT_CMD_SCRUB_ONDEMAND: -                cli_out("volume bitrot: scrubber started ondemand " -                        "for volume %s", volname); -                ret = 0; -                goto out; +            cli_out( +                "volume bitrot: scrubber started ondemand " +                "for volume %s", +                volname); +            ret = 0; +            goto out;          case GF_BITROT_OPTION_TYPE_SCRUB: -                if (!strncmp ("pause", scrub_cmd, sizeof ("pause"))) -                        cli_out("volume bitrot: scrubber paused " -                                "for volume %s", volname); -                if (!strncmp ("resume", scrub_cmd, sizeof ("resume"))) -                        cli_out("volume bitrot: scrubber resumed " -                                "for volume %s", volname); -                ret = 0; -                goto out; +            if (!strncmp("pause", scrub_cmd, sizeof("pause"))) +                cli_out( +                    "volume bitrot: scrubber paused " +                    "for volume %s", +                    volname); +            if (!strncmp("resume", scrub_cmd, sizeof("resume"))) +                cli_out( +                    "volume bitrot: scrubber resumed " +                    "for volume %s", +                    volname); +            ret = 0; +            goto out;          case GF_BITROT_OPTION_TYPE_SCRUB_FREQ: -                cli_out("volume bitrot: scrub-frequency is set to %s " -                        "successfully for volume %s", cmd_op, volname); -                ret = 0; -                goto out; +            cli_out( +                "volume bitrot: scrub-frequency is set to %s " +                "successfully for volume %s", +                cmd_op, volname); +            ret = 0; +            goto out;          case GF_BITROT_OPTION_TYPE_SCRUB_THROTTLE: -                cli_out("volume bitrot: scrub-throttle is set to %s " -                        "successfully for volume %s", cmd_op, volname); -                ret = 0; -                goto out; -        } +            cli_out( +                "volume bitrot: scrub-throttle is set to %s " +                "successfully for volume %s", +                cmd_op, volname); +            ret = 0; +            goto out; +    }  xml_output: -        if (global_state->mode & GLUSTER_MODE_XML) { -                ret = cli_xml_output_vol_profile (dict, rsp.op_ret, -                                                  rsp.op_errno, -                                                  rsp.op_errstr); -                if (ret) -                        gf_log ("cli", GF_LOG_ERROR, -                                "Error outputting to xml"); -                goto out; -        } +    if (global_state->mode & GLUSTER_MODE_XML) { +        ret = cli_xml_output_vol_profile(dict, rsp.op_ret, rsp.op_errno, +                                         rsp.op_errstr); +        if (ret) +            gf_log("cli", GF_LOG_ERROR, "Error outputting to xml"); +        goto out; +    } -        if (!rsp.op_ret) -                cli_out ("volume bitrot: success"); +    if (!rsp.op_ret) +        cli_out("volume bitrot: success"); -        ret = rsp.op_ret; +    ret = rsp.op_ret;  out: -        if (dict) -            dict_unref (dict); +    if (dict) +        dict_unref(dict); -        free (rsp.dict.dict_val); -        free (rsp.op_errstr); +    free(rsp.dict.dict_val); +    free(rsp.op_errstr); -        cli_cmd_broadcast_response (ret); +    cli_cmd_broadcast_response(ret); -        return ret; +    return ret;  }  int32_t -gf_cli_bitrot (call_frame_t *frame, xlator_t *this, void *data) +gf_cli_bitrot(call_frame_t *frame, xlator_t *this, void *data)  { -        gf_cli_req        req           = { {0,} }; -        dict_t           *options       = NULL; -        int               ret           = -1; +    gf_cli_req req = {{ +        0, +    }}; +    dict_t *options = NULL; +    int ret = -1; -        if (!frame || !this || !data) -                goto out; +    if (!frame || !this || !data) +        goto out; -        options = data; +    options = data; -        ret = cli_to_glusterd (&req, frame, gf_cli_bitrot_cbk, -                               (xdrproc_t) xdr_gf_cli_req, options, -                               GLUSTER_CLI_BITROT, this, cli_rpc_prog, -                               NULL); -        if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "cli_to_glusterd for " -                        "bitrot failed"); -                goto out; -        } +    ret = cli_to_glusterd(&req, frame, gf_cli_bitrot_cbk, +                          (xdrproc_t)xdr_gf_cli_req, options, +                          GLUSTER_CLI_BITROT, this, cli_rpc_prog, NULL); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, +               "cli_to_glusterd for " +               "bitrot failed"); +        goto out; +    }  out: -        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); +    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret); -        GF_FREE (req.dict.dict_val); +    GF_FREE(req.dict.dict_val); -        return ret; +    return ret;  }  struct rpc_clnt_procedure gluster_cli_actors[GLUSTER_CLI_MAXVALUE] = { -        [GLUSTER_CLI_NULL]             = {"NULL", NULL }, -        [GLUSTER_CLI_PROBE]            = {"PROBE_QUERY", gf_cli_probe}, -        [GLUSTER_CLI_DEPROBE]          = {"DEPROBE_QUERY", gf_cli_deprobe}, -        [GLUSTER_CLI_LIST_FRIENDS]     = {"LIST_FRIENDS", gf_cli_list_friends}, -        [GLUSTER_CLI_UUID_RESET]       = {"UUID_RESET", gf_cli3_1_uuid_reset}, -        [GLUSTER_CLI_UUID_GET]         = {"UUID_GET", gf_cli3_1_uuid_get}, -        [GLUSTER_CLI_CREATE_VOLUME]    = {"CREATE_VOLUME", gf_cli_create_volume}, -        [GLUSTER_CLI_DELETE_VOLUME]    = {"DELETE_VOLUME", gf_cli_delete_volume}, -        [GLUSTER_CLI_START_VOLUME]     = {"START_VOLUME", gf_cli_start_volume}, -        [GLUSTER_CLI_STOP_VOLUME]      = {"STOP_VOLUME", gf_cli_stop_volume}, -        [GLUSTER_CLI_RENAME_VOLUME]    = {"RENAME_VOLUME", gf_cli_rename_volume}, -        [GLUSTER_CLI_DEFRAG_VOLUME]    = {"DEFRAG_VOLUME", gf_cli_defrag_volume}, -        [GLUSTER_CLI_GET_VOLUME]       = {"GET_VOLUME", gf_cli_get_volume}, -        [GLUSTER_CLI_GET_NEXT_VOLUME]  = {"GET_NEXT_VOLUME", gf_cli_get_next_volume}, -        [GLUSTER_CLI_SET_VOLUME]       = {"SET_VOLUME", gf_cli_set_volume}, -        [GLUSTER_CLI_ADD_BRICK]        = {"ADD_BRICK", gf_cli_add_brick}, -        [GLUSTER_CLI_REMOVE_BRICK]     = {"REMOVE_BRICK", gf_cli_remove_brick}, -        [GLUSTER_CLI_REPLACE_BRICK]    = {"REPLACE_BRICK", gf_cli_replace_brick}, -        [GLUSTER_CLI_LOG_ROTATE]       = {"LOG ROTATE", gf_cli_log_rotate}, -        [GLUSTER_CLI_GETSPEC]          = {"GETSPEC", gf_cli_getspec}, -        [GLUSTER_CLI_PMAP_PORTBYBRICK] = {"PMAP PORTBYBRICK", gf_cli_pmap_b2p}, -        [GLUSTER_CLI_SYNC_VOLUME]      = {"SYNC_VOLUME", gf_cli_sync_volume}, -        [GLUSTER_CLI_RESET_VOLUME]     = {"RESET_VOLUME", gf_cli_reset_volume}, -        [GLUSTER_CLI_FSM_LOG]          = {"FSM_LOG", gf_cli_fsm_log}, -        [GLUSTER_CLI_GSYNC_SET]        = {"GSYNC_SET", gf_cli_gsync_set}, -        [GLUSTER_CLI_PROFILE_VOLUME]   = {"PROFILE_VOLUME", gf_cli_profile_volume}, -        [GLUSTER_CLI_QUOTA]            = {"QUOTA", gf_cli_quota}, -        [GLUSTER_CLI_TOP_VOLUME]       = {"TOP_VOLUME", gf_cli_top_volume}, -        [GLUSTER_CLI_GETWD]            = {"GETWD", gf_cli_getwd}, -        [GLUSTER_CLI_STATUS_VOLUME]    = {"STATUS_VOLUME", gf_cli_status_volume}, -        [GLUSTER_CLI_STATUS_ALL]       = {"STATUS_ALL", gf_cli_status_volume_all}, -        [GLUSTER_CLI_MOUNT]            = {"MOUNT", gf_cli_mount}, -        [GLUSTER_CLI_UMOUNT]           = {"UMOUNT", gf_cli_umount}, -        [GLUSTER_CLI_HEAL_VOLUME]      = {"HEAL_VOLUME", gf_cli_heal_volume}, -        [GLUSTER_CLI_STATEDUMP_VOLUME] = {"STATEDUMP_VOLUME", gf_cli_statedump_volume}, -        [GLUSTER_CLI_LIST_VOLUME]      = {"LIST_VOLUME", gf_cli_list_volume}, -        [GLUSTER_CLI_CLRLOCKS_VOLUME]  = {"CLEARLOCKS_VOLUME", gf_cli_clearlocks_volume}, -        [GLUSTER_CLI_COPY_FILE]        = {"COPY_FILE", gf_cli_copy_file}, -        [GLUSTER_CLI_SYS_EXEC]         = {"SYS_EXEC", gf_cli_sys_exec}, -        [GLUSTER_CLI_SNAP]             = {"SNAP", gf_cli_snapshot}, -        [GLUSTER_CLI_BARRIER_VOLUME]   = {"BARRIER VOLUME", gf_cli_barrier_volume}, -        [GLUSTER_CLI_GET_VOL_OPT]      = {"GET_VOL_OPT", gf_cli_get_vol_opt}, -        [GLUSTER_CLI_BITROT]           = {"BITROT", gf_cli_bitrot}, -        [GLUSTER_CLI_ATTACH_TIER]      = {"ATTACH_TIER", gf_cli_attach_tier}, -        [GLUSTER_CLI_TIER]             = {"TIER", gf_cli_tier}, -        [GLUSTER_CLI_GET_STATE]        = {"GET_STATE", gf_cli_get_state}, -        [GLUSTER_CLI_RESET_BRICK]      = {"RESET_BRICK", gf_cli_reset_brick}, -        [GLUSTER_CLI_REMOVE_TIER_BRICK] = {"DETACH_TIER", gf_cli_remove_tier_brick}, -        [GLUSTER_CLI_ADD_TIER_BRICK]   = {"ADD_TIER_BRICK", gf_cli_add_tier_brick} -}; +    [GLUSTER_CLI_NULL] = {"NULL", NULL}, +    [GLUSTER_CLI_PROBE] = {"PROBE_QUERY", gf_cli_probe}, +    [GLUSTER_CLI_DEPROBE] = {"DEPROBE_QUERY", gf_cli_deprobe}, +    [GLUSTER_CLI_LIST_FRIENDS] = {"LIST_FRIENDS", gf_cli_list_friends}, +    [GLUSTER_CLI_UUID_RESET] = {"UUID_RESET", gf_cli3_1_uuid_reset}, +    [GLUSTER_CLI_UUID_GET] = {"UUID_GET", gf_cli3_1_uuid_get}, +    [GLUSTER_CLI_CREATE_VOLUME] = {"CREATE_VOLUME", gf_cli_create_volume}, +    [GLUSTER_CLI_DELETE_VOLUME] = {"DELETE_VOLUME", gf_cli_delete_volume}, +    [GLUSTER_CLI_START_VOLUME] = {"START_VOLUME", gf_cli_start_volume}, +    [GLUSTER_CLI_STOP_VOLUME] = {"STOP_VOLUME", gf_cli_stop_volume}, +    [GLUSTER_CLI_RENAME_VOLUME] = {"RENAME_VOLUME", gf_cli_rename_volume}, +    [GLUSTER_CLI_DEFRAG_VOLUME] = {"DEFRAG_VOLUME", gf_cli_defrag_volume}, +    [GLUSTER_CLI_GET_VOLUME] = {"GET_VOLUME", gf_cli_get_volume}, +    [GLUSTER_CLI_GET_NEXT_VOLUME] = {"GET_NEXT_VOLUME", gf_cli_get_next_volume}, +    [GLUSTER_CLI_SET_VOLUME] = {"SET_VOLUME", gf_cli_set_volume}, +    [GLUSTER_CLI_ADD_BRICK] = {"ADD_BRICK", gf_cli_add_brick}, +    [GLUSTER_CLI_REMOVE_BRICK] = {"REMOVE_BRICK", gf_cli_remove_brick}, +    [GLUSTER_CLI_REPLACE_BRICK] = {"REPLACE_BRICK", gf_cli_replace_brick}, +    [GLUSTER_CLI_LOG_ROTATE] = {"LOG ROTATE", gf_cli_log_rotate}, +    [GLUSTER_CLI_GETSPEC] = {"GETSPEC", gf_cli_getspec}, +    [GLUSTER_CLI_PMAP_PORTBYBRICK] = {"PMAP PORTBYBRICK", gf_cli_pmap_b2p}, +    [GLUSTER_CLI_SYNC_VOLUME] = {"SYNC_VOLUME", gf_cli_sync_volume}, +    [GLUSTER_CLI_RESET_VOLUME] = {"RESET_VOLUME", gf_cli_reset_volume}, +    [GLUSTER_CLI_FSM_LOG] = {"FSM_LOG", gf_cli_fsm_log}, +    [GLUSTER_CLI_GSYNC_SET] = {"GSYNC_SET", gf_cli_gsync_set}, +    [GLUSTER_CLI_PROFILE_VOLUME] = {"PROFILE_VOLUME", gf_cli_profile_volume}, +    [GLUSTER_CLI_QUOTA] = {"QUOTA", gf_cli_quota}, +    [GLUSTER_CLI_TOP_VOLUME] = {"TOP_VOLUME", gf_cli_top_volume}, +    [GLUSTER_CLI_GETWD] = {"GETWD", gf_cli_getwd}, +    [GLUSTER_CLI_STATUS_VOLUME] = {"STATUS_VOLUME", gf_cli_status_volume}, +    [GLUSTER_CLI_STATUS_ALL] = {"STATUS_ALL", gf_cli_status_volume_all}, +    [GLUSTER_CLI_MOUNT] = {"MOUNT", gf_cli_mount}, +    [GLUSTER_CLI_UMOUNT] = {"UMOUNT", gf_cli_umount}, +    [GLUSTER_CLI_HEAL_VOLUME] = {"HEAL_VOLUME", gf_cli_heal_volume}, +    [GLUSTER_CLI_STATEDUMP_VOLUME] = {"STATEDUMP_VOLUME", +                                      gf_cli_statedump_volume}, +    [GLUSTER_CLI_LIST_VOLUME] = {"LIST_VOLUME", gf_cli_list_volume}, +    [GLUSTER_CLI_CLRLOCKS_VOLUME] = {"CLEARLOCKS_VOLUME", +                                     gf_cli_clearlocks_volume}, +    [GLUSTER_CLI_COPY_FILE] = {"COPY_FILE", gf_cli_copy_file}, +    [GLUSTER_CLI_SYS_EXEC] = {"SYS_EXEC", gf_cli_sys_exec}, +    [GLUSTER_CLI_SNAP] = {"SNAP", gf_cli_snapshot}, +    [GLUSTER_CLI_BARRIER_VOLUME] = {"BARRIER VOLUME", gf_cli_barrier_volume}, +    [GLUSTER_CLI_GET_VOL_OPT] = {"GET_VOL_OPT", gf_cli_get_vol_opt}, +    [GLUSTER_CLI_BITROT] = {"BITROT", gf_cli_bitrot}, +    [GLUSTER_CLI_ATTACH_TIER] = {"ATTACH_TIER", gf_cli_attach_tier}, +    [GLUSTER_CLI_TIER] = {"TIER", gf_cli_tier}, +    [GLUSTER_CLI_GET_STATE] = {"GET_STATE", gf_cli_get_state}, +    [GLUSTER_CLI_RESET_BRICK] = {"RESET_BRICK", gf_cli_reset_brick}, +    [GLUSTER_CLI_REMOVE_TIER_BRICK] = {"DETACH_TIER", gf_cli_remove_tier_brick}, +    [GLUSTER_CLI_ADD_TIER_BRICK] = {"ADD_TIER_BRICK", gf_cli_add_tier_brick}};  struct rpc_clnt_program cli_prog = { -        .progname  = "Gluster CLI", -        .prognum   = GLUSTER_CLI_PROGRAM, -        .progver   = GLUSTER_CLI_VERSION, -        .numproc   = GLUSTER_CLI_MAXVALUE, -        .proctable = gluster_cli_actors, +    .progname = "Gluster CLI", +    .prognum = GLUSTER_CLI_PROGRAM, +    .progver = GLUSTER_CLI_VERSION, +    .numproc = GLUSTER_CLI_MAXVALUE, +    .proctable = gluster_cli_actors,  };  struct rpc_clnt_procedure cli_quotad_procs[GF_AGGREGATOR_MAXVALUE] = { -        [GF_AGGREGATOR_NULL]     = {"NULL", NULL}, -        [GF_AGGREGATOR_LOOKUP]   = {"LOOKUP", NULL}, -        [GF_AGGREGATOR_GETLIMIT]   = {"GETLIMIT", cli_quotad_getlimit}, +    [GF_AGGREGATOR_NULL] = {"NULL", NULL}, +    [GF_AGGREGATOR_LOOKUP] = {"LOOKUP", NULL}, +    [GF_AGGREGATOR_GETLIMIT] = {"GETLIMIT", cli_quotad_getlimit},  };  struct rpc_clnt_program cli_quotad_clnt = { -        .progname  = "CLI Quotad client", -        .prognum   = GLUSTER_AGGREGATOR_PROGRAM, -        .progver   = GLUSTER_AGGREGATOR_VERSION, -        .numproc   = GF_AGGREGATOR_MAXVALUE, -        .proctable = cli_quotad_procs, +    .progname = "CLI Quotad client", +    .prognum = GLUSTER_AGGREGATOR_PROGRAM, +    .progver = GLUSTER_AGGREGATOR_VERSION, +    .numproc = GF_AGGREGATOR_MAXVALUE, +    .proctable = cli_quotad_procs,  }; diff --git a/cli/src/cli-xml-output.c b/cli/src/cli-xml-output.c index fd42192162b..5dbf37e3d5d 100644 --- a/cli/src/cli-xml-output.c +++ b/cli/src/cli-xml-output.c @@ -15,10 +15,7 @@  #include "syscall.h"  #include "upcall-utils.h" -enum gf_task_types { -    GF_TASK_TYPE_REBALANCE, -    GF_TASK_TYPE_REMOVE_BRICK -}; +enum gf_task_types { GF_TASK_TYPE_REBALANCE, GF_TASK_TYPE_REMOVE_BRICK };  /*   * IMPORTANT NOTE: @@ -47,4337 +44,4156 @@ enum gf_task_types {   *  of #if (HAVE_LIB_XML)   */ -  #if (HAVE_LIB_XML)  #include <libxml/encoding.h>  #include <libxml/xmlwriter.h> -#define XML_RET_CHECK_AND_GOTO(ret, label)      do {            \ -                if (ret < 0) {                                  \ -                        ret = -1;                               \ -                        goto label;                             \ -                }                                               \ -                else                                            \ -                        ret = 0;                                \ -        }while (0)                                              \ +#define XML_RET_CHECK_AND_GOTO(ret, label)                                     \ +    do {                                                                       \ +        if (ret < 0) {                                                         \ +            ret = -1;                                                          \ +            goto label;                                                        \ +        } else                                                                 \ +            ret = 0;                                                           \ +    } while (0)  int -cli_begin_xml_output (xmlTextWriterPtr *writer, xmlDocPtr *doc) +cli_begin_xml_output(xmlTextWriterPtr *writer, xmlDocPtr *doc)  { -        int             ret = -1; +    int ret = -1; -        *writer = xmlNewTextWriterDoc (doc, 0); -        if (writer == NULL) { -                ret = -1; -                goto out; -        } +    *writer = xmlNewTextWriterDoc(doc, 0); +    if (writer == NULL) { +        ret = -1; +        goto out; +    } -        ret = xmlTextWriterStartDocument (*writer, "1.0", "UTF-8", "yes"); -        XML_RET_CHECK_AND_GOTO (ret, out); +    ret = xmlTextWriterStartDocument(*writer, "1.0", "UTF-8", "yes"); +    XML_RET_CHECK_AND_GOTO(ret, out); -        /* <cliOutput> */ -        ret = xmlTextWriterStartElement (*writer, (xmlChar *)"cliOutput"); -        XML_RET_CHECK_AND_GOTO (ret, out); +    /* <cliOutput> */ +    ret = xmlTextWriterStartElement(*writer, (xmlChar *)"cliOutput"); +    XML_RET_CHECK_AND_GOTO(ret, out);  out: -        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); -        return ret; +    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret); +    return ret;  }  int -cli_end_xml_output (xmlTextWriterPtr writer, xmlDocPtr doc) +cli_end_xml_output(xmlTextWriterPtr writer, xmlDocPtr doc)  { -        int             ret = -1; - -        /* </cliOutput> */ -        ret = xmlTextWriterEndElement (writer); -        XML_RET_CHECK_AND_GOTO (ret, out); +    int ret = -1; -        ret = xmlTextWriterEndDocument (writer); -        XML_RET_CHECK_AND_GOTO (ret, out); +    /* </cliOutput> */ +    ret = xmlTextWriterEndElement(writer); +    XML_RET_CHECK_AND_GOTO(ret, out); +    ret = xmlTextWriterEndDocument(writer); +    XML_RET_CHECK_AND_GOTO(ret, out); -        /* Dump xml document to stdout and pretty format it */ -        xmlSaveFormatFileEnc ("-", doc, "UTF-8", 1); +    /* Dump xml document to stdout and pretty format it */ +    xmlSaveFormatFileEnc("-", doc, "UTF-8", 1); -        xmlFreeTextWriter (writer); -        xmlFreeDoc (doc); +    xmlFreeTextWriter(writer); +    xmlFreeDoc(doc);  out: -        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); -        return ret; +    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret); +    return ret;  }  int -cli_xml_output_common (xmlTextWriterPtr writer, int op_ret, int op_errno, -                       char *op_errstr) +cli_xml_output_common(xmlTextWriterPtr writer, int op_ret, int op_errno, +                      char *op_errstr)  { -        int             ret = -1; +    int ret = -1; -        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"opRet", -                                               "%d", op_ret); -        XML_RET_CHECK_AND_GOTO (ret, out); +    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"opRet", "%d", +                                          op_ret); +    XML_RET_CHECK_AND_GOTO(ret, out); -        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"opErrno", -                                               "%d", op_errno); -        XML_RET_CHECK_AND_GOTO (ret, out); +    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"opErrno", "%d", +                                          op_errno); +    XML_RET_CHECK_AND_GOTO(ret, out); -        if (op_errstr) -                ret = xmlTextWriterWriteFormatElement (writer, -                                                       (xmlChar *)"opErrstr", -                                                       "%s", op_errstr); -        else -                ret = xmlTextWriterWriteFormatElement (writer, -                                                       (xmlChar *)"opErrstr", -                                                       "%s", ""); +    if (op_errstr) +        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"opErrstr", +                                              "%s", op_errstr); +    else +        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"opErrstr", +                                              "%s", ""); -        XML_RET_CHECK_AND_GOTO (ret, out); +    XML_RET_CHECK_AND_GOTO(ret, out);  out: -        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); -        return ret; +    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret); +    return ret;  }  #endif  int -cli_xml_output_str (char *op, char *str, int op_ret, int op_errno, -                    char *op_errstr) +cli_xml_output_str(char *op, char *str, int op_ret, int op_errno, +                   char *op_errstr)  {  #if (HAVE_LIB_XML) -        int                     ret = -1; -        xmlTextWriterPtr        writer = NULL; -        xmlDocPtr               doc = NULL; +    int ret = -1; +    xmlTextWriterPtr writer = NULL; +    xmlDocPtr doc = NULL; -        ret = cli_begin_xml_output (&writer, &doc); -        if (ret) -                goto out; +    ret = cli_begin_xml_output(&writer, &doc); +    if (ret) +        goto out; -        ret = cli_xml_output_common (writer, op_ret, op_errno, op_errstr); -        if (ret) -                goto out; +    ret = cli_xml_output_common(writer, op_ret, op_errno, op_errstr); +    if (ret) +        goto out; -        if (op) { -                ret = xmlTextWriterWriteFormatElement (writer, -                                                       (xmlChar *)"cliOp", -                                                       "%s", op); -                XML_RET_CHECK_AND_GOTO (ret, out); -        } +    if (op) { +        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"cliOp", "%s", +                                              op); +        XML_RET_CHECK_AND_GOTO(ret, out); +    } -        if (str) { -                ret = xmlTextWriterWriteFormatElement (writer, -                                                       (xmlChar *)"output", -                                                       "%s", str); -                XML_RET_CHECK_AND_GOTO (ret, out); -        } +    if (str) { +        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"output", "%s", +                                              str); +        XML_RET_CHECK_AND_GOTO(ret, out); +    } -        ret = cli_end_xml_output (writer, doc); +    ret = cli_end_xml_output(writer, doc);  out: -        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); -        return ret; +    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret); +    return ret;  #else -        return 0; +    return 0;  #endif  }  #if (HAVE_LIB_XML)  int -cli_xml_output_data_pair (dict_t *this, char *key, data_t *value, -                          void *data) +cli_xml_output_data_pair(dict_t *this, char *key, data_t *value, void *data)  { -        int                     ret = -1; -        xmlTextWriterPtr        *writer = NULL; +    int ret = -1; +    xmlTextWriterPtr *writer = NULL; -        writer = (xmlTextWriterPtr *)data; +    writer = (xmlTextWriterPtr *)data; -        ret = xmlTextWriterWriteFormatElement (*writer, (xmlChar *)key, -                                               "%s", value->data); +    ret = xmlTextWriterWriteFormatElement(*writer, (xmlChar *)key, "%s", +                                          value->data); -        XML_RET_CHECK_AND_GOTO (ret, out); +    XML_RET_CHECK_AND_GOTO(ret, out);  out: -        return ret; +    return ret;  }  #endif  int -cli_xml_output_dict ( char *op, dict_t *dict, int op_ret, int op_errno, -                      char *op_errstr) +cli_xml_output_dict(char *op, dict_t *dict, int op_ret, int op_errno, +                    char *op_errstr)  {  #if (HAVE_LIB_XML) -        int                     ret = -1; -        xmlTextWriterPtr        writer = NULL; -        xmlDocPtr               doc = NULL; +    int ret = -1; +    xmlTextWriterPtr writer = NULL; +    xmlDocPtr doc = NULL; -        ret = cli_begin_xml_output (&writer, &doc); -        if (ret) -                goto out; +    ret = cli_begin_xml_output(&writer, &doc); +    if (ret) +        goto out; -        ret = cli_xml_output_common (writer, op_ret, op_errno, op_errstr); -        if (ret) -                goto out; +    ret = cli_xml_output_common(writer, op_ret, op_errno, op_errstr); +    if (ret) +        goto out; -        /* <"op"> */ -        ret = xmlTextWriterStartElement (writer, (xmlChar *)op); -        XML_RET_CHECK_AND_GOTO (ret, out); +    /* <"op"> */ +    ret = xmlTextWriterStartElement(writer, (xmlChar *)op); +    XML_RET_CHECK_AND_GOTO(ret, out); -        if (dict) -                dict_foreach (dict, cli_xml_output_data_pair, &writer); +    if (dict) +        dict_foreach(dict, cli_xml_output_data_pair, &writer); -        /* </"op"> */ -        ret = xmlTextWriterEndElement (writer); -        XML_RET_CHECK_AND_GOTO (ret, out); +    /* </"op"> */ +    ret = xmlTextWriterEndElement(writer); +    XML_RET_CHECK_AND_GOTO(ret, out); -        ret = cli_end_xml_output (writer, doc); +    ret = cli_end_xml_output(writer, doc);  out: -        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); -        return ret; +    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret); +    return ret;  #else -        return 0; +    return 0;  #endif  }  #if (HAVE_LIB_XML)  int -cli_xml_output_vol_status_common (xmlTextWriterPtr writer, dict_t *dict, -                                  int   brick_index, int *online, -                                  gf_boolean_t *node_present) +cli_xml_output_vol_status_common(xmlTextWriterPtr writer, dict_t *dict, +                                 int brick_index, int *online, +                                 gf_boolean_t *node_present)  { -        int             ret             = -1; -        char            *hostname       = NULL; -        char            *path           = NULL; -        char            *uuid           = NULL; -        int             port            = 0; -        int             rdma_port       = 0; -        int             status          = 0; -        int             pid             = 0; -        char            key[1024]       = {0,}; - -        snprintf (key, sizeof (key), "brick%d.hostname", brick_index); -        ret = dict_get_str (dict, key, &hostname); -        if (ret) { -                *node_present = _gf_false; -                goto out; +    int ret = -1; +    char *hostname = NULL; +    char *path = NULL; +    char *uuid = NULL; +    int port = 0; +    int rdma_port = 0; +    int status = 0; +    int pid = 0; +    char key[1024] = { +        0, +    }; + +    snprintf(key, sizeof(key), "brick%d.hostname", brick_index); +    ret = dict_get_str(dict, key, &hostname); +    if (ret) { +        *node_present = _gf_false; +        goto out; +    } +    *node_present = _gf_true; + +    /* <node> +     * will be closed in the calling function cli_xml_output_vol_status()*/ +    ret = xmlTextWriterStartElement(writer, (xmlChar *)"node"); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"hostname", "%s", +                                          hostname); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    snprintf(key, sizeof(key), "brick%d.path", brick_index); +    ret = dict_get_str(dict, key, &path); +    if (ret) +        goto out; +    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"path", "%s", +                                          path); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    snprintf(key, sizeof(key), "brick%d.peerid", brick_index); +    ret = dict_get_str(dict, key, &uuid); +    if (ret) +        goto out; +    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"peerid", "%s", +                                          uuid); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    snprintf(key, sizeof(key), "brick%d.status", brick_index); +    ret = dict_get_int32(dict, key, &status); +    if (ret) +        goto out; +    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"status", "%d", +                                          status); +    XML_RET_CHECK_AND_GOTO(ret, out); +    *online = status; + +    snprintf(key, sizeof(key), "brick%d.port", brick_index); +    ret = dict_get_int32(dict, key, &port); +    if (ret) +        goto out; + +    snprintf(key, sizeof(key), "brick%d.rdma_port", brick_index); +    ret = dict_get_int32(dict, key, &rdma_port); + +    /* If the process is either offline or doesn't provide a port (shd) +     * port = "N/A" +     * else print the port number of the process. +     */ + +    /* +     * Tag 'port' can be removed once console management is started +     * to support new tag ports. +     */ + +    if (*online == 1 && port != 0) +        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"port", "%d", +                                              port); +    else +        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"port", "%s", +                                              "N/A"); +    XML_RET_CHECK_AND_GOTO(ret, out); +    ret = xmlTextWriterStartElement(writer, (xmlChar *)"ports"); +    if (*online == 1 && (port != 0 || rdma_port != 0)) { +        if (port) { +            ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"tcp", +                                                  "%d", port); +        } else { +            ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"tcp", +                                                  "%s", "N/A");          } -        *node_present = _gf_true; - -        /* <node> -         * will be closed in the calling function cli_xml_output_vol_status()*/ -        ret = xmlTextWriterStartElement (writer, (xmlChar *)"node"); -        XML_RET_CHECK_AND_GOTO (ret, out); - -        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"hostname", -                                               "%s", hostname); -        XML_RET_CHECK_AND_GOTO (ret, out); - -        snprintf (key, sizeof (key), "brick%d.path", brick_index); -        ret = dict_get_str (dict, key, &path); -        if (ret) -                goto out; -        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"path", -                                               "%s", path); -        XML_RET_CHECK_AND_GOTO (ret, out); - -        snprintf (key, sizeof (key), "brick%d.peerid", brick_index); -        ret = dict_get_str (dict, key, &uuid); -        if (ret) -                goto out; -        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"peerid", -                                               "%s", uuid); -        XML_RET_CHECK_AND_GOTO (ret, out); - -        snprintf (key, sizeof (key), "brick%d.status", brick_index); -        ret = dict_get_int32 (dict, key, &status); -        if (ret) -                goto out; -        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"status", -                                               "%d", status); -        XML_RET_CHECK_AND_GOTO (ret, out); -        *online = status; - -        snprintf (key, sizeof (key), "brick%d.port", brick_index); -        ret = dict_get_int32 (dict, key, &port); -        if (ret) -                goto out; - -        snprintf (key, sizeof (key), "brick%d.rdma_port", brick_index); -        ret = dict_get_int32 (dict, key, &rdma_port); - -        /* If the process is either offline or doesn't provide a port (shd) -         * port = "N/A" -         * else print the port number of the process. -         */ - -        /* -         * Tag 'port' can be removed once console management is started -         * to support new tag ports. -         */ - -        if (*online == 1 && port != 0) -                 ret = xmlTextWriterWriteFormatElement (writer, -                                                    (xmlChar *)"port", -                                                        "%d", port); -         else -                 ret = xmlTextWriterWriteFormatElement (writer, -                                                        (xmlChar *)"port", -                                                        "%s", "N/A"); -        XML_RET_CHECK_AND_GOTO (ret, out); -        ret = xmlTextWriterStartElement (writer, (xmlChar *)"ports"); -        if (*online == 1 && (port != 0 || rdma_port != 0)) { - -                if (port) { -                ret = xmlTextWriterWriteFormatElement (writer, -                                                       (xmlChar *)"tcp", -                                                       "%d", port); -                } else { -                ret = xmlTextWriterWriteFormatElement (writer, -                                                       (xmlChar *)"tcp", -                                                       "%s", "N/A"); -                } -                XML_RET_CHECK_AND_GOTO (ret, out); -                if (rdma_port) { -                ret = xmlTextWriterWriteFormatElement (writer, -                                                       (xmlChar *)"rdma", -                                                       "%d", rdma_port); -                } else { -                ret = xmlTextWriterWriteFormatElement (writer, -                                                       (xmlChar *)"rdma", -                                                       "%s", "N/A"); -                } -                XML_RET_CHECK_AND_GOTO (ret, out); +        XML_RET_CHECK_AND_GOTO(ret, out); +        if (rdma_port) { +            ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"rdma", +                                                  "%d", rdma_port);          } else { -                ret = xmlTextWriterWriteFormatElement (writer, -                                                       (xmlChar *)"tcp", -                                                       "%s", "N/A"); -                XML_RET_CHECK_AND_GOTO (ret, out); -                ret = xmlTextWriterWriteFormatElement (writer, -                                                       (xmlChar *)"rdma", -                                                       "%s", "N/A"); -                XML_RET_CHECK_AND_GOTO (ret, out); +            ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"rdma", +                                                  "%s", "N/A");          } +        XML_RET_CHECK_AND_GOTO(ret, out); +    } else { +        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"tcp", "%s", +                                              "N/A"); +        XML_RET_CHECK_AND_GOTO(ret, out); +        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"rdma", "%s", +                                              "N/A"); +        XML_RET_CHECK_AND_GOTO(ret, out); +    } -        ret = xmlTextWriterEndElement (writer); -        XML_RET_CHECK_AND_GOTO (ret, out); +    ret = xmlTextWriterEndElement(writer); +    XML_RET_CHECK_AND_GOTO(ret, out); -        snprintf (key, sizeof (key), "brick%d.pid", brick_index); -        ret = dict_get_int32 (dict, key, &pid); -        if (ret) -                goto out; -        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"pid", -                                               "%d", pid); -        XML_RET_CHECK_AND_GOTO (ret, out); +    snprintf(key, sizeof(key), "brick%d.pid", brick_index); +    ret = dict_get_int32(dict, key, &pid); +    if (ret) +        goto out; +    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"pid", "%d", pid); +    XML_RET_CHECK_AND_GOTO(ret, out);  out: -        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); -        return ret; +    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret); +    return ret;  }  int -cli_xml_output_vol_status_detail (xmlTextWriterPtr writer, dict_t *dict, -                                  int brick_index) -{ -        int             ret = -1; -        uint64_t        size_total = 0; -        uint64_t        size_free = 0; -        char            *device = NULL; -        uint64_t        block_size = 0; -        char            *mnt_options = NULL; -        char            *fs_name = NULL; -        char            *inode_size = NULL; -        uint64_t        inodes_total = 0; -        uint64_t        inodes_free = 0; -        char            key[1024] = {0,}; - -        snprintf (key, sizeof (key), "brick%d.total", brick_index); -        ret = dict_get_uint64 (dict, key, &size_total); -        if (!ret) { -                ret = xmlTextWriterWriteFormatElement (writer, -                                                       (xmlChar *)"sizeTotal", -                                                       "%"PRIu64, size_total); -                XML_RET_CHECK_AND_GOTO (ret, out); -        } -        snprintf (key, sizeof (key), "brick%d.free", brick_index); -        ret = dict_get_uint64 (dict, key, &size_free); -        if (!ret) { -                ret = xmlTextWriterWriteFormatElement (writer, -                                                       (xmlChar *)"sizeFree", -                                                       "%"PRIu64, size_free); -                XML_RET_CHECK_AND_GOTO (ret, out); -        } -        snprintf (key, sizeof (key), "brick%d.device", brick_index); -        ret = dict_get_str (dict, key, &device); -        if (!ret) { -                ret = xmlTextWriterWriteFormatElement (writer, -                                                       (xmlChar *)"device", -                                                       "%s", device); -                XML_RET_CHECK_AND_GOTO (ret, out); -        } -        snprintf (key, sizeof (key), "brick%d.block_size", brick_index); -        ret = dict_get_uint64 (dict, key, &block_size); -        if (!ret) { -                ret = xmlTextWriterWriteFormatElement (writer, -                                                       (xmlChar *)"blockSize", -                                                       "%"PRIu64, block_size); -                XML_RET_CHECK_AND_GOTO (ret, out); -        } -        snprintf (key, sizeof (key), "brick%d.mnt_options", brick_index); -        ret = dict_get_str (dict, key, &mnt_options); -        if (!ret) { -                ret = xmlTextWriterWriteFormatElement (writer, -                                                       (xmlChar *)"mntOptions", -                                                       "%s", mnt_options); -                XML_RET_CHECK_AND_GOTO (ret, out); -        } -        snprintf (key, sizeof (key), "brick%d.fs_name", brick_index); -        ret = dict_get_str (dict, key, &fs_name); -        if (!ret) { -                ret = xmlTextWriterWriteFormatElement (writer, -                                                       (xmlChar *)"fsName", -                                                       "%s", fs_name); -                XML_RET_CHECK_AND_GOTO (ret, out); -        } -        snprintf (key, sizeof (key), "brick%d.inode_size", brick_index); -        ret = dict_get_str (dict, key, &inode_size); -        if (!ret) { -                ret = xmlTextWriterWriteFormatElement (writer, -                                                       (xmlChar *)"inodeSize", -                                                       "%s", fs_name); -                XML_RET_CHECK_AND_GOTO (ret, out); -        } -        snprintf (key, sizeof (key), "brick%d.total_inodes", brick_index); -        ret = dict_get_uint64 (dict, key, &inodes_total); -        if (!ret) { -                ret = xmlTextWriterWriteFormatElement (writer, -                                                       (xmlChar *)"inodesTotal", -                                                       "%"PRIu64, inodes_total); -                XML_RET_CHECK_AND_GOTO (ret, out); -        } -        snprintf (key, sizeof (key), "brick%d.free_inodes", brick_index); -        ret = dict_get_uint64 (dict, key, &inodes_free); -        if (!ret) { -                ret = xmlTextWriterWriteFormatElement (writer, -                                                       (xmlChar *)"inodesFree", -                                                       "%"PRIu64, inodes_free); -                XML_RET_CHECK_AND_GOTO (ret, out); -        } else { -		ret = 0; -        } - -out: -        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); -        return ret; -} - -int -cli_xml_output_vol_status_mempool (xmlTextWriterPtr writer, dict_t *dict, -                                   char *prefix) +cli_xml_output_vol_status_detail(xmlTextWriterPtr writer, dict_t *dict, +                                 int brick_index)  { -        int             ret = -1; -        int             mempool_count = 0; -        char            *name = NULL; -        int             hotcount = 0; -        int             coldcount = 0; -        uint64_t        paddedsizeof = 0; -        uint64_t        alloccount = 0; -        int             maxalloc = 0; -        char            key[1024] = {0,}; -        int             i = 0; - -        /* <mempool> */ -        ret = xmlTextWriterStartElement (writer, (xmlChar *)"mempool"); -        XML_RET_CHECK_AND_GOTO (ret, out); - -        snprintf (key, sizeof (key), "%s.mempool-count", prefix); -        ret = dict_get_int32 (dict, key, &mempool_count); -        if (ret) -                goto out; -        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"count", -                                               "%d", mempool_count); -        XML_RET_CHECK_AND_GOTO (ret, out); - -        for (i = 0; i < mempool_count; i++) { -                /* <pool> */ -                ret = xmlTextWriterStartElement (writer, (xmlChar *)"pool"); -                XML_RET_CHECK_AND_GOTO (ret, out); - -                snprintf (key, sizeof (key), "%s.pool%d.name", prefix, i); -                ret = dict_get_str (dict, key, &name); -                if (ret) -                        goto out; -                ret = xmlTextWriterWriteFormatElement (writer, -                                                       (xmlChar *)"name", -                                                       "%s", name); -                XML_RET_CHECK_AND_GOTO (ret, out); - -                snprintf (key, sizeof (key), "%s.pool%d.hotcount", prefix, i); -                ret = dict_get_int32 (dict, key, &hotcount); -                if (ret) -                        goto out; -                ret = xmlTextWriterWriteFormatElement (writer, -                                                       (xmlChar *)"hotCount", -                                                       "%d", hotcount); -                XML_RET_CHECK_AND_GOTO (ret, out); - -                snprintf (key, sizeof (key), "%s.pool%d.coldcount", prefix, i); -                ret = dict_get_int32 (dict, key, &coldcount); -                if (ret) -                        goto out; -                ret = xmlTextWriterWriteFormatElement (writer, -                                                       (xmlChar *)"coldCount", -                                                       "%d", coldcount); -                XML_RET_CHECK_AND_GOTO (ret, out); - -                snprintf (key, sizeof (key), "%s.pool%d.paddedsizeof", -                          prefix, i); -                ret = dict_get_uint64 (dict, key, &paddedsizeof); -                if (ret) -                        goto out; -                ret = xmlTextWriterWriteFormatElement -                        (writer, (xmlChar *)"padddedSizeOf", "%"PRIu64, -                         paddedsizeof); -                XML_RET_CHECK_AND_GOTO (ret, out); - -                snprintf (key, sizeof (key), "%s.pool%d.alloccount", prefix, i); -                ret = dict_get_uint64 (dict, key, &alloccount); -                if (ret) -                        goto out; -                ret = xmlTextWriterWriteFormatElement (writer, -                                                       (xmlChar *)"allocCount", -                                                       "%"PRIu64, alloccount); -                XML_RET_CHECK_AND_GOTO (ret, out); - -                snprintf (key, sizeof (key), "%s.pool%d.max_alloc", prefix, i); -                ret = dict_get_int32 (dict, key, &maxalloc); -                if (ret) -                        goto out; -                ret = xmlTextWriterWriteFormatElement (writer, -                                                       (xmlChar *)"maxAlloc", -                                                       "%d", maxalloc); -                XML_RET_CHECK_AND_GOTO (ret, out); - -                snprintf (key, sizeof (key), "%s.pool%d.pool-misses", prefix, i); -                ret = dict_get_uint64 (dict, key, &alloccount); -                if (ret) -                        goto out; -                ret = xmlTextWriterWriteFormatElement (writer, -                                                       (xmlChar *)"poolMisses", -                                                       "%"PRIu64, alloccount); -                XML_RET_CHECK_AND_GOTO (ret, out); - -                snprintf (key, sizeof (key), "%s.pool%d.max-stdalloc", prefix, i); -                ret = dict_get_int32 (dict, key, &maxalloc); -                if (ret) -                        goto out; -                ret = xmlTextWriterWriteFormatElement (writer, -                                                       (xmlChar *)"maxStdAlloc", -                                                       "%d", maxalloc); -                XML_RET_CHECK_AND_GOTO (ret, out); - - -                /* </pool> */ -                ret = xmlTextWriterEndElement (writer); -                XML_RET_CHECK_AND_GOTO (ret, out); -        } - -        /* </mempool> */ -        ret = xmlTextWriterEndElement (writer); -        XML_RET_CHECK_AND_GOTO (ret, out); +    int ret = -1; +    uint64_t size_total = 0; +    uint64_t size_free = 0; +    char *device = NULL; +    uint64_t block_size = 0; +    char *mnt_options = NULL; +    char *fs_name = NULL; +    char *inode_size = NULL; +    uint64_t inodes_total = 0; +    uint64_t inodes_free = 0; +    char key[1024] = { +        0, +    }; + +    snprintf(key, sizeof(key), "brick%d.total", brick_index); +    ret = dict_get_uint64(dict, key, &size_total); +    if (!ret) { +        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"sizeTotal", +                                              "%" PRIu64, size_total); +        XML_RET_CHECK_AND_GOTO(ret, out); +    } +    snprintf(key, sizeof(key), "brick%d.free", brick_index); +    ret = dict_get_uint64(dict, key, &size_free); +    if (!ret) { +        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"sizeFree", +                                              "%" PRIu64, size_free); +        XML_RET_CHECK_AND_GOTO(ret, out); +    } +    snprintf(key, sizeof(key), "brick%d.device", brick_index); +    ret = dict_get_str(dict, key, &device); +    if (!ret) { +        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"device", "%s", +                                              device); +        XML_RET_CHECK_AND_GOTO(ret, out); +    } +    snprintf(key, sizeof(key), "brick%d.block_size", brick_index); +    ret = dict_get_uint64(dict, key, &block_size); +    if (!ret) { +        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"blockSize", +                                              "%" PRIu64, block_size); +        XML_RET_CHECK_AND_GOTO(ret, out); +    } +    snprintf(key, sizeof(key), "brick%d.mnt_options", brick_index); +    ret = dict_get_str(dict, key, &mnt_options); +    if (!ret) { +        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"mntOptions", +                                              "%s", mnt_options); +        XML_RET_CHECK_AND_GOTO(ret, out); +    } +    snprintf(key, sizeof(key), "brick%d.fs_name", brick_index); +    ret = dict_get_str(dict, key, &fs_name); +    if (!ret) { +        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"fsName", "%s", +                                              fs_name); +        XML_RET_CHECK_AND_GOTO(ret, out); +    } +    snprintf(key, sizeof(key), "brick%d.inode_size", brick_index); +    ret = dict_get_str(dict, key, &inode_size); +    if (!ret) { +        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"inodeSize", +                                              "%s", fs_name); +        XML_RET_CHECK_AND_GOTO(ret, out); +    } +    snprintf(key, sizeof(key), "brick%d.total_inodes", brick_index); +    ret = dict_get_uint64(dict, key, &inodes_total); +    if (!ret) { +        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"inodesTotal", +                                              "%" PRIu64, inodes_total); +        XML_RET_CHECK_AND_GOTO(ret, out); +    } +    snprintf(key, sizeof(key), "brick%d.free_inodes", brick_index); +    ret = dict_get_uint64(dict, key, &inodes_free); +    if (!ret) { +        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"inodesFree", +                                              "%" PRIu64, inodes_free); +        XML_RET_CHECK_AND_GOTO(ret, out); +    } else { +        ret = 0; +    }  out: -        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); -        return ret; +    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret); +    return ret;  }  int -cli_xml_output_vol_status_mem (xmlTextWriterPtr writer, dict_t *dict, -                               int brick_index) +cli_xml_output_vol_status_mempool(xmlTextWriterPtr writer, dict_t *dict, +                                  char *prefix)  { -        int             ret = -1; -        int             arena = 0; -        int             ordblks = 0; -        int             smblks = 0; -        int             hblks = 0; -        int             hblkhd = 0; -        int             usmblks = 0; -        int             fsmblks = 0; -        int             uordblks = 0; -        int             fordblks = 0; -        int             keepcost = 0; -        char            key[1024] = {0,}; - -        /* <memStatus> */ -        ret = xmlTextWriterStartElement (writer, (xmlChar *)"memStatus"); -        XML_RET_CHECK_AND_GOTO (ret, out); - -        /* <mallinfo> */ -        ret = xmlTextWriterStartElement (writer, (xmlChar *)"mallinfo"); -        XML_RET_CHECK_AND_GOTO (ret, out); - -        snprintf (key, sizeof (key), "brick%d.mallinfo.arena", brick_index); -        ret = dict_get_int32 (dict, key, &arena); -        if (ret) -                goto out; -        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"arena", -                                               "%d", arena); -        XML_RET_CHECK_AND_GOTO (ret, out); - -        snprintf (key, sizeof (key), "brick%d.mallinfo.ordblks", brick_index); -        ret = dict_get_int32 (dict, key, &ordblks); -        if (ret) -                goto out; -        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"ordblks", -                                               "%d", ordblks); -        XML_RET_CHECK_AND_GOTO (ret, out); +    int ret = -1; +    int mempool_count = 0; +    char *name = NULL; +    int hotcount = 0; +    int coldcount = 0; +    uint64_t paddedsizeof = 0; +    uint64_t alloccount = 0; +    int maxalloc = 0; +    char key[1024] = { +        0, +    }; +    int i = 0; + +    /* <mempool> */ +    ret = xmlTextWriterStartElement(writer, (xmlChar *)"mempool"); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    snprintf(key, sizeof(key), "%s.mempool-count", prefix); +    ret = dict_get_int32(dict, key, &mempool_count); +    if (ret) +        goto out; +    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"count", "%d", +                                          mempool_count); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    for (i = 0; i < mempool_count; i++) { +        /* <pool> */ +        ret = xmlTextWriterStartElement(writer, (xmlChar *)"pool"); +        XML_RET_CHECK_AND_GOTO(ret, out); -        snprintf (key, sizeof (key), "brick%d.mallinfo.smblks", brick_index); -        ret = dict_get_int32 (dict, key, &smblks); +        snprintf(key, sizeof(key), "%s.pool%d.name", prefix, i); +        ret = dict_get_str(dict, key, &name);          if (ret) -                goto out; -        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"smblks", -                                               "%d", smblks); -        XML_RET_CHECK_AND_GOTO (ret, out); +            goto out; +        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"name", "%s", +                                              name); +        XML_RET_CHECK_AND_GOTO(ret, out); -        snprintf (key, sizeof (key), "brick%d.mallinfo.hblks", brick_index); -        ret = dict_get_int32 (dict, key, &hblks); +        snprintf(key, sizeof(key), "%s.pool%d.hotcount", prefix, i); +        ret = dict_get_int32(dict, key, &hotcount);          if (ret) -                goto out; -        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"hblks", -                                               "%d", hblks); -        XML_RET_CHECK_AND_GOTO (ret, out); +            goto out; +        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"hotCount", +                                              "%d", hotcount); +        XML_RET_CHECK_AND_GOTO(ret, out); -        snprintf (key, sizeof (key), "brick%d.mallinfo.hblkhd", brick_index); -        ret = dict_get_int32 (dict, key, &hblkhd); +        snprintf(key, sizeof(key), "%s.pool%d.coldcount", prefix, i); +        ret = dict_get_int32(dict, key, &coldcount);          if (ret) -                goto out; -        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"hblkhd", -                                               "%d", hblkhd); -        XML_RET_CHECK_AND_GOTO (ret, out); +            goto out; +        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"coldCount", +                                              "%d", coldcount); +        XML_RET_CHECK_AND_GOTO(ret, out); -        snprintf (key, sizeof (key), "brick%d.mallinfo.usmblks", brick_index); -        ret = dict_get_int32 (dict, key, &usmblks); +        snprintf(key, sizeof(key), "%s.pool%d.paddedsizeof", prefix, i); +        ret = dict_get_uint64(dict, key, &paddedsizeof);          if (ret) -                goto out; -        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"usmblks", -                                               "%d", usmblks); -        XML_RET_CHECK_AND_GOTO (ret, out); +            goto out; +        ret = xmlTextWriterWriteFormatElement( +            writer, (xmlChar *)"padddedSizeOf", "%" PRIu64, paddedsizeof); +        XML_RET_CHECK_AND_GOTO(ret, out); -        snprintf (key, sizeof (key), "brick%d.mallinfo.fsmblks", brick_index); -        ret = dict_get_int32 (dict, key, &fsmblks); +        snprintf(key, sizeof(key), "%s.pool%d.alloccount", prefix, i); +        ret = dict_get_uint64(dict, key, &alloccount);          if (ret) -                goto out; -        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"fsmblks", -                                               "%d", fsmblks); -        XML_RET_CHECK_AND_GOTO (ret, out); +            goto out; +        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"allocCount", +                                              "%" PRIu64, alloccount); +        XML_RET_CHECK_AND_GOTO(ret, out); -        snprintf (key, sizeof (key), "brick%d.mallinfo.uordblks", brick_index); -        ret = dict_get_int32 (dict, key, &uordblks); +        snprintf(key, sizeof(key), "%s.pool%d.max_alloc", prefix, i); +        ret = dict_get_int32(dict, key, &maxalloc);          if (ret) -                goto out; -        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"uordblks", -                                               "%d", uordblks); -        XML_RET_CHECK_AND_GOTO (ret, out); +            goto out; +        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"maxAlloc", +                                              "%d", maxalloc); +        XML_RET_CHECK_AND_GOTO(ret, out); -        snprintf (key, sizeof (key), "brick%d.mallinfo.fordblks", brick_index); -        ret = dict_get_int32 (dict, key, &fordblks); +        snprintf(key, sizeof(key), "%s.pool%d.pool-misses", prefix, i); +        ret = dict_get_uint64(dict, key, &alloccount);          if (ret) -                goto out; -        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"fordblks", -                                               "%d", fordblks); -        XML_RET_CHECK_AND_GOTO (ret, out); +            goto out; +        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"poolMisses", +                                              "%" PRIu64, alloccount); +        XML_RET_CHECK_AND_GOTO(ret, out); -        snprintf (key, sizeof (key), "brick%d.mallinfo.keepcost", brick_index); -        ret = dict_get_int32 (dict, key, &keepcost); +        snprintf(key, sizeof(key), "%s.pool%d.max-stdalloc", prefix, i); +        ret = dict_get_int32(dict, key, &maxalloc);          if (ret) -                goto out; -        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"keepcost", -                                               "%d", keepcost); -        XML_RET_CHECK_AND_GOTO (ret, out); - -        /* </mallinfo> */ -        ret = xmlTextWriterEndElement (writer); -        XML_RET_CHECK_AND_GOTO (ret, out); +            goto out; +        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"maxStdAlloc", +                                              "%d", maxalloc); +        XML_RET_CHECK_AND_GOTO(ret, out); -        snprintf (key, sizeof (key), "brick%d", brick_index); -        ret = cli_xml_output_vol_status_mempool (writer, dict, key); -        if (ret) -                goto out; +        /* </pool> */ +        ret = xmlTextWriterEndElement(writer); +        XML_RET_CHECK_AND_GOTO(ret, out); +    } -        /* </memStatus> */ -        ret = xmlTextWriterEndElement (writer); -        XML_RET_CHECK_AND_GOTO (ret, out); +    /* </mempool> */ +    ret = xmlTextWriterEndElement(writer); +    XML_RET_CHECK_AND_GOTO(ret, out);  out: -        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); -        return ret; +    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret); +    return ret;  }  int -cli_xml_output_vol_status_clients (xmlTextWriterPtr writer, dict_t *dict, -                                   int brick_index) +cli_xml_output_vol_status_mem(xmlTextWriterPtr writer, dict_t *dict, +                              int brick_index)  { -        int             ret = -1; -        int             client_count = 0; -        char            *hostname = NULL; -        uint64_t        bytes_read = 0; -        uint64_t        bytes_write = 0; -        uint32_t        opversion = 0; -        char            key[1024] = {0,}; -        int             i = 0; - -        /* <clientsStatus> */ -        ret = xmlTextWriterStartElement (writer, (xmlChar *)"clientsStatus"); -        XML_RET_CHECK_AND_GOTO (ret, out); - -        snprintf (key, sizeof (key), "brick%d.clientcount", brick_index); -        ret = dict_get_int32 (dict, key, &client_count); -        if (ret) -                goto out; -        ret = xmlTextWriterWriteFormatElement (writer, -                                               (xmlChar *)"clientCount", -                                               "%d", client_count); -        XML_RET_CHECK_AND_GOTO (ret, out); - -        for (i = 0; i < client_count; i++) { -                /* <client> */ -                ret = xmlTextWriterStartElement (writer, (xmlChar *)"client"); -                XML_RET_CHECK_AND_GOTO (ret, out); - -                snprintf (key, sizeof (key), "brick%d.client%d.hostname", -                          brick_index, i); -                ret = dict_get_str (dict, key, &hostname); -                if (ret) -                        goto out; -                ret = xmlTextWriterWriteFormatElement (writer, -                                                       (xmlChar *)"hostname", -                                                       "%s", hostname); -                XML_RET_CHECK_AND_GOTO (ret, out); - -                snprintf (key, sizeof (key), "brick%d.client%d.bytesread", -                          brick_index, i); -                ret = dict_get_uint64 (dict, key, &bytes_read); -                if (ret) -                        goto out; -                ret = xmlTextWriterWriteFormatElement (writer, -                                                       (xmlChar *)"bytesRead", -                                                       "%"PRIu64, bytes_read); -                XML_RET_CHECK_AND_GOTO (ret, out); - -                snprintf (key, sizeof (key), "brick%d.client%d.byteswrite", -                          brick_index, i); -                ret = dict_get_uint64 (dict, key, &bytes_write); -                if (ret) -                        goto out; -                ret = xmlTextWriterWriteFormatElement (writer, -                                                       (xmlChar *)"bytesWrite", -                                                       "%"PRIu64, bytes_write); -                XML_RET_CHECK_AND_GOTO (ret, out); - -                snprintf (key, sizeof (key), "brick%d.client%d.opversion", -                          brick_index, i); -                ret = dict_get_uint32 (dict, key, &opversion); -                if (ret) -                        goto out; -                ret = xmlTextWriterWriteFormatElement (writer, -                                                       (xmlChar *)"opVersion", -                                                       "%"PRIu32, opversion); -                XML_RET_CHECK_AND_GOTO (ret, out); - -                /* </client> */ -                ret = xmlTextWriterEndElement (writer); -                XML_RET_CHECK_AND_GOTO (ret, out); -        } +    int ret = -1; +    int arena = 0; +    int ordblks = 0; +    int smblks = 0; +    int hblks = 0; +    int hblkhd = 0; +    int usmblks = 0; +    int fsmblks = 0; +    int uordblks = 0; +    int fordblks = 0; +    int keepcost = 0; +    char key[1024] = { +        0, +    }; + +    /* <memStatus> */ +    ret = xmlTextWriterStartElement(writer, (xmlChar *)"memStatus"); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    /* <mallinfo> */ +    ret = xmlTextWriterStartElement(writer, (xmlChar *)"mallinfo"); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    snprintf(key, sizeof(key), "brick%d.mallinfo.arena", brick_index); +    ret = dict_get_int32(dict, key, &arena); +    if (ret) +        goto out; +    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"arena", "%d", +                                          arena); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    snprintf(key, sizeof(key), "brick%d.mallinfo.ordblks", brick_index); +    ret = dict_get_int32(dict, key, &ordblks); +    if (ret) +        goto out; +    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"ordblks", "%d", +                                          ordblks); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    snprintf(key, sizeof(key), "brick%d.mallinfo.smblks", brick_index); +    ret = dict_get_int32(dict, key, &smblks); +    if (ret) +        goto out; +    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"smblks", "%d", +                                          smblks); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    snprintf(key, sizeof(key), "brick%d.mallinfo.hblks", brick_index); +    ret = dict_get_int32(dict, key, &hblks); +    if (ret) +        goto out; +    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"hblks", "%d", +                                          hblks); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    snprintf(key, sizeof(key), "brick%d.mallinfo.hblkhd", brick_index); +    ret = dict_get_int32(dict, key, &hblkhd); +    if (ret) +        goto out; +    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"hblkhd", "%d", +                                          hblkhd); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    snprintf(key, sizeof(key), "brick%d.mallinfo.usmblks", brick_index); +    ret = dict_get_int32(dict, key, &usmblks); +    if (ret) +        goto out; +    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"usmblks", "%d", +                                          usmblks); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    snprintf(key, sizeof(key), "brick%d.mallinfo.fsmblks", brick_index); +    ret = dict_get_int32(dict, key, &fsmblks); +    if (ret) +        goto out; +    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"fsmblks", "%d", +                                          fsmblks); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    snprintf(key, sizeof(key), "brick%d.mallinfo.uordblks", brick_index); +    ret = dict_get_int32(dict, key, &uordblks); +    if (ret) +        goto out; +    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"uordblks", "%d", +                                          uordblks); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    snprintf(key, sizeof(key), "brick%d.mallinfo.fordblks", brick_index); +    ret = dict_get_int32(dict, key, &fordblks); +    if (ret) +        goto out; +    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"fordblks", "%d", +                                          fordblks); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    snprintf(key, sizeof(key), "brick%d.mallinfo.keepcost", brick_index); +    ret = dict_get_int32(dict, key, &keepcost); +    if (ret) +        goto out; +    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"keepcost", "%d", +                                          keepcost); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    /* </mallinfo> */ +    ret = xmlTextWriterEndElement(writer); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    snprintf(key, sizeof(key), "brick%d", brick_index); +    ret = cli_xml_output_vol_status_mempool(writer, dict, key); +    if (ret) +        goto out; + +    /* </memStatus> */ +    ret = xmlTextWriterEndElement(writer); +    XML_RET_CHECK_AND_GOTO(ret, out); -        /* </clientsStatus> */ -        ret = xmlTextWriterEndElement (writer); -        XML_RET_CHECK_AND_GOTO (ret, out);  out: -        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); -        return ret; +    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret); +    return ret;  }  int -cli_xml_output_vol_status_inode_entry (xmlTextWriterPtr writer, dict_t *dict, -                                       char *prefix) +cli_xml_output_vol_status_clients(xmlTextWriterPtr writer, dict_t *dict, +                                  int brick_index)  { -        int             ret = -1; -        char            *gfid = NULL; -        uint64_t        nlookup = 0; -        uint32_t        ref = 0; -        int             ia_type = 0; -        char            key[1024] = {0,}; - -        /* <inode> */ -        ret = xmlTextWriterStartElement (writer, (xmlChar *)"inode"); -        XML_RET_CHECK_AND_GOTO (ret, out); - -        snprintf (key, sizeof (key), "%s.gfid", prefix); -        ret = dict_get_str (dict, key, &gfid); +    int ret = -1; +    int client_count = 0; +    char *hostname = NULL; +    uint64_t bytes_read = 0; +    uint64_t bytes_write = 0; +    uint32_t opversion = 0; +    char key[1024] = { +        0, +    }; +    int i = 0; + +    /* <clientsStatus> */ +    ret = xmlTextWriterStartElement(writer, (xmlChar *)"clientsStatus"); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    snprintf(key, sizeof(key), "brick%d.clientcount", brick_index); +    ret = dict_get_int32(dict, key, &client_count); +    if (ret) +        goto out; +    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"clientCount", +                                          "%d", client_count); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    for (i = 0; i < client_count; i++) { +        /* <client> */ +        ret = xmlTextWriterStartElement(writer, (xmlChar *)"client"); +        XML_RET_CHECK_AND_GOTO(ret, out); + +        snprintf(key, sizeof(key), "brick%d.client%d.hostname", brick_index, i); +        ret = dict_get_str(dict, key, &hostname);          if (ret) -                goto out; -        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"gfid", -                                               "%s", gfid); -        XML_RET_CHECK_AND_GOTO (ret, out); +            goto out; +        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"hostname", +                                              "%s", hostname); +        XML_RET_CHECK_AND_GOTO(ret, out); -        snprintf (key, sizeof (key), "%s.nlookup", prefix); -        ret = dict_get_uint64 (dict, key, &nlookup); +        snprintf(key, sizeof(key), "brick%d.client%d.bytesread", brick_index, +                 i); +        ret = dict_get_uint64(dict, key, &bytes_read);          if (ret) -                goto out; -        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"nLookup", -                                               "%"PRIu64, nlookup); -        XML_RET_CHECK_AND_GOTO (ret, out); +            goto out; +        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"bytesRead", +                                              "%" PRIu64, bytes_read); +        XML_RET_CHECK_AND_GOTO(ret, out); -        snprintf (key, sizeof (key), "%s.ref", prefix); -        ret = dict_get_uint32 (dict, key, &ref); +        snprintf(key, sizeof(key), "brick%d.client%d.byteswrite", brick_index, +                 i); +        ret = dict_get_uint64(dict, key, &bytes_write);          if (ret) -                goto out; -        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"ref", -                                               "%"PRIu32, ref); -        XML_RET_CHECK_AND_GOTO (ret, out); +            goto out; +        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"bytesWrite", +                                              "%" PRIu64, bytes_write); +        XML_RET_CHECK_AND_GOTO(ret, out); -        snprintf (key, sizeof (key), "%s.ia_type", prefix); -        ret = dict_get_int32 (dict, key, &ia_type); +        snprintf(key, sizeof(key), "brick%d.client%d.opversion", brick_index, +                 i); +        ret = dict_get_uint32(dict, key, &opversion);          if (ret) -                goto out; -        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"iaType", -                                               "%d", ia_type); -        XML_RET_CHECK_AND_GOTO (ret, out); +            goto out; +        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"opVersion", +                                              "%" PRIu32, opversion); +        XML_RET_CHECK_AND_GOTO(ret, out); -        /* </inode> */ -        ret = xmlTextWriterEndElement (writer); -        XML_RET_CHECK_AND_GOTO (ret, out); +        /* </client> */ +        ret = xmlTextWriterEndElement(writer); +        XML_RET_CHECK_AND_GOTO(ret, out); +    } +    /* </clientsStatus> */ +    ret = xmlTextWriterEndElement(writer); +    XML_RET_CHECK_AND_GOTO(ret, out);  out: -        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); -        return ret; +    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret); +    return ret;  }  int -cli_xml_output_vol_status_itable (xmlTextWriterPtr writer, dict_t *dict, -                                  char *prefix) +cli_xml_output_vol_status_inode_entry(xmlTextWriterPtr writer, dict_t *dict, +                                      char *prefix)  { -        int             ret = -1; -        uint32_t        active_size = 0; -        uint32_t        lru_size = 0; -        uint32_t        purge_size = 0; -        char            key[1024] = {0,}; -        int             i = 0; - -        snprintf (key, sizeof (key), "%s.active_size", prefix); -        ret = dict_get_uint32 (dict, key, &active_size); -        if (ret) +    int ret = -1; +    char *gfid = NULL; +    uint64_t nlookup = 0; +    uint32_t ref = 0; +    int ia_type = 0; +    char key[1024] = { +        0, +    }; + +    /* <inode> */ +    ret = xmlTextWriterStartElement(writer, (xmlChar *)"inode"); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    snprintf(key, sizeof(key), "%s.gfid", prefix); +    ret = dict_get_str(dict, key, &gfid); +    if (ret) +        goto out; +    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"gfid", "%s", +                                          gfid); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    snprintf(key, sizeof(key), "%s.nlookup", prefix); +    ret = dict_get_uint64(dict, key, &nlookup); +    if (ret) +        goto out; +    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"nLookup", +                                          "%" PRIu64, nlookup); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    snprintf(key, sizeof(key), "%s.ref", prefix); +    ret = dict_get_uint32(dict, key, &ref); +    if (ret) +        goto out; +    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"ref", "%" PRIu32, +                                          ref); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    snprintf(key, sizeof(key), "%s.ia_type", prefix); +    ret = dict_get_int32(dict, key, &ia_type); +    if (ret) +        goto out; +    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"iaType", "%d", +                                          ia_type); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    /* </inode> */ +    ret = xmlTextWriterEndElement(writer); +    XML_RET_CHECK_AND_GOTO(ret, out); + +out: +    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret); +    return ret; +} + +int +cli_xml_output_vol_status_itable(xmlTextWriterPtr writer, dict_t *dict, +                                 char *prefix) +{ +    int ret = -1; +    uint32_t active_size = 0; +    uint32_t lru_size = 0; +    uint32_t purge_size = 0; +    char key[1024] = { +        0, +    }; +    int i = 0; + +    snprintf(key, sizeof(key), "%s.active_size", prefix); +    ret = dict_get_uint32(dict, key, &active_size); +    if (ret) +        goto out; +    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"activeSize", +                                          "%" PRIu32, active_size); +    XML_RET_CHECK_AND_GOTO(ret, out); +    if (active_size != 0) { +        /* <active> */ +        ret = xmlTextWriterStartElement(writer, (xmlChar *)"active"); +        XML_RET_CHECK_AND_GOTO(ret, out); + +        for (i = 0; i < active_size; i++) { +            snprintf(key, sizeof(key), "%s.active%d", prefix, i); +            ret = cli_xml_output_vol_status_inode_entry(writer, dict, key); +            if (ret)                  goto out; -        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"activeSize", -                                               "%"PRIu32, active_size); -        XML_RET_CHECK_AND_GOTO (ret, out); -        if (active_size != 0) { -                /* <active> */ -                ret = xmlTextWriterStartElement (writer, (xmlChar *)"active"); -                XML_RET_CHECK_AND_GOTO (ret, out); - -                for (i = 0; i < active_size; i++) { -                        snprintf (key, sizeof (key), "%s.active%d", prefix, i); -                        ret = cli_xml_output_vol_status_inode_entry -                                (writer, dict, key); -                        if (ret) -                                goto out; -                } -                /* </active> */ -                ret = xmlTextWriterEndElement (writer); -                XML_RET_CHECK_AND_GOTO (ret, out);          } +        /* </active> */ +        ret = xmlTextWriterEndElement(writer); +        XML_RET_CHECK_AND_GOTO(ret, out); +    } + +    snprintf(key, sizeof(key), "%s.lru_size", prefix); +    ret = dict_get_uint32(dict, key, &lru_size); +    if (ret) +        goto out; +    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"lruSize", +                                          "%" PRIu32, lru_size); +    XML_RET_CHECK_AND_GOTO(ret, out); +    if (lru_size != 0) { +        /* <lru> */ +        ret = xmlTextWriterStartElement(writer, (xmlChar *)"lru"); +        XML_RET_CHECK_AND_GOTO(ret, out); -        snprintf (key, sizeof (key), "%s.lru_size", prefix); -        ret = dict_get_uint32 (dict, key, &lru_size); -        if (ret) +        for (i = 0; i < lru_size; i++) { +            snprintf(key, sizeof(key), "%s.lru%d", prefix, i); +            ret = cli_xml_output_vol_status_inode_entry(writer, dict, key); +            if (ret)                  goto out; -        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"lruSize", -                                               "%"PRIu32, lru_size); -        XML_RET_CHECK_AND_GOTO (ret, out); -        if (lru_size != 0) { -                /* <lru> */ -                ret = xmlTextWriterStartElement (writer, (xmlChar *)"lru"); -                XML_RET_CHECK_AND_GOTO (ret, out); - -                for (i = 0; i < lru_size; i++) { -                        snprintf (key, sizeof (key), "%s.lru%d", prefix, i); -                        ret = cli_xml_output_vol_status_inode_entry -                                (writer, dict, key); -                        if (ret) -                                goto out; -                } -                /* </lru> */ -                ret = xmlTextWriterEndElement (writer); -                XML_RET_CHECK_AND_GOTO (ret, out);          } +        /* </lru> */ +        ret = xmlTextWriterEndElement(writer); +        XML_RET_CHECK_AND_GOTO(ret, out); +    } + +    snprintf(key, sizeof(key), "%s.purge_size", prefix); +    ret = dict_get_uint32(dict, key, &purge_size); +    if (ret) +        goto out; +    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"purgeSize", +                                          "%" PRIu32, purge_size); +    XML_RET_CHECK_AND_GOTO(ret, out); +    if (purge_size != 0) { +        /* <purge> */ +        ret = xmlTextWriterStartElement(writer, (xmlChar *)"purge"); +        XML_RET_CHECK_AND_GOTO(ret, out); -        snprintf (key, sizeof (key), "%s.purge_size", prefix); -        ret = dict_get_uint32 (dict, key, &purge_size); -        if (ret) +        for (i = 0; i < purge_size; i++) { +            snprintf(key, sizeof(key), "%s.purge%d", prefix, i); +            ret = cli_xml_output_vol_status_inode_entry(writer, dict, key); +            if (ret)                  goto out; -        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"purgeSize", -                                               "%"PRIu32, purge_size); -        XML_RET_CHECK_AND_GOTO (ret, out); -        if (purge_size != 0) { -                /* <purge> */ -                ret = xmlTextWriterStartElement (writer, (xmlChar *)"purge"); -                XML_RET_CHECK_AND_GOTO (ret, out); - -                for (i = 0; i < purge_size; i++) { -                        snprintf (key, sizeof (key), "%s.purge%d", prefix, i); -                        ret = cli_xml_output_vol_status_inode_entry -                                (writer, dict, key); -                        if (ret) -                                goto out; -                } -                /* </purge> */ -                ret = xmlTextWriterEndElement (writer); -                XML_RET_CHECK_AND_GOTO (ret, out);          } +        /* </purge> */ +        ret = xmlTextWriterEndElement(writer); +        XML_RET_CHECK_AND_GOTO(ret, out); +    }  out: -        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); -        return ret; +    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret); +    return ret;  }  int -cli_xml_output_vol_status_inode (xmlTextWriterPtr writer, dict_t *dict, -                                 int brick_index) +cli_xml_output_vol_status_inode(xmlTextWriterPtr writer, dict_t *dict, +                                int brick_index)  { -        int             ret = -1; -        int             conn_count = 0; -        char            key[1024] = {0,}; -        int             i = 0; - -        /* <inodeStatus> */ -        ret = xmlTextWriterStartElement (writer, (xmlChar *)"inodeStatus"); -        XML_RET_CHECK_AND_GOTO (ret, out); +    int ret = -1; +    int conn_count = 0; +    char key[1024] = { +        0, +    }; +    int i = 0; + +    /* <inodeStatus> */ +    ret = xmlTextWriterStartElement(writer, (xmlChar *)"inodeStatus"); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    snprintf(key, sizeof(key), "brick%d.conncount", brick_index); +    ret = dict_get_int32(dict, key, &conn_count); +    if (ret) +        goto out; +    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"connections", +                                          "%d", conn_count); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    for (i = 0; i < conn_count; i++) { +        /* <connection> */ +        ret = xmlTextWriterStartElement(writer, (xmlChar *)"connection"); +        XML_RET_CHECK_AND_GOTO(ret, out); -        snprintf (key, sizeof (key), "brick%d.conncount", brick_index); -        ret = dict_get_int32 (dict, key, &conn_count); +        snprintf(key, sizeof(key), "brick%d.conn%d.itable", brick_index, i); +        ret = cli_xml_output_vol_status_itable(writer, dict, key);          if (ret) -                goto out; -        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"connections", -                                               "%d", conn_count); -        XML_RET_CHECK_AND_GOTO (ret, out); - -        for (i = 0; i < conn_count; i++) { -                /* <connection> */ -                ret = xmlTextWriterStartElement (writer, -                                                 (xmlChar *)"connection"); -                XML_RET_CHECK_AND_GOTO (ret, out); - -                snprintf (key, sizeof (key), "brick%d.conn%d.itable", -                          brick_index, i); -                ret = cli_xml_output_vol_status_itable (writer, dict, key); -                if (ret) -                        goto out; +            goto out; -                /* </connection> */ -                ret = xmlTextWriterEndElement (writer); -                XML_RET_CHECK_AND_GOTO (ret, out); -        } +        /* </connection> */ +        ret = xmlTextWriterEndElement(writer); +        XML_RET_CHECK_AND_GOTO(ret, out); +    } -        /* </inodeStatus> */ -        ret= xmlTextWriterEndElement (writer); -        XML_RET_CHECK_AND_GOTO (ret, out); +    /* </inodeStatus> */ +    ret = xmlTextWriterEndElement(writer); +    XML_RET_CHECK_AND_GOTO(ret, out);  out: -        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); -        return ret; +    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret); +    return ret;  }  int -cli_xml_output_vol_status_fdtable (xmlTextWriterPtr writer, dict_t *dict, -                                   char *prefix) +cli_xml_output_vol_status_fdtable(xmlTextWriterPtr writer, dict_t *dict, +                                  char *prefix)  { -        int             ret = -1; -        int             refcount = 0; -        uint32_t        maxfds = 0; -        int             firstfree = 0; -        int             openfds = 0; -        int             fd_pid = 0; -        int             fd_refcount = 0; -        int             fd_flags = 0; -        char            key[1024] = {0,}; -        int             i = 0; - -        /* <fdTable> */ -        ret = xmlTextWriterStartElement (writer, (xmlChar *)"fdTable"); -        XML_RET_CHECK_AND_GOTO (ret, out); - -        snprintf (key, sizeof (key), "%s.refcount", prefix); -        ret = dict_get_int32 (dict, key, &refcount); +    int ret = -1; +    int refcount = 0; +    uint32_t maxfds = 0; +    int firstfree = 0; +    int openfds = 0; +    int fd_pid = 0; +    int fd_refcount = 0; +    int fd_flags = 0; +    char key[1024] = { +        0, +    }; +    int i = 0; + +    /* <fdTable> */ +    ret = xmlTextWriterStartElement(writer, (xmlChar *)"fdTable"); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    snprintf(key, sizeof(key), "%s.refcount", prefix); +    ret = dict_get_int32(dict, key, &refcount); +    if (ret) +        goto out; +    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"refCount", "%d", +                                          refcount); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    snprintf(key, sizeof(key), "%s.maxfds", prefix); +    ret = dict_get_uint32(dict, key, &maxfds); +    if (ret) +        goto out; +    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"maxFds", +                                          "%" PRIu32, maxfds); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    snprintf(key, sizeof(key), "%s.firstfree", prefix); +    ret = dict_get_int32(dict, key, &firstfree); +    if (ret) +        goto out; +    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"firstFree", "%d", +                                          firstfree); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    snprintf(key, sizeof(key), "%s.openfds", prefix); +    ret = dict_get_int32(dict, key, &openfds); +    if (ret) +        goto out; +    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"openFds", "%d", +                                          openfds); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    for (i = 0; i < maxfds; i++) { +        snprintf(key, sizeof(key), "%s.fdentry%d.pid", prefix, i); +        ret = dict_get_int32(dict, key, &fd_pid);          if (ret) -                goto out; -        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"refCount", -                                               "%d", refcount); -        XML_RET_CHECK_AND_GOTO (ret, out); +            continue; -        snprintf (key, sizeof (key), "%s.maxfds", prefix); -        ret = dict_get_uint32 (dict, key, &maxfds); +        snprintf(key, sizeof(key), "%s.fdentry%d.refcount", prefix, i); +        ret = dict_get_int32(dict, key, &fd_refcount);          if (ret) -                goto out; -        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"maxFds", -                                               "%"PRIu32, maxfds); -        XML_RET_CHECK_AND_GOTO (ret, out); +            continue; -        snprintf (key, sizeof (key), "%s.firstfree", prefix); -        ret = dict_get_int32 (dict, key, &firstfree); +        snprintf(key, sizeof(key), "%s.fdentry%d.flags", prefix, i); +        ret = dict_get_int32(dict, key, &fd_flags);          if (ret) -                goto out; -        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"firstFree", -                                               "%d", firstfree); -        XML_RET_CHECK_AND_GOTO (ret, out); +            continue; -        snprintf (key, sizeof (key), "%s.openfds", prefix); -        ret = dict_get_int32 (dict, key, &openfds); -        if (ret) -                goto out; -        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"openFds", -                                               "%d", openfds); -        XML_RET_CHECK_AND_GOTO (ret, out); +        /* <fd> */ +        ret = xmlTextWriterStartElement(writer, (xmlChar *)"fd"); +        XML_RET_CHECK_AND_GOTO(ret, out); -        for (i = 0; i < maxfds; i++) { -                snprintf (key, sizeof (key), "%s.fdentry%d.pid", prefix, i); -                ret = dict_get_int32 (dict, key, &fd_pid); -                if (ret) -                        continue; +        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"entry", "%d", +                                              i + 1); +        XML_RET_CHECK_AND_GOTO(ret, out); -                snprintf (key, sizeof (key), "%s.fdentry%d.refcount", -                          prefix, i); -                ret = dict_get_int32 (dict, key, &fd_refcount); -                if (ret) -                        continue; +        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"pid", "%d", +                                              fd_pid); +        XML_RET_CHECK_AND_GOTO(ret, out); -                snprintf (key, sizeof (key), "%s.fdentry%d.flags", prefix, i); -                ret = dict_get_int32 (dict, key, &fd_flags); -                if (ret) -                        continue; - -                /* <fd> */ -                ret = xmlTextWriterStartElement (writer, (xmlChar *)"fd"); -                XML_RET_CHECK_AND_GOTO (ret, out); - -                ret = xmlTextWriterWriteFormatElement (writer, -                                                       (xmlChar *)"entry", -                                                       "%d", i+1); -                XML_RET_CHECK_AND_GOTO (ret, out); - -                ret = xmlTextWriterWriteFormatElement (writer, -                                                       (xmlChar *)"pid", -                                                       "%d", fd_pid); -                XML_RET_CHECK_AND_GOTO (ret, out); - -                ret = xmlTextWriterWriteFormatElement (writer, -                                                       (xmlChar *)"refCount", -                                                       "%d", fd_refcount); -                XML_RET_CHECK_AND_GOTO (ret, out); - -                ret = xmlTextWriterWriteFormatElement (writer, -                                                       (xmlChar *)"flags", -                                                       "%d", fd_flags); -                XML_RET_CHECK_AND_GOTO (ret, out); - -                /* </fd> */ -                ret = xmlTextWriterEndElement (writer); -                XML_RET_CHECK_AND_GOTO (ret, out); -        } +        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"refCount", +                                              "%d", fd_refcount); +        XML_RET_CHECK_AND_GOTO(ret, out); + +        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"flags", "%d", +                                              fd_flags); +        XML_RET_CHECK_AND_GOTO(ret, out); + +        /* </fd> */ +        ret = xmlTextWriterEndElement(writer); +        XML_RET_CHECK_AND_GOTO(ret, out); +    } -        /* </fdTable> */ -        ret = xmlTextWriterEndElement (writer); -        XML_RET_CHECK_AND_GOTO (ret, out); +    /* </fdTable> */ +    ret = xmlTextWriterEndElement(writer); +    XML_RET_CHECK_AND_GOTO(ret, out);  out: -        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); -        return ret; +    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret); +    return ret;  }  int -cli_xml_output_vol_status_fd (xmlTextWriterPtr writer, dict_t *dict, -                              int brick_index) +cli_xml_output_vol_status_fd(xmlTextWriterPtr writer, dict_t *dict, +                             int brick_index)  { -        int             ret = -1; -        int             conn_count = 0; -        char            key[1024] = {0,}; -        int             i = 0; - -        /* <fdStatus> */ -        ret = xmlTextWriterStartElement (writer, (xmlChar *)"fdStatus"); -        XML_RET_CHECK_AND_GOTO (ret, out); +    int ret = -1; +    int conn_count = 0; +    char key[1024] = { +        0, +    }; +    int i = 0; + +    /* <fdStatus> */ +    ret = xmlTextWriterStartElement(writer, (xmlChar *)"fdStatus"); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    snprintf(key, sizeof(key), "brick%d.conncount", brick_index); +    ret = dict_get_int32(dict, key, &conn_count); +    if (ret) +        goto out; +    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"connections", +                                          "%d", conn_count); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    for (i = 0; i < conn_count; i++) { +        /* <connection> */ +        ret = xmlTextWriterStartElement(writer, (xmlChar *)"connection"); +        XML_RET_CHECK_AND_GOTO(ret, out); -        snprintf (key, sizeof (key), "brick%d.conncount", brick_index); -        ret = dict_get_int32 (dict, key, &conn_count); +        snprintf(key, sizeof(key), "brick%d.conn%d.fdtable", brick_index, i); +        ret = cli_xml_output_vol_status_fdtable(writer, dict, key);          if (ret) -                goto out; -        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"connections", -                                               "%d", conn_count); -        XML_RET_CHECK_AND_GOTO (ret, out); - -        for (i = 0; i < conn_count; i++) { -                /* <connection> */ -                ret = xmlTextWriterStartElement (writer, -                                                 (xmlChar *)"connection"); -                XML_RET_CHECK_AND_GOTO (ret, out); - -                snprintf (key, sizeof (key), "brick%d.conn%d.fdtable", -                          brick_index, i); -                ret = cli_xml_output_vol_status_fdtable (writer, dict, key); -                if (ret) -                        goto out; +            goto out; -                /* </connection> */ -                ret = xmlTextWriterEndElement (writer); -                XML_RET_CHECK_AND_GOTO (ret, out); -        } +        /* </connection> */ +        ret = xmlTextWriterEndElement(writer); +        XML_RET_CHECK_AND_GOTO(ret, out); +    } -        /* </fdStatus> */ -        ret = xmlTextWriterEndElement (writer); -        XML_RET_CHECK_AND_GOTO (ret, out); +    /* </fdStatus> */ +    ret = xmlTextWriterEndElement(writer); +    XML_RET_CHECK_AND_GOTO(ret, out);  out: -        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); -        return ret; +    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret); +    return ret;  }  int -cli_xml_output_vol_status_callframe (xmlTextWriterPtr writer, dict_t *dict, -                                     char *prefix) +cli_xml_output_vol_status_callframe(xmlTextWriterPtr writer, dict_t *dict, +                                    char *prefix)  { -        int             ret = -1; -        int             ref_count = 0; -        char            *translator = NULL; -        int             complete = 0; -        char            *parent = NULL; -        char            *wind_from = NULL; -        char            *wind_to = NULL; -        char            *unwind_from = NULL; -        char            *unwind_to = NULL; -        char            key[1024] = {0,}; - -        /* <callFrame> */ -        ret = xmlTextWriterStartElement (writer, (xmlChar *)"callFrame"); -        XML_RET_CHECK_AND_GOTO (ret, out); - -        snprintf (key, sizeof (key), "%s.refcount", prefix); -        ret = dict_get_int32 (dict, key, &ref_count); -        if (ret) -                goto out; -        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"refCount", -                                               "%d", ref_count); -        XML_RET_CHECK_AND_GOTO (ret, out); - -        snprintf (key, sizeof (key), "%s.translator", prefix); -        ret = dict_get_str (dict, key, &translator); -        if (ret) -                goto out; -        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"translator", -                                               "%s", translator); -        XML_RET_CHECK_AND_GOTO (ret, out); - -        snprintf (key, sizeof (key), "%s.complete", prefix); -        ret = dict_get_int32 (dict, key, &complete); -        if (ret) -                goto out; -        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"complete", -                                               "%d", complete); -        XML_RET_CHECK_AND_GOTO (ret ,out); - -        snprintf (key, sizeof (key), "%s.parent", prefix); -        ret = dict_get_str (dict, key, &parent); -        if (!ret) { -                ret = xmlTextWriterWriteFormatElement (writer, -                                                       (xmlChar *)"parent", -                                                       "%s", parent); -                XML_RET_CHECK_AND_GOTO (ret, out); -        } +    int ret = -1; +    int ref_count = 0; +    char *translator = NULL; +    int complete = 0; +    char *parent = NULL; +    char *wind_from = NULL; +    char *wind_to = NULL; +    char *unwind_from = NULL; +    char *unwind_to = NULL; +    char key[1024] = { +        0, +    }; + +    /* <callFrame> */ +    ret = xmlTextWriterStartElement(writer, (xmlChar *)"callFrame"); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    snprintf(key, sizeof(key), "%s.refcount", prefix); +    ret = dict_get_int32(dict, key, &ref_count); +    if (ret) +        goto out; +    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"refCount", "%d", +                                          ref_count); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    snprintf(key, sizeof(key), "%s.translator", prefix); +    ret = dict_get_str(dict, key, &translator); +    if (ret) +        goto out; +    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"translator", "%s", +                                          translator); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    snprintf(key, sizeof(key), "%s.complete", prefix); +    ret = dict_get_int32(dict, key, &complete); +    if (ret) +        goto out; +    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"complete", "%d", +                                          complete); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    snprintf(key, sizeof(key), "%s.parent", prefix); +    ret = dict_get_str(dict, key, &parent); +    if (!ret) { +        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"parent", "%s", +                                              parent); +        XML_RET_CHECK_AND_GOTO(ret, out); +    } -        snprintf (key, sizeof (key), "%s.windfrom", prefix); -        ret = dict_get_str (dict, key, &wind_from); -        if (!ret) { -                ret = xmlTextWriterWriteFormatElement (writer, -                                                       (xmlChar *)"windFrom", -                                                       "%s", wind_from); -                XML_RET_CHECK_AND_GOTO (ret, out); -        } +    snprintf(key, sizeof(key), "%s.windfrom", prefix); +    ret = dict_get_str(dict, key, &wind_from); +    if (!ret) { +        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"windFrom", +                                              "%s", wind_from); +        XML_RET_CHECK_AND_GOTO(ret, out); +    } -        snprintf (key, sizeof (key), "%s.windto", prefix); -        ret = dict_get_str (dict, key, &wind_to); -        if (!ret) { -                ret = xmlTextWriterWriteFormatElement (writer, -                                                       (xmlChar *)"windTo", -                                                       "%s", wind_to); -                XML_RET_CHECK_AND_GOTO (ret, out); -        } +    snprintf(key, sizeof(key), "%s.windto", prefix); +    ret = dict_get_str(dict, key, &wind_to); +    if (!ret) { +        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"windTo", "%s", +                                              wind_to); +        XML_RET_CHECK_AND_GOTO(ret, out); +    } -        snprintf (key, sizeof (key), "%s.unwindfrom", prefix); -        ret = dict_get_str (dict, key, &unwind_from); -        if (!ret) { -                ret = xmlTextWriterWriteFormatElement (writer, -                                                       (xmlChar *)"unwindFrom", -                                                       "%s", unwind_from); -                XML_RET_CHECK_AND_GOTO (ret, out); -        } +    snprintf(key, sizeof(key), "%s.unwindfrom", prefix); +    ret = dict_get_str(dict, key, &unwind_from); +    if (!ret) { +        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"unwindFrom", +                                              "%s", unwind_from); +        XML_RET_CHECK_AND_GOTO(ret, out); +    } -        snprintf (key, sizeof (key), "%s.unwindto", prefix); -        ret = dict_get_str (dict, key, &unwind_to); -        if (!ret) { -                ret = xmlTextWriterWriteFormatElement (writer, -                                                       (xmlChar *)"unwindTo", -                                                       "%s", unwind_to); -                XML_RET_CHECK_AND_GOTO (ret, out); -        } +    snprintf(key, sizeof(key), "%s.unwindto", prefix); +    ret = dict_get_str(dict, key, &unwind_to); +    if (!ret) { +        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"unwindTo", +                                              "%s", unwind_to); +        XML_RET_CHECK_AND_GOTO(ret, out); +    } -        /* </callFrame> */ -        ret = xmlTextWriterEndElement (writer); -        XML_RET_CHECK_AND_GOTO (ret, out); +    /* </callFrame> */ +    ret = xmlTextWriterEndElement(writer); +    XML_RET_CHECK_AND_GOTO(ret, out);  out: -        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); -        return ret; +    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret); +    return ret;  }  int -cli_xml_output_vol_status_callstack (xmlTextWriterPtr writer, dict_t *dict, -                                     char *prefix) +cli_xml_output_vol_status_callstack(xmlTextWriterPtr writer, dict_t *dict, +                                    char *prefix)  { -        int             ret = -1; -        int             uid = 0; -        int             gid = 0; -        int             pid = 0; -        uint64_t        unique = 0; -        int             frame_count = 0; -        char            key[1024] = {0,}; -        int             i = 0; - -        /* <callStack> */ -        ret = xmlTextWriterStartElement (writer, (xmlChar *)"callStack"); -        XML_RET_CHECK_AND_GOTO (ret, out); - -        snprintf (key, sizeof (key), "%s.uid", prefix); -        ret = dict_get_int32 (dict, key, &uid); -        if (ret) -                goto out; -        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"uid", -                                               "%d", uid); -        XML_RET_CHECK_AND_GOTO (ret, out); - -        snprintf (key, sizeof (key), "%s.gid", prefix); -        ret = dict_get_int32 (dict, key, &gid); -        if (ret) -                goto out; -        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"gid", -                                               "%d", gid); -        XML_RET_CHECK_AND_GOTO (ret, out); - -        snprintf (key, sizeof (key), "%s.pid", prefix); -        ret = dict_get_int32 (dict, key, &pid); -        if (ret) -                goto out; -        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"pid", -                                               "%d", pid); -        XML_RET_CHECK_AND_GOTO (ret, out); - -        snprintf (key, sizeof (key), "%s.unique", prefix); -        ret = dict_get_uint64 (dict, key, &unique); +    int ret = -1; +    int uid = 0; +    int gid = 0; +    int pid = 0; +    uint64_t unique = 0; +    int frame_count = 0; +    char key[1024] = { +        0, +    }; +    int i = 0; + +    /* <callStack> */ +    ret = xmlTextWriterStartElement(writer, (xmlChar *)"callStack"); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    snprintf(key, sizeof(key), "%s.uid", prefix); +    ret = dict_get_int32(dict, key, &uid); +    if (ret) +        goto out; +    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"uid", "%d", uid); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    snprintf(key, sizeof(key), "%s.gid", prefix); +    ret = dict_get_int32(dict, key, &gid); +    if (ret) +        goto out; +    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"gid", "%d", gid); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    snprintf(key, sizeof(key), "%s.pid", prefix); +    ret = dict_get_int32(dict, key, &pid); +    if (ret) +        goto out; +    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"pid", "%d", pid); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    snprintf(key, sizeof(key), "%s.unique", prefix); +    ret = dict_get_uint64(dict, key, &unique); +    if (ret) +        goto out; +    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"unique", +                                          "%" PRIu64, unique); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    snprintf(key, sizeof(key), "%s.count", prefix); +    ret = dict_get_int32(dict, key, &frame_count); +    if (ret) +        goto out; +    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"frameCount", "%d", +                                          frame_count); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    for (i = 0; i < frame_count; i++) { +        snprintf(key, sizeof(key), "%s.frame%d", prefix, i); +        ret = cli_xml_output_vol_status_callframe(writer, dict, key);          if (ret) -                goto out; -        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"unique", -                                               "%"PRIu64, unique); -        XML_RET_CHECK_AND_GOTO (ret, out); - -        snprintf (key, sizeof (key), "%s.count", prefix); -        ret = dict_get_int32 (dict, key, &frame_count); -        if (ret) -                goto out; -        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"frameCount", -                                               "%d", frame_count); -        XML_RET_CHECK_AND_GOTO (ret, out); - -        for (i = 0; i < frame_count; i++) { -                snprintf (key, sizeof (key), "%s.frame%d", prefix, i); -                ret = cli_xml_output_vol_status_callframe (writer, dict, -                                                           key); -                if (ret) -                        goto out; -        } +            goto out; +    } -        /* </callStack> */ -        ret = xmlTextWriterEndElement (writer); -        XML_RET_CHECK_AND_GOTO (ret, out); +    /* </callStack> */ +    ret = xmlTextWriterEndElement(writer); +    XML_RET_CHECK_AND_GOTO(ret, out);  out: -        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); -        return ret; +    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret); +    return ret;  }  int -cli_xml_output_vol_status_callpool (xmlTextWriterPtr writer, dict_t *dict, -                                    int brick_index) +cli_xml_output_vol_status_callpool(xmlTextWriterPtr writer, dict_t *dict, +                                   int brick_index)  { -        int             ret = -1; -        int             call_count = 0; -        char            key[1024] = {0,}; -        int             i = 0; - -        /* <callpoolStatus> */ -        ret = xmlTextWriterStartElement (writer, (xmlChar *)"callpoolStatus"); -        XML_RET_CHECK_AND_GOTO (ret, out); - -        snprintf (key, sizeof (key), "brick%d.callpool.count", brick_index); -        ret = dict_get_int32 (dict, key, &call_count); +    int ret = -1; +    int call_count = 0; +    char key[1024] = { +        0, +    }; +    int i = 0; + +    /* <callpoolStatus> */ +    ret = xmlTextWriterStartElement(writer, (xmlChar *)"callpoolStatus"); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    snprintf(key, sizeof(key), "brick%d.callpool.count", brick_index); +    ret = dict_get_int32(dict, key, &call_count); +    if (ret) +        goto out; +    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"count", "%d", +                                          call_count); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    for (i = 0; i < call_count; i++) { +        snprintf(key, sizeof(key), "brick%d.callpool.stack%d", brick_index, i); +        ret = cli_xml_output_vol_status_callstack(writer, dict, key);          if (ret) -                goto out; -        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"count", -                                               "%d", call_count); -        XML_RET_CHECK_AND_GOTO (ret, out); - -        for (i = 0; i < call_count; i++) { -                snprintf (key, sizeof (key), "brick%d.callpool.stack%d", -                          brick_index, i); -                ret = cli_xml_output_vol_status_callstack (writer, dict, -                                                           key); -                if (ret) -                        goto out; -        } +            goto out; +    } -        /* </callpoolStatus> */ -        ret = xmlTextWriterEndElement (writer); -        XML_RET_CHECK_AND_GOTO (ret, out); +    /* </callpoolStatus> */ +    ret = xmlTextWriterEndElement(writer); +    XML_RET_CHECK_AND_GOTO(ret, out);  out: -        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); -        return ret; +    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret); +    return ret;  }  #endif  int -cli_xml_output_vol_status_begin (cli_local_t *local, int op_ret, int op_errno, -                                 char *op_errstr) +cli_xml_output_vol_status_begin(cli_local_t *local, int op_ret, int op_errno, +                                char *op_errstr)  {  #if (HAVE_LIB_XML) -        int                     ret = -1; +    int ret = -1; -        ret = cli_begin_xml_output (&(local->writer), &(local->doc)); -        XML_RET_CHECK_AND_GOTO (ret, out); +    ret = cli_begin_xml_output(&(local->writer), &(local->doc)); +    XML_RET_CHECK_AND_GOTO(ret, out); -        ret = cli_xml_output_common (local->writer, op_ret, op_errno, -                                     op_errstr); -        XML_RET_CHECK_AND_GOTO (ret, out); +    ret = cli_xml_output_common(local->writer, op_ret, op_errno, op_errstr); +    XML_RET_CHECK_AND_GOTO(ret, out); -        /* <volStatus> */ -        ret = xmlTextWriterStartElement (local->writer, -                                         (xmlChar *) "volStatus"); -        XML_RET_CHECK_AND_GOTO (ret, out); +    /* <volStatus> */ +    ret = xmlTextWriterStartElement(local->writer, (xmlChar *)"volStatus"); +    XML_RET_CHECK_AND_GOTO(ret, out); -        /* <volumes> */ -        ret = xmlTextWriterStartElement (local->writer, (xmlChar *)"volumes"); -        XML_RET_CHECK_AND_GOTO (ret, out); +    /* <volumes> */ +    ret = xmlTextWriterStartElement(local->writer, (xmlChar *)"volumes"); +    XML_RET_CHECK_AND_GOTO(ret, out);  out: -        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); -        return ret; +    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret); +    return ret;  #else -        return 0; +    return 0;  #endif  }  int -cli_xml_output_vol_status_end (cli_local_t *local) +cli_xml_output_vol_status_end(cli_local_t *local)  {  #if (HAVE_LIB_XML) -        int     ret = -1; +    int ret = -1; -        /* </volumes> */ -        ret = xmlTextWriterEndElement (local->writer); -        XML_RET_CHECK_AND_GOTO (ret, out); +    /* </volumes> */ +    ret = xmlTextWriterEndElement(local->writer); +    XML_RET_CHECK_AND_GOTO(ret, out); -        /* </volStatus> */ -        ret = xmlTextWriterEndElement (local->writer); -        XML_RET_CHECK_AND_GOTO(ret, out); +    /* </volStatus> */ +    ret = xmlTextWriterEndElement(local->writer); +    XML_RET_CHECK_AND_GOTO(ret, out); -        ret = cli_end_xml_output (local->writer, local->doc); +    ret = cli_end_xml_output(local->writer, local->doc);  out: -        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); -        return ret; +    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret); +    return ret;  #else -        return 0; +    return 0;  #endif  }  #if (HAVE_LIB_XML)  int -cli_xml_output_remove_brick_task_params (xmlTextWriterPtr writer, dict_t *dict, -                                         char *prefix) +cli_xml_output_remove_brick_task_params(xmlTextWriterPtr writer, dict_t *dict, +                                        char *prefix)  { -        int             ret = -1; -        char            key[1024] = {0,}; -        int             count = 0; -        int             i = 0; -        char            *brick = NULL; - -        /* <params> */ -        ret = xmlTextWriterStartElement (writer, (xmlChar *)"params"); -        XML_RET_CHECK_AND_GOTO (ret, out); - -        snprintf (key, sizeof (key), "%s.count", prefix); -        ret = dict_get_int32 (dict, key, &count); +    int ret = -1; +    char key[1024] = { +        0, +    }; +    int count = 0; +    int i = 0; +    char *brick = NULL; + +    /* <params> */ +    ret = xmlTextWriterStartElement(writer, (xmlChar *)"params"); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    snprintf(key, sizeof(key), "%s.count", prefix); +    ret = dict_get_int32(dict, key, &count); +    if (ret) +        goto out; + +    for (i = 1; i <= count; i++) { +        snprintf(key, sizeof(key), "%s.brick%d", prefix, i); +        ret = dict_get_str(dict, key, &brick);          if (ret) -                goto out; - -        for (i = 1; i <= count; i++) { -                snprintf (key, sizeof (key), "%s.brick%d", prefix, i); -                ret = dict_get_str (dict, key, &brick); -                if (ret) -                        goto out; -                ret = xmlTextWriterWriteFormatElement (writer, -                                                       (xmlChar *)"brick", -                                                       "%s", brick); -                XML_RET_CHECK_AND_GOTO (ret, out); -                brick = NULL; -        } +            goto out; +        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"brick", "%s", +                                              brick); +        XML_RET_CHECK_AND_GOTO(ret, out); +        brick = NULL; +    } -        /* </param> */ -        ret = xmlTextWriterEndElement (writer); -        XML_RET_CHECK_AND_GOTO (ret, out); +    /* </param> */ +    ret = xmlTextWriterEndElement(writer); +    XML_RET_CHECK_AND_GOTO(ret, out);  out: -        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); -        return ret; +    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret); +    return ret;  }  int -cli_xml_output_vol_status_tasks (cli_local_t *local, dict_t *dict) { -        int                     ret = -1; -        char                    *task_type = NULL; -        char                    *task_id_str = NULL; -        int                     status = 0; -        int                     tasks = 0; -        char                    key[1024] = {0,}; -        int                     i = 0; - -        /* <tasks> */ -        ret = xmlTextWriterStartElement (local->writer, (xmlChar *)"tasks"); -        XML_RET_CHECK_AND_GOTO (ret, out); - -        ret = dict_get_int32 (dict, "tasks", &tasks); -        if (ret) -                goto out; +cli_xml_output_vol_status_tasks(cli_local_t *local, dict_t *dict) +{ +    int ret = -1; +    char *task_type = NULL; +    char *task_id_str = NULL; +    int status = 0; +    int tasks = 0; +    char key[1024] = { +        0, +    }; +    int i = 0; + +    /* <tasks> */ +    ret = xmlTextWriterStartElement(local->writer, (xmlChar *)"tasks"); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    ret = dict_get_int32(dict, "tasks", &tasks); +    if (ret) +        goto out; + +    for (i = 0; i < tasks; i++) { +        /* <task> */ +        ret = xmlTextWriterStartElement(local->writer, (xmlChar *)"task"); +        XML_RET_CHECK_AND_GOTO(ret, out); -        for (i = 0; i < tasks; i++) { -                /* <task> */ -                ret = xmlTextWriterStartElement (local->writer, -                                                 (xmlChar *)"task"); -                XML_RET_CHECK_AND_GOTO (ret, out); +        snprintf(key, sizeof(key), "task%d.type", i); +        ret = dict_get_str(dict, key, &task_type); +        if (ret) +            goto out; +        ret = xmlTextWriterWriteFormatElement(local->writer, (xmlChar *)"type", +                                              "%s", task_type); +        XML_RET_CHECK_AND_GOTO(ret, out); -                snprintf (key, sizeof (key), "task%d.type", i); -                ret = dict_get_str (dict, key, &task_type); -                if (ret) -                        goto out; -                ret = xmlTextWriterWriteFormatElement (local->writer, -                                                       (xmlChar *)"type", -                                                       "%s", task_type); -                XML_RET_CHECK_AND_GOTO (ret, out); +        snprintf(key, sizeof(key), "task%d.id", i); +        ret = dict_get_str(dict, key, &task_id_str); +        if (ret) +            goto out; +        ret = xmlTextWriterWriteFormatElement(local->writer, (xmlChar *)"id", +                                              "%s", task_id_str); +        XML_RET_CHECK_AND_GOTO(ret, out); -                snprintf (key, sizeof (key), "task%d.id", i); -                ret = dict_get_str (dict, key, &task_id_str); -                if (ret) -                        goto out; -                ret = xmlTextWriterWriteFormatElement (local->writer, -                                                       (xmlChar *)"id", -                                                       "%s", task_id_str); -                XML_RET_CHECK_AND_GOTO (ret, out); +        snprintf(key, sizeof(key), "task%d.status", i); +        ret = dict_get_int32(dict, key, &status); +        if (ret) +            goto out; +        ret = xmlTextWriterWriteFormatElement( +            local->writer, (xmlChar *)"status", "%d", status); +        XML_RET_CHECK_AND_GOTO(ret, out); -                snprintf (key, sizeof (key), "task%d.status", i); -                ret = dict_get_int32 (dict, key, &status); -                if (ret) -                        goto out; -                ret = xmlTextWriterWriteFormatElement (local->writer, -                                                       (xmlChar *)"status", -                                                       "%d", status); -                XML_RET_CHECK_AND_GOTO (ret, out); - -                ret = xmlTextWriterWriteFormatElement (local->writer, -                                                       (xmlChar *)"statusStr", -                                                       "%s", -                                             cli_vol_task_status_str[status]); - -                XML_RET_CHECK_AND_GOTO (ret, out); - -                snprintf (key, sizeof (key), "task%d", i); -                if (!strcmp (task_type, "Remove brick")) { -                        ret = cli_xml_output_remove_brick_task_params -                                (local->writer, dict, key); -                        if (ret) -                                goto out; -                } +        ret = xmlTextWriterWriteFormatElement(local->writer, +                                              (xmlChar *)"statusStr", "%s", +                                              cli_vol_task_status_str[status]); +        XML_RET_CHECK_AND_GOTO(ret, out); -                /* </task> */ -                ret = xmlTextWriterEndElement (local->writer); -                XML_RET_CHECK_AND_GOTO (ret, out); +        snprintf(key, sizeof(key), "task%d", i); +        if (!strcmp(task_type, "Remove brick")) { +            ret = cli_xml_output_remove_brick_task_params(local->writer, dict, +                                                          key); +            if (ret) +                goto out;          } -        /* </tasks> */ -        ret = xmlTextWriterEndElement (local->writer); -        XML_RET_CHECK_AND_GOTO (ret, out); +        /* </task> */ +        ret = xmlTextWriterEndElement(local->writer); +        XML_RET_CHECK_AND_GOTO(ret, out); +    } + +    /* </tasks> */ +    ret = xmlTextWriterEndElement(local->writer); +    XML_RET_CHECK_AND_GOTO(ret, out);  out: -        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); -        return ret; +    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret); +    return ret;  }  #endif  int -cli_xml_output_vol_status_tasks_detail (cli_local_t *local, dict_t *dict) +cli_xml_output_vol_status_tasks_detail(cli_local_t *local, dict_t *dict)  {  #if (HAVE_LIB_XML) -        int    ret     = -1; -        char  *volname = NULL; +    int ret = -1; +    char *volname = NULL; -        /*<volume>*/ -        ret = xmlTextWriterStartElement (local->writer, (xmlChar *)"volume"); -        XML_RET_CHECK_AND_GOTO (ret, out); +    /*<volume>*/ +    ret = xmlTextWriterStartElement(local->writer, (xmlChar *)"volume"); +    XML_RET_CHECK_AND_GOTO(ret, out); -        ret = dict_get_str (dict, "volname", &volname); -        if (ret) -                goto out; -        ret = xmlTextWriterWriteFormatElement (local->writer, -                                               (xmlChar *)"volName", "%s", -                                               volname); -        XML_RET_CHECK_AND_GOTO (ret, out); +    ret = dict_get_str(dict, "volname", &volname); +    if (ret) +        goto out; +    ret = xmlTextWriterWriteFormatElement(local->writer, (xmlChar *)"volName", +                                          "%s", volname); +    XML_RET_CHECK_AND_GOTO(ret, out); -        ret = cli_xml_output_vol_status_tasks (local, dict); -        if (ret) -                goto out; +    ret = cli_xml_output_vol_status_tasks(local, dict); +    if (ret) +        goto out; -        /* </volume> */ -        ret = xmlTextWriterEndElement (local->writer); -        XML_RET_CHECK_AND_GOTO (ret, out); +    /* </volume> */ +    ret = xmlTextWriterEndElement(local->writer); +    XML_RET_CHECK_AND_GOTO(ret, out);  out: -        return ret; +    return ret;  #else -        return 0; +    return 0;  #endif  }  int -cli_xml_output_vol_status (cli_local_t *local, dict_t *dict) +cli_xml_output_vol_status(cli_local_t *local, dict_t *dict)  {  #if (HAVE_LIB_XML) -        int                     ret = -1; -        char                    *volname = NULL; -        int                     brick_count = 0; -        int                     brick_index_max = -1; -        int                     other_count = 0; -        int                     index_max = 0; -        uint32_t                cmd = GF_CLI_STATUS_NONE; -        int                     online = 0; -        gf_boolean_t            node_present = _gf_true; -        int                     i; -        int                     type            = -1; -        int                     hot_brick_count = -1; - -        /* <volume> */ -        ret = xmlTextWriterStartElement (local->writer, (xmlChar *)"volume"); -        XML_RET_CHECK_AND_GOTO (ret, out); - -        ret = dict_get_str (dict, "volname", &volname); -        if (ret) -                goto out; -        ret = xmlTextWriterWriteFormatElement (local->writer, -                                               (xmlChar *)"volName", "%s", -                                               volname); -        XML_RET_CHECK_AND_GOTO (ret, out); - -        ret = dict_get_int32 (dict, "count", &brick_count); +    int ret = -1; +    char *volname = NULL; +    int brick_count = 0; +    int brick_index_max = -1; +    int other_count = 0; +    int index_max = 0; +    uint32_t cmd = GF_CLI_STATUS_NONE; +    int online = 0; +    gf_boolean_t node_present = _gf_true; +    int i; +    int type = -1; +    int hot_brick_count = -1; + +    /* <volume> */ +    ret = xmlTextWriterStartElement(local->writer, (xmlChar *)"volume"); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    ret = dict_get_str(dict, "volname", &volname); +    if (ret) +        goto out; +    ret = xmlTextWriterWriteFormatElement(local->writer, (xmlChar *)"volName", +                                          "%s", volname); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    ret = dict_get_int32(dict, "count", &brick_count); +    if (ret) +        goto out; +    ret = xmlTextWriterWriteFormatElement(local->writer, (xmlChar *)"nodeCount", +                                          "%d", brick_count); + +    XML_RET_CHECK_AND_GOTO(ret, out); + +    ret = dict_get_uint32(dict, "cmd", &cmd); +    if (ret) +        goto out; + +    ret = dict_get_int32(dict, "brick-index-max", &brick_index_max); +    if (ret) +        goto out; +    ret = dict_get_int32(dict, "other-count", &other_count); +    if (ret) +        goto out; + +    index_max = brick_index_max + other_count; + +    ret = dict_get_int32(dict, "type", &type); +    if (ret) +        goto out; + +    if (type == GF_CLUSTER_TYPE_TIER) { +        ret = dict_get_int32(dict, "hot_brick_count", &hot_brick_count);          if (ret) -                goto out; -        ret = xmlTextWriterWriteFormatElement (local->writer, -                                               (xmlChar *)"nodeCount", "%d", -                                               brick_count); - -        XML_RET_CHECK_AND_GOTO (ret, out); +            goto out; -        ret = dict_get_uint32 (dict, "cmd", &cmd); -        if (ret) -                goto out; - -        ret = dict_get_int32 (dict, "brick-index-max", &brick_index_max); -        if (ret) -                goto out; -        ret = dict_get_int32 (dict, "other-count", &other_count); -        if (ret) -                goto out; - -        index_max = brick_index_max + other_count; - -        ret = dict_get_int32 (dict, "type", &type); -        if (ret) +        ret = xmlTextWriterStartElement(local->writer, (xmlChar *)"hotBricks"); +        XML_RET_CHECK_AND_GOTO(ret, out); +    } +    for (i = 0; i <= index_max; i++) { +        if (type == GF_CLUSTER_TYPE_TIER && i == hot_brick_count) { +            /* </hotBricks>*/ +            ret = xmlTextWriterEndElement(local->writer); +            XML_RET_CHECK_AND_GOTO(ret, out); +            ret = xmlTextWriterStartElement(local->writer, +                                            (xmlChar *)"coldBricks"); +            XML_RET_CHECK_AND_GOTO(ret, out); +        } +        ret = cli_xml_output_vol_status_common(local->writer, dict, i, &online, +                                               &node_present); +        if (ret) { +            if (node_present)                  goto out; - -        if (type == GF_CLUSTER_TYPE_TIER) { -                ret = dict_get_int32 (dict, "hot_brick_count", -                                      &hot_brick_count); -                if (ret) -                        goto out; - -                ret = xmlTextWriterStartElement -                        (local->writer, (xmlChar *)"hotBricks"); -                XML_RET_CHECK_AND_GOTO (ret, out); - +            else +                continue;          } -        for (i = 0; i <= index_max; i++) { -                if (type == GF_CLUSTER_TYPE_TIER && i == hot_brick_count) { +        switch (cmd & GF_CLI_STATUS_MASK) { +            case GF_CLI_STATUS_DETAIL: +                ret = cli_xml_output_vol_status_detail(local->writer, dict, i); +                if (ret) +                    goto out; +                break; -                        /* </hotBricks>*/ -                        ret = xmlTextWriterEndElement (local->writer); -                        XML_RET_CHECK_AND_GOTO (ret, out); -                        ret = xmlTextWriterStartElement (local->writer, -                                        (xmlChar *)"coldBricks"); -                        XML_RET_CHECK_AND_GOTO (ret, out); -                } -                ret = cli_xml_output_vol_status_common (local->writer, dict, i, -                                                        &online, &node_present); -                if (ret) { -                        if (node_present) -                                goto out; -                        else -                                continue; +            case GF_CLI_STATUS_MEM: +                if (online) { +                    ret = cli_xml_output_vol_status_mem(local->writer, dict, i); +                    if (ret) +                        goto out;                  } +                break; -                switch (cmd & GF_CLI_STATUS_MASK) { -                case GF_CLI_STATUS_DETAIL: -                        ret = cli_xml_output_vol_status_detail (local->writer, -                                                                dict, i); -                        if (ret) -                                goto out; -                        break; - -                case GF_CLI_STATUS_MEM: -                        if (online) { -                                ret = cli_xml_output_vol_status_mem -                                        (local->writer, dict, i); -                                if (ret) -                                        goto out; -                        } -                        break; - -                case GF_CLI_STATUS_CLIENTS: -                        if (online) { -                                ret = cli_xml_output_vol_status_clients -                                        (local->writer, dict, i); -                                if (ret) -                                        goto out; -                        } -                        break; - -                case GF_CLI_STATUS_INODE: -                        if (online) { -                                ret = cli_xml_output_vol_status_inode -                                        (local->writer, dict, i); -                                if (ret) -                                        goto out; -                        } -                        break; - -                case GF_CLI_STATUS_FD: -                        if (online) { -                                ret = cli_xml_output_vol_status_fd -                                        (local->writer, dict, i); -                                if (ret) -                                        goto out; -                        } -                        break; - -                case GF_CLI_STATUS_CALLPOOL: -                        if (online) { -                                ret = cli_xml_output_vol_status_callpool -                                        (local->writer, dict, i); -                                if (ret) -                                        goto out; -                        } -                        break; -                default: -                        break; +            case GF_CLI_STATUS_CLIENTS: +                if (online) { +                    ret = cli_xml_output_vol_status_clients(local->writer, dict, +                                                            i); +                    if (ret) +                        goto out; +                } +                break; +            case GF_CLI_STATUS_INODE: +                if (online) { +                    ret = cli_xml_output_vol_status_inode(local->writer, dict, +                                                          i); +                    if (ret) +                        goto out;                  } +                break; -                /* </node>  was opened in cli_xml_output_vol_status_common()*/ -                ret = xmlTextWriterEndElement (local->writer); -                XML_RET_CHECK_AND_GOTO (ret, out); +            case GF_CLI_STATUS_FD: +                if (online) { +                    ret = cli_xml_output_vol_status_fd(local->writer, dict, i); +                    if (ret) +                        goto out; +                } +                break; -                /* </coldBricks>*/ -                if (type == GF_CLUSTER_TYPE_TIER && i == brick_index_max) { -                        ret = xmlTextWriterEndElement (local->writer); -                        XML_RET_CHECK_AND_GOTO (ret, out); +            case GF_CLI_STATUS_CALLPOOL: +                if (online) { +                    ret = cli_xml_output_vol_status_callpool(local->writer, +                                                             dict, i); +                    if (ret) +                        goto out;                  } +                break; +            default: +                break;          } -        /* Tasks are only present when a normal volume status call is done on a -         * single volume or on all volumes -         */ -        if (((cmd & GF_CLI_STATUS_MASK) == GF_CLI_STATUS_NONE) && -            (cmd & (GF_CLI_STATUS_VOL|GF_CLI_STATUS_ALL))) { -                ret = cli_xml_output_vol_status_tasks (local, dict); -                if (ret) -                        goto out; +        /* </node>  was opened in cli_xml_output_vol_status_common()*/ +        ret = xmlTextWriterEndElement(local->writer); +        XML_RET_CHECK_AND_GOTO(ret, out); + +        /* </coldBricks>*/ +        if (type == GF_CLUSTER_TYPE_TIER && i == brick_index_max) { +            ret = xmlTextWriterEndElement(local->writer); +            XML_RET_CHECK_AND_GOTO(ret, out);          } +    } -        /* </volume> */ -        ret = xmlTextWriterEndElement (local->writer); -        XML_RET_CHECK_AND_GOTO (ret, out); +    /* Tasks are only present when a normal volume status call is done on a +     * single volume or on all volumes +     */ +    if (((cmd & GF_CLI_STATUS_MASK) == GF_CLI_STATUS_NONE) && +        (cmd & (GF_CLI_STATUS_VOL | GF_CLI_STATUS_ALL))) { +        ret = cli_xml_output_vol_status_tasks(local, dict); +        if (ret) +            goto out; +    } + +    /* </volume> */ +    ret = xmlTextWriterEndElement(local->writer); +    XML_RET_CHECK_AND_GOTO(ret, out);  out: -        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); -        return ret; +    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret); +    return ret;  #else -        return 0; +    return 0;  #endif  }  #if (HAVE_LIB_XML)  int -cli_xml_output_vol_top_rw_perf (xmlTextWriterPtr writer, dict_t *dict, -                                int brick_index, int member_index) +cli_xml_output_vol_top_rw_perf(xmlTextWriterPtr writer, dict_t *dict, +                               int brick_index, int member_index)  { -        int        ret = -1; -        char      *filename = NULL; -        uint64_t   throughput = 0; -        long int   time_sec = 0; -        long int   time_usec = 0; -        char       timestr[256] = {0,}; -        char       key[1024] = {0,}; -        int        len; - -        /* <file> */ -        ret = xmlTextWriterStartElement (writer, (xmlChar *)"file"); -        XML_RET_CHECK_AND_GOTO (ret, out); - -        snprintf (key, sizeof (key), "%d-filename-%d", brick_index, -                  member_index); -        ret = dict_get_str (dict, key, &filename); -        if (ret) -                goto out; -        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"filename", -                                               "%s", filename); -        XML_RET_CHECK_AND_GOTO (ret, out); - -        snprintf (key, sizeof (key), "%d-value-%d", brick_index, member_index); -        ret = dict_get_uint64 (dict, key, &throughput); -        if (ret) -                goto out; -        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"count", -                                               "%"PRIu64, throughput); -        XML_RET_CHECK_AND_GOTO (ret, out); - -        snprintf (key, sizeof (key), "%d-time-sec-%d", brick_index, -                  member_index); -        ret = dict_get_int32 (dict, key, (int32_t *)&time_sec); -        if (ret) -                goto out; - -        snprintf (key, sizeof (key), "%d-time-usec-%d", brick_index, -                  member_index); -        ret = dict_get_int32 (dict, key, (int32_t *)&time_usec); -        if (ret) -                goto out; - -        gf_time_fmt (timestr, sizeof timestr, time_sec, gf_timefmt_FT); -        len = strlen (timestr); -        snprintf (timestr + len, -                  sizeof (timestr) - len, -                  ".%"GF_PRI_SUSECONDS, time_usec); -        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"time", -                                               "%s", timestr); -        XML_RET_CHECK_AND_GOTO (ret, out); - -        /* </file> */ -        ret = xmlTextWriterEndElement (writer); -        XML_RET_CHECK_AND_GOTO (ret, out); +    int ret = -1; +    char *filename = NULL; +    uint64_t throughput = 0; +    long int time_sec = 0; +    long int time_usec = 0; +    char timestr[256] = { +        0, +    }; +    char key[1024] = { +        0, +    }; +    int len; + +    /* <file> */ +    ret = xmlTextWriterStartElement(writer, (xmlChar *)"file"); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    snprintf(key, sizeof(key), "%d-filename-%d", brick_index, member_index); +    ret = dict_get_str(dict, key, &filename); +    if (ret) +        goto out; +    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"filename", "%s", +                                          filename); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    snprintf(key, sizeof(key), "%d-value-%d", brick_index, member_index); +    ret = dict_get_uint64(dict, key, &throughput); +    if (ret) +        goto out; +    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"count", +                                          "%" PRIu64, throughput); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    snprintf(key, sizeof(key), "%d-time-sec-%d", brick_index, member_index); +    ret = dict_get_int32(dict, key, (int32_t *)&time_sec); +    if (ret) +        goto out; + +    snprintf(key, sizeof(key), "%d-time-usec-%d", brick_index, member_index); +    ret = dict_get_int32(dict, key, (int32_t *)&time_usec); +    if (ret) +        goto out; + +    gf_time_fmt(timestr, sizeof timestr, time_sec, gf_timefmt_FT); +    len = strlen(timestr); +    snprintf(timestr + len, sizeof(timestr) - len, ".%" GF_PRI_SUSECONDS, +             time_usec); +    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"time", "%s", +                                          timestr); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    /* </file> */ +    ret = xmlTextWriterEndElement(writer); +    XML_RET_CHECK_AND_GOTO(ret, out);  out: -        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); -        return ret; +    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret); +    return ret;  }  int -cli_xml_output_vol_top_other (xmlTextWriterPtr writer, dict_t *dict, -                                int brick_index, int member_index) +cli_xml_output_vol_top_other(xmlTextWriterPtr writer, dict_t *dict, +                             int brick_index, int member_index)  { -        int             ret = -1; -        char            *filename = NULL; -        uint64_t        count = 0; -        char            key[1024] = {0,}; - -        /* <file> */ -        ret = xmlTextWriterStartElement (writer, (xmlChar *)"file"); -        XML_RET_CHECK_AND_GOTO (ret, out); - -        snprintf (key, sizeof (key), "%d-filename-%d", brick_index, -                  member_index); -        ret = dict_get_str (dict, key, &filename); -        if (ret) -                goto out; -        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"filename", -                                               "%s", filename); -        XML_RET_CHECK_AND_GOTO (ret, out); - -        snprintf (key, sizeof (key), "%d-value-%d", brick_index, member_index); -        ret = dict_get_uint64 (dict, key, &count); -        if (ret) -                goto out; -        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"count", -                                               "%"PRIu64, count); -        XML_RET_CHECK_AND_GOTO (ret, out); - -        /* </file> */ -        ret = xmlTextWriterEndElement (writer); -        XML_RET_CHECK_AND_GOTO (ret, out); +    int ret = -1; +    char *filename = NULL; +    uint64_t count = 0; +    char key[1024] = { +        0, +    }; + +    /* <file> */ +    ret = xmlTextWriterStartElement(writer, (xmlChar *)"file"); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    snprintf(key, sizeof(key), "%d-filename-%d", brick_index, member_index); +    ret = dict_get_str(dict, key, &filename); +    if (ret) +        goto out; +    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"filename", "%s", +                                          filename); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    snprintf(key, sizeof(key), "%d-value-%d", brick_index, member_index); +    ret = dict_get_uint64(dict, key, &count); +    if (ret) +        goto out; +    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"count", +                                          "%" PRIu64, count); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    /* </file> */ +    ret = xmlTextWriterEndElement(writer); +    XML_RET_CHECK_AND_GOTO(ret, out);  out: -        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); -        return ret; +    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret); +    return ret;  }  #endif  int -cli_xml_output_vol_top (dict_t *dict, int op_ret, int op_errno, -                        char *op_errstr) +cli_xml_output_vol_top(dict_t *dict, int op_ret, int op_errno, char *op_errstr)  {  #if (HAVE_LIB_XML) -        int                     ret = -1; -        xmlTextWriterPtr        writer = NULL; -        xmlDocPtr               doc = NULL; -        int                     brick_count = 0; -        int                     top_op = GF_CLI_TOP_NONE; -        char                    *brick_name = NULL; -        int                     members = 0; -        uint64_t                current_open = 0; -        uint64_t                max_open = 0; -        char                    *max_open_time = NULL; -        double                  throughput = 0.0; -        double                  time_taken = 0.0; -        char                    key[1024] = {0,}; -        int                     i = 0; -        int                     j = 0; - -        ret = cli_begin_xml_output (&writer, &doc); -        if (ret) -                goto out; - -        ret = cli_xml_output_common (writer, op_ret, op_errno, op_errstr); -        if (ret) -                goto out; - -        /* <volTop> */ -        ret = xmlTextWriterStartElement (writer, (xmlChar *)"volTop"); -        XML_RET_CHECK_AND_GOTO (ret, out); +    int ret = -1; +    xmlTextWriterPtr writer = NULL; +    xmlDocPtr doc = NULL; +    int brick_count = 0; +    int top_op = GF_CLI_TOP_NONE; +    char *brick_name = NULL; +    int members = 0; +    uint64_t current_open = 0; +    uint64_t max_open = 0; +    char *max_open_time = NULL; +    double throughput = 0.0; +    double time_taken = 0.0; +    char key[1024] = { +        0, +    }; +    int i = 0; +    int j = 0; + +    ret = cli_begin_xml_output(&writer, &doc); +    if (ret) +        goto out; + +    ret = cli_xml_output_common(writer, op_ret, op_errno, op_errstr); +    if (ret) +        goto out; + +    /* <volTop> */ +    ret = xmlTextWriterStartElement(writer, (xmlChar *)"volTop"); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    ret = dict_get_int32(dict, "count", &brick_count); +    if (ret) +        goto out; +    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"brickCount", "%d", +                                          brick_count); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    ret = dict_get_int32(dict, "1-top-op", &top_op); +    if (ret) +        goto out; +    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"topOp", "%d", +                                          top_op); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    while (i < brick_count) { +        i++; + +        /* <brick> */ +        ret = xmlTextWriterStartElement(writer, (xmlChar *)"brick"); +        XML_RET_CHECK_AND_GOTO(ret, out); -        ret = dict_get_int32 (dict, "count", &brick_count); +        snprintf(key, sizeof(key), "%d-brick", i); +        ret = dict_get_str(dict, key, &brick_name);          if (ret) -                goto out; -        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"brickCount", -                                               "%d", brick_count); -        XML_RET_CHECK_AND_GOTO (ret, out); +            goto out; +        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"name", "%s", +                                              brick_name); +        XML_RET_CHECK_AND_GOTO(ret, out); -        ret = dict_get_int32 (dict, "1-top-op", &top_op); +        snprintf(key, sizeof(key), "%d-members", i); +        ret = dict_get_int32(dict, key, &members);          if (ret) -                goto out; -        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"topOp", -                                               "%d", top_op); -        XML_RET_CHECK_AND_GOTO (ret, out); - -        while (i < brick_count) { -                i++; +            goto out; +        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"members", +                                              "%d", members); +        XML_RET_CHECK_AND_GOTO(ret, out); -                /* <brick> */ -                ret = xmlTextWriterStartElement (writer, (xmlChar *)"brick"); -                XML_RET_CHECK_AND_GOTO (ret, out); +        switch (top_op) { +            case GF_CLI_TOP_OPEN: +                snprintf(key, sizeof(key), "%d-current-open", i); +                ret = dict_get_uint64(dict, key, ¤t_open); +                if (ret) +                    goto out; +                ret = xmlTextWriterWriteFormatElement( +                    writer, (xmlChar *)"currentOpen", "%" PRIu64, current_open); +                XML_RET_CHECK_AND_GOTO(ret, out); -                snprintf (key, sizeof (key), "%d-brick", i); -                ret = dict_get_str (dict, key, &brick_name); +                snprintf(key, sizeof(key), "%d-max-open", i); +                ret = dict_get_uint64(dict, key, &max_open);                  if (ret) -                        goto out; -                ret = xmlTextWriterWriteFormatElement (writer, -                                                       (xmlChar *)"name", -                                                       "%s", brick_name); -                XML_RET_CHECK_AND_GOTO (ret, out); +                    goto out; +                ret = xmlTextWriterWriteFormatElement( +                    writer, (xmlChar *)"maxOpen", "%" PRIu64, max_open); +                XML_RET_CHECK_AND_GOTO(ret, out); -                snprintf (key , sizeof (key), "%d-members", i); -                ret = dict_get_int32 (dict, key, &members); +                snprintf(key, sizeof(key), "%d-max-openfd-time", i); +                ret = dict_get_str(dict, key, &max_open_time);                  if (ret) -                        goto out; -                ret = xmlTextWriterWriteFormatElement (writer, -                                                       (xmlChar *)"members", -                                                       "%d", members); -                XML_RET_CHECK_AND_GOTO (ret, out); - -                switch (top_op) { -                case GF_CLI_TOP_OPEN: -                        snprintf (key, sizeof (key), "%d-current-open", i); -                        ret = dict_get_uint64 (dict, key, ¤t_open); -                        if (ret) -                                goto out; -                        ret = xmlTextWriterWriteFormatElement -                                (writer, (xmlChar *)"currentOpen", "%"PRIu64, -                                 current_open); -                        XML_RET_CHECK_AND_GOTO (ret, out); - -                        snprintf (key, sizeof (key), "%d-max-open", i); -                        ret = dict_get_uint64 (dict, key, &max_open); -                        if (ret) -                                goto out; -                        ret = xmlTextWriterWriteFormatElement -                                (writer, (xmlChar *)"maxOpen", "%"PRIu64, -                                 max_open); -                        XML_RET_CHECK_AND_GOTO (ret, out); - -                        snprintf (key, sizeof (key), "%d-max-openfd-time", i); -                        ret = dict_get_str (dict, key, &max_open_time); -                        if (ret) -                                goto out; -                        ret = xmlTextWriterWriteFormatElement -                                (writer, (xmlChar *)"maxOpenTime", "%s", -                                 max_open_time); -                        XML_RET_CHECK_AND_GOTO (ret, out); - -                case GF_CLI_TOP_READ: -                case GF_CLI_TOP_WRITE: -                case GF_CLI_TOP_OPENDIR: -                case GF_CLI_TOP_READDIR: - -                        break; - -                case GF_CLI_TOP_READ_PERF: -                case GF_CLI_TOP_WRITE_PERF: -                        snprintf (key, sizeof (key), "%d-throughput", i); -                        ret = dict_get_double (dict, key, &throughput); -                        if (!ret) { -                                snprintf (key, sizeof (key), "%d-time", i); -                                ret = dict_get_double (dict, key, &time_taken); -                        } - -                        if (!ret) { -                                ret = xmlTextWriterWriteFormatElement -                                        (writer, (xmlChar *)"throughput", -                                         "%f", throughput); -                                XML_RET_CHECK_AND_GOTO (ret, out); - -                                ret = xmlTextWriterWriteFormatElement -                                        (writer, (xmlChar *)"timeTaken", -                                         "%f", time_taken); -                                XML_RET_CHECK_AND_GOTO (ret, out); -                        } - -                        break; - -                default: -                        ret = -1; -                        goto out; +                    goto out; +                ret = xmlTextWriterWriteFormatElement( +                    writer, (xmlChar *)"maxOpenTime", "%s", max_open_time); +                XML_RET_CHECK_AND_GOTO(ret, out); + +            case GF_CLI_TOP_READ: +            case GF_CLI_TOP_WRITE: +            case GF_CLI_TOP_OPENDIR: +            case GF_CLI_TOP_READDIR: + +                break; + +            case GF_CLI_TOP_READ_PERF: +            case GF_CLI_TOP_WRITE_PERF: +                snprintf(key, sizeof(key), "%d-throughput", i); +                ret = dict_get_double(dict, key, &throughput); +                if (!ret) { +                    snprintf(key, sizeof(key), "%d-time", i); +                    ret = dict_get_double(dict, key, &time_taken);                  } -                for (j = 1; j <= members; j++) { -                        if (top_op == GF_CLI_TOP_READ_PERF || -                            top_op == GF_CLI_TOP_WRITE_PERF) { -                                ret = cli_xml_output_vol_top_rw_perf -                                        (writer, dict, i, j); -                        } else { -                                ret = cli_xml_output_vol_top_other -                                        (writer, dict, i, j); -                        } -                        if (ret) -                                goto out; +                if (!ret) { +                    ret = xmlTextWriterWriteFormatElement( +                        writer, (xmlChar *)"throughput", "%f", throughput); +                    XML_RET_CHECK_AND_GOTO(ret, out); + +                    ret = xmlTextWriterWriteFormatElement( +                        writer, (xmlChar *)"timeTaken", "%f", time_taken); +                    XML_RET_CHECK_AND_GOTO(ret, out);                  } +                break; -                /* </brick> */ -                ret = xmlTextWriterEndElement (writer); -                XML_RET_CHECK_AND_GOTO (ret, out); +            default: +                ret = -1; +                goto out;          } -        /* </volTop> */ -        ret = xmlTextWriterEndElement (writer); -        XML_RET_CHECK_AND_GOTO (ret, out); -        ret = cli_end_xml_output (writer, doc); +        for (j = 1; j <= members; j++) { +            if (top_op == GF_CLI_TOP_READ_PERF || +                top_op == GF_CLI_TOP_WRITE_PERF) { +                ret = cli_xml_output_vol_top_rw_perf(writer, dict, i, j); +            } else { +                ret = cli_xml_output_vol_top_other(writer, dict, i, j); +            } +            if (ret) +                goto out; +        } + +        /* </brick> */ +        ret = xmlTextWriterEndElement(writer); +        XML_RET_CHECK_AND_GOTO(ret, out); +    } + +    /* </volTop> */ +    ret = xmlTextWriterEndElement(writer); +    XML_RET_CHECK_AND_GOTO(ret, out); +    ret = cli_end_xml_output(writer, doc);  out: -        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); -        return ret; +    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret); +    return ret;  #else -        return 0; +    return 0;  #endif  }  #if (HAVE_LIB_XML)  int -cli_xml_output_vol_profile_stats (xmlTextWriterPtr writer, dict_t *dict, -                                  int brick_index, int interval) +cli_xml_output_vol_profile_stats(xmlTextWriterPtr writer, dict_t *dict, +                                 int brick_index, int interval)  { -        int                     ret = -1; -        uint64_t                read_count = 0; -        uint64_t                write_count = 0; -        uint64_t                hits = 0; -        double                  avg_latency = 0.0; -        double                  max_latency = 0.0; -        double                  min_latency = 0.0; -        uint64_t                duration = 0; -        uint64_t                total_read = 0; -        uint64_t                total_write = 0; -        char                    key[1024] = {0}; -        int                     i = 0; - -        /* <cumulativeStats> || <intervalStats> */ -        if (interval == -1) -                ret = xmlTextWriterStartElement (writer, -                                                 (xmlChar *)"cumulativeStats"); -        else -                ret = xmlTextWriterStartElement (writer, -                                                 (xmlChar *)"intervalStats"); -        XML_RET_CHECK_AND_GOTO (ret, out); - -        /* <blockStats> */ -        ret = xmlTextWriterStartElement (writer, (xmlChar *)"blockStats"); -        XML_RET_CHECK_AND_GOTO (ret, out); - -        for (i = 0; i < 32; i++) { -                /* <block> */ -                ret = xmlTextWriterStartElement (writer, (xmlChar *)"block"); -                XML_RET_CHECK_AND_GOTO (ret, out); - -                ret = xmlTextWriterWriteFormatElement -                        (writer, (xmlChar *)"size", "%"PRIu32, (1 << i)); -                XML_RET_CHECK_AND_GOTO (ret, out); - -                snprintf (key, sizeof (key), "%d-%d-read-%d", brick_index, -                          interval, (1 << i)); -                ret = dict_get_uint64 (dict, key, &read_count); -                if (ret) -                        read_count = 0; -                ret = xmlTextWriterWriteFormatElement -                        (writer, (xmlChar *)"reads", "%"PRIu64, read_count); -                XML_RET_CHECK_AND_GOTO (ret, out); - -                snprintf (key, sizeof (key), "%d-%d-write-%d", brick_index, -                          interval, (1 << i)); -                ret = dict_get_uint64 (dict, key, &write_count); -                if (ret) -                        write_count = 0; -                ret = xmlTextWriterWriteFormatElement -                        (writer, (xmlChar *)"writes", "%"PRIu64, write_count); -                XML_RET_CHECK_AND_GOTO (ret, out); - -                /* </block> */ -                ret = xmlTextWriterEndElement (writer); -                XML_RET_CHECK_AND_GOTO (ret, out); -        } - -        /* </blockStats> */ -        ret = xmlTextWriterEndElement (writer); -        XML_RET_CHECK_AND_GOTO (ret, out); - -        /* <fopStats> */ -        ret = xmlTextWriterStartElement (writer, (xmlChar *)"fopStats"); -        XML_RET_CHECK_AND_GOTO (ret, out); - -        for (i = 0; i < GF_FOP_MAXVALUE; i++) { -                snprintf (key, sizeof (key), "%d-%d-%d-hits", brick_index, -                          interval, i); -                ret = dict_get_uint64 (dict, key, &hits); -                if (ret) -                        goto cont; +    int ret = -1; +    uint64_t read_count = 0; +    uint64_t write_count = 0; +    uint64_t hits = 0; +    double avg_latency = 0.0; +    double max_latency = 0.0; +    double min_latency = 0.0; +    uint64_t duration = 0; +    uint64_t total_read = 0; +    uint64_t total_write = 0; +    char key[1024] = {0}; +    int i = 0; + +    /* <cumulativeStats> || <intervalStats> */ +    if (interval == -1) +        ret = xmlTextWriterStartElement(writer, (xmlChar *)"cumulativeStats"); +    else +        ret = xmlTextWriterStartElement(writer, (xmlChar *)"intervalStats"); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    /* <blockStats> */ +    ret = xmlTextWriterStartElement(writer, (xmlChar *)"blockStats"); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    for (i = 0; i < 32; i++) { +        /* <block> */ +        ret = xmlTextWriterStartElement(writer, (xmlChar *)"block"); +        XML_RET_CHECK_AND_GOTO(ret, out); -                snprintf (key, sizeof (key), "%d-%d-%d-avglatency", brick_index, -                          interval, i); -                ret = dict_get_double (dict, key, &avg_latency); -                if (ret) -                        goto cont; +        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"size", +                                              "%" PRIu32, (1 << i)); +        XML_RET_CHECK_AND_GOTO(ret, out); -                snprintf (key, sizeof (key), "%d-%d-%d-minlatency", brick_index, -                          interval, i); -                ret = dict_get_double (dict, key, &min_latency); -                if (ret) -                        goto cont; +        snprintf(key, sizeof(key), "%d-%d-read-%d", brick_index, interval, +                 (1 << i)); +        ret = dict_get_uint64(dict, key, &read_count); +        if (ret) +            read_count = 0; +        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"reads", +                                              "%" PRIu64, read_count); +        XML_RET_CHECK_AND_GOTO(ret, out); -                snprintf (key, sizeof (key), "%d-%d-%d-maxlatency", brick_index, -                          interval, i); -                ret = dict_get_double (dict, key, &max_latency); -                if (ret) -                        goto cont; +        snprintf(key, sizeof(key), "%d-%d-write-%d", brick_index, interval, +                 (1 << i)); +        ret = dict_get_uint64(dict, key, &write_count); +        if (ret) +            write_count = 0; +        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"writes", +                                              "%" PRIu64, write_count); +        XML_RET_CHECK_AND_GOTO(ret, out); -                /* <fop> */ -                ret = xmlTextWriterStartElement (writer, (xmlChar *)"fop"); -                XML_RET_CHECK_AND_GOTO (ret, out); +        /* </block> */ +        ret = xmlTextWriterEndElement(writer); +        XML_RET_CHECK_AND_GOTO(ret, out); +    } -                ret = xmlTextWriterWriteFormatElement -                        (writer, (xmlChar *)"name","%s", gf_fop_list[i]); -                XML_RET_CHECK_AND_GOTO (ret, out); +    /* </blockStats> */ +    ret = xmlTextWriterEndElement(writer); +    XML_RET_CHECK_AND_GOTO(ret, out); -                ret = xmlTextWriterWriteFormatElement -                        (writer, (xmlChar *)"hits", "%"PRIu64, hits); -                XML_RET_CHECK_AND_GOTO (ret, out); +    /* <fopStats> */ +    ret = xmlTextWriterStartElement(writer, (xmlChar *)"fopStats"); +    XML_RET_CHECK_AND_GOTO(ret, out); -                ret = xmlTextWriterWriteFormatElement -                        (writer, (xmlChar *)"avgLatency", "%f", avg_latency); -                XML_RET_CHECK_AND_GOTO (ret, out); +    for (i = 0; i < GF_FOP_MAXVALUE; i++) { +        snprintf(key, sizeof(key), "%d-%d-%d-hits", brick_index, interval, i); +        ret = dict_get_uint64(dict, key, &hits); +        if (ret) +            goto cont; -                ret = xmlTextWriterWriteFormatElement -                        (writer, (xmlChar *)"minLatency", "%f", min_latency); -                XML_RET_CHECK_AND_GOTO (ret, out); +        snprintf(key, sizeof(key), "%d-%d-%d-avglatency", brick_index, interval, +                 i); +        ret = dict_get_double(dict, key, &avg_latency); +        if (ret) +            goto cont; -                ret = xmlTextWriterWriteFormatElement -                        (writer, (xmlChar *)"maxLatency", "%f", max_latency); -                XML_RET_CHECK_AND_GOTO (ret, out); +        snprintf(key, sizeof(key), "%d-%d-%d-minlatency", brick_index, interval, +                 i); +        ret = dict_get_double(dict, key, &min_latency); +        if (ret) +            goto cont; -                /* </fop> */ -                ret = xmlTextWriterEndElement (writer); -                XML_RET_CHECK_AND_GOTO (ret, out); +        snprintf(key, sizeof(key), "%d-%d-%d-maxlatency", brick_index, interval, +                 i); +        ret = dict_get_double(dict, key, &max_latency); +        if (ret) +            goto cont; -cont: -                hits = 0; -                avg_latency = 0.0; -                min_latency = 0.0; -                max_latency = 0.0; -        } +        /* <fop> */ +        ret = xmlTextWriterStartElement(writer, (xmlChar *)"fop"); +        XML_RET_CHECK_AND_GOTO(ret, out); -        for (i = 0; i < GF_UPCALL_FLAGS_MAXVALUE; i++) { -                hits = 0; -                avg_latency = 0.0; -                min_latency = 0.0; -                max_latency = 0.0; +        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"name", "%s", +                                              gf_fop_list[i]); +        XML_RET_CHECK_AND_GOTO(ret, out); -                snprintf (key, sizeof (key), "%d-%d-%d-upcall-hits", brick_index, -                          interval, i); -                ret = dict_get_uint64 (dict, key, &hits); -                if (ret) -                        continue; +        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"hits", +                                              "%" PRIu64, hits); +        XML_RET_CHECK_AND_GOTO(ret, out); -                /* <fop> */ -                ret = xmlTextWriterStartElement (writer, (xmlChar *)"fop"); -                XML_RET_CHECK_AND_GOTO (ret, out); +        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"avgLatency", +                                              "%f", avg_latency); +        XML_RET_CHECK_AND_GOTO(ret, out); -                ret = xmlTextWriterWriteFormatElement -                        (writer, (xmlChar *)"name", "%s", gf_fop_list[i]); -                XML_RET_CHECK_AND_GOTO (ret, out); +        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"minLatency", +                                              "%f", min_latency); +        XML_RET_CHECK_AND_GOTO(ret, out); -                ret = xmlTextWriterWriteFormatElement -                        (writer, (xmlChar *)"hits", "%"PRIu64, hits); -                XML_RET_CHECK_AND_GOTO (ret, out); +        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"maxLatency", +                                              "%f", max_latency); +        XML_RET_CHECK_AND_GOTO(ret, out); -                ret = xmlTextWriterWriteFormatElement -                        (writer, (xmlChar *)"avgLatency", "%f", avg_latency); -                XML_RET_CHECK_AND_GOTO (ret, out); +        /* </fop> */ +        ret = xmlTextWriterEndElement(writer); +        XML_RET_CHECK_AND_GOTO(ret, out); -                ret = xmlTextWriterWriteFormatElement -                        (writer, (xmlChar *)"minLatency", "%f", min_latency); -                XML_RET_CHECK_AND_GOTO (ret, out); +    cont: +        hits = 0; +        avg_latency = 0.0; +        min_latency = 0.0; +        max_latency = 0.0; +    } + +    for (i = 0; i < GF_UPCALL_FLAGS_MAXVALUE; i++) { +        hits = 0; +        avg_latency = 0.0; +        min_latency = 0.0; +        max_latency = 0.0; + +        snprintf(key, sizeof(key), "%d-%d-%d-upcall-hits", brick_index, +                 interval, i); +        ret = dict_get_uint64(dict, key, &hits); +        if (ret) +            continue; -                ret = xmlTextWriterWriteFormatElement -                        (writer, (xmlChar *)"maxLatency", "%f", max_latency); -                XML_RET_CHECK_AND_GOTO (ret, out); +        /* <fop> */ +        ret = xmlTextWriterStartElement(writer, (xmlChar *)"fop"); +        XML_RET_CHECK_AND_GOTO(ret, out); -                /* </fop> */ -                ret = xmlTextWriterEndElement (writer); -                XML_RET_CHECK_AND_GOTO (ret, out); -        } +        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"name", "%s", +                                              gf_fop_list[i]); +        XML_RET_CHECK_AND_GOTO(ret, out); -        /* </fopStats> */ -        ret = xmlTextWriterEndElement (writer); -        XML_RET_CHECK_AND_GOTO (ret, out); +        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"hits", +                                              "%" PRIu64, hits); +        XML_RET_CHECK_AND_GOTO(ret, out); -        snprintf (key, sizeof (key), "%d-%d-duration", brick_index, interval); -        ret = dict_get_uint64 (dict, key, &duration); -        if (ret) -                goto out; -        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"duration", -                                               "%"PRIu64, duration); -        XML_RET_CHECK_AND_GOTO (ret, out); +        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"avgLatency", +                                              "%f", avg_latency); +        XML_RET_CHECK_AND_GOTO(ret, out); -        snprintf (key, sizeof (key), "%d-%d-total-read", brick_index, interval); -        ret = dict_get_uint64 (dict, key, &total_read); -        if (ret) -                goto out; -        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"totalRead", -                                               "%"PRIu64, total_read); -        XML_RET_CHECK_AND_GOTO (ret, out); +        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"minLatency", +                                              "%f", min_latency); +        XML_RET_CHECK_AND_GOTO(ret, out); -        snprintf (key, sizeof (key), "%d-%d-total-write", brick_index, interval); -        ret = dict_get_uint64 (dict, key, &total_write); -        if (ret) -                goto out; -        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"totalWrite", -                                               "%"PRIu64, total_write); -        XML_RET_CHECK_AND_GOTO (ret, out); +        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"maxLatency", +                                              "%f", max_latency); +        XML_RET_CHECK_AND_GOTO(ret, out); -        /* </cumulativeStats> || </intervalStats> */ -        ret = xmlTextWriterEndElement (writer); -        XML_RET_CHECK_AND_GOTO (ret, out); +        /* </fop> */ +        ret = xmlTextWriterEndElement(writer); +        XML_RET_CHECK_AND_GOTO(ret, out); +    } + +    /* </fopStats> */ +    ret = xmlTextWriterEndElement(writer); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    snprintf(key, sizeof(key), "%d-%d-duration", brick_index, interval); +    ret = dict_get_uint64(dict, key, &duration); +    if (ret) +        goto out; +    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"duration", +                                          "%" PRIu64, duration); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    snprintf(key, sizeof(key), "%d-%d-total-read", brick_index, interval); +    ret = dict_get_uint64(dict, key, &total_read); +    if (ret) +        goto out; +    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"totalRead", +                                          "%" PRIu64, total_read); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    snprintf(key, sizeof(key), "%d-%d-total-write", brick_index, interval); +    ret = dict_get_uint64(dict, key, &total_write); +    if (ret) +        goto out; +    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"totalWrite", +                                          "%" PRIu64, total_write); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    /* </cumulativeStats> || </intervalStats> */ +    ret = xmlTextWriterEndElement(writer); +    XML_RET_CHECK_AND_GOTO(ret, out);  out: -        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); -        return ret; +    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret); +    return ret;  }  #endif  int -cli_xml_output_vol_profile (dict_t *dict, int op_ret, int op_errno, -                            char *op_errstr) +cli_xml_output_vol_profile(dict_t *dict, int op_ret, int op_errno, +                           char *op_errstr)  {  #if (HAVE_LIB_XML) -        int                     ret = -1; -        xmlTextWriterPtr        writer = NULL; -        xmlDocPtr               doc = NULL; -        char                    *volname = NULL; -        int                     op = GF_CLI_STATS_NONE; -        int                     info_op = GF_CLI_INFO_NONE; -        int                     brick_count = 0; -        char                    *brick_name = NULL; -        int                     interval = 0; -        char                    key[1024] = {0,}; -        int                     i = 0; -        int                     stats_cleared = 0; - -        ret = cli_begin_xml_output (&writer, &doc); -        if (ret) -                goto out; - -        ret = cli_xml_output_common (writer, op_ret, op_errno, op_errstr); -        if (ret) -                goto out; - -        /* <volProfile> */ -        ret = xmlTextWriterStartElement (writer, (xmlChar *)"volProfile"); -        XML_RET_CHECK_AND_GOTO (ret, out); - -        ret = dict_get_str (dict, "volname", &volname); -        if (ret) -                goto out; -        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"volname", -                                               "%s", volname); -        XML_RET_CHECK_AND_GOTO (ret, out); - -        ret = dict_get_int32 (dict, "op", &op); -        if (ret) -                goto out; -        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"profileOp", -                                               "%d", op); -        XML_RET_CHECK_AND_GOTO (ret, out); - -        if (GF_CLI_STATS_INFO != op) -                goto cont; +    int ret = -1; +    xmlTextWriterPtr writer = NULL; +    xmlDocPtr doc = NULL; +    char *volname = NULL; +    int op = GF_CLI_STATS_NONE; +    int info_op = GF_CLI_INFO_NONE; +    int brick_count = 0; +    char *brick_name = NULL; +    int interval = 0; +    char key[1024] = { +        0, +    }; +    int i = 0; +    int stats_cleared = 0; + +    ret = cli_begin_xml_output(&writer, &doc); +    if (ret) +        goto out; + +    ret = cli_xml_output_common(writer, op_ret, op_errno, op_errstr); +    if (ret) +        goto out; + +    /* <volProfile> */ +    ret = xmlTextWriterStartElement(writer, (xmlChar *)"volProfile"); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    ret = dict_get_str(dict, "volname", &volname); +    if (ret) +        goto out; +    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"volname", "%s", +                                          volname); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    ret = dict_get_int32(dict, "op", &op); +    if (ret) +        goto out; +    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"profileOp", "%d", +                                          op); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    if (GF_CLI_STATS_INFO != op) +        goto cont; + +    ret = dict_get_int32(dict, "count", &brick_count); +    if (ret) +        goto out; +    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"brickCount", "%d", +                                          brick_count); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    ret = dict_get_int32(dict, "info-op", &info_op); +    if (ret) +        goto out; + +    while (i < brick_count) { +        i++; + +        /* <brick> */ +        ret = xmlTextWriterStartElement(writer, (xmlChar *)"brick"); +        XML_RET_CHECK_AND_GOTO(ret, out); -        ret = dict_get_int32 (dict, "count", &brick_count); +        snprintf(key, sizeof(key), "%d-brick", i); +        ret = dict_get_str(dict, key, &brick_name);          if (ret) -                goto out; -        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"brickCount", -                                               "%d", brick_count); -        XML_RET_CHECK_AND_GOTO (ret, out); +            goto out; +        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"brickName", +                                              "%s", brick_name); +        XML_RET_CHECK_AND_GOTO(ret, out); -        ret = dict_get_int32 (dict, "info-op", &info_op); -        if (ret) +        if (GF_CLI_INFO_CLEAR == info_op) { +            snprintf(key, sizeof(key), "%d-stats-cleared", i); +            ret = dict_get_int32(dict, key, &stats_cleared); +            if (ret)                  goto out; -        while (i < brick_count) { -                i++; - -                /* <brick> */ -                ret = xmlTextWriterStartElement (writer, (xmlChar *)"brick"); -                XML_RET_CHECK_AND_GOTO (ret, out); - -                snprintf (key, sizeof (key), "%d-brick", i); -                ret = dict_get_str (dict, key, &brick_name); +            ret = xmlTextWriterWriteFormatElement( +                writer, (xmlChar *)"clearStats", "%s", +                stats_cleared ? "Cleared stats." : "Failed to clear stats."); +            XML_RET_CHECK_AND_GOTO(ret, out); +        } else { +            snprintf(key, sizeof(key), "%d-cumulative", i); +            ret = dict_get_int32(dict, key, &interval); +            if (ret == 0) { +                ret = cli_xml_output_vol_profile_stats(writer, dict, i, +                                                       interval);                  if (ret) -                        goto out; -                ret = xmlTextWriterWriteFormatElement -                        (writer, (xmlChar *)"brickName", "%s", brick_name); -                XML_RET_CHECK_AND_GOTO (ret, out); - -                if (GF_CLI_INFO_CLEAR == info_op) { -                        snprintf (key, sizeof (key), "%d-stats-cleared", i); -                        ret = dict_get_int32 (dict, key, &stats_cleared); -                        if (ret) -                                goto out; - -                        ret = xmlTextWriterWriteFormatElement -                                (writer, (xmlChar *)"clearStats", "%s", -                                stats_cleared ? "Cleared stats." : -                                                 "Failed to clear stats."); -                        XML_RET_CHECK_AND_GOTO (ret, out); -                } else { -                        snprintf (key, sizeof (key), "%d-cumulative", i); -                        ret = dict_get_int32 (dict, key, &interval); -                        if (ret == 0) { -                                ret = cli_xml_output_vol_profile_stats -                                        (writer, dict, i, interval); -                                if (ret) -                                        goto out; -                        } - -                        snprintf (key, sizeof (key), "%d-interval", i); -                        ret = dict_get_int32 (dict, key, &interval); -                        if (ret == 0) { -                                ret = cli_xml_output_vol_profile_stats -                                        (writer, dict, i, interval); -                                if (ret) -                                        goto out; -                        } -                } - -                /* </brick> */ -                ret = xmlTextWriterEndElement (writer); -                XML_RET_CHECK_AND_GOTO (ret, out); +                    goto out; +            } + +            snprintf(key, sizeof(key), "%d-interval", i); +            ret = dict_get_int32(dict, key, &interval); +            if (ret == 0) { +                ret = cli_xml_output_vol_profile_stats(writer, dict, i, +                                                       interval); +                if (ret) +                    goto out; +            }          } +        /* </brick> */ +        ret = xmlTextWriterEndElement(writer); +        XML_RET_CHECK_AND_GOTO(ret, out); +    } +  cont: -        /* </volProfile> */ -        ret = xmlTextWriterEndElement (writer); -        XML_RET_CHECK_AND_GOTO (ret, out); +    /* </volProfile> */ +    ret = xmlTextWriterEndElement(writer); +    XML_RET_CHECK_AND_GOTO(ret, out); -        ret = cli_end_xml_output (writer, doc); +    ret = cli_end_xml_output(writer, doc);  out: -        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); -        return ret; +    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret); +    return ret;  #else -        return 0; +    return 0;  #endif  }  int -cli_xml_output_vol_list (dict_t *dict, int op_ret, int op_errno, -                         char *op_errstr) +cli_xml_output_vol_list(dict_t *dict, int op_ret, int op_errno, char *op_errstr)  {  #if (HAVE_LIB_XML) -        int                     ret = -1; -        xmlTextWriterPtr        writer = NULL; -        xmlDocPtr               doc = NULL; -        int                     count = 0; -        char                    *volname = NULL; -        char                    key[1024] = {0,}; -        int                     i = 0; - -        ret = cli_begin_xml_output (&writer, &doc); -        if (ret) -                goto out; - -        ret = cli_xml_output_common (writer, op_ret, op_errno, op_errstr); +    int ret = -1; +    xmlTextWriterPtr writer = NULL; +    xmlDocPtr doc = NULL; +    int count = 0; +    char *volname = NULL; +    char key[1024] = { +        0, +    }; +    int i = 0; + +    ret = cli_begin_xml_output(&writer, &doc); +    if (ret) +        goto out; + +    ret = cli_xml_output_common(writer, op_ret, op_errno, op_errstr); +    if (ret) +        goto out; + +    /* <volList> */ +    ret = xmlTextWriterStartElement(writer, (xmlChar *)"volList"); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    ret = dict_get_int32(dict, "count", &count); +    if (ret) +        goto out; +    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"count", "%d", +                                          count); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    for (i = 0; i < count; i++) { +        snprintf(key, sizeof(key), "volume%d", i); +        ret = dict_get_str(dict, key, &volname);          if (ret) -                goto out; - -        /* <volList> */ -        ret = xmlTextWriterStartElement (writer, (xmlChar *)"volList"); -        XML_RET_CHECK_AND_GOTO (ret, out); - -        ret = dict_get_int32 (dict, "count", &count); -        if (ret) -                goto out; -        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"count", -                                               "%d", count); -        XML_RET_CHECK_AND_GOTO (ret, out); - -        for (i = 0; i < count; i++) { -                snprintf (key, sizeof (key), "volume%d", i); -                ret = dict_get_str (dict, key, &volname); -                if (ret) -                        goto out; -                ret = xmlTextWriterWriteFormatElement (writer, -                                                       (xmlChar *)"volume", -                                                       "%s", volname); -                XML_RET_CHECK_AND_GOTO (ret, out); -        } +            goto out; +        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"volume", "%s", +                                              volname); +        XML_RET_CHECK_AND_GOTO(ret, out); +    } -        /* </volList> */ -        ret = xmlTextWriterEndElement (writer); -        XML_RET_CHECK_AND_GOTO (ret, out); +    /* </volList> */ +    ret = xmlTextWriterEndElement(writer); +    XML_RET_CHECK_AND_GOTO(ret, out); -        ret = cli_end_xml_output (writer, doc); +    ret = cli_end_xml_output(writer, doc);  out: -        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); -        return ret; +    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret); +    return ret;  #else -        return 0; +    return 0;  #endif  }  #if (HAVE_LIB_XML)  int -cli_xml_output_vol_info_option (xmlTextWriterPtr writer, char *substr, -                                char *optstr, char *valstr) +cli_xml_output_vol_info_option(xmlTextWriterPtr writer, char *substr, +                               char *optstr, char *valstr)  { -        int             ret = -1; -        char            *ptr1 = NULL; -        char            *ptr2 = NULL; - -        ptr1 = substr; -        ptr2 = optstr; - -        while (ptr1) { -                if (*ptr1 != *ptr2) -                        break; -                ptr1++; -                ptr2++; -                if (!*ptr1) -                        break; -                if (!*ptr2) -                        break; -        } -        if (*ptr2 == '\0') -                goto out; - -        /* <option> */ -        ret = xmlTextWriterStartElement (writer, (xmlChar *)"option"); -        XML_RET_CHECK_AND_GOTO (ret, out); - -        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"name", -                                               "%s", ptr2); -        XML_RET_CHECK_AND_GOTO (ret, out); - -        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"value", -                                               "%s", valstr); -        XML_RET_CHECK_AND_GOTO (ret, out); - -        /* </option> */ -        ret = xmlTextWriterEndElement (writer); -        XML_RET_CHECK_AND_GOTO (ret, out); +    int ret = -1; +    char *ptr1 = NULL; +    char *ptr2 = NULL; + +    ptr1 = substr; +    ptr2 = optstr; + +    while (ptr1) { +        if (*ptr1 != *ptr2) +            break; +        ptr1++; +        ptr2++; +        if (!*ptr1) +            break; +        if (!*ptr2) +            break; +    } +    if (*ptr2 == '\0') +        goto out; + +    /* <option> */ +    ret = xmlTextWriterStartElement(writer, (xmlChar *)"option"); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"name", "%s", +                                          ptr2); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"value", "%s", +                                          valstr); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    /* </option> */ +    ret = xmlTextWriterEndElement(writer); +    XML_RET_CHECK_AND_GOTO(ret, out);  out: -        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); -        return ret; +    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret); +    return ret;  }  struct tmp_xml_option_logger { -        char *key; -        xmlTextWriterPtr writer; +    char *key; +    xmlTextWriterPtr writer;  };  static int -_output_vol_info_option (dict_t *d, char *k, data_t *v, -                         void *data) +_output_vol_info_option(dict_t *d, char *k, data_t *v, void *data)  { -        int                           ret   = 0; -        char                         *ptr   = NULL; -        struct tmp_xml_option_logger *tmp   = NULL; +    int ret = 0; +    char *ptr = NULL; +    struct tmp_xml_option_logger *tmp = NULL; -        tmp = data; +    tmp = data; -        ptr = strstr (k, "option."); -        if (!ptr) -                goto out; +    ptr = strstr(k, "option."); +    if (!ptr) +        goto out; -        if (!v) { -                ret = -1; -                goto out; -        } -        ret = cli_xml_output_vol_info_option (tmp->writer, tmp->key, k, -                                              v->data); +    if (!v) { +        ret = -1; +        goto out; +    } +    ret = cli_xml_output_vol_info_option(tmp->writer, tmp->key, k, v->data);  out: -        return ret; +    return ret;  }  int -cli_xml_output_vol_info_options (xmlTextWriterPtr writer, dict_t *dict, -                                 char *prefix) +cli_xml_output_vol_info_options(xmlTextWriterPtr writer, dict_t *dict, +                                char *prefix)  { -        int             ret = -1; -        int             opt_count = 0; -        char            key[1024] = {0,}; -        struct tmp_xml_option_logger tmp = {0,}; - -        snprintf (key, sizeof (key), "%s.opt_count", prefix); -        ret = dict_get_int32 (dict, key, &opt_count); -        if (ret) -                goto out; -        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"optCount", -                                               "%d", opt_count); -        XML_RET_CHECK_AND_GOTO (ret, out); - -        /* <options> */ -        ret = xmlTextWriterStartElement (writer, (xmlChar *)"options"); -        XML_RET_CHECK_AND_GOTO (ret, out); -        snprintf (key, sizeof (key), "%s.option.", prefix); - -        tmp.key = key; -        tmp.writer = writer; -        ret = dict_foreach (dict, _output_vol_info_option, &tmp); -        if (ret) -                goto out; - -        /* </options> */ -        ret = xmlTextWriterEndElement (writer); -        XML_RET_CHECK_AND_GOTO (ret, out); +    int ret = -1; +    int opt_count = 0; +    char key[1024] = { +        0, +    }; +    struct tmp_xml_option_logger tmp = { +        0, +    }; + +    snprintf(key, sizeof(key), "%s.opt_count", prefix); +    ret = dict_get_int32(dict, key, &opt_count); +    if (ret) +        goto out; +    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"optCount", "%d", +                                          opt_count); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    /* <options> */ +    ret = xmlTextWriterStartElement(writer, (xmlChar *)"options"); +    XML_RET_CHECK_AND_GOTO(ret, out); +    snprintf(key, sizeof(key), "%s.option.", prefix); + +    tmp.key = key; +    tmp.writer = writer; +    ret = dict_foreach(dict, _output_vol_info_option, &tmp); +    if (ret) +        goto out; + +    /* </options> */ +    ret = xmlTextWriterEndElement(writer); +    XML_RET_CHECK_AND_GOTO(ret, out);  out: -        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); -        return ret; +    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret); +    return ret;  }  #endif  int -cli_xml_output_vol_info (cli_local_t *local, dict_t *dict) +cli_xml_output_vol_info(cli_local_t *local, dict_t *dict)  {  #if (HAVE_LIB_XML) -        int                     ret = 0; -        int                     count = 0; -        char                    *volname = NULL; -        char                    *volume_id = NULL; -        char                    *uuid = NULL; -        int                     type = 0; -        int                     status = 0; -        int                     brick_count = 0; -        int                     dist_count = 0; -        int                     stripe_count = 0; -        int                     replica_count = 0; -        int                     arbiter_count = 0; -        int                     snap_count    = 0; -        int                     isArbiter = 0; -        int                     disperse_count = 0; -        int                     redundancy_count = 0; -        int                     transport = 0; -        char                    *brick = NULL; -        char                    key[1024] = {0,}; -        int                     i = 0; -        int                     j = 1; -        char                    *caps __attribute__((unused)) = NULL; -        int                     k __attribute__((unused)) = 0; -        int                     index = 1; -        int                     tier_vol_type          = 0; -        /* hot dist count is always zero so need for it to be -         * included in the array.*/ -        int                     hot_dist_count         = 0; -        values                  c                      = 0; -        char                    *keys[MAX]              = { -                [COLD_BRICK_COUNT]      = "volume%d.cold_brick_count", -                [COLD_TYPE]             = "volume%d.cold_type", -                [COLD_DIST_COUNT]       = "volume%d.cold_dist_count", -                [COLD_REPLICA_COUNT]    = "volume%d.cold_replica_count", -                [COLD_ARBITER_COUNT]    = "volume%d.cold_arbiter_count", -                [COLD_DISPERSE_COUNT]   = "volume%d.cold_disperse_count", -                [COLD_REDUNDANCY_COUNT] = "volume%d.cold_redundancy_count", -                [HOT_BRICK_COUNT]       = "volume%d.hot_brick_count", -                [HOT_TYPE]              = "volume%d.hot_type", -                [HOT_REPLICA_COUNT]     = "volume%d.hot_replica_count"}; -        int                     value[MAX]             = {}; - - -        ret = dict_get_int32 (dict, "count", &count); +    int ret = 0; +    int count = 0; +    char *volname = NULL; +    char *volume_id = NULL; +    char *uuid = NULL; +    int type = 0; +    int status = 0; +    int brick_count = 0; +    int dist_count = 0; +    int stripe_count = 0; +    int replica_count = 0; +    int arbiter_count = 0; +    int snap_count = 0; +    int isArbiter = 0; +    int disperse_count = 0; +    int redundancy_count = 0; +    int transport = 0; +    char *brick = NULL; +    char key[1024] = { +        0, +    }; +    int i = 0; +    int j = 1; +    char *caps __attribute__((unused)) = NULL; +    int k __attribute__((unused)) = 0; +    int index = 1; +    int tier_vol_type = 0; +    /* hot dist count is always zero so need for it to be +     * included in the array.*/ +    int hot_dist_count = 0; +    values c = 0; +    char *keys[MAX] = { +        [COLD_BRICK_COUNT] = "volume%d.cold_brick_count", +        [COLD_TYPE] = "volume%d.cold_type", +        [COLD_DIST_COUNT] = "volume%d.cold_dist_count", +        [COLD_REPLICA_COUNT] = "volume%d.cold_replica_count", +        [COLD_ARBITER_COUNT] = "volume%d.cold_arbiter_count", +        [COLD_DISPERSE_COUNT] = "volume%d.cold_disperse_count", +        [COLD_REDUNDANCY_COUNT] = "volume%d.cold_redundancy_count", +        [HOT_BRICK_COUNT] = "volume%d.hot_brick_count", +        [HOT_TYPE] = "volume%d.hot_type", +        [HOT_REPLICA_COUNT] = "volume%d.hot_replica_count"}; +    int value[MAX] = {}; + +    ret = dict_get_int32(dict, "count", &count); +    if (ret) +        goto out; + +    for (i = 0; i < count; i++) { +        /* <volume> */ +        ret = xmlTextWriterStartElement(local->writer, (xmlChar *)"volume"); +        XML_RET_CHECK_AND_GOTO(ret, out); + +        snprintf(key, sizeof(key), "volume%d.name", i); +        ret = dict_get_str(dict, key, &volname);          if (ret) -                goto out; +            goto out; +        ret = xmlTextWriterWriteFormatElement(local->writer, (xmlChar *)"name", +                                              "%s", volname); +        XML_RET_CHECK_AND_GOTO(ret, out); -        for (i = 0; i < count; i++) { -                /* <volume> */ -                ret = xmlTextWriterStartElement (local->writer, -                                                 (xmlChar *)"volume"); -                XML_RET_CHECK_AND_GOTO (ret, out); +        snprintf(key, sizeof(key), "volume%d.volume_id", i); +        ret = dict_get_str(dict, key, &volume_id); +        if (ret) +            goto out; +        ret = xmlTextWriterWriteFormatElement(local->writer, (xmlChar *)"id", +                                              "%s", volume_id); +        XML_RET_CHECK_AND_GOTO(ret, out); -                snprintf (key, sizeof (key), "volume%d.name", i); -                ret = dict_get_str (dict, key, &volname); -                if (ret) -                        goto out; -                ret = xmlTextWriterWriteFormatElement (local->writer, -                                                       (xmlChar *)"name", -                                                       "%s", volname); -                XML_RET_CHECK_AND_GOTO (ret, out); +        snprintf(key, sizeof(key), "volume%d.status", i); +        ret = dict_get_int32(dict, key, &status); +        if (ret) +            goto out; +        ret = xmlTextWriterWriteFormatElement( +            local->writer, (xmlChar *)"status", "%d", status); +        XML_RET_CHECK_AND_GOTO(ret, out); -                snprintf (key, sizeof (key), "volume%d.volume_id", i); -                ret = dict_get_str (dict, key, &volume_id); -                if (ret) -                        goto out; -                ret = xmlTextWriterWriteFormatElement (local->writer, -                                                       (xmlChar *)"id", -                                                       "%s", volume_id); -                XML_RET_CHECK_AND_GOTO (ret, out); +        ret = xmlTextWriterWriteFormatElement(local->writer, +                                              (xmlChar *)"statusStr", "%s", +                                              cli_vol_status_str[status]); +        XML_RET_CHECK_AND_GOTO(ret, out); -                snprintf (key, sizeof (key), "volume%d.status", i); -                ret = dict_get_int32 (dict, key, &status); -                if (ret) -                        goto out; -                ret = xmlTextWriterWriteFormatElement (local->writer, -                                                       (xmlChar *)"status", -                                                       "%d", status); -                XML_RET_CHECK_AND_GOTO (ret, out); - -                ret =xmlTextWriterWriteFormatElement -                        (local->writer, (xmlChar *)"statusStr", "%s", -                         cli_vol_status_str[status]); -                XML_RET_CHECK_AND_GOTO (ret, out); - -                snprintf (key, sizeof (key), "volume%d.snap_count", i); -                ret = dict_get_int32 (dict, key, &snap_count); -                if (ret) -                        goto out; -                ret = xmlTextWriterWriteFormatElement (local->writer, -                                                     (xmlChar *)"snapshotCount", -                                                     "%d", snap_count); -                XML_RET_CHECK_AND_GOTO (ret, out); +        snprintf(key, sizeof(key), "volume%d.snap_count", i); +        ret = dict_get_int32(dict, key, &snap_count); +        if (ret) +            goto out; +        ret = xmlTextWriterWriteFormatElement( +            local->writer, (xmlChar *)"snapshotCount", "%d", snap_count); +        XML_RET_CHECK_AND_GOTO(ret, out); +        snprintf(key, sizeof(key), "volume%d.brick_count", i); +        ret = dict_get_int32(dict, key, &brick_count); +        if (ret) +            goto out; +        ret = xmlTextWriterWriteFormatElement( +            local->writer, (xmlChar *)"brickCount", "%d", brick_count); +        XML_RET_CHECK_AND_GOTO(ret, out); -                snprintf (key, sizeof (key), "volume%d.brick_count", i); -                ret = dict_get_int32 (dict, key, &brick_count); -                if (ret) -                        goto out; -                ret = xmlTextWriterWriteFormatElement (local->writer, -                                                       (xmlChar *)"brickCount", -                                                       "%d", brick_count); -                XML_RET_CHECK_AND_GOTO (ret, out); +        snprintf(key, sizeof(key), "volume%d.dist_count", i); +        ret = dict_get_int32(dict, key, &dist_count); +        if (ret) +            goto out; +        ret = xmlTextWriterWriteFormatElement( +            local->writer, (xmlChar *)"distCount", "%d", dist_count); +        XML_RET_CHECK_AND_GOTO(ret, out); -                snprintf (key, sizeof (key), "volume%d.dist_count", i); -                ret = dict_get_int32 (dict, key, &dist_count); -                if (ret) -                        goto out; -                ret = xmlTextWriterWriteFormatElement (local->writer, -                                                       (xmlChar *)"distCount", -                                                       "%d", dist_count); -                XML_RET_CHECK_AND_GOTO (ret, out); +        snprintf(key, sizeof(key), "volume%d.stripe_count", i); +        ret = dict_get_int32(dict, key, &stripe_count); +        if (ret) +            goto out; +        ret = xmlTextWriterWriteFormatElement( +            local->writer, (xmlChar *)"stripeCount", "%d", stripe_count); +        XML_RET_CHECK_AND_GOTO(ret, out); -                snprintf (key, sizeof (key), "volume%d.stripe_count", i); -                ret = dict_get_int32 (dict, key, &stripe_count); -                if (ret) -                        goto out; -                ret = xmlTextWriterWriteFormatElement (local->writer, -                                                       (xmlChar *)"stripeCount", -                                                       "%d", stripe_count); -                XML_RET_CHECK_AND_GOTO (ret, out); +        snprintf(key, sizeof(key), "volume%d.replica_count", i); +        ret = dict_get_int32(dict, key, &replica_count); +        if (ret) +            goto out; +        ret = xmlTextWriterWriteFormatElement( +            local->writer, (xmlChar *)"replicaCount", "%d", replica_count); +        XML_RET_CHECK_AND_GOTO(ret, out); -                snprintf (key, sizeof (key), "volume%d.replica_count", i); -                ret = dict_get_int32 (dict, key, &replica_count); -                if (ret) -                        goto out; -                ret = xmlTextWriterWriteFormatElement (local->writer, -                                                       (xmlChar *)"replicaCount", -                                                       "%d", replica_count); -                XML_RET_CHECK_AND_GOTO (ret, out); +        snprintf(key, sizeof(key), "volume%d.arbiter_count", i); +        ret = dict_get_int32(dict, key, &arbiter_count); +        if (ret) +            goto out; +        ret = xmlTextWriterWriteFormatElement( +            local->writer, (xmlChar *)"arbiterCount", "%d", arbiter_count); +        XML_RET_CHECK_AND_GOTO(ret, out); -                snprintf (key, sizeof (key), "volume%d.arbiter_count", i); -                ret = dict_get_int32 (dict, key, &arbiter_count); -                if (ret) -                        goto out; -                ret = xmlTextWriterWriteFormatElement (local->writer, -                                                      (xmlChar *)"arbiterCount", -                                                      "%d", arbiter_count); -                XML_RET_CHECK_AND_GOTO (ret, out); +        snprintf(key, sizeof(key), "volume%d.disperse_count", i); +        ret = dict_get_int32(dict, key, &disperse_count); +        if (ret) +            goto out; +        ret = xmlTextWriterWriteFormatElement( +            local->writer, (xmlChar *)"disperseCount", "%d", disperse_count); +        XML_RET_CHECK_AND_GOTO(ret, out); + +        snprintf(key, sizeof(key), "volume%d.redundancy_count", i); +        ret = dict_get_int32(dict, key, &redundancy_count); +        if (ret) +            goto out; +        ret = xmlTextWriterWriteFormatElement(local->writer, +                                              (xmlChar *)"redundancyCount", +                                              "%d", redundancy_count); +        XML_RET_CHECK_AND_GOTO(ret, out); + +        snprintf(key, sizeof(key), "volume%d.type", i); +        ret = dict_get_int32(dict, key, &type); +        if (ret) +            goto out; +        /* For Distributed-(stripe,replicate,stipe-replicate,disperse) +           types +         */ +        type = get_vol_type(type, dist_count, brick_count); + +        ret = xmlTextWriterWriteFormatElement(local->writer, (xmlChar *)"type", +                                              "%d", type); +        XML_RET_CHECK_AND_GOTO(ret, out); + +        ret = xmlTextWriterWriteFormatElement( +            local->writer, (xmlChar *)"typeStr", "%s", vol_type_str[type]); +        XML_RET_CHECK_AND_GOTO(ret, out); + +        snprintf(key, sizeof(key), "volume%d.transport", i); +        ret = dict_get_int32(dict, key, &transport); +        if (ret) +            goto out; +        ret = xmlTextWriterWriteFormatElement( +            local->writer, (xmlChar *)"transport", "%d", transport); +        XML_RET_CHECK_AND_GOTO(ret, out); + +#ifdef HAVE_BD_XLATOR +        /* <xlators> */ +        ret = xmlTextWriterStartElement(local->writer, (xmlChar *)"xlators"); +        XML_RET_CHECK_AND_GOTO(ret, out); + +        for (k = 0;; k++) { +            snprintf(key, sizeof(key), "volume%d.xlator%d", i, k); +            ret = dict_get_str(dict, key, &caps); +            if (ret) +                break; + +            /* <xlator> */ +            ret = xmlTextWriterStartElement(local->writer, (xmlChar *)"xlator"); +            XML_RET_CHECK_AND_GOTO(ret, out); + +            ret = xmlTextWriterWriteFormatElement( +                local->writer, (xmlChar *)"name", "%s", caps); +            XML_RET_CHECK_AND_GOTO(ret, out); -                snprintf (key, sizeof (key), "volume%d.disperse_count", i); -                ret = dict_get_int32 (dict, key, &disperse_count); +            /* <capabilities> */ +            ret = xmlTextWriterStartElement(local->writer, +                                            (xmlChar *)"capabilities"); +            XML_RET_CHECK_AND_GOTO(ret, out); + +            j = 0; +            for (j = 0;; j++) { +                snprintf(key, sizeof(key), "volume%d.xlator%d.caps%d", i, k, j); +                ret = dict_get_str(dict, key, &caps);                  if (ret) -                        goto out; -                ret = xmlTextWriterWriteFormatElement (local->writer, -                                                       (xmlChar *)"disperseCount", -                                                       "%d", disperse_count); -                XML_RET_CHECK_AND_GOTO (ret, out); +                    break; +                ret = xmlTextWriterWriteFormatElement( +                    local->writer, (xmlChar *)"capability", "%s", caps); +                XML_RET_CHECK_AND_GOTO(ret, out); +            } +            /* </capabilities> */ +            ret = xmlTextWriterEndElement(local->writer); +            XML_RET_CHECK_AND_GOTO(ret, out); +            /* </xlator> */ +            ret = xmlTextWriterEndElement(local->writer); +            XML_RET_CHECK_AND_GOTO(ret, out); +        } +        ret = xmlTextWriterFullEndElement(local->writer); +        XML_RET_CHECK_AND_GOTO(ret, out); +        /* </xlators> */ +#endif +        j = 1; + +        /* <bricks> */ +        ret = xmlTextWriterStartElement(local->writer, (xmlChar *)"bricks"); +        XML_RET_CHECK_AND_GOTO(ret, out); -                snprintf (key, sizeof (key), "volume%d.redundancy_count", i); -                ret = dict_get_int32 (dict, key, &redundancy_count); +        if (type == GF_CLUSTER_TYPE_TIER) { +            /*the values for hot stripe, disperse and redundancy +             * should not be looped in here as they are zero +             * always */ +            for (c = COLD_BRICK_COUNT; c < MAX; c++) { +                snprintf(key, 256, keys[c], i); +                ret = dict_get_int32(dict, key, &value[c]);                  if (ret) -                        goto out; -                ret = xmlTextWriterWriteFormatElement (local->writer, -                                                       (xmlChar *)"redundancyCount", -                                                       "%d", redundancy_count); -                XML_RET_CHECK_AND_GOTO (ret, out); +                    goto out; +            } + +            hot_dist_count = (value[HOT_REPLICA_COUNT] +                                  ? value[HOT_REPLICA_COUNT] +                                  : 1); + +            tier_vol_type = get_vol_type(value[HOT_TYPE], hot_dist_count, +                                         value[HOT_BRICK_COUNT]); -                snprintf (key, sizeof (key), "volume%d.type", i); -                ret = dict_get_int32 (dict, key, &type); +            if ((value[HOT_TYPE] != GF_CLUSTER_TYPE_TIER) && +                (value[HOT_TYPE] > 0) && +                (hot_dist_count < value[HOT_BRICK_COUNT])) +                tier_vol_type = value[HOT_TYPE] + GF_CLUSTER_TYPE_MAX - 1; + +            ret = xmlTextWriterStartElement(local->writer, +                                            (xmlChar *)"hotBricks"); +            XML_RET_CHECK_AND_GOTO(ret, out); + +            ret = xmlTextWriterWriteFormatElement( +                local->writer, (xmlChar *)"hotBrickType", "%s", +                vol_type_str[tier_vol_type]); +            XML_RET_CHECK_AND_GOTO(ret, out); + +            ret = xmlTextWriterWriteFormatElement( +                local->writer, (xmlChar *)"hotreplicaCount", "%d", +                value[HOT_REPLICA_COUNT]); +            XML_RET_CHECK_AND_GOTO(ret, out); + +            ret = xmlTextWriterWriteFormatElement(local->writer, +                                                  (xmlChar *)"hotbrickCount", +                                                  "%d", value[HOT_BRICK_COUNT]); +            XML_RET_CHECK_AND_GOTO(ret, out); + +            if (value[HOT_TYPE] == GF_CLUSTER_TYPE_NONE || +                value[HOT_TYPE] == GF_CLUSTER_TYPE_TIER) { +                ret = xmlTextWriterWriteFormatElement( +                    local->writer, (xmlChar *)"numberOfBricks", "%d", +                    value[HOT_BRICK_COUNT]); +            } else { +                ret = xmlTextWriterWriteFormatElement( +                    local->writer, (xmlChar *)"numberOfBricks", "%d x %d = %d", +                    (value[HOT_BRICK_COUNT] / hot_dist_count), hot_dist_count, +                    value[HOT_BRICK_COUNT]); +            } +            XML_RET_CHECK_AND_GOTO(ret, out); + +            while (index <= value[HOT_BRICK_COUNT]) { +                snprintf(key, 1024, "volume%d.brick%d", i, index); +                ret = dict_get_str(dict, key, &brick);                  if (ret) -                        goto out; -                /* For Distributed-(stripe,replicate,stipe-replicate,disperse) -                   types -                 */ -                type = get_vol_type (type, dist_count, brick_count); - -                ret = xmlTextWriterWriteFormatElement (local->writer, -                                                       (xmlChar *)"type", -                                                       "%d", type); -                XML_RET_CHECK_AND_GOTO (ret, out); - -                ret = xmlTextWriterWriteFormatElement (local->writer, -                                                       (xmlChar *)"typeStr", -                                                       "%s", -                                                       vol_type_str[type]); -                XML_RET_CHECK_AND_GOTO (ret, out); - -                snprintf (key, sizeof (key), "volume%d.transport", i); -                ret = dict_get_int32 (dict, key, &transport); +                    goto out; + +                ret = xmlTextWriterStartElement(local->writer, +                                                (xmlChar *)"brick"); +                XML_RET_CHECK_AND_GOTO(ret, out); + +                snprintf(key, sizeof(key), "volume%d.brick%d.uuid", i, index); +                ret = dict_get_str(dict, key, &uuid);                  if (ret) -                        goto out; -                ret = xmlTextWriterWriteFormatElement (local->writer, -                                                       (xmlChar *)"transport", -                                                       "%d", transport); -                XML_RET_CHECK_AND_GOTO (ret, out); +                    goto out; +                ret = xmlTextWriterWriteFormatAttribute( +                    local->writer, (xmlChar *)"uuid", "%s", uuid); +                XML_RET_CHECK_AND_GOTO(ret, out); -#ifdef HAVE_BD_XLATOR -                /* <xlators> */ -                ret = xmlTextWriterStartElement (local->writer, -                                                 (xmlChar *)"xlators"); -                XML_RET_CHECK_AND_GOTO (ret, out); - -                for (k = 0; ; k++) { -                        snprintf (key, sizeof (key),"volume%d.xlator%d", i, k); -                        ret = dict_get_str (dict, key, &caps); -                        if (ret) -                                break; - -                        /* <xlator> */ -                        ret = xmlTextWriterStartElement (local->writer, -                                                         (xmlChar *)"xlator"); -                        XML_RET_CHECK_AND_GOTO (ret, out); - -                        ret = xmlTextWriterWriteFormatElement -                                (local->writer, (xmlChar *)"name", "%s", caps); -                        XML_RET_CHECK_AND_GOTO (ret, out); - -                        /* <capabilities> */ -                        ret = xmlTextWriterStartElement (local->writer, -                                                         (xmlChar *) -                                                         "capabilities"); -                        XML_RET_CHECK_AND_GOTO (ret, out); - -                        j = 0; -                        for (j = 0; ;j++) { -                                snprintf (key, sizeof (key), -                                          "volume%d.xlator%d.caps%d", i, k, j); -                                ret = dict_get_str (dict, key, &caps); -                                if (ret) -                                        break; -                                ret = xmlTextWriterWriteFormatElement -                                        (local->writer, (xmlChar *)"capability", -                                         "%s", caps); -                                XML_RET_CHECK_AND_GOTO (ret, out); -                        } -                        /* </capabilities> */ -                        ret = xmlTextWriterEndElement (local->writer); -                        XML_RET_CHECK_AND_GOTO (ret, out); -                        /* </xlator> */ -                        ret = xmlTextWriterEndElement (local->writer); -                        XML_RET_CHECK_AND_GOTO (ret, out); -                } -                ret = xmlTextWriterFullEndElement (local->writer); -                XML_RET_CHECK_AND_GOTO (ret, out); -                /* </xlators> */ -#endif -                j = 1; - -                /* <bricks> */ -                ret = xmlTextWriterStartElement (local->writer, -                                                 (xmlChar *)"bricks"); -                XML_RET_CHECK_AND_GOTO (ret, out); - -                if (type == GF_CLUSTER_TYPE_TIER) { -                        /*the values for hot stripe, disperse and redundancy -                         * should not be looped in here as they are zero -                         * always */ -                        for (c = COLD_BRICK_COUNT; c < MAX; c++) { - -                                snprintf (key, 256, keys[c], i); -                                ret = dict_get_int32 (dict, key, &value[c]); -                                if (ret) -                                        goto out; -                        } - -                        hot_dist_count = (value[HOT_REPLICA_COUNT] ? -                                          value[HOT_REPLICA_COUNT] : 1); - -                        tier_vol_type = get_vol_type (value[HOT_TYPE], -                                                      hot_dist_count, -                                                      value[HOT_BRICK_COUNT]); - -                        if ((value[HOT_TYPE] != GF_CLUSTER_TYPE_TIER) && -                            (value[HOT_TYPE] > 0) && -                            (hot_dist_count < value[HOT_BRICK_COUNT])) -                                tier_vol_type = value[HOT_TYPE] + -                                        GF_CLUSTER_TYPE_MAX - 1; - -                        ret = xmlTextWriterStartElement (local->writer, -                                                         (xmlChar *) -                                                         "hotBricks"); -                        XML_RET_CHECK_AND_GOTO (ret, out); - -                        ret = xmlTextWriterWriteFormatElement -                                (local->writer, (xmlChar *)"hotBrickType", -                                 "%s", vol_type_str[tier_vol_type]); -                        XML_RET_CHECK_AND_GOTO (ret, out); - -                        ret = xmlTextWriterWriteFormatElement (local->writer, -                                                   (xmlChar *)"hotreplicaCount", -                                                    "%d", -                                                    value[HOT_REPLICA_COUNT]); -                        XML_RET_CHECK_AND_GOTO (ret, out); - -                        ret = xmlTextWriterWriteFormatElement (local->writer, -                                                   (xmlChar *)"hotbrickCount", -                                                    "%d", -                                                    value[HOT_BRICK_COUNT]); -                        XML_RET_CHECK_AND_GOTO (ret, out); - -                        if (value[HOT_TYPE] == GF_CLUSTER_TYPE_NONE || -                                        value[HOT_TYPE] == -                                        GF_CLUSTER_TYPE_TIER) { -                                ret = xmlTextWriterWriteFormatElement -                                        (local->writer, -                                         (xmlChar *)"numberOfBricks", -                                         "%d", value[HOT_BRICK_COUNT]); -                        } else { -                                ret = xmlTextWriterWriteFormatElement -                                        (local->writer, -                                         (xmlChar *)"numberOfBricks", -                                         "%d x %d = %d", -                                         (value[HOT_BRICK_COUNT] / -                                          hot_dist_count), -                                         hot_dist_count, -                                         value[HOT_BRICK_COUNT]); -                        } -                        XML_RET_CHECK_AND_GOTO (ret, out); - -                        while (index <= value[HOT_BRICK_COUNT]) { -                                snprintf (key, 1024, "volume%d.brick%d", i, -                                          index); -                                ret = dict_get_str (dict, key, &brick); -                                if (ret) -                                        goto out; - -                                ret = xmlTextWriterStartElement -                                        (local->writer, (xmlChar *)"brick"); -                                XML_RET_CHECK_AND_GOTO (ret, out); - -                                snprintf (key, sizeof (key), -                                          "volume%d.brick%d.uuid", i, index); -                                ret = dict_get_str (dict, key, &uuid); -                                if (ret) -                                        goto out; -                                ret = xmlTextWriterWriteFormatAttribute -                                        (local->writer, (xmlChar *)"uuid", "%s", -                                         uuid); -                                XML_RET_CHECK_AND_GOTO (ret, out); - -                                ret = xmlTextWriterWriteFormatString -                                        (local->writer, "%s", brick); -                                XML_RET_CHECK_AND_GOTO (ret, out); - -                                ret = xmlTextWriterWriteFormatElement -                                        (local->writer, (xmlChar *)"name", "%s", -                                         brick); -                                XML_RET_CHECK_AND_GOTO (ret, out); - -                                ret = xmlTextWriterWriteFormatElement -                                        (local->writer, (xmlChar *)"hostUuid", -                                         "%s", uuid); -                                XML_RET_CHECK_AND_GOTO (ret, out); - -                                ret = xmlTextWriterEndElement (local->writer); -                                XML_RET_CHECK_AND_GOTO (ret, out); - -                                index++; -                        } -                        ret = xmlTextWriterEndElement (local->writer); -                        XML_RET_CHECK_AND_GOTO (ret, out); - -                        tier_vol_type = get_vol_type (value[COLD_TYPE], -                                                      value[COLD_DIST_COUNT], -                                                      value[COLD_BRICK_COUNT]); - -                        ret = xmlTextWriterStartElement (local->writer, -                                                         (xmlChar *) -                                                         "coldBricks"); -                        XML_RET_CHECK_AND_GOTO (ret, out); - -                        ret = xmlTextWriterWriteFormatElement -                                (local->writer, (xmlChar *)"coldBrickType", -                                 "%s", vol_type_str[tier_vol_type]); -                        XML_RET_CHECK_AND_GOTO (ret, out); - -                        ret = xmlTextWriterWriteFormatElement (local->writer, -                                        (xmlChar *)"coldreplicaCount", -                                        "%d", value[COLD_REPLICA_COUNT]); -                        XML_RET_CHECK_AND_GOTO (ret, out); - -                        ret = xmlTextWriterWriteFormatElement (local->writer, -                                        (xmlChar *)"coldarbiterCount", -                                        "%d", value[COLD_ARBITER_COUNT]); -                        XML_RET_CHECK_AND_GOTO (ret, out); - -                        ret = xmlTextWriterWriteFormatElement (local->writer, -                                                   (xmlChar *)"coldbrickCount", -                                                    "%d", -                                                    value[COLD_BRICK_COUNT]); -                        XML_RET_CHECK_AND_GOTO (ret, out); - -                        ret = xmlTextWriterWriteFormatElement (local->writer, -                                              (xmlChar *)"colddisperseCount", -                                              "%d", value[COLD_DISPERSE_COUNT]); -                        XML_RET_CHECK_AND_GOTO (ret, out); - -                        if (value[COLD_TYPE] == GF_CLUSTER_TYPE_NONE || -                                        value[COLD_TYPE] == -                                        GF_CLUSTER_TYPE_TIER) { -                                ret = xmlTextWriterWriteFormatElement -                                        (local->writer, -                                         (xmlChar *)"numberOfBricks", -                                         "%d", value[COLD_BRICK_COUNT]); -                        } else if (value[COLD_TYPE] == -                                        GF_CLUSTER_TYPE_DISPERSE) { -                                ret = xmlTextWriterWriteFormatElement -                                        (local->writer, -                                         (xmlChar *)"numberOfBricks", -                                         " %d x (%d + %d) = %d", -                                         (value[COLD_BRICK_COUNT] / -                                          value[COLD_DIST_COUNT]), -                                         value[COLD_DISPERSE_COUNT] - -                                         value[COLD_REDUNDANCY_COUNT], -                                         value[COLD_REDUNDANCY_COUNT], -                                         value[COLD_BRICK_COUNT]); -                        } else { -                                ret = xmlTextWriterWriteFormatElement -                                        (local->writer, -                                         (xmlChar *)"numberOfBricks", -                                         "%d x %d = %d", -                                         (value[COLD_BRICK_COUNT] / -                                          value[COLD_DIST_COUNT]), +                ret = xmlTextWriterWriteFormatString(local->writer, "%s", +                                                     brick); +                XML_RET_CHECK_AND_GOTO(ret, out); + +                ret = xmlTextWriterWriteFormatElement( +                    local->writer, (xmlChar *)"name", "%s", brick); +                XML_RET_CHECK_AND_GOTO(ret, out); + +                ret = xmlTextWriterWriteFormatElement( +                    local->writer, (xmlChar *)"hostUuid", "%s", uuid); +                XML_RET_CHECK_AND_GOTO(ret, out); + +                ret = xmlTextWriterEndElement(local->writer); +                XML_RET_CHECK_AND_GOTO(ret, out); + +                index++; +            } +            ret = xmlTextWriterEndElement(local->writer); +            XML_RET_CHECK_AND_GOTO(ret, out); + +            tier_vol_type = get_vol_type(value[COLD_TYPE],                                           value[COLD_DIST_COUNT],                                           value[COLD_BRICK_COUNT]); -                        } -                        XML_RET_CHECK_AND_GOTO (ret, out); -                        index = value[HOT_BRICK_COUNT] + 1; - -                        while (index <= brick_count) { -                                snprintf (key, 1024, "volume%d.brick%d", i, -                                          index); -                                ret = dict_get_str (dict, key, &brick); -                                if (ret) -                                        goto out; - -                                ret = xmlTextWriterStartElement -                                        (local->writer, (xmlChar *)"brick"); -                                XML_RET_CHECK_AND_GOTO (ret, out); - -                                snprintf (key, sizeof (key), -                                          "volume%d.brick%d.uuid", i, index); -                                ret = dict_get_str (dict, key, &uuid); -                                if (ret) -                                        goto out; -                                ret = xmlTextWriterWriteFormatAttribute -                                        (local->writer, (xmlChar *)"uuid", "%s", -                                         uuid); -                                XML_RET_CHECK_AND_GOTO (ret, out); - -                                ret = xmlTextWriterWriteFormatString -                                        (local->writer, "%s", brick); -                                XML_RET_CHECK_AND_GOTO (ret, out); - -                                ret = xmlTextWriterWriteFormatElement -                                        (local->writer, (xmlChar *)"name", "%s", -                                         brick); -                                XML_RET_CHECK_AND_GOTO (ret, out); - -                                ret = xmlTextWriterWriteFormatElement -                                        (local->writer, (xmlChar *)"hostUuid", -                                         "%s", uuid); -                                XML_RET_CHECK_AND_GOTO (ret, out); - -                                snprintf (key, sizeof (key), -                                          "volume%d.brick%d.isArbiter", i, -                                          index); -                                if (dict_get (dict, key)) -                                        isArbiter = 1; -                                else -                                        isArbiter = 0; -                                ret = xmlTextWriterWriteFormatElement -                                        (local->writer, (xmlChar *)"isArbiter", -                                         "%d", isArbiter); -                                XML_RET_CHECK_AND_GOTO (ret, out); - -                                ret = xmlTextWriterEndElement (local->writer); -                                XML_RET_CHECK_AND_GOTO (ret, out); - -                                index++; -                        } -                        ret = xmlTextWriterEndElement (local->writer); -                        XML_RET_CHECK_AND_GOTO (ret, out); - -                } else { -                        while (j <= brick_count) { -                                ret = xmlTextWriterStartElement -                                        (local->writer, (xmlChar *)"brick"); -                                XML_RET_CHECK_AND_GOTO (ret, out); - -                                snprintf (key, sizeof (key), -                                          "volume%d.brick%d.uuid", i, j); -                                ret = dict_get_str (dict, key, &uuid); -                                if (ret) -                                        goto out; -                                ret = xmlTextWriterWriteFormatAttribute -                                        (local->writer, (xmlChar *)"uuid", "%s", -                                         uuid); -                                XML_RET_CHECK_AND_GOTO (ret, out); - -                                snprintf (key, sizeof (key), -                                          "volume%d.brick%d", i, j); -                                ret = dict_get_str (dict, key, &brick); -                                if (ret) -                                        goto out; -                                ret = xmlTextWriterWriteFormatString -                                        (local->writer, "%s", brick); -                                XML_RET_CHECK_AND_GOTO (ret, out); - -                                ret = xmlTextWriterWriteFormatElement -                                        (local->writer, (xmlChar *)"name", "%s", -                                         brick); -                                XML_RET_CHECK_AND_GOTO (ret, out); - -                                ret = xmlTextWriterWriteFormatElement -                                        (local->writer, (xmlChar *)"hostUuid", -                                         "%s", uuid); -                                XML_RET_CHECK_AND_GOTO (ret, out); - -                                snprintf (key, sizeof (key), -                                          "volume%d.brick%d.isArbiter", i, j); -                                if (dict_get (dict, key)) -                                        isArbiter = 1; -                                else -                                        isArbiter = 0; -                                ret = xmlTextWriterWriteFormatElement -                                        (local->writer, (xmlChar *)"isArbiter", -                                         "%d", isArbiter); -                                XML_RET_CHECK_AND_GOTO (ret, out); - -                                /* </brick> */ -                                ret = xmlTextWriterEndElement (local->writer); -                                XML_RET_CHECK_AND_GOTO (ret, out); - -                                j++; -                        } -                } -                /* </bricks> */ -                ret = xmlTextWriterEndElement (local->writer); -                XML_RET_CHECK_AND_GOTO (ret, out); -                snprintf (key, sizeof (key), "volume%d", i); -                ret = cli_xml_output_vol_info_options (local->writer, dict, -                                                       key); +            ret = xmlTextWriterStartElement(local->writer, +                                            (xmlChar *)"coldBricks"); +            XML_RET_CHECK_AND_GOTO(ret, out); + +            ret = xmlTextWriterWriteFormatElement( +                local->writer, (xmlChar *)"coldBrickType", "%s", +                vol_type_str[tier_vol_type]); +            XML_RET_CHECK_AND_GOTO(ret, out); + +            ret = xmlTextWriterWriteFormatElement( +                local->writer, (xmlChar *)"coldreplicaCount", "%d", +                value[COLD_REPLICA_COUNT]); +            XML_RET_CHECK_AND_GOTO(ret, out); + +            ret = xmlTextWriterWriteFormatElement( +                local->writer, (xmlChar *)"coldarbiterCount", "%d", +                value[COLD_ARBITER_COUNT]); +            XML_RET_CHECK_AND_GOTO(ret, out); + +            ret = xmlTextWriterWriteFormatElement( +                local->writer, (xmlChar *)"coldbrickCount", "%d", +                value[COLD_BRICK_COUNT]); +            XML_RET_CHECK_AND_GOTO(ret, out); + +            ret = xmlTextWriterWriteFormatElement( +                local->writer, (xmlChar *)"colddisperseCount", "%d", +                value[COLD_DISPERSE_COUNT]); +            XML_RET_CHECK_AND_GOTO(ret, out); + +            if (value[COLD_TYPE] == GF_CLUSTER_TYPE_NONE || +                value[COLD_TYPE] == GF_CLUSTER_TYPE_TIER) { +                ret = xmlTextWriterWriteFormatElement( +                    local->writer, (xmlChar *)"numberOfBricks", "%d", +                    value[COLD_BRICK_COUNT]); +            } else if (value[COLD_TYPE] == GF_CLUSTER_TYPE_DISPERSE) { +                ret = xmlTextWriterWriteFormatElement( +                    local->writer, (xmlChar *)"numberOfBricks", +                    " %d x (%d + %d) = %d", +                    (value[COLD_BRICK_COUNT] / value[COLD_DIST_COUNT]), +                    value[COLD_DISPERSE_COUNT] - value[COLD_REDUNDANCY_COUNT], +                    value[COLD_REDUNDANCY_COUNT], value[COLD_BRICK_COUNT]); +            } else { +                ret = xmlTextWriterWriteFormatElement( +                    local->writer, (xmlChar *)"numberOfBricks", "%d x %d = %d", +                    (value[COLD_BRICK_COUNT] / value[COLD_DIST_COUNT]), +                    value[COLD_DIST_COUNT], value[COLD_BRICK_COUNT]); +            } +            XML_RET_CHECK_AND_GOTO(ret, out); +            index = value[HOT_BRICK_COUNT] + 1; + +            while (index <= brick_count) { +                snprintf(key, 1024, "volume%d.brick%d", i, index); +                ret = dict_get_str(dict, key, &brick);                  if (ret) -                        goto out; +                    goto out; -                /* </volume> */ -                ret = xmlTextWriterEndElement (local->writer); -                XML_RET_CHECK_AND_GOTO (ret, out); -        } +                ret = xmlTextWriterStartElement(local->writer, +                                                (xmlChar *)"brick"); +                XML_RET_CHECK_AND_GOTO(ret, out); + +                snprintf(key, sizeof(key), "volume%d.brick%d.uuid", i, index); +                ret = dict_get_str(dict, key, &uuid); +                if (ret) +                    goto out; +                ret = xmlTextWriterWriteFormatAttribute( +                    local->writer, (xmlChar *)"uuid", "%s", uuid); +                XML_RET_CHECK_AND_GOTO(ret, out); + +                ret = xmlTextWriterWriteFormatString(local->writer, "%s", +                                                     brick); +                XML_RET_CHECK_AND_GOTO(ret, out); + +                ret = xmlTextWriterWriteFormatElement( +                    local->writer, (xmlChar *)"name", "%s", brick); +                XML_RET_CHECK_AND_GOTO(ret, out); + +                ret = xmlTextWriterWriteFormatElement( +                    local->writer, (xmlChar *)"hostUuid", "%s", uuid); +                XML_RET_CHECK_AND_GOTO(ret, out); + +                snprintf(key, sizeof(key), "volume%d.brick%d.isArbiter", i, +                         index); +                if (dict_get(dict, key)) +                    isArbiter = 1; +                else +                    isArbiter = 0; +                ret = xmlTextWriterWriteFormatElement( +                    local->writer, (xmlChar *)"isArbiter", "%d", isArbiter); +                XML_RET_CHECK_AND_GOTO(ret, out); + +                ret = xmlTextWriterEndElement(local->writer); +                XML_RET_CHECK_AND_GOTO(ret, out); + +                index++; +            } +            ret = xmlTextWriterEndElement(local->writer); +            XML_RET_CHECK_AND_GOTO(ret, out); + +        } else { +            while (j <= brick_count) { +                ret = xmlTextWriterStartElement(local->writer, +                                                (xmlChar *)"brick"); +                XML_RET_CHECK_AND_GOTO(ret, out); -        if (volname) { -                GF_FREE (local->get_vol.volname); -                local->get_vol.volname = gf_strdup (volname); -                local->vol_count += count; +                snprintf(key, sizeof(key), "volume%d.brick%d.uuid", i, j); +                ret = dict_get_str(dict, key, &uuid); +                if (ret) +                    goto out; +                ret = xmlTextWriterWriteFormatAttribute( +                    local->writer, (xmlChar *)"uuid", "%s", uuid); +                XML_RET_CHECK_AND_GOTO(ret, out); + +                snprintf(key, sizeof(key), "volume%d.brick%d", i, j); +                ret = dict_get_str(dict, key, &brick); +                if (ret) +                    goto out; +                ret = xmlTextWriterWriteFormatString(local->writer, "%s", +                                                     brick); +                XML_RET_CHECK_AND_GOTO(ret, out); + +                ret = xmlTextWriterWriteFormatElement( +                    local->writer, (xmlChar *)"name", "%s", brick); +                XML_RET_CHECK_AND_GOTO(ret, out); + +                ret = xmlTextWriterWriteFormatElement( +                    local->writer, (xmlChar *)"hostUuid", "%s", uuid); +                XML_RET_CHECK_AND_GOTO(ret, out); + +                snprintf(key, sizeof(key), "volume%d.brick%d.isArbiter", i, j); +                if (dict_get(dict, key)) +                    isArbiter = 1; +                else +                    isArbiter = 0; +                ret = xmlTextWriterWriteFormatElement( +                    local->writer, (xmlChar *)"isArbiter", "%d", isArbiter); +                XML_RET_CHECK_AND_GOTO(ret, out); + +                /* </brick> */ +                ret = xmlTextWriterEndElement(local->writer); +                XML_RET_CHECK_AND_GOTO(ret, out); + +                j++; +            }          } +        /* </bricks> */ +        ret = xmlTextWriterEndElement(local->writer); +        XML_RET_CHECK_AND_GOTO(ret, out); + +        snprintf(key, sizeof(key), "volume%d", i); +        ret = cli_xml_output_vol_info_options(local->writer, dict, key); +        if (ret) +            goto out; + +        /* </volume> */ +        ret = xmlTextWriterEndElement(local->writer); +        XML_RET_CHECK_AND_GOTO(ret, out); +    } + +    if (volname) { +        GF_FREE(local->get_vol.volname); +        local->get_vol.volname = gf_strdup(volname); +        local->vol_count += count; +    }  out: -        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); -        return ret; +    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret); +    return ret;  #else -        return 0; +    return 0;  #endif  }  int -cli_xml_output_vol_info_begin (cli_local_t *local, int op_ret, int op_errno, -                               char *op_errstr) +cli_xml_output_vol_info_begin(cli_local_t *local, int op_ret, int op_errno, +                              char *op_errstr)  {  #if (HAVE_LIB_XML) -        int                     ret = -1; +    int ret = -1; -        GF_ASSERT (local); +    GF_ASSERT(local); -        ret = cli_begin_xml_output (&(local->writer), &(local->doc)); -        if (ret) -                goto out; +    ret = cli_begin_xml_output(&(local->writer), &(local->doc)); +    if (ret) +        goto out; -        ret = cli_xml_output_common (local->writer, op_ret, op_errno, -                                     op_errstr); -        if (ret) -                goto out; +    ret = cli_xml_output_common(local->writer, op_ret, op_errno, op_errstr); +    if (ret) +        goto out; -        /* <volInfo> */ -        ret = xmlTextWriterStartElement (local->writer, (xmlChar *)"volInfo"); -        XML_RET_CHECK_AND_GOTO (ret, out); +    /* <volInfo> */ +    ret = xmlTextWriterStartElement(local->writer, (xmlChar *)"volInfo"); +    XML_RET_CHECK_AND_GOTO(ret, out); -        /* <volumes> */ -        ret = xmlTextWriterStartElement (local->writer, (xmlChar *)"volumes"); -        XML_RET_CHECK_AND_GOTO (ret, out); +    /* <volumes> */ +    ret = xmlTextWriterStartElement(local->writer, (xmlChar *)"volumes"); +    XML_RET_CHECK_AND_GOTO(ret, out); -        /* Init vol count */ -        local->vol_count = 0; +    /* Init vol count */ +    local->vol_count = 0;  out: -        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); -        return ret; +    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret); +    return ret;  #else -        return 0; +    return 0;  #endif  }  int -cli_xml_output_vol_info_end (cli_local_t *local) +cli_xml_output_vol_info_end(cli_local_t *local)  {  #if (HAVE_LIB_XML) -        int             ret = -1; +    int ret = -1; -        GF_ASSERT (local); +    GF_ASSERT(local); -        ret = xmlTextWriterWriteFormatElement (local->writer, -                                               (xmlChar *)"count", -                                               "%d", local->vol_count); -        XML_RET_CHECK_AND_GOTO (ret, out); -        /* </volumes> */ -        ret = xmlTextWriterEndElement (local->writer); -        XML_RET_CHECK_AND_GOTO (ret, out); +    ret = xmlTextWriterWriteFormatElement(local->writer, (xmlChar *)"count", +                                          "%d", local->vol_count); +    XML_RET_CHECK_AND_GOTO(ret, out); +    /* </volumes> */ +    ret = xmlTextWriterEndElement(local->writer); +    XML_RET_CHECK_AND_GOTO(ret, out); -        /* </volInfo> */ -        ret = xmlTextWriterEndElement (local->writer); -        XML_RET_CHECK_AND_GOTO (ret, out); +    /* </volInfo> */ +    ret = xmlTextWriterEndElement(local->writer); +    XML_RET_CHECK_AND_GOTO(ret, out); -        ret = cli_end_xml_output (local->writer, local->doc); +    ret = cli_end_xml_output(local->writer, local->doc);  out: -        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); -        return ret; +    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret); +    return ret;  #else -        return 0; +    return 0;  #endif  }  int -cli_xml_output_vol_quota_limit_list_end (cli_local_t *local) +cli_xml_output_vol_quota_limit_list_end(cli_local_t *local)  {  #if (HAVE_LIB_XML) -        int     ret = -1; +    int ret = -1; -        ret = xmlTextWriterEndElement (local->writer); -        XML_RET_CHECK_AND_GOTO (ret, out); +    ret = xmlTextWriterEndElement(local->writer); +    XML_RET_CHECK_AND_GOTO(ret, out); -        ret = cli_end_xml_output (local->writer, local->doc); +    ret = cli_end_xml_output(local->writer, local->doc);  out: -        return ret; +    return ret;  #else -        return 0; +    return 0;  #endif  }  int -cli_xml_output_vol_quota_limit_list_begin (cli_local_t *local, int op_ret, -                                           int op_errno, char *op_errstr) +cli_xml_output_vol_quota_limit_list_begin(cli_local_t *local, int op_ret, +                                          int op_errno, char *op_errstr)  {  #if (HAVE_LIB_XML) -        int                     ret = -1; +    int ret = -1; -        ret = cli_begin_xml_output (&(local->writer), &(local->doc)); -        if (ret) -                goto out; - -        ret = cli_xml_output_common (local->writer, op_ret, op_errno, -                                     op_errstr); -        if (ret) -                goto out; +    ret = cli_begin_xml_output(&(local->writer), &(local->doc)); +    if (ret) +        goto out; -        /* <volQuota> */ -        ret = xmlTextWriterStartElement (local->writer, (xmlChar *)"volQuota"); -        XML_RET_CHECK_AND_GOTO (ret, out); +    ret = cli_xml_output_common(local->writer, op_ret, op_errno, op_errstr); +    if (ret) +        goto out; +    /* <volQuota> */ +    ret = xmlTextWriterStartElement(local->writer, (xmlChar *)"volQuota"); +    XML_RET_CHECK_AND_GOTO(ret, out);  out: -        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); -        return ret; +    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret); +    return ret;  #else -        return 0; +    return 0;  #endif  }  #if (HAVE_LIB_XML)  static int -cli_xml_output_peer_hostnames (xmlTextWriterPtr writer, dict_t *dict, -                               const char *prefix, int count) +cli_xml_output_peer_hostnames(xmlTextWriterPtr writer, dict_t *dict, +                              const char *prefix, int count)  { -        int   ret       = -1; -        int   i         = 0; -        char *hostname  = NULL; -        char  key[1024] = {0,}; - -        /* <hostnames> */ -        ret = xmlTextWriterStartElement (writer, (xmlChar *)"hostnames"); -        XML_RET_CHECK_AND_GOTO (ret, out); - -        for (i = 0; i < count; i++) { -                snprintf (key, sizeof (key), "%s.hostname%d", prefix, i); -                ret = dict_get_str (dict, key, &hostname); -                if (ret) -                        goto out; -                ret = xmlTextWriterWriteFormatElement -                        (writer, (xmlChar *)"hostname", "%s", hostname); -                XML_RET_CHECK_AND_GOTO (ret, out); -                hostname = NULL; -        } +    int ret = -1; +    int i = 0; +    char *hostname = NULL; +    char key[1024] = { +        0, +    }; + +    /* <hostnames> */ +    ret = xmlTextWriterStartElement(writer, (xmlChar *)"hostnames"); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    for (i = 0; i < count; i++) { +        snprintf(key, sizeof(key), "%s.hostname%d", prefix, i); +        ret = dict_get_str(dict, key, &hostname); +        if (ret) +            goto out; +        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"hostname", +                                              "%s", hostname); +        XML_RET_CHECK_AND_GOTO(ret, out); +        hostname = NULL; +    } -        /* </hostnames> */ -        ret = xmlTextWriterEndElement (writer); -        XML_RET_CHECK_AND_GOTO (ret, out); +    /* </hostnames> */ +    ret = xmlTextWriterEndElement(writer); +    XML_RET_CHECK_AND_GOTO(ret, out);  out: -        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); -        return ret; +    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret); +    return ret;  }  #endif  int -cli_xml_output_peer_status (dict_t *dict, int op_ret, int op_errno, -                            char *op_errstr) +cli_xml_output_peer_status(dict_t *dict, int op_ret, int op_errno, +                           char *op_errstr)  {  #if (HAVE_LIB_XML) -        int                     ret = -1; -        xmlTextWriterPtr        writer = NULL; -        xmlDocPtr               doc = NULL; -        int                     count = 0; -        char                    *uuid = NULL; -        char                    *hostname = NULL; -        int                     connected = 0; -        int                     state_id = 0; -        char                    *state_str = NULL; -        int                     hostname_count = 0; -        int                     i = 1; -        char                    key[1024] = {0,}; - -        ret = cli_begin_xml_output (&writer, &doc); -        if (ret) -                goto out; +    int ret = -1; +    xmlTextWriterPtr writer = NULL; +    xmlDocPtr doc = NULL; +    int count = 0; +    char *uuid = NULL; +    char *hostname = NULL; +    int connected = 0; +    int state_id = 0; +    char *state_str = NULL; +    int hostname_count = 0; +    int i = 1; +    char key[1024] = { +        0, +    }; + +    ret = cli_begin_xml_output(&writer, &doc); +    if (ret) +        goto out; + +    ret = cli_xml_output_common(writer, op_ret, op_errno, op_errstr); +    if (ret) +        goto out; + +    /* <peerStatus> */ +    ret = xmlTextWriterStartElement(writer, (xmlChar *)"peerStatus"); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    if (!dict) +        goto cont; + +    ret = dict_get_int32(dict, "count", &count); +    if (ret) +        goto out; + +    while (i <= count) { +        /* <peer> */ +        ret = xmlTextWriterStartElement(writer, (xmlChar *)"peer"); +        XML_RET_CHECK_AND_GOTO(ret, out); -        ret = cli_xml_output_common (writer, op_ret, op_errno, op_errstr); +        snprintf(key, sizeof(key), "friend%d.uuid", i); +        ret = dict_get_str(dict, key, &uuid);          if (ret) -                goto out; +            goto out; -        /* <peerStatus> */ -        ret = xmlTextWriterStartElement (writer, (xmlChar *)"peerStatus"); -        XML_RET_CHECK_AND_GOTO (ret, out); - -        if (!dict) -                goto cont; +        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"uuid", "%s", +                                              uuid); +        XML_RET_CHECK_AND_GOTO(ret, out); -        ret = dict_get_int32 (dict, "count", &count); +        snprintf(key, sizeof(key), "friend%d.hostname", i); +        ret = dict_get_str(dict, key, &hostname);          if (ret) -                goto out; +            goto out; -        while (i <= count) { -                /* <peer> */ -                ret = xmlTextWriterStartElement (writer, (xmlChar *)"peer"); -                XML_RET_CHECK_AND_GOTO (ret, out); - -                snprintf (key, sizeof (key), "friend%d.uuid", i); -                ret = dict_get_str (dict, key, &uuid); -                if (ret) -                        goto out; - -                ret = xmlTextWriterWriteFormatElement (writer, -                                                       (xmlChar *)"uuid", -                                                       "%s", uuid); -                XML_RET_CHECK_AND_GOTO (ret, out); - -                snprintf (key, sizeof (key), "friend%d.hostname", i); -                ret = dict_get_str (dict, key, &hostname); -                if (ret) -                        goto out; +        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"hostname", +                                              "%s", hostname); +        XML_RET_CHECK_AND_GOTO(ret, out); -                ret = xmlTextWriterWriteFormatElement (writer, -                                                       (xmlChar *)"hostname", -                                                       "%s", hostname); -                XML_RET_CHECK_AND_GOTO (ret, out); - -                snprintf (key, sizeof (key), "friend%d.hostname_count", i); -                ret = dict_get_int32 (dict, key, &hostname_count); -                if ((ret == 0) && (hostname_count > 0)) { -                        snprintf (key, sizeof (key), "friend%d", i); -                        ret = cli_xml_output_peer_hostnames (writer, dict, key, -                                                             hostname_count); -                        XML_RET_CHECK_AND_GOTO (ret, out); -                } +        snprintf(key, sizeof(key), "friend%d.hostname_count", i); +        ret = dict_get_int32(dict, key, &hostname_count); +        if ((ret == 0) && (hostname_count > 0)) { +            snprintf(key, sizeof(key), "friend%d", i); +            ret = cli_xml_output_peer_hostnames(writer, dict, key, +                                                hostname_count); +            XML_RET_CHECK_AND_GOTO(ret, out); +        } -                snprintf (key, sizeof (key), "friend%d.connected", i); -                ret = dict_get_int32 (dict, key, &connected); -                if (ret) -                        goto out; +        snprintf(key, sizeof(key), "friend%d.connected", i); +        ret = dict_get_int32(dict, key, &connected); +        if (ret) +            goto out; -                ret = xmlTextWriterWriteFormatElement (writer, -                                                       (xmlChar *)"connected", -                                                       "%d", connected); -                XML_RET_CHECK_AND_GOTO (ret, out); +        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"connected", +                                              "%d", connected); +        XML_RET_CHECK_AND_GOTO(ret, out); -                snprintf (key, sizeof (key), "friend%d.stateId", i); -                ret = dict_get_int32 (dict, key, &state_id); -                if (!ret) { -                        /* ignore */ +        snprintf(key, sizeof(key), "friend%d.stateId", i); +        ret = dict_get_int32(dict, key, &state_id); +        if (!ret) { +            /* ignore */ -                        ret = xmlTextWriterWriteFormatElement (writer, -                                           (xmlChar *)"state", "%d", state_id); -                        XML_RET_CHECK_AND_GOTO (ret, out); -                } +            ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"state", +                                                  "%d", state_id); +            XML_RET_CHECK_AND_GOTO(ret, out); +        } -                snprintf (key, sizeof (key), "friend%d.state", i); -                ret = dict_get_str (dict, key, &state_str); -                if (!ret) { -                        /* ignore */ +        snprintf(key, sizeof(key), "friend%d.state", i); +        ret = dict_get_str(dict, key, &state_str); +        if (!ret) { +            /* ignore */ -                        ret = xmlTextWriterWriteFormatElement (writer, -                                       (xmlChar *)"stateStr", "%s", state_str); -                        XML_RET_CHECK_AND_GOTO (ret, out); -                } +            ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"stateStr", +                                                  "%s", state_str); +            XML_RET_CHECK_AND_GOTO(ret, out); +        } -                /* </peer> */ -                ret = xmlTextWriterEndElement (writer); -                XML_RET_CHECK_AND_GOTO (ret, out); +        /* </peer> */ +        ret = xmlTextWriterEndElement(writer); +        XML_RET_CHECK_AND_GOTO(ret, out); -                i++; -        } +        i++; +    }  cont: -        /* </peerStatus> */ -        ret = xmlTextWriterEndElement (writer); -        XML_RET_CHECK_AND_GOTO (ret, out); +    /* </peerStatus> */ +    ret = xmlTextWriterEndElement(writer); +    XML_RET_CHECK_AND_GOTO(ret, out); -        ret = cli_end_xml_output (writer, doc); +    ret = cli_end_xml_output(writer, doc);  out: -        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); -        return ret; +    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret); +    return ret;  #else -        return 0; +    return 0;  #endif  }  #if (HAVE_LIB_XML)  /* Used for rebalance stop/status, remove-brick status */  int -cli_xml_output_vol_rebalance_status (xmlTextWriterPtr writer, dict_t *dict, -                                     enum gf_task_types task_type) +cli_xml_output_vol_rebalance_status(xmlTextWriterPtr writer, dict_t *dict, +                                    enum gf_task_types task_type)  { -        int                     ret = -1; -        int                     count = 0; -        char                    *node_name = NULL; -        char                    *node_uuid = NULL; -        uint64_t                files = 0; -        uint64_t                size = 0; -        uint64_t                lookups = 0; -        int                     status_rcd = 0; -        uint64_t                failures = 0; -        uint64_t                skipped = 0; -        uint64_t                total_files = 0; -        uint64_t                total_size = 0; -        uint64_t                total_lookups = 0; -        uint64_t                total_failures = 0; -        uint64_t                total_skipped = 0; -        char                    key[1024] = {0,}; -        int                     i = 0; -        int                     overall_status = -1; -        double                  elapsed = 0; -        double                  overall_elapsed = 0; - -        if (!dict) { -                ret = 0; -                goto out; -        } +    int ret = -1; +    int count = 0; +    char *node_name = NULL; +    char *node_uuid = NULL; +    uint64_t files = 0; +    uint64_t size = 0; +    uint64_t lookups = 0; +    int status_rcd = 0; +    uint64_t failures = 0; +    uint64_t skipped = 0; +    uint64_t total_files = 0; +    uint64_t total_size = 0; +    uint64_t total_lookups = 0; +    uint64_t total_failures = 0; +    uint64_t total_skipped = 0; +    char key[1024] = { +        0, +    }; +    int i = 0; +    int overall_status = -1; +    double elapsed = 0; +    double overall_elapsed = 0; + +    if (!dict) { +        ret = 0; +        goto out; +    } + +    ret = dict_get_int32(dict, "count", &count); +    if (ret) +        goto out; +    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"nodeCount", "%d", +                                          count); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    while (i < count) { +        i++; +        /* Getting status early, to skip nodes that don't have the +         * rebalance process started +         */ +        snprintf(key, sizeof(key), "status-%d", i); +        ret = dict_get_int32(dict, key, &status_rcd); -        ret = dict_get_int32 (dict, "count", &count); +        /* If glusterd is down it fails to get the status, try +         getting status from other nodes */          if (ret) -                goto out; -        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"nodeCount", -                                               "%d", count); -        XML_RET_CHECK_AND_GOTO (ret, out); - -        while (i < count) { -                i++; -                /* Getting status early, to skip nodes that don't have the -                 * rebalance process started -                 */ -                snprintf (key, sizeof (key), "status-%d", i); -                ret = dict_get_int32 (dict, key, &status_rcd); - -                /* If glusterd is down it fails to get the status, try -                 getting status from other nodes */ -                if (ret) -                    continue; -                if (GF_DEFRAG_STATUS_NOT_STARTED == status_rcd) -                        continue; +            continue; +        if (GF_DEFRAG_STATUS_NOT_STARTED == status_rcd) +            continue; -                /* <node> */ -                ret = xmlTextWriterStartElement (writer, (xmlChar *)"node"); -                XML_RET_CHECK_AND_GOTO (ret, out); +        /* <node> */ +        ret = xmlTextWriterStartElement(writer, (xmlChar *)"node"); +        XML_RET_CHECK_AND_GOTO(ret, out); -                snprintf (key, sizeof (key), "node-name-%d", i); -                ret = dict_get_str (dict, key, &node_name); -                if (ret) -                        goto out; -                ret = xmlTextWriterWriteFormatElement (writer, -                                                       (xmlChar *)"nodeName", -                                                       "%s", node_name); -                XML_RET_CHECK_AND_GOTO (ret, out); +        snprintf(key, sizeof(key), "node-name-%d", i); +        ret = dict_get_str(dict, key, &node_name); +        if (ret) +            goto out; +        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"nodeName", +                                              "%s", node_name); +        XML_RET_CHECK_AND_GOTO(ret, out); -                snprintf (key, sizeof (key), "node-uuid-%d", i); -                ret = dict_get_str (dict, key, &node_uuid); -                if (ret) -                        goto out; -                ret = xmlTextWriterWriteFormatElement (writer, -                                                       (xmlChar *)"id", -                                                       "%s", node_uuid); -                XML_RET_CHECK_AND_GOTO (ret, out); +        snprintf(key, sizeof(key), "node-uuid-%d", i); +        ret = dict_get_str(dict, key, &node_uuid); +        if (ret) +            goto out; +        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"id", "%s", +                                              node_uuid); +        XML_RET_CHECK_AND_GOTO(ret, out); -                snprintf (key, sizeof (key), "files-%d", i); -                ret = dict_get_uint64 (dict, key, &files); -                if (ret) -                        goto out; -                total_files += files; -                ret = xmlTextWriterWriteFormatElement (writer, -                                                       (xmlChar *)"files", -                                                       "%"PRIu64, files); -                XML_RET_CHECK_AND_GOTO (ret, out); - -                snprintf (key, sizeof (key), "size-%d", i); -                ret = dict_get_uint64 (dict, key, &size); -                if (ret) -                        goto out; -                total_size += size; -                ret = xmlTextWriterWriteFormatElement (writer, -                                                       (xmlChar *)"size", -                                                       "%"PRIu64,size); -                XML_RET_CHECK_AND_GOTO (ret, out); - -                snprintf (key, sizeof (key), "lookups-%d", i); -                ret = dict_get_uint64 (dict, key, &lookups); -                if (ret) -                        goto out; -                total_lookups += lookups; -                ret = xmlTextWriterWriteFormatElement (writer, -                                                       (xmlChar *)"lookups", -                                                       "%"PRIu64, lookups); -                XML_RET_CHECK_AND_GOTO (ret, out); - -                snprintf (key, sizeof (key), "failures-%d", i); -                ret = dict_get_uint64 (dict, key, &failures); -                if (ret) -                        goto out; +        snprintf(key, sizeof(key), "files-%d", i); +        ret = dict_get_uint64(dict, key, &files); +        if (ret) +            goto out; +        total_files += files; +        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"files", +                                              "%" PRIu64, files); +        XML_RET_CHECK_AND_GOTO(ret, out); -                snprintf (key, sizeof (key), "skipped-%d", i); +        snprintf(key, sizeof(key), "size-%d", i); +        ret = dict_get_uint64(dict, key, &size); +        if (ret) +            goto out; +        total_size += size; +        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"size", +                                              "%" PRIu64, size); +        XML_RET_CHECK_AND_GOTO(ret, out); -                ret = dict_get_uint64 (dict, key, &skipped); -                if (ret) -                        goto out; +        snprintf(key, sizeof(key), "lookups-%d", i); +        ret = dict_get_uint64(dict, key, &lookups); +        if (ret) +            goto out; +        total_lookups += lookups; +        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"lookups", +                                              "%" PRIu64, lookups); +        XML_RET_CHECK_AND_GOTO(ret, out); -                if (task_type == GF_TASK_TYPE_REMOVE_BRICK) { -                        failures += skipped; -                        skipped = 0; -                } +        snprintf(key, sizeof(key), "failures-%d", i); +        ret = dict_get_uint64(dict, key, &failures); +        if (ret) +            goto out; -                total_failures += failures; -                ret = xmlTextWriterWriteFormatElement (writer, -                                               (xmlChar *)"failures", -                                               "%"PRIu64, failures); -                XML_RET_CHECK_AND_GOTO (ret, out); +        snprintf(key, sizeof(key), "skipped-%d", i); -                total_skipped += skipped; +        ret = dict_get_uint64(dict, key, &skipped); +        if (ret) +            goto out; -                ret = xmlTextWriterWriteFormatElement (writer, -                                               (xmlChar *)"skipped", -                                               "%"PRIu64, skipped); -                XML_RET_CHECK_AND_GOTO (ret, out); +        if (task_type == GF_TASK_TYPE_REMOVE_BRICK) { +            failures += skipped; +            skipped = 0; +        } -                ret = xmlTextWriterWriteFormatElement (writer, -                                                       (xmlChar *)"status", -                                                       "%d", status_rcd); -                XML_RET_CHECK_AND_GOTO (ret, out); +        total_failures += failures; +        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"failures", +                                              "%" PRIu64, failures); +        XML_RET_CHECK_AND_GOTO(ret, out); -                ret = xmlTextWriterWriteFormatElement (writer, -                                                       (xmlChar *)"statusStr", -                                                       "%s", -                                         cli_vol_task_status_str[status_rcd]); -                XML_RET_CHECK_AND_GOTO (ret, out); +        total_skipped += skipped; -                snprintf (key, sizeof (key), "run-time-%d", i); -                ret = dict_get_double (dict, key, &elapsed); -                if (ret) -                        goto out; -                ret = xmlTextWriterWriteFormatElement (writer, -                                                       (xmlChar *)"runtime", -                                                       "%.2f", elapsed); -                XML_RET_CHECK_AND_GOTO (ret, out); +        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"skipped", +                                              "%" PRIu64, skipped); +        XML_RET_CHECK_AND_GOTO(ret, out); -                if (elapsed > overall_elapsed) { -                    overall_elapsed = elapsed; -                } +        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"status", "%d", +                                              status_rcd); +        XML_RET_CHECK_AND_GOTO(ret, out); -                /* Rebalance has 5 states, -                 * NOT_STARTED, STARTED, STOPPED, COMPLETE, FAILED -                 * The precedence used to determine the aggregate status is as -                 * below, -                 * STARTED > FAILED > STOPPED > COMPLETE > NOT_STARTED -                 */ -                /* TODO: Move this to a common place utilities that both CLI and -                 * glusterd need. -                 * Till then if the below algorithm is changed, change it in -                 * glusterd_volume_status_aggregate_tasks_status in -                 * glusterd-utils.c -                 */ - -                if (-1 == overall_status) -                        overall_status = status_rcd; -                int rank[] = { -                        [GF_DEFRAG_STATUS_STARTED] = 1, -                        [GF_DEFRAG_STATUS_FAILED] = 2, -                        [GF_DEFRAG_STATUS_STOPPED] = 3, -                        [GF_DEFRAG_STATUS_COMPLETE] = 4, -                        [GF_DEFRAG_STATUS_NOT_STARTED] = 5 -                }; -                if (rank[status_rcd] <= rank[overall_status]) -                        overall_status = status_rcd; - -                /* </node> */ -                ret = xmlTextWriterEndElement (writer); -                XML_RET_CHECK_AND_GOTO (ret, out); +        ret = xmlTextWriterWriteFormatElement( +            writer, (xmlChar *)"statusStr", "%s", +            cli_vol_task_status_str[status_rcd]); +        XML_RET_CHECK_AND_GOTO(ret, out); + +        snprintf(key, sizeof(key), "run-time-%d", i); +        ret = dict_get_double(dict, key, &elapsed); +        if (ret) +            goto out; +        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"runtime", +                                              "%.2f", elapsed); +        XML_RET_CHECK_AND_GOTO(ret, out); + +        if (elapsed > overall_elapsed) { +            overall_elapsed = elapsed;          } -        /* Aggregate status */ -        /* <aggregate> */ -        ret = xmlTextWriterStartElement (writer, (xmlChar *)"aggregate"); -        XML_RET_CHECK_AND_GOTO (ret, out); +        /* Rebalance has 5 states, +         * NOT_STARTED, STARTED, STOPPED, COMPLETE, FAILED +         * The precedence used to determine the aggregate status is as +         * below, +         * STARTED > FAILED > STOPPED > COMPLETE > NOT_STARTED +         */ +        /* TODO: Move this to a common place utilities that both CLI and +         * glusterd need. +         * Till then if the below algorithm is changed, change it in +         * glusterd_volume_status_aggregate_tasks_status in +         * glusterd-utils.c +         */ + +        if (-1 == overall_status) +            overall_status = status_rcd; +        int rank[] = {[GF_DEFRAG_STATUS_STARTED] = 1, +                      [GF_DEFRAG_STATUS_FAILED] = 2, +                      [GF_DEFRAG_STATUS_STOPPED] = 3, +                      [GF_DEFRAG_STATUS_COMPLETE] = 4, +                      [GF_DEFRAG_STATUS_NOT_STARTED] = 5}; +        if (rank[status_rcd] <= rank[overall_status]) +            overall_status = status_rcd; + +        /* </node> */ +        ret = xmlTextWriterEndElement(writer); +        XML_RET_CHECK_AND_GOTO(ret, out); +    } + +    /* Aggregate status */ +    /* <aggregate> */ +    ret = xmlTextWriterStartElement(writer, (xmlChar *)"aggregate"); +    XML_RET_CHECK_AND_GOTO(ret, out); -        ret = xmlTextWriterWriteFormatElement (writer,(xmlChar *)"files", -                                               "%"PRIu64, total_files); -        XML_RET_CHECK_AND_GOTO (ret, out); +    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"files", +                                          "%" PRIu64, total_files); +    XML_RET_CHECK_AND_GOTO(ret, out); -        ret = xmlTextWriterWriteFormatElement (writer,(xmlChar *)"size", -                                               "%"PRIu64, total_size); -        XML_RET_CHECK_AND_GOTO (ret, out); +    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"size", "%" PRIu64, +                                          total_size); +    XML_RET_CHECK_AND_GOTO(ret, out); -        ret = xmlTextWriterWriteFormatElement (writer,(xmlChar *)"lookups", -                                               "%"PRIu64, total_lookups); -        XML_RET_CHECK_AND_GOTO (ret, out); +    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"lookups", +                                          "%" PRIu64, total_lookups); +    XML_RET_CHECK_AND_GOTO(ret, out); -        ret = xmlTextWriterWriteFormatElement (writer,(xmlChar *)"failures", -                                               "%"PRIu64, total_failures); -        XML_RET_CHECK_AND_GOTO (ret, out); +    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"failures", +                                          "%" PRIu64, total_failures); +    XML_RET_CHECK_AND_GOTO(ret, out); -        ret = xmlTextWriterWriteFormatElement (writer,(xmlChar *)"skipped", -                                               "%"PRIu64, total_skipped); -        XML_RET_CHECK_AND_GOTO (ret, out); +    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"skipped", +                                          "%" PRIu64, total_skipped); +    XML_RET_CHECK_AND_GOTO(ret, out); -        ret = xmlTextWriterWriteFormatElement (writer,(xmlChar *)"status", -                                               "%d", overall_status); -        XML_RET_CHECK_AND_GOTO (ret, out); +    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"status", "%d", +                                          overall_status); +    XML_RET_CHECK_AND_GOTO(ret, out); -        ret = xmlTextWriterWriteFormatElement (writer,(xmlChar *)"statusStr", -                                               "%s", -                                      cli_vol_task_status_str[overall_status]); -        XML_RET_CHECK_AND_GOTO (ret, out); +    ret = xmlTextWriterWriteFormatElement( +        writer, (xmlChar *)"statusStr", "%s", +        cli_vol_task_status_str[overall_status]); +    XML_RET_CHECK_AND_GOTO(ret, out); -        ret = xmlTextWriterWriteFormatElement (writer,(xmlChar *)"runtime", -                                               "%.2f", overall_elapsed); -        XML_RET_CHECK_AND_GOTO (ret, out); +    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"runtime", "%.2f", +                                          overall_elapsed); +    XML_RET_CHECK_AND_GOTO(ret, out); -        /* </aggregate> */ -        ret = xmlTextWriterEndElement (writer); -        XML_RET_CHECK_AND_GOTO (ret, out); +    /* </aggregate> */ +    ret = xmlTextWriterEndElement(writer); +    XML_RET_CHECK_AND_GOTO(ret, out);  out: -        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); -        return ret; +    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret); +    return ret;  }  int -cli_xml_output_vol_tier_status (xmlTextWriterPtr writer, dict_t *dict, -                enum gf_task_types task_type) +cli_xml_output_vol_tier_status(xmlTextWriterPtr writer, dict_t *dict, +                               enum gf_task_types task_type)  { -        int                     ret = -1; -        int                     count = 0; -        char                    *node_name = NULL; -        char                    *status_str  = NULL; -        uint64_t                promoted     = 0; -        uint64_t                demoted      = 0; -        int                     i = 1; -        char                    key[1024] = {0,}; -        gf_defrag_status_t      status_rcd   = GF_DEFRAG_STATUS_NOT_STARTED; - - -        GF_VALIDATE_OR_GOTO ("cli", dict, out); - -        ret = dict_get_int32 (dict, "count", &count); -        if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "count not set"); -                goto out; -        } - -        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"nodeCount", -                                               "%d", count); -        XML_RET_CHECK_AND_GOTO (ret, out); - -        while (i <= count) { -                promoted = 0; -                node_name = NULL; -                demoted = 0; - -                ret = xmlTextWriterStartElement (writer, (xmlChar *)"node"); -                XML_RET_CHECK_AND_GOTO (ret, out); +    int ret = -1; +    int count = 0; +    char *node_name = NULL; +    char *status_str = NULL; +    uint64_t promoted = 0; +    uint64_t demoted = 0; +    int i = 1; +    char key[1024] = { +        0, +    }; +    gf_defrag_status_t status_rcd = GF_DEFRAG_STATUS_NOT_STARTED; + +    GF_VALIDATE_OR_GOTO("cli", dict, out); + +    ret = dict_get_int32(dict, "count", &count); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, "count not set"); +        goto out; +    } + +    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"nodeCount", "%d", +                                          count); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    while (i <= count) { +        promoted = 0; +        node_name = NULL; +        demoted = 0; + +        ret = xmlTextWriterStartElement(writer, (xmlChar *)"node"); +        XML_RET_CHECK_AND_GOTO(ret, out); -                snprintf (key, sizeof (key), "node-name-%d", i); -                ret = dict_get_str (dict, key, &node_name); -                if (ret) -                        goto out; -                ret = xmlTextWriterWriteFormatElement (writer, -                                                       (xmlChar *)"nodeName", -                                                       "%s", node_name); -                XML_RET_CHECK_AND_GOTO (ret, out); +        snprintf(key, sizeof(key), "node-name-%d", i); +        ret = dict_get_str(dict, key, &node_name); +        if (ret) +            goto out; +        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"nodeName", +                                              "%s", node_name); +        XML_RET_CHECK_AND_GOTO(ret, out); -                snprintf (key, sizeof (key), "promoted-%d", i); -                ret = dict_get_uint64 (dict, key, &promoted); -                if (ret) -                        goto out; -                ret = xmlTextWriterWriteFormatElement (writer, +        snprintf(key, sizeof(key), "promoted-%d", i); +        ret = dict_get_uint64(dict, key, &promoted); +        if (ret) +            goto out; +        ret = xmlTextWriterWriteFormatElement (writer,                                                         (xmlChar *)"promoted"                                                         "Files", "%"PRIu64,                                                         promoted); -                XML_RET_CHECK_AND_GOTO (ret, out); +        XML_RET_CHECK_AND_GOTO(ret, out); -                snprintf (key, sizeof (key), "demoted-%d", i); -                ret = dict_get_uint64 (dict, key, &demoted); -                if (ret) -                        goto out; -                ret = xmlTextWriterWriteFormatElement (writer, +        snprintf(key, sizeof(key), "demoted-%d", i); +        ret = dict_get_uint64(dict, key, &demoted); +        if (ret) +            goto out; +        ret = xmlTextWriterWriteFormatElement (writer,                                                         (xmlChar *)"demoted"                                                         "Files", "%"PRIu64,                                                         demoted); -                XML_RET_CHECK_AND_GOTO (ret, out); - -                snprintf (key, sizeof (key), "status-%d", i); -                ret = dict_get_int32 (dict, key, (int32_t *)&status_rcd); +        XML_RET_CHECK_AND_GOTO(ret, out); -                status_str = cli_vol_task_status_str[status_rcd]; +        snprintf(key, sizeof(key), "status-%d", i); +        ret = dict_get_int32(dict, key, (int32_t *)&status_rcd); -                ret = xmlTextWriterWriteFormatElement (writer, -                                                       (xmlChar *)"statusStr", -                                                       "%s", status_str); -                XML_RET_CHECK_AND_GOTO (ret, out); +        status_str = cli_vol_task_status_str[status_rcd]; +        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"statusStr", +                                              "%s", status_str); +        XML_RET_CHECK_AND_GOTO(ret, out); -                ret = xmlTextWriterEndElement (writer); -                XML_RET_CHECK_AND_GOTO (ret, out); +        ret = xmlTextWriterEndElement(writer); +        XML_RET_CHECK_AND_GOTO(ret, out); -                i++; -        } +        i++; +    }  out: -        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); -        return ret; +    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret); +    return ret;  }  #endif  int -cli_xml_output_vol_rebalance (gf_cli_defrag_type op, dict_t *dict, int op_ret, -                              int op_errno, char *op_errstr) +cli_xml_output_vol_rebalance(gf_cli_defrag_type op, dict_t *dict, int op_ret, +                             int op_errno, char *op_errstr)  {  #if (HAVE_LIB_XML) -        int                     ret = -1; -        xmlTextWriterPtr        writer = NULL; -        xmlDocPtr               doc = NULL; -        char                    *task_id_str = NULL; +    int ret = -1; +    xmlTextWriterPtr writer = NULL; +    xmlDocPtr doc = NULL; +    char *task_id_str = NULL; + +    ret = cli_begin_xml_output(&writer, &doc); +    if (ret) +        goto out; + +    ret = cli_xml_output_common(writer, op_ret, op_errno, op_errstr); +    if (ret) +        goto out; + +    /* <volRebalance> */ +    ret = xmlTextWriterStartElement(writer, (xmlChar *)"volRebalance"); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    ret = dict_get_str(dict, GF_REBALANCE_TID_KEY, &task_id_str); +    if (ret == 0) { +        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"task-id", +                                              "%s", task_id_str); +        XML_RET_CHECK_AND_GOTO(ret, out); +    } -        ret = cli_begin_xml_output (&writer, &doc); -        if (ret) -                goto out; +    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"op", "%d", op); +    XML_RET_CHECK_AND_GOTO(ret, out); -        ret = cli_xml_output_common (writer, op_ret, op_errno, op_errstr); +    if (GF_DEFRAG_CMD_STATUS_TIER == op) { +        ret = cli_xml_output_vol_tier_status(writer, dict, +                                             GF_TASK_TYPE_REBALANCE);          if (ret) -                goto out; - -        /* <volRebalance> */ -        ret = xmlTextWriterStartElement (writer, (xmlChar *)"volRebalance"); -        XML_RET_CHECK_AND_GOTO (ret, out); - -        ret = dict_get_str (dict, GF_REBALANCE_TID_KEY, &task_id_str); -        if (ret == 0) { -                ret = xmlTextWriterWriteFormatElement (writer, -                                                       (xmlChar *)"task-id", -                                                       "%s", task_id_str); -                XML_RET_CHECK_AND_GOTO (ret, out); -        } - -        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"op", -                                               "%d", op); -        XML_RET_CHECK_AND_GOTO (ret, out); - -        if (GF_DEFRAG_CMD_STATUS_TIER == op) { -                ret = cli_xml_output_vol_tier_status (writer, -                                dict, GF_TASK_TYPE_REBALANCE); -                if (ret) -                        goto out; -                } -        if ((GF_DEFRAG_CMD_STOP == op) || (GF_DEFRAG_CMD_STATUS == op)) { - -                ret = cli_xml_output_vol_rebalance_status (writer, dict, -                                                      GF_TASK_TYPE_REBALANCE); -                if (ret) -                        goto out; -        } - -        /* </volRebalance> */ -        ret = xmlTextWriterEndElement (writer); -        XML_RET_CHECK_AND_GOTO (ret, out); +            goto out; +    } +    if ((GF_DEFRAG_CMD_STOP == op) || (GF_DEFRAG_CMD_STATUS == op)) { +        ret = cli_xml_output_vol_rebalance_status(writer, dict, +                                                  GF_TASK_TYPE_REBALANCE); +        if (ret) +            goto out; +    } +    /* </volRebalance> */ +    ret = xmlTextWriterEndElement(writer); +    XML_RET_CHECK_AND_GOTO(ret, out); -        ret = cli_end_xml_output (writer, doc); +    ret = cli_end_xml_output(writer, doc);  out: -        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); -        return ret; +    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret); +    return ret;  #else -        return 0; +    return 0;  #endif  }  int -cli_xml_output_vol_remove_brick_detach_tier (gf_boolean_t status_op, -                                             dict_t *dict, int op_ret, -                                             int op_errno, char *op_errstr, -                                             const char *op) +cli_xml_output_vol_remove_brick_detach_tier(gf_boolean_t status_op, +                                            dict_t *dict, int op_ret, +                                            int op_errno, char *op_errstr, +                                            const char *op)  {  #if (HAVE_LIB_XML) -        int                     ret = -1; -        xmlTextWriterPtr        writer = NULL; -        xmlDocPtr               doc = NULL; -        char                    *task_id_str = NULL; - -        ret = cli_begin_xml_output (&writer, &doc); -        if (ret) -                goto out; +    int ret = -1; +    xmlTextWriterPtr writer = NULL; +    xmlDocPtr doc = NULL; +    char *task_id_str = NULL; + +    ret = cli_begin_xml_output(&writer, &doc); +    if (ret) +        goto out; + +    ret = cli_xml_output_common(writer, op_ret, op_errno, op_errstr); +    if (ret) +        goto out; + +    ret = xmlTextWriterStartElement(writer, (xmlChar *)op); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    ret = dict_get_str(dict, GF_REMOVE_BRICK_TID_KEY, &task_id_str); +    if (ret == 0) { +        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"task-id", +                                              "%s", task_id_str); +        XML_RET_CHECK_AND_GOTO(ret, out); +    } -        ret = cli_xml_output_common (writer, op_ret, op_errno, op_errstr); +    if (status_op) { +        ret = cli_xml_output_vol_rebalance_status(writer, dict, +                                                  GF_TASK_TYPE_REMOVE_BRICK);          if (ret) -                goto out; +            goto out; +    } -        ret = xmlTextWriterStartElement (writer, (xmlChar *) op); -        XML_RET_CHECK_AND_GOTO (ret, out); +    ret = xmlTextWriterEndElement(writer); +    XML_RET_CHECK_AND_GOTO(ret, out); -        ret = dict_get_str (dict, GF_REMOVE_BRICK_TID_KEY, &task_id_str); -        if (ret == 0) { -                ret = xmlTextWriterWriteFormatElement (writer, -                                                       (xmlChar *)"task-id", -                                                       "%s", task_id_str); -                XML_RET_CHECK_AND_GOTO (ret, out); -        } - -        if (status_op) { -                ret = cli_xml_output_vol_rebalance_status (writer, dict, -                                                   GF_TASK_TYPE_REMOVE_BRICK); -                if (ret) -                        goto out; -        } - -        ret = xmlTextWriterEndElement (writer); -        XML_RET_CHECK_AND_GOTO (ret, out); - - -        ret = cli_end_xml_output (writer, doc); +    ret = cli_end_xml_output(writer, doc);  out: -        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); -        return ret; +    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret); +    return ret;  #else -        return 0; +    return 0;  #endif  }  int -cli_xml_output_vol_replace_brick (dict_t *dict, -                                  int op_ret, int op_errno, char *op_errstr) +cli_xml_output_vol_replace_brick(dict_t *dict, int op_ret, int op_errno, +                                 char *op_errstr)  {  #if (HAVE_LIB_XML) -        int                     ret = -1; -        xmlTextWriterPtr        writer = NULL; -        xmlDocPtr               doc = NULL; +    int ret = -1; +    xmlTextWriterPtr writer = NULL; +    xmlDocPtr doc = NULL; -        ret = cli_begin_xml_output (&writer, &doc); -        if (ret) -                goto out; +    ret = cli_begin_xml_output(&writer, &doc); +    if (ret) +        goto out; -        ret = cli_xml_output_common (writer, op_ret, op_errno, op_errstr); -        if (ret) -                goto out; +    ret = cli_xml_output_common(writer, op_ret, op_errno, op_errstr); +    if (ret) +        goto out; -        ret = cli_end_xml_output (writer, doc); +    ret = cli_end_xml_output(writer, doc);  out: -        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); -        return ret; +    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret); +    return ret;  #else -        return 0; +    return 0;  #endif  }  int -cli_xml_output_vol_create (dict_t *dict, int op_ret, int op_errno, -                           char *op_errstr) +cli_xml_output_vol_create(dict_t *dict, int op_ret, int op_errno, +                          char *op_errstr)  {  #if (HAVE_LIB_XML) -        int                     ret = -1; -        xmlTextWriterPtr        writer = NULL; -        xmlDocPtr               doc = NULL; -        char                    *volname = NULL; -        char                    *volid = NULL; +    int ret = -1; +    xmlTextWriterPtr writer = NULL; +    xmlDocPtr doc = NULL; +    char *volname = NULL; +    char *volid = NULL; + +    ret = cli_begin_xml_output(&writer, &doc); +    if (ret) +        goto out; + +    ret = cli_xml_output_common(writer, op_ret, op_errno, op_errstr); +    if (ret) +        goto out; + +    if (dict) { +        /* <volCreate> */ +        ret = xmlTextWriterStartElement(writer, (xmlChar *)"volCreate"); +        XML_RET_CHECK_AND_GOTO(ret, out); -        ret = cli_begin_xml_output (&writer, &doc); -        if (ret) -                goto out; +        /* <volume> */ +        ret = xmlTextWriterStartElement(writer, (xmlChar *)"volume"); +        XML_RET_CHECK_AND_GOTO(ret, out); -        ret = cli_xml_output_common (writer, op_ret, op_errno, op_errstr); +        ret = dict_get_str(dict, "volname", &volname);          if (ret) -                goto out; - -        if (dict) { -                /* <volCreate> */ -                ret = xmlTextWriterStartElement (writer, -                                                 (xmlChar *)"volCreate"); -                XML_RET_CHECK_AND_GOTO (ret, out); - -                /* <volume> */ -                ret = xmlTextWriterStartElement (writer, (xmlChar *)"volume"); -                XML_RET_CHECK_AND_GOTO (ret, out); - -                ret = dict_get_str (dict, "volname", &volname); -                if (ret) -                        goto out; -                ret = xmlTextWriterWriteFormatElement (writer, -                                                       (xmlChar *) "name", -                                                       "%s", volname); -                XML_RET_CHECK_AND_GOTO (ret, out); +            goto out; +        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"name", "%s", +                                              volname); +        XML_RET_CHECK_AND_GOTO(ret, out); -                ret = dict_get_str (dict, "volume-id", &volid); -                if (ret) -                        goto out; -                ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"id", -                                                       "%s", volid); -                XML_RET_CHECK_AND_GOTO (ret, out); +        ret = dict_get_str(dict, "volume-id", &volid); +        if (ret) +            goto out; +        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"id", "%s", +                                              volid); +        XML_RET_CHECK_AND_GOTO(ret, out); -                /* </volume> */ -                ret = xmlTextWriterEndElement (writer); -                XML_RET_CHECK_AND_GOTO (ret, out); +        /* </volume> */ +        ret = xmlTextWriterEndElement(writer); +        XML_RET_CHECK_AND_GOTO(ret, out); -                /* </volCreate> */ -                ret = xmlTextWriterEndElement (writer); -                XML_RET_CHECK_AND_GOTO (ret, out); -        } +        /* </volCreate> */ +        ret = xmlTextWriterEndElement(writer); +        XML_RET_CHECK_AND_GOTO(ret, out); +    } -        ret = cli_end_xml_output (writer, doc); +    ret = cli_end_xml_output(writer, doc);  out: -        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); -        return ret; +    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret); +    return ret;  #else -        return 0; +    return 0;  #endif  }  int -cli_xml_output_generic_volume (char *op, dict_t *dict, int op_ret, int op_errno, -                               char *op_errstr) +cli_xml_output_generic_volume(char *op, dict_t *dict, int op_ret, int op_errno, +                              char *op_errstr)  {  #if (HAVE_LIB_XML) -        int                     ret = -1; -        xmlTextWriterPtr        writer = NULL; -        xmlDocPtr               doc = NULL; -        char                    *volname = NULL; -        char                    *volid = NULL; +    int ret = -1; +    xmlTextWriterPtr writer = NULL; +    xmlDocPtr doc = NULL; +    char *volname = NULL; +    char *volid = NULL; -        GF_ASSERT (op); +    GF_ASSERT(op); -        ret = cli_begin_xml_output (&writer, &doc); -        if (ret) -                goto out; +    ret = cli_begin_xml_output(&writer, &doc); +    if (ret) +        goto out; -        ret = cli_xml_output_common (writer, op_ret, op_errno, op_errstr); -        if (ret) -                goto out; +    ret = cli_xml_output_common(writer, op_ret, op_errno, op_errstr); +    if (ret) +        goto out; -        if (dict) { -                /* <"op"> */ -                ret = xmlTextWriterStartElement (writer, (xmlChar *)op); -                XML_RET_CHECK_AND_GOTO (ret, out); +    if (dict) { +        /* <"op"> */ +        ret = xmlTextWriterStartElement(writer, (xmlChar *)op); +        XML_RET_CHECK_AND_GOTO(ret, out); -                /* <volume> */ -                ret = xmlTextWriterStartElement (writer, (xmlChar *)"volume"); -                XML_RET_CHECK_AND_GOTO (ret, out); +        /* <volume> */ +        ret = xmlTextWriterStartElement(writer, (xmlChar *)"volume"); +        XML_RET_CHECK_AND_GOTO(ret, out); -                ret = dict_get_str (dict, "volname", &volname); -                if (ret) -                        goto out; -                ret = xmlTextWriterWriteFormatElement (writer, -                                                       (xmlChar *) "name", -                                                       "%s", volname); -                XML_RET_CHECK_AND_GOTO (ret, out); +        ret = dict_get_str(dict, "volname", &volname); +        if (ret) +            goto out; +        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"name", "%s", +                                              volname); +        XML_RET_CHECK_AND_GOTO(ret, out); -                ret = dict_get_str (dict, "vol-id", &volid); -                if (ret) -                        goto out; -                ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"id", -                                                       "%s", volid); -                XML_RET_CHECK_AND_GOTO (ret, out); +        ret = dict_get_str(dict, "vol-id", &volid); +        if (ret) +            goto out; +        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"id", "%s", +                                              volid); +        XML_RET_CHECK_AND_GOTO(ret, out); -                /* </volume> */ -                ret = xmlTextWriterEndElement (writer); -                XML_RET_CHECK_AND_GOTO (ret, out); +        /* </volume> */ +        ret = xmlTextWriterEndElement(writer); +        XML_RET_CHECK_AND_GOTO(ret, out); -                /* </"op"> */ -                ret = xmlTextWriterEndElement (writer); -                XML_RET_CHECK_AND_GOTO (ret, out); -        } +        /* </"op"> */ +        ret = xmlTextWriterEndElement(writer); +        XML_RET_CHECK_AND_GOTO(ret, out); +    } -        ret = cli_end_xml_output (writer, doc); +    ret = cli_end_xml_output(writer, doc);  out: -        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); -        return ret; +    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret); +    return ret;  #else -        return 0; +    return 0;  #endif  }  #if (HAVE_LIB_XML)  int -_output_gsync_config (FILE *fp, xmlTextWriterPtr writer, char *op_name) +_output_gsync_config(FILE *fp, xmlTextWriterPtr writer, char *op_name)  { -        char  resbuf[256 + PATH_MAX] = {0,}; -        char *ptr                    = NULL; -        char *v                      = NULL; -        int   blen                   = sizeof(resbuf); -        int   ret                    = 0; - -        for (;;) { -                ptr = fgets (resbuf, blen, fp); -                if (!ptr) -                        break; - -                v = resbuf + strlen (resbuf) - 1; -                while (isspace (*v)) { -                        /* strip trailing space */ -                        *v-- = '\0'; -                } -                if (v == resbuf) { -                        /* skip empty line */ -                        continue; -                } +    char resbuf[256 + PATH_MAX] = { +        0, +    }; +    char *ptr = NULL; +    char *v = NULL; +    int blen = sizeof(resbuf); +    int ret = 0; + +    for (;;) { +        ptr = fgets(resbuf, blen, fp); +        if (!ptr) +            break; -                if (op_name!= NULL){ -                        ret = xmlTextWriterWriteFormatElement (writer, -                                                        (xmlChar *)op_name, -                                                        "%s", resbuf); -                        XML_RET_CHECK_AND_GOTO (ret, out); -                        goto out; -                } +        v = resbuf + strlen(resbuf) - 1; +        while (isspace(*v)) { +            /* strip trailing space */ +            *v-- = '\0'; +        } +        if (v == resbuf) { +            /* skip empty line */ +            continue; +        } -                v = strchr (resbuf, ':'); -                if (!v) { -                        ret = -1; -                        goto out; -                } -                *v++ = '\0'; -                while (isspace (*v)) -                        v++; -                v = gf_strdup (v); -                if (!v) { -                        ret = -1; -                        goto out; -                } +        if (op_name != NULL) { +            ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)op_name, +                                                  "%s", resbuf); +            XML_RET_CHECK_AND_GOTO(ret, out); +            goto out; +        } -                ret = xmlTextWriterWriteFormatElement (writer, -                                                       (xmlChar *)resbuf, -                                                       "%s", v); -                XML_RET_CHECK_AND_GOTO (ret, out); +        v = strchr(resbuf, ':'); +        if (!v) { +            ret = -1; +            goto out;          } +        *v++ = '\0'; +        while (isspace(*v)) +            v++; +        v = gf_strdup(v); +        if (!v) { +            ret = -1; +            goto out; +        } + +        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)resbuf, "%s", +                                              v); +        XML_RET_CHECK_AND_GOTO(ret, out); +    }  out: -        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); -        return ret; +    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret); +    return ret;  }  #endif  #if (HAVE_LIB_XML)  int -get_gsync_config (runner_t *runner, -                  int (*op_conf)(FILE *fp, -                              xmlTextWriterPtr writer, -                              char *op_name), -                  xmlTextWriterPtr writer, char *op_name) +get_gsync_config(runner_t *runner, +                 int (*op_conf)(FILE *fp, xmlTextWriterPtr writer, +                                char *op_name), +                 xmlTextWriterPtr writer, char *op_name)  { -        int ret = 0; +    int ret = 0; -        runner_redir (runner, STDOUT_FILENO, RUN_PIPE); -        if (runner_start (runner) != 0) { -                gf_log ("cli", GF_LOG_ERROR, "spawning child failed"); -                return -1; -        } +    runner_redir(runner, STDOUT_FILENO, RUN_PIPE); +    if (runner_start(runner) != 0) { +        gf_log("cli", GF_LOG_ERROR, "spawning child failed"); +        return -1; +    } -        ret = op_conf (runner_chio (runner, STDOUT_FILENO), writer, op_name); +    ret = op_conf(runner_chio(runner, STDOUT_FILENO), writer, op_name); -        ret |= runner_end (runner); -        if (ret) -                gf_log ("cli", GF_LOG_ERROR, "reading data from child failed"); +    ret |= runner_end(runner); +    if (ret) +        gf_log("cli", GF_LOG_ERROR, "reading data from child failed"); -        return ret ? -1 : 0; +    return ret ? -1 : 0;  }  #endif  #if (HAVE_LIB_XML)  int -cli_xml_generate_gsync_config (dict_t *dict, xmlTextWriterPtr writer) +cli_xml_generate_gsync_config(dict_t *dict, xmlTextWriterPtr writer)  { -        runner_t runner           = {0,}; -        char *subop               = NULL; -        char *gwd                 = NULL; -        char *slave               = NULL; -        char *confpath            = NULL; -        char *master              = NULL; -        char *op_name             = NULL; -        int   ret                 = -1; -        char  conf_path[PATH_MAX] = ""; - -        if (dict_get_str (dict, "subop", &subop) != 0) { -                ret = -1; -                goto out; -        } - -        if (strcmp (subop, "get") != 0 && strcmp (subop, "get-all") != 0) { -                ret = xmlTextWriterWriteFormatElement (writer, -                                 (xmlChar *)"message", -                                 "%s",GEOREP" config updated successfully" ); -                XML_RET_CHECK_AND_GOTO (ret, out); -                ret = 0; -                goto out; -        } +    runner_t runner = { +        0, +    }; +    char *subop = NULL; +    char *gwd = NULL; +    char *slave = NULL; +    char *confpath = NULL; +    char *master = NULL; +    char *op_name = NULL; +    int ret = -1; +    char conf_path[PATH_MAX] = ""; + +    if (dict_get_str(dict, "subop", &subop) != 0) { +        ret = -1; +        goto out; +    } + +    if (strcmp(subop, "get") != 0 && strcmp(subop, "get-all") != 0) { +        ret = xmlTextWriterWriteFormatElement( +            writer, (xmlChar *)"message", "%s", +            GEOREP " config updated successfully"); +        XML_RET_CHECK_AND_GOTO(ret, out); +        ret = 0; +        goto out; +    } -        if (dict_get_str (dict, "glusterd_workdir", &gwd) != 0 || -            dict_get_str (dict, "slave", &slave) != 0) { -                ret = -1; -                goto out; -        } +    if (dict_get_str(dict, "glusterd_workdir", &gwd) != 0 || +        dict_get_str(dict, "slave", &slave) != 0) { +        ret = -1; +        goto out; +    } -        if (dict_get_str (dict, "master", &master) != 0) -                master = NULL; +    if (dict_get_str(dict, "master", &master) != 0) +        master = NULL; -        if (dict_get_str (dict, "op_name", &op_name) != 0) -                op_name = NULL; +    if (dict_get_str(dict, "op_name", &op_name) != 0) +        op_name = NULL; -        ret = dict_get_str (dict, "conf_path", &confpath); -        if (!confpath) { -                ret = snprintf (conf_path, sizeof (conf_path) - 1, -                                "%s/"GEOREP"/gsyncd_template.conf", gwd); -                conf_path[ret] = '\0'; -                confpath = conf_path; -        } +    ret = dict_get_str(dict, "conf_path", &confpath); +    if (!confpath) { +        ret = snprintf(conf_path, sizeof(conf_path) - 1, +                       "%s/" GEOREP "/gsyncd_template.conf", gwd); +        conf_path[ret] = '\0'; +        confpath = conf_path; +    } -        runinit (&runner); -        runner_add_args (&runner, GSYNCD_PREFIX"/gsyncd", "-c", NULL); -        runner_argprintf (&runner, "%s", confpath); -        runner_argprintf (&runner, "--iprefix=%s", DATADIR); +    runinit(&runner); +    runner_add_args(&runner, GSYNCD_PREFIX "/gsyncd", "-c", NULL); +    runner_argprintf(&runner, "%s", confpath); +    runner_argprintf(&runner, "--iprefix=%s", DATADIR); -        if (master) -                runner_argprintf (&runner, ":%s", master); +    if (master) +        runner_argprintf(&runner, ":%s", master); -        runner_add_arg (&runner, slave); -        runner_argprintf (&runner, "--config-%s", subop); +    runner_add_arg(&runner, slave); +    runner_argprintf(&runner, "--config-%s", subop); -        if (op_name) -                runner_add_arg (&runner, op_name); +    if (op_name) +        runner_add_arg(&runner, op_name); -        ret =  get_gsync_config (&runner, _output_gsync_config, -                                 writer, op_name); +    ret = get_gsync_config(&runner, _output_gsync_config, writer, op_name);  out: -        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); -        return ret; +    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret); +    return ret;  }  #endif  #if (HAVE_LIB_XML)  int -cli_xml_output_vol_gsync_status (dict_t *dict, -                                 xmlTextWriterPtr writer) +cli_xml_output_vol_gsync_status(dict_t *dict, xmlTextWriterPtr writer)  { -        int                  ret                         = -1; -        int                  i                           = 1; -        int                  j                           = 0; -        int                  count                       = 0; -        const int            number_of_fields            = 20; -        int                  closed                      = 1; -        int                  session_closed              = 1; -        gf_gsync_status_t  **status_values               = NULL; -        char                 status_value_name[PATH_MAX] = ""; -        char                *tmp                         = NULL; -        char                *volume                      = NULL; -        char                *volume_next                 = NULL; -        char                *slave                       = NULL; -        char                *slave_next                  = NULL; -        char                *title_values[]              = {"master_node", -                                                            "", -                                                            "master_brick", -                                                            "slave_user", -                                                            "slave", -                                                            "slave_node", -                                                            "status", -                                                            "crawl_status", -                                                            /* last_synced */ -                                                            "", -                                                            "entry", -                                                            "data", -                                                            "meta", -                                                            "failures", -                                                           /* checkpoint_time */ -                                                            "", -                                                         "checkpoint_completed", -                                               /* checkpoint_completion_time */ -                                                            "", -                                                            "master_node_uuid", -                                                           /* last_synced_utc */ -                                                            "last_synced", -                                                       /* checkpoint_time_utc */ -                                                            "checkpoint_time", -                                            /* checkpoint_completion_time_utc */ -                                                 "checkpoint_completion_time"}; - -        GF_ASSERT (dict); - -        ret = dict_get_int32 (dict, "gsync-count", &count); -        if (ret) -                goto out; - -        status_values = GF_MALLOC (count * sizeof (gf_gsync_status_t *), +    int ret = -1; +    int i = 1; +    int j = 0; +    int count = 0; +    const int number_of_fields = 20; +    int closed = 1; +    int session_closed = 1; +    gf_gsync_status_t **status_values = NULL; +    char status_value_name[PATH_MAX] = ""; +    char *tmp = NULL; +    char *volume = NULL; +    char *volume_next = NULL; +    char *slave = NULL; +    char *slave_next = NULL; +    char *title_values[] = {"master_node", "", "master_brick", "slave_user", +                            "slave", "slave_node", "status", "crawl_status", +                            /* last_synced */ +                            "", "entry", "data", "meta", "failures", +                            /* checkpoint_time */ +                            "", "checkpoint_completed", +                            /* checkpoint_completion_time */ +                            "", "master_node_uuid", +                            /* last_synced_utc */ +                            "last_synced", +                            /* checkpoint_time_utc */ +                            "checkpoint_time", +                            /* checkpoint_completion_time_utc */ +                            "checkpoint_completion_time"}; + +    GF_ASSERT(dict); + +    ret = dict_get_int32(dict, "gsync-count", &count); +    if (ret) +        goto out; + +    status_values = GF_MALLOC(count * sizeof(gf_gsync_status_t *),                                gf_common_mt_char); -        if (!status_values) { -                ret = -1; -                goto out; -        } +    if (!status_values) { +        ret = -1; +        goto out; +    } -        for (i = 0; i < count; i++) { -                status_values[i] = GF_CALLOC (1, sizeof (gf_gsync_status_t), -                                         gf_common_mt_char); -                if (!status_values[i]) { -                        ret = -1; -                        goto out; -                } +    for (i = 0; i < count; i++) { +        status_values[i] = GF_CALLOC(1, sizeof(gf_gsync_status_t), +                                     gf_common_mt_char); +        if (!status_values[i]) { +            ret = -1; +            goto out; +        } -                snprintf (status_value_name, sizeof (status_value_name), -                          "status_value%d", i); +        snprintf(status_value_name, sizeof(status_value_name), "status_value%d", +                 i); -                ret = dict_get_bin (dict, status_value_name, -                                    (void **)&(status_values[i])); -                if (ret) { -                        gf_log ("cli", GF_LOG_ERROR, -                                "struct member empty."); -                        goto out; -                } +        ret = dict_get_bin(dict, status_value_name, +                           (void **)&(status_values[i])); +        if (ret) { +            gf_log("cli", GF_LOG_ERROR, "struct member empty."); +            goto out;          } +    } -        qsort(status_values, count, sizeof (gf_gsync_status_t *), -              gf_gsync_status_t_comparator); - -        for (i = 0; i < count; i++) { -                if (closed) { -                        ret = xmlTextWriterStartElement (writer, -                                                         (xmlChar *)"volume"); -                        XML_RET_CHECK_AND_GOTO (ret, out); - -                        tmp = get_struct_variable (1, status_values[i]); -                        if (!tmp) { -                                gf_log ("cli", GF_LOG_ERROR, -                                        "struct member empty."); -                                ret = -1; -                                goto out; -                        } - -                        ret = xmlTextWriterWriteFormatElement (writer, -                                                        (xmlChar *)"name", -                                                        "%s",tmp); -                        XML_RET_CHECK_AND_GOTO (ret, out); - -                        ret = xmlTextWriterStartElement (writer, -                                                    (xmlChar *)"sessions"); -                        XML_RET_CHECK_AND_GOTO (ret, out); - -                        closed = 0; -                } +    qsort(status_values, count, sizeof(gf_gsync_status_t *), +          gf_gsync_status_t_comparator); -                if (session_closed) { -                        ret = xmlTextWriterStartElement (writer, -                                                         (xmlChar *)"session"); -                        XML_RET_CHECK_AND_GOTO (ret, out); +    for (i = 0; i < count; i++) { +        if (closed) { +            ret = xmlTextWriterStartElement(writer, (xmlChar *)"volume"); +            XML_RET_CHECK_AND_GOTO(ret, out); -                        session_closed = 0; +            tmp = get_struct_variable(1, status_values[i]); +            if (!tmp) { +                gf_log("cli", GF_LOG_ERROR, "struct member empty."); +                ret = -1; +                goto out; +            } -                        tmp = get_struct_variable (21, status_values[i]); -                        if (!tmp) { -                                gf_log ("cli", GF_LOG_ERROR, -                                        "struct member empty."); -                                ret = -1; -                                goto out; -                        } +            ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"name", +                                                  "%s", tmp); +            XML_RET_CHECK_AND_GOTO(ret, out); -                        ret = xmlTextWriterWriteFormatElement -                                (writer, (xmlChar *)"session_slave", "%s", tmp); -                        XML_RET_CHECK_AND_GOTO (ret, out); -                } +            ret = xmlTextWriterStartElement(writer, (xmlChar *)"sessions"); +            XML_RET_CHECK_AND_GOTO(ret, out); -                ret = xmlTextWriterStartElement (writer, (xmlChar *)"pair"); -                XML_RET_CHECK_AND_GOTO (ret, out); +            closed = 0; +        } -                for (j = 0; j < number_of_fields; j++) { -                        /* XML ignore fields */ -                        if (strcmp(title_values[j], "") == 0) -                                continue; +        if (session_closed) { +            ret = xmlTextWriterStartElement(writer, (xmlChar *)"session"); +            XML_RET_CHECK_AND_GOTO(ret, out); -                        tmp = get_struct_variable (j, status_values[i]); -                        if (!tmp) { -                                gf_log ("cli", GF_LOG_ERROR, -                                        "struct member empty."); -                                ret = -1; -                                goto out; -                        } +            session_closed = 0; -                        ret = xmlTextWriterWriteFormatElement (writer, -                                                  (xmlChar *)title_values[j], -                                                  "%s", tmp); -                        XML_RET_CHECK_AND_GOTO (ret, out); -                } +            tmp = get_struct_variable(21, status_values[i]); +            if (!tmp) { +                gf_log("cli", GF_LOG_ERROR, "struct member empty."); +                ret = -1; +                goto out; +            } -                ret = xmlTextWriterEndElement (writer); -                XML_RET_CHECK_AND_GOTO (ret, out); +            ret = xmlTextWriterWriteFormatElement( +                writer, (xmlChar *)"session_slave", "%s", tmp); +            XML_RET_CHECK_AND_GOTO(ret, out); +        } -                if (i+1 < count) { -                        slave = get_struct_variable (20, status_values[i]); -                        slave_next = get_struct_variable (20, -                                                          status_values[i+1]); -                        volume = get_struct_variable (1, status_values[i]); -                        volume_next = get_struct_variable (1, -                                                           status_values[i+1]); -                        if (!slave || !slave_next || !volume || !volume_next) { -                                gf_log ("cli", GF_LOG_ERROR, -                                        "struct member empty."); -                                ret = -1; -                                goto out; -                        } +        ret = xmlTextWriterStartElement(writer, (xmlChar *)"pair"); +        XML_RET_CHECK_AND_GOTO(ret, out); -                        if (strcmp (volume, volume_next)!=0) { -                                closed = 1; -                                session_closed = 1; +        for (j = 0; j < number_of_fields; j++) { +            /* XML ignore fields */ +            if (strcmp(title_values[j], "") == 0) +                continue; -                                ret = xmlTextWriterEndElement (writer); -                                XML_RET_CHECK_AND_GOTO (ret, out); +            tmp = get_struct_variable(j, status_values[i]); +            if (!tmp) { +                gf_log("cli", GF_LOG_ERROR, "struct member empty."); +                ret = -1; +                goto out; +            } -                                ret = xmlTextWriterEndElement (writer); -                                XML_RET_CHECK_AND_GOTO (ret, out); +            ret = xmlTextWriterWriteFormatElement( +                writer, (xmlChar *)title_values[j], "%s", tmp); +            XML_RET_CHECK_AND_GOTO(ret, out); +        } -                                ret = xmlTextWriterEndElement (writer); -                                XML_RET_CHECK_AND_GOTO (ret, out); -                        } else if (strcmp (slave, slave_next)!=0) { +        ret = xmlTextWriterEndElement(writer); +        XML_RET_CHECK_AND_GOTO(ret, out); -                                session_closed = 1; +        if (i + 1 < count) { +            slave = get_struct_variable(20, status_values[i]); +            slave_next = get_struct_variable(20, status_values[i + 1]); +            volume = get_struct_variable(1, status_values[i]); +            volume_next = get_struct_variable(1, status_values[i + 1]); +            if (!slave || !slave_next || !volume || !volume_next) { +                gf_log("cli", GF_LOG_ERROR, "struct member empty."); +                ret = -1; +                goto out; +            } -                                ret = xmlTextWriterEndElement (writer); -                                XML_RET_CHECK_AND_GOTO (ret, out); -                        } -                } else { +            if (strcmp(volume, volume_next) != 0) { +                closed = 1; +                session_closed = 1; -                        ret = xmlTextWriterEndElement (writer); -                        XML_RET_CHECK_AND_GOTO (ret, out); +                ret = xmlTextWriterEndElement(writer); +                XML_RET_CHECK_AND_GOTO(ret, out); -                        ret = xmlTextWriterEndElement (writer); -                        XML_RET_CHECK_AND_GOTO (ret, out); +                ret = xmlTextWriterEndElement(writer); +                XML_RET_CHECK_AND_GOTO(ret, out); -                        ret = xmlTextWriterEndElement (writer); -                        XML_RET_CHECK_AND_GOTO (ret, out); -                } +                ret = xmlTextWriterEndElement(writer); +                XML_RET_CHECK_AND_GOTO(ret, out); +            } else if (strcmp(slave, slave_next) != 0) { +                session_closed = 1; + +                ret = xmlTextWriterEndElement(writer); +                XML_RET_CHECK_AND_GOTO(ret, out); +            } +        } else { +            ret = xmlTextWriterEndElement(writer); +            XML_RET_CHECK_AND_GOTO(ret, out); + +            ret = xmlTextWriterEndElement(writer); +            XML_RET_CHECK_AND_GOTO(ret, out); + +            ret = xmlTextWriterEndElement(writer); +            XML_RET_CHECK_AND_GOTO(ret, out);          } +    }  out: -        gf_log ("cli",GF_LOG_DEBUG, "Returning %d", ret); -        return ret; +    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret); +    return ret;  }  #endif  int -cli_xml_output_vol_gsync (dict_t *dict, int op_ret, int op_errno, -                          char *op_errstr) +cli_xml_output_vol_gsync(dict_t *dict, int op_ret, int op_errno, +                         char *op_errstr)  {  #if (HAVE_LIB_XML) -        int                     ret = -1; -        xmlTextWriterPtr        writer = NULL; -        xmlDocPtr               doc = NULL; -        char                    *master = NULL; -        char                    *slave = NULL; -        int                     type = 0; - -        GF_ASSERT (dict); - -        ret = cli_begin_xml_output (&writer, &doc); -        if (ret) -                goto out; - -        ret = cli_xml_output_common (writer, op_ret, op_errno, op_errstr); -        if (ret) -                goto out; - -        /* <geoRep> */ -        ret = xmlTextWriterStartElement (writer, (xmlChar *)"geoRep"); -        XML_RET_CHECK_AND_GOTO (ret, out); - -        ret = dict_get_int32 (dict, "type", &type); -        if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Failed to get type"); -                goto out; -        } - -        switch (type) { +    int ret = -1; +    xmlTextWriterPtr writer = NULL; +    xmlDocPtr doc = NULL; +    char *master = NULL; +    char *slave = NULL; +    int type = 0; + +    GF_ASSERT(dict); + +    ret = cli_begin_xml_output(&writer, &doc); +    if (ret) +        goto out; + +    ret = cli_xml_output_common(writer, op_ret, op_errno, op_errstr); +    if (ret) +        goto out; + +    /* <geoRep> */ +    ret = xmlTextWriterStartElement(writer, (xmlChar *)"geoRep"); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    ret = dict_get_int32(dict, "type", &type); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, "Failed to get type"); +        goto out; +    } + +    switch (type) {          case GF_GSYNC_OPTION_TYPE_START:          case GF_GSYNC_OPTION_TYPE_STOP:          case GF_GSYNC_OPTION_TYPE_PAUSE:          case GF_GSYNC_OPTION_TYPE_RESUME:          case GF_GSYNC_OPTION_TYPE_CREATE:          case GF_GSYNC_OPTION_TYPE_DELETE: -                if (dict_get_str (dict, "master", &master) != 0) -                        master = "???"; -                if (dict_get_str (dict, "slave", &slave) != 0) -                        slave = "???"; +            if (dict_get_str(dict, "master", &master) != 0) +                master = "???"; +            if (dict_get_str(dict, "slave", &slave) != 0) +                slave = "???"; -                ret = xmlTextWriterWriteFormatElement (writer, -                                                       (xmlChar *)"master", -                                                       "%s", master); -                XML_RET_CHECK_AND_GOTO (ret, out); +            ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"master", +                                                  "%s", master); +            XML_RET_CHECK_AND_GOTO(ret, out); -                ret = xmlTextWriterWriteFormatElement (writer, -                                                       (xmlChar *)"slave", -                                                       "%s", slave); -                XML_RET_CHECK_AND_GOTO (ret, out); +            ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"slave", +                                                  "%s", slave); +            XML_RET_CHECK_AND_GOTO(ret, out); -                break; +            break;          case GF_GSYNC_OPTION_TYPE_CONFIG: -                if (op_ret == 0) { -                        ret = xmlTextWriterStartElement (writer, (xmlChar *)"config"); -                        XML_RET_CHECK_AND_GOTO (ret, out); +            if (op_ret == 0) { +                ret = xmlTextWriterStartElement(writer, (xmlChar *)"config"); +                XML_RET_CHECK_AND_GOTO(ret, out); -                        ret = cli_xml_generate_gsync_config (dict, writer); -                        if (ret) -                                goto out; +                ret = cli_xml_generate_gsync_config(dict, writer); +                if (ret) +                    goto out; -                        ret = xmlTextWriterEndElement (writer); -                        XML_RET_CHECK_AND_GOTO (ret, out); -                } +                ret = xmlTextWriterEndElement(writer); +                XML_RET_CHECK_AND_GOTO(ret, out); +            } -                break; +            break;          case GF_GSYNC_OPTION_TYPE_STATUS: -                ret = cli_xml_output_vol_gsync_status (dict, writer); -                break; +            ret = cli_xml_output_vol_gsync_status(dict, writer); +            break;          default: -                ret = 0; -                break; -        } +            ret = 0; +            break; +    } -        /* </geoRep> */ -        ret = xmlTextWriterEndElement (writer); -        XML_RET_CHECK_AND_GOTO (ret, out); +    /* </geoRep> */ +    ret = xmlTextWriterEndElement(writer); +    XML_RET_CHECK_AND_GOTO(ret, out); -        ret = cli_end_xml_output (writer, doc); +    ret = cli_end_xml_output(writer, doc);  out: -        gf_log ("cli",GF_LOG_DEBUG, "Returning %d", ret); -        return ret; +    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret); +    return ret;  #else -        return 0; +    return 0;  #endif  } @@ -4391,54 +4207,54 @@ out:   * @return 0 on success and -1 on failure   */  static int -cli_xml_snapshot_create (xmlTextWriterPtr writer, xmlDocPtr doc, dict_t *dict) +cli_xml_snapshot_create(xmlTextWriterPtr writer, xmlDocPtr doc, dict_t *dict)  { -        int     ret             = -1; -        char   *str_value       = NULL; - -        GF_ASSERT (writer); -        GF_ASSERT (doc); -        GF_ASSERT (dict); - -        /* <snapCreate> */ -        ret = xmlTextWriterStartElement (writer, (xmlChar *)"snapCreate"); -        XML_RET_CHECK_AND_GOTO (ret, out); - -        /* <snapshot> */ -        ret = xmlTextWriterStartElement (writer, (xmlChar *)"snapshot"); -        XML_RET_CHECK_AND_GOTO (ret, out); - -        ret = dict_get_str (dict, "snapname", &str_value); -        if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Failed to get snap name"); -                goto out; -        } - -        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *) "name", -                                               "%s", str_value); -        XML_RET_CHECK_AND_GOTO (ret, out); - -        ret = dict_get_str (dict, "snapuuid", &str_value); -        if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Failed to get snap uuid"); -                goto out; -        } - -        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *) "uuid", -                                               "%s", str_value); -        XML_RET_CHECK_AND_GOTO (ret, out); - -        /* </snapshot> */ -        ret = xmlTextWriterEndElement (writer); -        XML_RET_CHECK_AND_GOTO (ret, out); - -        /* </snapCreate> */ -        ret = xmlTextWriterEndElement (writer); -        XML_RET_CHECK_AND_GOTO (ret, out); - -        ret = 0; +    int ret = -1; +    char *str_value = NULL; + +    GF_ASSERT(writer); +    GF_ASSERT(doc); +    GF_ASSERT(dict); + +    /* <snapCreate> */ +    ret = xmlTextWriterStartElement(writer, (xmlChar *)"snapCreate"); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    /* <snapshot> */ +    ret = xmlTextWriterStartElement(writer, (xmlChar *)"snapshot"); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    ret = dict_get_str(dict, "snapname", &str_value); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, "Failed to get snap name"); +        goto out; +    } + +    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"name", "%s", +                                          str_value); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    ret = dict_get_str(dict, "snapuuid", &str_value); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, "Failed to get snap uuid"); +        goto out; +    } + +    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"uuid", "%s", +                                          str_value); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    /* </snapshot> */ +    ret = xmlTextWriterEndElement(writer); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    /* </snapCreate> */ +    ret = xmlTextWriterEndElement(writer); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    ret = 0;  out: -        return ret; +    return ret;  }  /* This function will generate snapshot clone output in xml format. @@ -4450,57 +4266,55 @@ out:   * @return 0 on success and -1 on failure   */  static int -cli_xml_snapshot_clone (xmlTextWriterPtr writer, xmlDocPtr doc, dict_t *dict) +cli_xml_snapshot_clone(xmlTextWriterPtr writer, xmlDocPtr doc, dict_t *dict)  { -        int     ret             = -1; -        char   *str_value       = NULL; - -        GF_VALIDATE_OR_GOTO ("cli", writer, out); -        GF_VALIDATE_OR_GOTO ("cli", doc, out); -        GF_VALIDATE_OR_GOTO ("cli", dict, out); - -        /* <CloneCreate> */ -        ret = xmlTextWriterStartElement (writer, (xmlChar *)"CloneCreate"); -        XML_RET_CHECK_AND_GOTO (ret, out); - -        /* <volume> */ -        ret = xmlTextWriterStartElement (writer, (xmlChar *)"volume"); -        XML_RET_CHECK_AND_GOTO (ret, out); - -        ret = dict_get_str (dict, "clonename", &str_value); -        if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Failed to get clone name"); -                goto out; -        } -        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *) "name", -                                               "%s", str_value); -        XML_RET_CHECK_AND_GOTO (ret, out); - - -        ret = dict_get_str (dict, "snapuuid", &str_value); -        if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Failed to get clone uuid"); -                goto out; -        } - -        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *) "uuid", -                                               "%s", str_value); -        XML_RET_CHECK_AND_GOTO (ret, out); - -        /* </volume> */ -        ret = xmlTextWriterEndElement (writer); -        XML_RET_CHECK_AND_GOTO (ret, out); - -        /* </CloneCreate> */ -        ret = xmlTextWriterEndElement (writer); -        XML_RET_CHECK_AND_GOTO (ret, out); - -        ret = 0; +    int ret = -1; +    char *str_value = NULL; + +    GF_VALIDATE_OR_GOTO("cli", writer, out); +    GF_VALIDATE_OR_GOTO("cli", doc, out); +    GF_VALIDATE_OR_GOTO("cli", dict, out); + +    /* <CloneCreate> */ +    ret = xmlTextWriterStartElement(writer, (xmlChar *)"CloneCreate"); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    /* <volume> */ +    ret = xmlTextWriterStartElement(writer, (xmlChar *)"volume"); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    ret = dict_get_str(dict, "clonename", &str_value); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, "Failed to get clone name"); +        goto out; +    } +    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"name", "%s", +                                          str_value); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    ret = dict_get_str(dict, "snapuuid", &str_value); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, "Failed to get clone uuid"); +        goto out; +    } + +    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"uuid", "%s", +                                          str_value); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    /* </volume> */ +    ret = xmlTextWriterEndElement(writer); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    /* </CloneCreate> */ +    ret = xmlTextWriterEndElement(writer); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    ret = 0;  out: -        return ret; +    return ret;  } -  /* This function will generate snapshot restore output in xml format.   *   * @param writer        xmlTextWriterPtr @@ -4510,84 +4324,83 @@ out:   * @return 0 on success and -1 on failure   */  static int -cli_xml_snapshot_restore (xmlTextWriterPtr writer, xmlDocPtr doc, dict_t *dict) +cli_xml_snapshot_restore(xmlTextWriterPtr writer, xmlDocPtr doc, dict_t *dict)  { -        int     ret             = -1; -        char   *str_value       = NULL; - -        GF_ASSERT (writer); -        GF_ASSERT (doc); -        GF_ASSERT (dict); - -        /* <snapRestore> */ -        ret = xmlTextWriterStartElement (writer, (xmlChar *)"snapRestore"); -        XML_RET_CHECK_AND_GOTO (ret, out); - -        /* <volume> */ -        ret = xmlTextWriterStartElement (writer, (xmlChar *)"volume"); -        XML_RET_CHECK_AND_GOTO (ret, out); - -        ret = dict_get_str (dict, "volname", &str_value); -        if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Failed to get vol name"); -                goto out; -        } - -        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *) "name", -                                               "%s", str_value); -        XML_RET_CHECK_AND_GOTO (ret, out); - -        ret = dict_get_str (dict, "volid", &str_value); -        if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Failed to get volume id"); -                goto out; -        } - -        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *) "uuid", -                                               "%s", str_value); -        XML_RET_CHECK_AND_GOTO (ret, out); - -        /* </volume> */ -        ret = xmlTextWriterEndElement (writer); -        XML_RET_CHECK_AND_GOTO (ret, out); - - -        /* <snapshot> */ -        ret = xmlTextWriterStartElement (writer, (xmlChar *)"snapshot"); -        XML_RET_CHECK_AND_GOTO (ret, out); - -        ret = dict_get_str (dict, "snapname", &str_value); -        if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Failed to get snap name"); -                goto out; -        } - -        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *) "name", -                                               "%s", str_value); -        XML_RET_CHECK_AND_GOTO (ret, out); - -        ret = dict_get_str (dict, "snapuuid", &str_value); -        if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Failed to get snap uuid"); -                goto out; -        } - -        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *) "uuid", -                                               "%s", str_value); -        XML_RET_CHECK_AND_GOTO (ret, out); - -        /* </snapshot> */ -        ret = xmlTextWriterEndElement (writer); -        XML_RET_CHECK_AND_GOTO (ret, out); - -        /* </snapRestore> */ -        ret = xmlTextWriterEndElement (writer); -        XML_RET_CHECK_AND_GOTO (ret, out); - -        ret = 0; +    int ret = -1; +    char *str_value = NULL; + +    GF_ASSERT(writer); +    GF_ASSERT(doc); +    GF_ASSERT(dict); + +    /* <snapRestore> */ +    ret = xmlTextWriterStartElement(writer, (xmlChar *)"snapRestore"); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    /* <volume> */ +    ret = xmlTextWriterStartElement(writer, (xmlChar *)"volume"); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    ret = dict_get_str(dict, "volname", &str_value); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, "Failed to get vol name"); +        goto out; +    } + +    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"name", "%s", +                                          str_value); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    ret = dict_get_str(dict, "volid", &str_value); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, "Failed to get volume id"); +        goto out; +    } + +    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"uuid", "%s", +                                          str_value); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    /* </volume> */ +    ret = xmlTextWriterEndElement(writer); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    /* <snapshot> */ +    ret = xmlTextWriterStartElement(writer, (xmlChar *)"snapshot"); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    ret = dict_get_str(dict, "snapname", &str_value); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, "Failed to get snap name"); +        goto out; +    } + +    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"name", "%s", +                                          str_value); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    ret = dict_get_str(dict, "snapuuid", &str_value); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, "Failed to get snap uuid"); +        goto out; +    } + +    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"uuid", "%s", +                                          str_value); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    /* </snapshot> */ +    ret = xmlTextWriterEndElement(writer); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    /* </snapRestore> */ +    ret = xmlTextWriterEndElement(writer); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    ret = 0;  out: -        return ret; +    return ret;  }  /* This function will generate snapshot list output in xml format. @@ -4599,57 +4412,57 @@ out:   * @return 0 on success and -1 on failure   */  static int -cli_xml_snapshot_list (xmlTextWriterPtr writer, xmlDocPtr doc, dict_t *dict) +cli_xml_snapshot_list(xmlTextWriterPtr writer, xmlDocPtr doc, dict_t *dict)  { -        int     ret             = -1; -        int     i               = 0; -        int     snapcount       = 0; -        char   *str_value       = NULL; -        char    key[PATH_MAX]   = ""; +    int ret = -1; +    int i = 0; +    int snapcount = 0; +    char *str_value = NULL; +    char key[PATH_MAX] = ""; -        GF_ASSERT (writer); -        GF_ASSERT (doc); -        GF_ASSERT (dict); +    GF_ASSERT(writer); +    GF_ASSERT(doc); +    GF_ASSERT(dict); -        /* <snapList> */ -        ret = xmlTextWriterStartElement (writer, (xmlChar *)"snapList"); -        XML_RET_CHECK_AND_GOTO (ret, out); +    /* <snapList> */ +    ret = xmlTextWriterStartElement(writer, (xmlChar *)"snapList"); +    XML_RET_CHECK_AND_GOTO(ret, out); -        ret = dict_get_int32 (dict, "snapcount", &snapcount); -        if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Failed to get snapcount"); -                goto out; -        } +    ret = dict_get_int32(dict, "snapcount", &snapcount); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, "Failed to get snapcount"); +        goto out; +    } -        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *) "count", -                                               "%d", snapcount); -        XML_RET_CHECK_AND_GOTO (ret, out); +    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"count", "%d", +                                          snapcount); +    XML_RET_CHECK_AND_GOTO(ret, out); -        for (i = 1; i <= snapcount; ++i) { -                ret = snprintf (key, sizeof (key), "snapname%d", i); -                if (ret < 0) { -                        goto out; -                } +    for (i = 1; i <= snapcount; ++i) { +        ret = snprintf(key, sizeof(key), "snapname%d", i); +        if (ret < 0) { +            goto out; +        } -                ret = dict_get_str (dict, key, &str_value); -                if (ret) { -                        gf_log ("cli", GF_LOG_ERROR, "Could not get %s ", key); -                        goto out; -                } else { -                        ret = xmlTextWriterWriteFormatElement (writer, -                                        (xmlChar *)"snapshot", "%s", str_value); -                        XML_RET_CHECK_AND_GOTO (ret, out); -                } +        ret = dict_get_str(dict, key, &str_value); +        if (ret) { +            gf_log("cli", GF_LOG_ERROR, "Could not get %s ", key); +            goto out; +        } else { +            ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"snapshot", +                                                  "%s", str_value); +            XML_RET_CHECK_AND_GOTO(ret, out);          } +    } -        /* </snapList> */ -        ret = xmlTextWriterEndElement (writer); -        XML_RET_CHECK_AND_GOTO (ret, out); +    /* </snapList> */ +    ret = xmlTextWriterEndElement(writer); +    XML_RET_CHECK_AND_GOTO(ret, out); -        ret = 0; +    ret = 0;  out: -        return ret; +    return ret;  }  /* This function will generate xml output for origin volume @@ -4663,66 +4476,66 @@ out:   * @return 0 on success and -1 on failure   */  static int -cli_xml_snapshot_info_orig_vol (xmlTextWriterPtr writer, xmlDocPtr doc, -                                dict_t *dict, char *keyprefix) +cli_xml_snapshot_info_orig_vol(xmlTextWriterPtr writer, xmlDocPtr doc, +                               dict_t *dict, char *keyprefix)  { -        int     ret             = -1; -        int     value           = 0; -        char   *buffer          = NULL; -        char    key [PATH_MAX]  = ""; +    int ret = -1; +    int value = 0; +    char *buffer = NULL; +    char key[PATH_MAX] = ""; -        GF_ASSERT (dict); -        GF_ASSERT (keyprefix); -        GF_ASSERT (writer); -        GF_ASSERT (doc); +    GF_ASSERT(dict); +    GF_ASSERT(keyprefix); +    GF_ASSERT(writer); +    GF_ASSERT(doc); -        /* <originVolume> */ -        ret = xmlTextWriterStartElement (writer, (xmlChar *)"originVolume"); -        XML_RET_CHECK_AND_GOTO (ret, out); +    /* <originVolume> */ +    ret = xmlTextWriterStartElement(writer, (xmlChar *)"originVolume"); +    XML_RET_CHECK_AND_GOTO(ret, out); -        snprintf (key, sizeof (key), "%sorigin-volname", keyprefix); +    snprintf(key, sizeof(key), "%sorigin-volname", keyprefix); -        ret = dict_get_str (dict, key, &buffer); -        if (ret) { -                gf_log ("cli", GF_LOG_WARNING, "Failed to get %s", key); -                goto out; -        } +    ret = dict_get_str(dict, key, &buffer); +    if (ret) { +        gf_log("cli", GF_LOG_WARNING, "Failed to get %s", key); +        goto out; +    } -        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *) "name", -                                               "%s", buffer); -        XML_RET_CHECK_AND_GOTO (ret, out); +    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"name", "%s", +                                          buffer); +    XML_RET_CHECK_AND_GOTO(ret, out); -        snprintf (key, sizeof (key), "%ssnapcount", keyprefix); +    snprintf(key, sizeof(key), "%ssnapcount", keyprefix); -        ret = dict_get_int32 (dict, key, &value); -        if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Failed to get %s", key); -                goto out; -        } +    ret = dict_get_int32(dict, key, &value); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, "Failed to get %s", key); +        goto out; +    } -        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *) "snapCount", -                                               "%d", value); -        XML_RET_CHECK_AND_GOTO (ret, out); +    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"snapCount", "%d", +                                          value); +    XML_RET_CHECK_AND_GOTO(ret, out); -        snprintf (key, sizeof (key), "%ssnaps-available", keyprefix); +    snprintf(key, sizeof(key), "%ssnaps-available", keyprefix); -        ret = dict_get_int32 (dict, key, &value); -        if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Failed to get %s", key); -                goto out; -        } +    ret = dict_get_int32(dict, key, &value); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, "Failed to get %s", key); +        goto out; +    } -        ret = xmlTextWriterWriteFormatElement (writer, -                                (xmlChar *) "snapRemaining", "%d", value); -        XML_RET_CHECK_AND_GOTO (ret, out); +    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"snapRemaining", +                                          "%d", value); +    XML_RET_CHECK_AND_GOTO(ret, out); -        /* </originVolume> */ -        ret = xmlTextWriterEndElement (writer); -        XML_RET_CHECK_AND_GOTO (ret, out); +    /* </originVolume> */ +    ret = xmlTextWriterEndElement(writer); +    XML_RET_CHECK_AND_GOTO(ret, out); -        ret = 0; +    ret = 0;  out: -        return ret; +    return ret;  }  /* This function will generate xml output of snapshot volume info. @@ -4737,66 +4550,67 @@ out:   * @return 0 on success and -1 on failure   */  static int -cli_xml_snapshot_info_snap_vol (xmlTextWriterPtr writer, xmlDocPtr doc, -                                dict_t *dict, char *keyprefix, -                                gf_boolean_t snap_driven) +cli_xml_snapshot_info_snap_vol(xmlTextWriterPtr writer, xmlDocPtr doc, +                               dict_t *dict, char *keyprefix, +                               gf_boolean_t snap_driven)  { -        char            key [PATH_MAX]          = ""; -        char           *buffer                  = NULL; -        int             ret                     = -1; - -        GF_ASSERT (dict); -        GF_ASSERT (keyprefix); -        GF_ASSERT (writer); -        GF_ASSERT (doc); - -        /* <snapVolume> */ -        ret = xmlTextWriterStartElement (writer, (xmlChar *)"snapVolume"); -        XML_RET_CHECK_AND_GOTO (ret, out); - -        snprintf (key, sizeof (key), "%s.volname", keyprefix); - -        ret = dict_get_str (dict, key, &buffer); +    char key[PATH_MAX] = ""; +    char *buffer = NULL; +    int ret = -1; + +    GF_ASSERT(dict); +    GF_ASSERT(keyprefix); +    GF_ASSERT(writer); +    GF_ASSERT(doc); + +    /* <snapVolume> */ +    ret = xmlTextWriterStartElement(writer, (xmlChar *)"snapVolume"); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    snprintf(key, sizeof(key), "%s.volname", keyprefix); + +    ret = dict_get_str(dict, key, &buffer); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, "Failed to get %s", key); +        goto out; +    } + +    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"name", "%s", +                                          buffer); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    snprintf(key, sizeof(key), "%s.vol-status", keyprefix); + +    ret = dict_get_str(dict, key, &buffer); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, "Failed to get %s", key); +        goto out; +    } + +    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"status", "%s", +                                          buffer); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    /* If the command is snap_driven then we need to show origin volume +     * info. Else this is shown in the start of info display.*/ +    if (snap_driven) { +        snprintf(key, sizeof(key), "%s.", keyprefix); +        ret = cli_xml_snapshot_info_orig_vol(writer, doc, dict, key);          if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Failed to get %s", key); -                goto out; +            gf_log("cli", GF_LOG_ERROR, +                   "Failed to create " +                   "xml output for snapshot's origin volume"); +            goto out;          } +    } -        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *) "name", -                                               "%s", buffer); -        XML_RET_CHECK_AND_GOTO (ret, out); - -        snprintf (key, sizeof (key), "%s.vol-status", keyprefix); - -        ret = dict_get_str (dict, key, &buffer); -        if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Failed to get %s", key); -                goto out; -        } - -        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *) "status", -                                               "%s", buffer); -        XML_RET_CHECK_AND_GOTO (ret, out); - -        /* If the command is snap_driven then we need to show origin volume -         * info. Else this is shown in the start of info display.*/ -        if (snap_driven) { -                snprintf (key, sizeof (key), "%s.", keyprefix); -                ret = cli_xml_snapshot_info_orig_vol (writer, doc, dict, key); -                if (ret) { -                        gf_log ("cli", GF_LOG_ERROR, "Failed to create " -                                "xml output for snapshot's origin volume"); -                        goto out; -                } -        } +    /* </snapVolume> */ +    ret = xmlTextWriterEndElement(writer); +    XML_RET_CHECK_AND_GOTO(ret, out); -        /* </snapVolume> */ -        ret = xmlTextWriterEndElement (writer); -        XML_RET_CHECK_AND_GOTO (ret, out); - -        ret = 0; +    ret = 0;  out: -        return ret; +    return ret;  }  /* This function will generate snapshot info of individual snapshot @@ -4812,112 +4626,104 @@ out:   * @return 0 on success and -1 on failure   */  static int -cli_xml_snapshot_info_per_snap (xmlTextWriterPtr writer, xmlDocPtr doc, -                                dict_t *dict, char *keyprefix, -                                gf_boolean_t snap_driven) +cli_xml_snapshot_info_per_snap(xmlTextWriterPtr writer, xmlDocPtr doc, +                               dict_t *dict, char *keyprefix, +                               gf_boolean_t snap_driven)  { -        char            key_buffer[PATH_MAX]    = ""; -        char           *buffer                  = NULL; -        int             volcount                = 0; -        int             ret                     = -1; -        int             i                       = 0; - -        GF_ASSERT (dict); -        GF_ASSERT (keyprefix); -        GF_ASSERT (writer); -        GF_ASSERT (doc); - -        /* <snapshot> */ -        ret = xmlTextWriterStartElement (writer, (xmlChar *)"snapshot"); -        XML_RET_CHECK_AND_GOTO (ret, out); - -        snprintf (key_buffer, sizeof (key_buffer), "%s.snapname", -                  keyprefix); - -        ret = dict_get_str (dict, key_buffer, &buffer); +    char key_buffer[PATH_MAX] = ""; +    char *buffer = NULL; +    int volcount = 0; +    int ret = -1; +    int i = 0; + +    GF_ASSERT(dict); +    GF_ASSERT(keyprefix); +    GF_ASSERT(writer); +    GF_ASSERT(doc); + +    /* <snapshot> */ +    ret = xmlTextWriterStartElement(writer, (xmlChar *)"snapshot"); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    snprintf(key_buffer, sizeof(key_buffer), "%s.snapname", keyprefix); + +    ret = dict_get_str(dict, key_buffer, &buffer); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, "Unable to fetch snapname %s ", key_buffer); +        goto out; +    } + +    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"name", "%s", +                                          buffer); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    snprintf(key_buffer, sizeof(key_buffer), "%s.snap-id", keyprefix); + +    ret = dict_get_str(dict, key_buffer, &buffer); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, "Unable to fetch snap-id %s ", key_buffer); +        goto out; +    } + +    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"uuid", "%s", +                                          buffer); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    snprintf(key_buffer, sizeof(key_buffer), "%s.snap-desc", keyprefix); + +    ret = dict_get_str(dict, key_buffer, &buffer); +    if (!ret) { +        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"description", +                                              "%s", buffer); +    } else { +        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"description", +                                              "%s", ""); +    } +    XML_RET_CHECK_AND_GOTO(ret, out); + +    snprintf(key_buffer, sizeof(key_buffer), "%s.snap-time", keyprefix); + +    ret = dict_get_str(dict, key_buffer, &buffer); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, "Unable to fetch snap-time %s ", keyprefix); +        goto out; +    } + +    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"createTime", "%s", +                                          buffer); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    snprintf(key_buffer, sizeof(key_buffer), "%s.vol-count", keyprefix); +    ret = dict_get_int32(dict, key_buffer, &volcount); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, "Fail to get snap vol count"); +        goto out; +    } + +    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"volCount", "%d", +                                          volcount); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    ret = dict_get_int32(dict, key_buffer, &volcount); +    /* Display info of each snapshot volume */ +    for (i = 1; i <= volcount; i++) { +        snprintf(key_buffer, sizeof(key_buffer), "%s.vol%d", keyprefix, i); + +        ret = cli_xml_snapshot_info_snap_vol(writer, doc, dict, key_buffer, +                                             snap_driven);          if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Unable to fetch snapname %s ", -                        key_buffer); -                goto out; +            gf_log("cli", GF_LOG_ERROR, +                   "Could not list " +                   "details of volume in a snap"); +            goto out;          } +    } -        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *) "name", -                                               "%s", buffer); -        XML_RET_CHECK_AND_GOTO (ret, out); - -        snprintf (key_buffer, sizeof (key_buffer), "%s.snap-id", keyprefix); - -        ret = dict_get_str (dict, key_buffer, &buffer); -        if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Unable to fetch snap-id %s ", -                                key_buffer); -                goto out; -        } - -        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *) "uuid", -                                               "%s", buffer); -        XML_RET_CHECK_AND_GOTO (ret, out); - -        snprintf (key_buffer, sizeof (key_buffer), "%s.snap-desc", keyprefix); - -        ret = dict_get_str (dict, key_buffer, &buffer); -        if (!ret) { -                ret = xmlTextWriterWriteFormatElement (writer, -                                                (xmlChar *) "description", -                                                "%s", buffer); -        } else { -                ret = xmlTextWriterWriteFormatElement (writer, -                                                (xmlChar *) "description", -                                                "%s", ""); -        } -        XML_RET_CHECK_AND_GOTO (ret, out); - -        snprintf (key_buffer, sizeof (key_buffer), "%s.snap-time", keyprefix); - -        ret = dict_get_str (dict, key_buffer, &buffer); -        if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Unable to fetch snap-time %s ", -                                keyprefix); -                goto out; -        } - -        ret = xmlTextWriterWriteFormatElement (writer, -                                               (xmlChar *) "createTime", -                                               "%s", buffer); -        XML_RET_CHECK_AND_GOTO (ret, out); - -        snprintf (key_buffer, sizeof (key_buffer), "%s.vol-count", keyprefix); -        ret = dict_get_int32 (dict, key_buffer, &volcount); -        if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Fail to get snap vol count"); -                goto out; -        } - -        ret = xmlTextWriterWriteFormatElement (writer, -                                               (xmlChar *) "volCount", -                                               "%d", volcount); -        XML_RET_CHECK_AND_GOTO (ret, out); - -        ret = dict_get_int32 (dict, key_buffer, &volcount); -        /* Display info of each snapshot volume */ -        for (i = 1 ; i <= volcount ; i++) { -                snprintf (key_buffer, sizeof (key_buffer), "%s.vol%d", -                          keyprefix, i); - -                ret = cli_xml_snapshot_info_snap_vol (writer, doc, dict, -                                                      key_buffer, snap_driven); -                if (ret) { -                        gf_log ("cli", GF_LOG_ERROR, "Could not list " -                                        "details of volume in a snap"); -                        goto out; -                } -        } - -        /* </snapshot> */ -        ret = xmlTextWriterEndElement (writer); -        XML_RET_CHECK_AND_GOTO (ret, out); +    /* </snapshot> */ +    ret = xmlTextWriterEndElement(writer); +    XML_RET_CHECK_AND_GOTO(ret, out);  out: -        return ret; +    return ret;  }  /* This function will generate snapshot info output in xml format. @@ -4929,73 +4735,74 @@ out:   * @return 0 on success and -1 on failure   */  static int -cli_xml_snapshot_info (xmlTextWriterPtr writer, xmlDocPtr doc, dict_t *dict) +cli_xml_snapshot_info(xmlTextWriterPtr writer, xmlDocPtr doc, dict_t *dict)  { -        int             ret             = -1; -        int             i               = 0; -        int             snapcount       = 0; -        char            key [PATH_MAX]  = ""; -        gf_boolean_t    snap_driven     = _gf_false; - -        GF_ASSERT (writer); -        GF_ASSERT (doc); -        GF_ASSERT (dict); - -        /* <snapInfo> */ -        ret = xmlTextWriterStartElement (writer, (xmlChar *)"snapInfo"); -        XML_RET_CHECK_AND_GOTO (ret, out); - -        snap_driven = dict_get_str_boolean (dict, "snap-driven", _gf_false); - -        /* If the approach is volume based then we should display origin volume -         * information first followed by per snap info*/ -        if (!snap_driven) { -                ret = cli_xml_snapshot_info_orig_vol (writer, doc, dict, ""); -                if (ret) { -                        gf_log ("cli", GF_LOG_ERROR, "Failed to create " -                                "xml output for snapshot's origin volume"); -                        goto out; -                } -        } - -        ret = dict_get_int32 (dict, "snapcount", &snapcount); +    int ret = -1; +    int i = 0; +    int snapcount = 0; +    char key[PATH_MAX] = ""; +    gf_boolean_t snap_driven = _gf_false; + +    GF_ASSERT(writer); +    GF_ASSERT(doc); +    GF_ASSERT(dict); + +    /* <snapInfo> */ +    ret = xmlTextWriterStartElement(writer, (xmlChar *)"snapInfo"); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    snap_driven = dict_get_str_boolean(dict, "snap-driven", _gf_false); + +    /* If the approach is volume based then we should display origin volume +     * information first followed by per snap info*/ +    if (!snap_driven) { +        ret = cli_xml_snapshot_info_orig_vol(writer, doc, dict, "");          if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Failed to get snapcount"); -                goto out; +            gf_log("cli", GF_LOG_ERROR, +                   "Failed to create " +                   "xml output for snapshot's origin volume"); +            goto out;          } +    } -        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *) "count", -                                               "%d", snapcount); -        XML_RET_CHECK_AND_GOTO (ret, out); +    ret = dict_get_int32(dict, "snapcount", &snapcount); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, "Failed to get snapcount"); +        goto out; +    } -        /* <snapshots> */ -        ret = xmlTextWriterStartElement (writer, (xmlChar *)"snapshots"); -        XML_RET_CHECK_AND_GOTO (ret, out); +    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"count", "%d", +                                          snapcount); +    XML_RET_CHECK_AND_GOTO(ret, out); -        /* Get snapshot info of individual snapshots */ -        for (i = 1; i <= snapcount; ++i) { -                snprintf (key, sizeof (key), "snap%d", i); +    /* <snapshots> */ +    ret = xmlTextWriterStartElement(writer, (xmlChar *)"snapshots"); +    XML_RET_CHECK_AND_GOTO(ret, out); -                ret = cli_xml_snapshot_info_per_snap (writer, doc, dict, -                                                      key, snap_driven); -                if (ret) { -                        gf_log ("cli", GF_LOG_ERROR, "Could not get %s ", key); -                        goto out; -                } +    /* Get snapshot info of individual snapshots */ +    for (i = 1; i <= snapcount; ++i) { +        snprintf(key, sizeof(key), "snap%d", i); + +        ret = cli_xml_snapshot_info_per_snap(writer, doc, dict, key, +                                             snap_driven); +        if (ret) { +            gf_log("cli", GF_LOG_ERROR, "Could not get %s ", key); +            goto out;          } +    } -        /* </snapshots> */ -        ret = xmlTextWriterEndElement (writer); -        XML_RET_CHECK_AND_GOTO (ret, out); +    /* </snapshots> */ +    ret = xmlTextWriterEndElement(writer); +    XML_RET_CHECK_AND_GOTO(ret, out); -        /* </snapInfo> */ -        ret = xmlTextWriterEndElement (writer); -        XML_RET_CHECK_AND_GOTO (ret, out); +    /* </snapInfo> */ +    ret = xmlTextWriterEndElement(writer); +    XML_RET_CHECK_AND_GOTO(ret, out); -        ret = 0; +    ret = 0;  out: -        return ret; +    return ret;  }  /* This function will generate snapshot status of individual @@ -5009,139 +4816,133 @@ out:   * @return 0 on success and -1 on failure   */  static int -cli_xml_snapshot_volume_status (xmlTextWriterPtr writer, xmlDocPtr doc, -                                dict_t *dict, const char *keyprefix) +cli_xml_snapshot_volume_status(xmlTextWriterPtr writer, xmlDocPtr doc, +                               dict_t *dict, const char *keyprefix)  { -        int     ret             = -1; -        int     brickcount      = 0; -        int     i               = 0; -        int     pid             = 0; -        char   *buffer          = NULL; -        char    key[PATH_MAX]   = ""; +    int ret = -1; +    int brickcount = 0; +    int i = 0; +    int pid = 0; +    char *buffer = NULL; +    char key[PATH_MAX] = ""; + +    GF_ASSERT(writer); +    GF_ASSERT(doc); +    GF_ASSERT(dict); +    GF_ASSERT(keyprefix); + +    snprintf(key, sizeof(key), "%s.brickcount", keyprefix); + +    ret = dict_get_int32(dict, key, &brickcount); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, "Failed to fetch brickcount"); +        goto out; +    } + +    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"brickCount", "%d", +                                          brickcount); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    /* Get status of every brick belonging to the snapshot volume */ +    for (i = 0; i < brickcount; i++) { +        /* <snapInfo> */ +        ret = xmlTextWriterStartElement(writer, (xmlChar *)"brick"); +        XML_RET_CHECK_AND_GOTO(ret, out); + +        snprintf(key, sizeof(key), "%s.brick%d.path", keyprefix, i); + +        ret = dict_get_str(dict, key, &buffer); +        if (ret) { +            gf_log("cli", GF_LOG_ERROR, "Unable to get Brick Path"); +            /* +             * If path itself is not present, then end * +             * this brick's status and continue to the * +             * brick                                   * +             */ +            ret = xmlTextWriterEndElement(writer); +            XML_RET_CHECK_AND_GOTO(ret, out); +            continue; +        } + +        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"path", "%s", +                                              buffer); +        XML_RET_CHECK_AND_GOTO(ret, out); + +        snprintf(key, sizeof(key), "%s.brick%d.vgname", keyprefix, i); + +        ret = dict_get_str(dict, key, &buffer); +        if (ret) { +            gf_log("cli", GF_LOG_ERROR, "Unable to get Volume Group"); +            ret = xmlTextWriterWriteFormatElement( +                writer, (xmlChar *)"volumeGroup", "N/A"); +        } else +            ret = xmlTextWriterWriteFormatElement( +                writer, (xmlChar *)"volumeGroup", "%s", buffer); -        GF_ASSERT (writer); -        GF_ASSERT (doc); -        GF_ASSERT (dict); -        GF_ASSERT (keyprefix); +        XML_RET_CHECK_AND_GOTO(ret, out); -        snprintf (key, sizeof (key), "%s.brickcount", keyprefix); +        snprintf(key, sizeof(key), "%s.brick%d.status", keyprefix, i); -        ret = dict_get_int32 (dict, key, &brickcount); +        ret = dict_get_str(dict, key, &buffer);          if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Failed to fetch brickcount"); -                goto out; -        } +            gf_log("cli", GF_LOG_INFO, "Unable to get Brick Running"); +            ret = xmlTextWriterWriteFormatElement( +                writer, (xmlChar *)"brick_running", "N/A"); +        } else +            ret = xmlTextWriterWriteFormatElement( +                writer, (xmlChar *)"brick_running", "%s", buffer); -        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *) "brickCount", -                                               "%d", brickcount); -        XML_RET_CHECK_AND_GOTO (ret, out); - -        /* Get status of every brick belonging to the snapshot volume */ -        for (i = 0 ; i < brickcount ; i++) { -                /* <snapInfo> */ -                ret = xmlTextWriterStartElement (writer, (xmlChar *)"brick"); -                XML_RET_CHECK_AND_GOTO (ret, out); - -                snprintf (key, sizeof (key), "%s.brick%d.path", keyprefix, i); - -                ret = dict_get_str (dict, key, &buffer); -                if (ret) { -                        gf_log ("cli", GF_LOG_ERROR, -                                "Unable to get Brick Path"); -                        /* -                         * If path itself is not present, then end * -                         * this brick's status and continue to the * -                         * brick                                   * -                         */ -                        ret = xmlTextWriterEndElement (writer); -                        XML_RET_CHECK_AND_GOTO (ret, out); -                        continue; -                } +        XML_RET_CHECK_AND_GOTO(ret, out); -                ret = xmlTextWriterWriteFormatElement (writer, -                                        (xmlChar *) "path", "%s", buffer); -                XML_RET_CHECK_AND_GOTO (ret, out); - -                snprintf (key, sizeof (key), "%s.brick%d.vgname", -                          keyprefix, i); - -                ret = dict_get_str (dict, key, &buffer); -                if (ret) { -                        gf_log ("cli", GF_LOG_ERROR, -                                "Unable to get Volume Group"); -                        ret = xmlTextWriterWriteFormatElement (writer, -                                              (xmlChar *) "volumeGroup", "N/A"); -                } else -                        ret = xmlTextWriterWriteFormatElement (writer, -                                       (xmlChar *) "volumeGroup", "%s", buffer); - -                XML_RET_CHECK_AND_GOTO (ret, out); - -                snprintf (key, sizeof (key), "%s.brick%d.status", keyprefix, i); - -                ret = dict_get_str (dict, key, &buffer); -                if (ret) { -                        gf_log ("cli", GF_LOG_INFO, -                                "Unable to get Brick Running"); -                        ret = xmlTextWriterWriteFormatElement (writer, -                                            (xmlChar *) "brick_running", "N/A"); -                } else -                        ret = xmlTextWriterWriteFormatElement (writer, -                                     (xmlChar *) "brick_running", "%s", buffer); - -                XML_RET_CHECK_AND_GOTO (ret, out); - -                snprintf (key, sizeof (key), "%s.brick%d.pid", keyprefix, i); - -                ret = dict_get_int32 (dict, key, &pid); -                if (ret) { -                        gf_log ("cli", GF_LOG_INFO, "Unable to get pid"); -                        ret = xmlTextWriterWriteFormatElement (writer, -                                                      (xmlChar *) "pid", "N/A"); -                } else -                        ret = xmlTextWriterWriteFormatElement (writer, -                                                  (xmlChar *) "pid", "%d", pid); - -                XML_RET_CHECK_AND_GOTO (ret, out); - -                snprintf (key, sizeof (key), "%s.brick%d.data", keyprefix, i); - -                ret = dict_get_str (dict, key, &buffer); -                if (ret) { -                        gf_log ("cli", GF_LOG_ERROR, -                                        "Unable to get Data Percent"); -                        ret = xmlTextWriterWriteFormatElement (writer, -                                          (xmlChar *) "data_percentage", "N/A"); -                } else -                        ret = xmlTextWriterWriteFormatElement (writer, -                                   (xmlChar *) "data_percentage", "%s", buffer); - -                XML_RET_CHECK_AND_GOTO (ret, out); - -                snprintf (key, sizeof (key), "%s.brick%d.lvsize", -                          keyprefix, i); -                ret = dict_get_str (dict, key, &buffer); -                if (ret) { -                        gf_log ("cli", GF_LOG_ERROR, "Unable to get LV Size"); -                        ret = xmlTextWriterWriteFormatElement (writer, -                                                 (xmlChar *) "lvSize", "N/A"); -                } else { -                        /* Truncate any newline character */ -                        buffer = strtok (buffer, "\n"); - -                        ret = xmlTextWriterWriteFormatElement (writer, -                                          (xmlChar *) "lvSize", "%s", buffer); -                } +        snprintf(key, sizeof(key), "%s.brick%d.pid", keyprefix, i); + +        ret = dict_get_int32(dict, key, &pid); +        if (ret) { +            gf_log("cli", GF_LOG_INFO, "Unable to get pid"); +            ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"pid", +                                                  "N/A"); +        } else +            ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"pid", +                                                  "%d", pid); -                XML_RET_CHECK_AND_GOTO (ret, out); +        XML_RET_CHECK_AND_GOTO(ret, out); -                /* </brick> */ -                ret = xmlTextWriterEndElement (writer); -                XML_RET_CHECK_AND_GOTO (ret, out); +        snprintf(key, sizeof(key), "%s.brick%d.data", keyprefix, i); + +        ret = dict_get_str(dict, key, &buffer); +        if (ret) { +            gf_log("cli", GF_LOG_ERROR, "Unable to get Data Percent"); +            ret = xmlTextWriterWriteFormatElement( +                writer, (xmlChar *)"data_percentage", "N/A"); +        } else +            ret = xmlTextWriterWriteFormatElement( +                writer, (xmlChar *)"data_percentage", "%s", buffer); + +        XML_RET_CHECK_AND_GOTO(ret, out); + +        snprintf(key, sizeof(key), "%s.brick%d.lvsize", keyprefix, i); +        ret = dict_get_str(dict, key, &buffer); +        if (ret) { +            gf_log("cli", GF_LOG_ERROR, "Unable to get LV Size"); +            ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"lvSize", +                                                  "N/A"); +        } else { +            /* Truncate any newline character */ +            buffer = strtok(buffer, "\n"); + +            ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"lvSize", +                                                  "%s", buffer);          } +        XML_RET_CHECK_AND_GOTO(ret, out); + +        /* </brick> */ +        ret = xmlTextWriterEndElement(writer); +        XML_RET_CHECK_AND_GOTO(ret, out); +    } +  out: -        return ret; +    return ret;  }  /* This function will generate snapshot status of individual @@ -5154,87 +4955,85 @@ out:   * @return 0 on success and -1 on failure   */  static int -cli_xml_snapshot_status_per_snap (xmlTextWriterPtr writer, xmlDocPtr doc, -                                  dict_t *dict, const char *keyprefix) +cli_xml_snapshot_status_per_snap(xmlTextWriterPtr writer, xmlDocPtr doc, +                                 dict_t *dict, const char *keyprefix)  { -        int     ret             = -1; -        int     volcount        = 0; -        int     i               = 0; -        char   *buffer          = NULL; -        char    key [PATH_MAX]  = ""; - -        GF_ASSERT (writer); -        GF_ASSERT (doc); -        GF_ASSERT (dict); -        GF_ASSERT (keyprefix); - -        ret = xmlTextWriterStartElement (writer, (xmlChar *)"snapshot"); -        XML_RET_CHECK_AND_GOTO (ret, out); - -        snprintf (key, sizeof (key), "%s.snapname", keyprefix); - -        ret = dict_get_str (dict, key, &buffer); -        if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Unable to get snapname"); -                goto out; -        } - -        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *) "name", -                                               "%s", buffer); -        XML_RET_CHECK_AND_GOTO (ret, out); - -        snprintf (key, sizeof (key), "%s.uuid", keyprefix); - -        ret = dict_get_str (dict, key, &buffer); -        if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Unable to get snap UUID"); -                goto out; -        } - -        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *) "uuid", -                                               "%s", buffer); -        XML_RET_CHECK_AND_GOTO (ret, out); +    int ret = -1; +    int volcount = 0; +    int i = 0; +    char *buffer = NULL; +    char key[PATH_MAX] = ""; + +    GF_ASSERT(writer); +    GF_ASSERT(doc); +    GF_ASSERT(dict); +    GF_ASSERT(keyprefix); + +    ret = xmlTextWriterStartElement(writer, (xmlChar *)"snapshot"); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    snprintf(key, sizeof(key), "%s.snapname", keyprefix); + +    ret = dict_get_str(dict, key, &buffer); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, "Unable to get snapname"); +        goto out; +    } + +    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"name", "%s", +                                          buffer); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    snprintf(key, sizeof(key), "%s.uuid", keyprefix); + +    ret = dict_get_str(dict, key, &buffer); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, "Unable to get snap UUID"); +        goto out; +    } + +    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"uuid", "%s", +                                          buffer); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    snprintf(key, sizeof(key), "%s.volcount", keyprefix); + +    ret = dict_get_int32(dict, key, &volcount); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, "Unable to get volume count"); +        goto out; +    } + +    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"volCount", "%d", +                                          volcount); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    /* Get snapshot status of individual snapshot volume */ +    for (i = 0; i < volcount; i++) { +        /* <volume> */ +        ret = xmlTextWriterStartElement(writer, (xmlChar *)"volume"); +        XML_RET_CHECK_AND_GOTO(ret, out); -        snprintf (key, sizeof (key), "%s.volcount", keyprefix); +        snprintf(key, sizeof(key), "%s.vol%d", keyprefix, i); -        ret = dict_get_int32 (dict, key, &volcount); +        ret = cli_xml_snapshot_volume_status(writer, doc, dict, key);          if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Unable to get volume count"); -                goto out; +            gf_log("cli", GF_LOG_ERROR, "Could not get snap volume status"); +            goto out;          } -        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *) "volCount", -                                               "%d", volcount); -        XML_RET_CHECK_AND_GOTO (ret, out); - -        /* Get snapshot status of individual snapshot volume */ -        for (i = 0 ; i < volcount ; i++) { -                /* <volume> */ -                ret = xmlTextWriterStartElement (writer, (xmlChar *)"volume"); -                XML_RET_CHECK_AND_GOTO (ret, out); - -                snprintf (key, sizeof (key), "%s.vol%d", keyprefix, i); - -                ret = cli_xml_snapshot_volume_status (writer, doc, -                                                             dict, key); -                if (ret) { -                        gf_log ("cli", GF_LOG_ERROR, -                                        "Could not get snap volume status"); -                        goto out; -                } - -                /* </volume> */ -                ret = xmlTextWriterEndElement (writer); -                XML_RET_CHECK_AND_GOTO (ret, out); -        } +        /* </volume> */ +        ret = xmlTextWriterEndElement(writer); +        XML_RET_CHECK_AND_GOTO(ret, out); +    } -        /* </snapshot> */ -        ret = xmlTextWriterEndElement (writer); -        XML_RET_CHECK_AND_GOTO (ret, out); +    /* </snapshot> */ +    ret = xmlTextWriterEndElement(writer); +    XML_RET_CHECK_AND_GOTO(ret, out); -        ret = 0; +    ret = 0;  out: -        return ret; +    return ret;  }  /* This function will generate snapshot status output in xml format. @@ -5246,64 +5045,63 @@ out:   * @return 0 on success and -1 on failure   */  static int -cli_xml_snapshot_status (xmlTextWriterPtr writer, xmlDocPtr doc, dict_t *dict) +cli_xml_snapshot_status(xmlTextWriterPtr writer, xmlDocPtr doc, dict_t *dict)  { -        int     ret             = -1; -        int     snapcount       = 0; -        int     i               = 0; -        int     status_cmd      = 0; -        char    key [PATH_MAX]  = ""; - -        GF_ASSERT (writer); -        GF_ASSERT (doc); -        GF_ASSERT (dict); - -        /* <snapStatus> */ -        ret = xmlTextWriterStartElement (writer, (xmlChar *)"snapStatus"); -        XML_RET_CHECK_AND_GOTO (ret, out); - -        ret = dict_get_int32 (dict, "sub-cmd", &status_cmd); +    int ret = -1; +    int snapcount = 0; +    int i = 0; +    int status_cmd = 0; +    char key[PATH_MAX] = ""; + +    GF_ASSERT(writer); +    GF_ASSERT(doc); +    GF_ASSERT(dict); + +    /* <snapStatus> */ +    ret = xmlTextWriterStartElement(writer, (xmlChar *)"snapStatus"); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    ret = dict_get_int32(dict, "sub-cmd", &status_cmd); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, "Could not fetch status type"); +        goto out; +    } + +    if ((GF_SNAP_STATUS_TYPE_SNAP == status_cmd) || +        (GF_SNAP_STATUS_TYPE_ITER == status_cmd)) { +        snapcount = 1; +    } else { +        ret = dict_get_int32(dict, "status.snapcount", &snapcount);          if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Could not fetch status type"); -                goto out; +            gf_log("cli", GF_LOG_ERROR, "Could not get snapcount"); +            goto out;          } -        if ((GF_SNAP_STATUS_TYPE_SNAP == status_cmd) || -            (GF_SNAP_STATUS_TYPE_ITER == status_cmd)) { -                snapcount = 1; -        } else { -                ret = dict_get_int32 (dict, "status.snapcount", &snapcount); -                if (ret) { -                        gf_log ("cli", GF_LOG_ERROR, "Could not get snapcount"); -                        goto out; -                } - -                ret = xmlTextWriterWriteFormatElement (writer, -                                                       (xmlChar *) "count", -                                                       "%d", snapcount); -                XML_RET_CHECK_AND_GOTO (ret, out); -        } +        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"count", "%d", +                                              snapcount); +        XML_RET_CHECK_AND_GOTO(ret, out); +    } -        for (i = 0 ; i < snapcount; i++) { -                snprintf (key, sizeof (key), "status.snap%d", i); +    for (i = 0; i < snapcount; i++) { +        snprintf(key, sizeof(key), "status.snap%d", i); -                ret = cli_xml_snapshot_status_per_snap (writer, doc, -                                                               dict, key); -                if (ret < 0) { -                        gf_log ("cli", GF_LOG_ERROR, "failed to create xml " -                                "output for snapshot status"); -                        goto out; -                } +        ret = cli_xml_snapshot_status_per_snap(writer, doc, dict, key); +        if (ret < 0) { +            gf_log("cli", GF_LOG_ERROR, +                   "failed to create xml " +                   "output for snapshot status"); +            goto out;          } +    } -        /* </snapStatus> */ -        ret = xmlTextWriterEndElement (writer); -        XML_RET_CHECK_AND_GOTO (ret, out); +    /* </snapStatus> */ +    ret = xmlTextWriterEndElement(writer); +    XML_RET_CHECK_AND_GOTO(ret, out); -        ret = 0; +    ret = 0;  out: -        return ret; +    return ret;  }  /* This function will generate snapshot config show output in xml format. @@ -5315,153 +5113,149 @@ out:   * @return 0 on success and -1 on failure   */  static int -cli_xml_snapshot_config_show (xmlTextWriterPtr writer, -                              xmlDocPtr doc, dict_t *dict) +cli_xml_snapshot_config_show(xmlTextWriterPtr writer, xmlDocPtr doc, +                             dict_t *dict)  { -        int             ret             = -1; -        uint64_t        i               = 0; -        uint64_t        value           = 0; -        uint64_t        volcount        = 0; -        char            buf[PATH_MAX]   = ""; -        char           *str_value       = NULL; - -        GF_ASSERT (writer); -        GF_ASSERT (doc); -        GF_ASSERT (dict); - -        /* <systemConfig> */ -        ret = xmlTextWriterStartElement (writer, -                        (xmlChar *)"systemConfig"); -        XML_RET_CHECK_AND_GOTO (ret, out); - -        ret = dict_get_uint64 (dict, "snap-max-hard-limit", &value); -        if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Failed to get " -                        "snap-max-hard-limit"); -                goto out; -        } - -        ret = xmlTextWriterWriteFormatElement (writer, -                        (xmlChar *) "hardLimit", "%"PRIu64, value); -        XML_RET_CHECK_AND_GOTO (ret, out); +    int ret = -1; +    uint64_t i = 0; +    uint64_t value = 0; +    uint64_t volcount = 0; +    char buf[PATH_MAX] = ""; +    char *str_value = NULL; + +    GF_ASSERT(writer); +    GF_ASSERT(doc); +    GF_ASSERT(dict); + +    /* <systemConfig> */ +    ret = xmlTextWriterStartElement(writer, (xmlChar *)"systemConfig"); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    ret = dict_get_uint64(dict, "snap-max-hard-limit", &value); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, +               "Failed to get " +               "snap-max-hard-limit"); +        goto out; +    } + +    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"hardLimit", +                                          "%" PRIu64, value); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    ret = dict_get_uint64(dict, "snap-max-soft-limit", &value); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, +               "Failed to get " +               "snap-max-soft-limit"); +        goto out; +    } + +    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"softLimit", +                                          "%" PRIu64 "%%", value); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    ret = dict_get_str(dict, "auto-delete", &str_value); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, "Could not fetch auto-delete"); +        goto out; +    } + +    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"autoDelete", "%s", +                                          str_value); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    ret = dict_get_str(dict, "snap-activate-on-create", &str_value); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, +               "Could not fetch snap-activate-on-create-delete"); +        goto out; +    } + +    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"activateOnCreate", +                                          "%s", str_value); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    /* </systemConfig> */ +    ret = xmlTextWriterEndElement(writer); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    /* <volumeConfig> */ +    ret = xmlTextWriterStartElement(writer, (xmlChar *)"volumeConfig"); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    ret = dict_get_uint64(dict, "voldisplaycount", &volcount); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, "Could not fetch volcount"); +        goto out; +    } + +    /* Get config of all the volumes */ +    for (i = 0; i < volcount; i++) { +        /* <volume> */ +        ret = xmlTextWriterStartElement(writer, (xmlChar *)"volume"); +        XML_RET_CHECK_AND_GOTO(ret, out); -        ret = dict_get_uint64 (dict, "snap-max-soft-limit", &value); +        snprintf(buf, sizeof(buf), "volume%" PRIu64 "-volname", i); +        ret = dict_get_str(dict, buf, &str_value);          if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Failed to get " -                        "snap-max-soft-limit"); -                goto out; +            gf_log("cli", GF_LOG_ERROR, "Could not fetch %s", buf); +            goto out;          } -        ret = xmlTextWriterWriteFormatElement (writer, -                        (xmlChar *) "softLimit", -                        "%"PRIu64"%%", value); -        XML_RET_CHECK_AND_GOTO (ret, out); +        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"name", "%s", +                                              str_value); +        XML_RET_CHECK_AND_GOTO(ret, out); -        ret = dict_get_str (dict, "auto-delete", &str_value); +        snprintf(buf, sizeof(buf), "volume%" PRIu64 "-snap-max-hard-limit", i); +        ret = dict_get_uint64(dict, buf, &value);          if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Could not fetch auto-delete"); -                goto out; +            gf_log("cli", GF_LOG_ERROR, "Could not fetch %s", buf); +            goto out;          } -        ret = xmlTextWriterWriteFormatElement (writer, -                        (xmlChar *) "autoDelete", "%s", str_value); -        XML_RET_CHECK_AND_GOTO (ret, out); +        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"hardLimit", +                                              "%" PRIu64, value); +        XML_RET_CHECK_AND_GOTO(ret, out); -        ret = dict_get_str (dict, "snap-activate-on-create", &str_value); +        snprintf(buf, sizeof(buf), "volume%" PRIu64 "-active-hard-limit", i); +        ret = dict_get_uint64(dict, buf, &value);          if (ret) { -                gf_log ("cli", GF_LOG_ERROR, -                        "Could not fetch snap-activate-on-create-delete"); -                goto out; +            gf_log("cli", GF_LOG_ERROR, +                   "Could not fetch" +                   " effective snap_max_hard_limit for " +                   "%s", +                   str_value); +            goto out;          } -        ret = xmlTextWriterWriteFormatElement (writer, -                        (xmlChar *) "activateOnCreate", "%s", str_value); -        XML_RET_CHECK_AND_GOTO (ret, out); - -        /* </systemConfig> */ -        ret = xmlTextWriterEndElement (writer); -        XML_RET_CHECK_AND_GOTO (ret, out); - -        /* <volumeConfig> */ -        ret = xmlTextWriterStartElement (writer, (xmlChar *)"volumeConfig"); -        XML_RET_CHECK_AND_GOTO (ret, out); +        ret = xmlTextWriterWriteFormatElement( +            writer, (xmlChar *)"effectiveHardLimit", "%" PRIu64, value); +        XML_RET_CHECK_AND_GOTO(ret, out); -        ret = dict_get_uint64 (dict, "voldisplaycount", &volcount); +        snprintf(buf, sizeof(buf), "volume%" PRIu64 "-snap-max-soft-limit", i); +        ret = dict_get_uint64(dict, buf, &value);          if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Could not fetch volcount"); -                goto out; +            gf_log("cli", GF_LOG_ERROR, "Could not fetch %s", buf); +            goto out;          } -        /* Get config of all the volumes */ -        for (i = 0; i < volcount; i++) { -                /* <volume> */ -                ret = xmlTextWriterStartElement (writer, (xmlChar *)"volume"); -                XML_RET_CHECK_AND_GOTO (ret, out); - -                snprintf (buf, sizeof(buf), "volume%"PRIu64"-volname", i); -                ret = dict_get_str (dict, buf, &str_value); -                if (ret) { -                        gf_log ("cli", GF_LOG_ERROR, "Could not fetch %s", buf); -                        goto out; -                } - -                ret = xmlTextWriterWriteFormatElement (writer, -                                (xmlChar *) "name", "%s", str_value); -                XML_RET_CHECK_AND_GOTO (ret, out); - - -                snprintf (buf, sizeof(buf), -                                "volume%"PRIu64"-snap-max-hard-limit", i); -                ret = dict_get_uint64 (dict, buf, &value); -                if (ret) { -                        gf_log ("cli", GF_LOG_ERROR, "Could not fetch %s", buf); -                        goto out; -                } - -                ret = xmlTextWriterWriteFormatElement (writer, -                                (xmlChar *) "hardLimit", "%"PRIu64, value); -                XML_RET_CHECK_AND_GOTO (ret, out); - -                snprintf (buf, sizeof(buf), -                                "volume%"PRIu64"-active-hard-limit", i); -                ret = dict_get_uint64 (dict, buf, &value); -                if (ret) { -                        gf_log ("cli", GF_LOG_ERROR, "Could not fetch" -                                " effective snap_max_hard_limit for " -                                "%s", str_value); -                        goto out; -                } - -                ret = xmlTextWriterWriteFormatElement (writer, -                                (xmlChar *) "effectiveHardLimit", -                                "%"PRIu64, value); -                XML_RET_CHECK_AND_GOTO (ret, out); - -                snprintf (buf, sizeof(buf), -                                "volume%"PRIu64"-snap-max-soft-limit", i); -                ret = dict_get_uint64 (dict, buf, &value); -                if (ret) { -                        gf_log ("cli", GF_LOG_ERROR, "Could not fetch %s", buf); -                        goto out; -                } - -                ret = xmlTextWriterWriteFormatElement (writer, -                                        (xmlChar *) "softLimit", -                                        "%"PRIu64, value); -                XML_RET_CHECK_AND_GOTO (ret, out); - -                /* </volume> */ -                ret = xmlTextWriterEndElement (writer); -                XML_RET_CHECK_AND_GOTO (ret, out); -        } +        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"softLimit", +                                              "%" PRIu64, value); +        XML_RET_CHECK_AND_GOTO(ret, out);          /* </volume> */ -        ret = xmlTextWriterEndElement (writer); -        XML_RET_CHECK_AND_GOTO (ret, out); +        ret = xmlTextWriterEndElement(writer); +        XML_RET_CHECK_AND_GOTO(ret, out); +    } -        ret = 0; +    /* </volume> */ +    ret = xmlTextWriterEndElement(writer); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    ret = 0;  out: -        return ret; +    return ret;  }  /* This function will generate snapshot config set output in xml format. @@ -5473,87 +5267,84 @@ out:   * @return 0 on success and -1 on failure   */  static int -cli_xml_snapshot_config_set (xmlTextWriterPtr writer, xmlDocPtr doc, -                             dict_t *dict) +cli_xml_snapshot_config_set(xmlTextWriterPtr writer, xmlDocPtr doc, +                            dict_t *dict)  { -        int             ret             = -1; -        uint64_t        hard_limit      = 0; -        uint64_t        soft_limit      = 0; -        char           *volname         = NULL; -        char           *auto_delete     = NULL; -        char           *snap_activate   = NULL; - -        GF_ASSERT (writer); -        GF_ASSERT (doc); -        GF_ASSERT (dict); - -        /* This is optional parameter therefore ignore the error */ -        ret = dict_get_uint64 (dict, "snap-max-hard-limit", &hard_limit); -        /* This is optional parameter therefore ignore the error */ -        ret = dict_get_uint64 (dict, "snap-max-soft-limit", &soft_limit); -        ret = dict_get_str (dict, "auto-delete", &auto_delete); -        ret = dict_get_str (dict, "snap-activate-on-create", &snap_activate); - -        if (!hard_limit && !soft_limit && !auto_delete && !snap_activate) { -                ret = -1; -                gf_log ("cli", GF_LOG_ERROR, "At least one option from " -                        "snap-max-hard-limit, snap-max-soft-limit, auto-delete" -                        " and snap-activate-on-create should be set"); -                goto out; -        } - -        /* Ignore the error, as volname is optional */ -        ret = dict_get_str (dict, "volname", &volname); - -        if (NULL == volname) { -                /* <systemConfig> */ -                ret = xmlTextWriterStartElement (writer, -                                                 (xmlChar *)"systemConfig"); -        } else { -                /* <volumeConfig> */ -                ret = xmlTextWriterStartElement (writer, -                                                 (xmlChar *)"volumeConfig"); -                XML_RET_CHECK_AND_GOTO (ret, out); +    int ret = -1; +    uint64_t hard_limit = 0; +    uint64_t soft_limit = 0; +    char *volname = NULL; +    char *auto_delete = NULL; +    char *snap_activate = NULL; + +    GF_ASSERT(writer); +    GF_ASSERT(doc); +    GF_ASSERT(dict); + +    /* This is optional parameter therefore ignore the error */ +    ret = dict_get_uint64(dict, "snap-max-hard-limit", &hard_limit); +    /* This is optional parameter therefore ignore the error */ +    ret = dict_get_uint64(dict, "snap-max-soft-limit", &soft_limit); +    ret = dict_get_str(dict, "auto-delete", &auto_delete); +    ret = dict_get_str(dict, "snap-activate-on-create", &snap_activate); + +    if (!hard_limit && !soft_limit && !auto_delete && !snap_activate) { +        ret = -1; +        gf_log("cli", GF_LOG_ERROR, +               "At least one option from " +               "snap-max-hard-limit, snap-max-soft-limit, auto-delete" +               " and snap-activate-on-create should be set"); +        goto out; +    } + +    /* Ignore the error, as volname is optional */ +    ret = dict_get_str(dict, "volname", &volname); + +    if (NULL == volname) { +        /* <systemConfig> */ +        ret = xmlTextWriterStartElement(writer, (xmlChar *)"systemConfig"); +    } else { +        /* <volumeConfig> */ +        ret = xmlTextWriterStartElement(writer, (xmlChar *)"volumeConfig"); +        XML_RET_CHECK_AND_GOTO(ret, out); -                ret = xmlTextWriterWriteFormatElement (writer, -                                (xmlChar *) "name", "%s", volname); -        } +        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"name", "%s", +                                              volname); +    } -        XML_RET_CHECK_AND_GOTO (ret, out); +    XML_RET_CHECK_AND_GOTO(ret, out); -        if (hard_limit) { -                ret = xmlTextWriterWriteFormatElement (writer, -                                                (xmlChar *) "newHardLimit", -                                                "%"PRIu64, hard_limit); -                XML_RET_CHECK_AND_GOTO (ret, out); -        } +    if (hard_limit) { +        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"newHardLimit", +                                              "%" PRIu64, hard_limit); +        XML_RET_CHECK_AND_GOTO(ret, out); +    } -        if (soft_limit) { -                ret = xmlTextWriterWriteFormatElement (writer, -                                (xmlChar *) "newSoftLimit", -                                "%"PRIu64, soft_limit); -                XML_RET_CHECK_AND_GOTO (ret, out); -        } +    if (soft_limit) { +        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"newSoftLimit", +                                              "%" PRIu64, soft_limit); +        XML_RET_CHECK_AND_GOTO(ret, out); +    } -        if (auto_delete) { -                ret = xmlTextWriterWriteFormatElement (writer, -                                (xmlChar *) "autoDelete", "%s", auto_delete); -                XML_RET_CHECK_AND_GOTO (ret, out); -        } +    if (auto_delete) { +        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"autoDelete", +                                              "%s", auto_delete); +        XML_RET_CHECK_AND_GOTO(ret, out); +    } -        if (snap_activate) { -                ret = xmlTextWriterWriteFormatElement (writer, -                           (xmlChar *) "activateOnCreate", "%s", snap_activate); -                XML_RET_CHECK_AND_GOTO (ret, out); -        } +    if (snap_activate) { +        ret = xmlTextWriterWriteFormatElement( +            writer, (xmlChar *)"activateOnCreate", "%s", snap_activate); +        XML_RET_CHECK_AND_GOTO(ret, out); +    } -        /* </volumeConfig> or </systemConfig> */ -        ret = xmlTextWriterEndElement (writer); -        XML_RET_CHECK_AND_GOTO (ret, out); +    /* </volumeConfig> or </systemConfig> */ +    ret = xmlTextWriterEndElement(writer); +    XML_RET_CHECK_AND_GOTO(ret, out); -        ret = 0; +    ret = 0;  out: -        return ret; +    return ret;  }  /* This function will generate snapshot config output in xml format. @@ -5565,58 +5356,60 @@ out:   * @return 0 on success and -1 on failure   */  static int -cli_xml_snapshot_config (xmlTextWriterPtr writer, xmlDocPtr doc, dict_t *dict) +cli_xml_snapshot_config(xmlTextWriterPtr writer, xmlDocPtr doc, dict_t *dict)  { -        int             ret             = -1; -        int             config_command  = 0; +    int ret = -1; +    int config_command = 0; -        GF_ASSERT (writer); -        GF_ASSERT (doc); -        GF_ASSERT (dict); +    GF_ASSERT(writer); +    GF_ASSERT(doc); +    GF_ASSERT(dict); -        /* <snapConfig> */ -        ret = xmlTextWriterStartElement (writer, (xmlChar *)"snapConfig"); -        XML_RET_CHECK_AND_GOTO (ret, out); +    /* <snapConfig> */ +    ret = xmlTextWriterStartElement(writer, (xmlChar *)"snapConfig"); +    XML_RET_CHECK_AND_GOTO(ret, out); -        ret = dict_get_int32 (dict, "config-command", &config_command); -        if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Could not fetch config type"); -                goto out; -        } +    ret = dict_get_int32(dict, "config-command", &config_command); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, "Could not fetch config type"); +        goto out; +    } -        switch (config_command) { +    switch (config_command) {          case GF_SNAP_CONFIG_TYPE_SET: -                ret = cli_xml_snapshot_config_set (writer, doc, dict); -                if (ret) { -                        gf_log ("cli", GF_LOG_ERROR, "Failed to create xml " -                                "output for snapshot config set command"); -                        goto out; -                } +            ret = cli_xml_snapshot_config_set(writer, doc, dict); +            if (ret) { +                gf_log("cli", GF_LOG_ERROR, +                       "Failed to create xml " +                       "output for snapshot config set command"); +                goto out; +            } -                break; +            break;          case GF_SNAP_CONFIG_DISPLAY: -                ret = cli_xml_snapshot_config_show (writer, doc, dict); -                if (ret) { -                        gf_log ("cli", GF_LOG_ERROR, "Failed to create xml " -                                "output for snapshot config show command"); -                        goto out; -                } -                break; +            ret = cli_xml_snapshot_config_show(writer, doc, dict); +            if (ret) { +                gf_log("cli", GF_LOG_ERROR, +                       "Failed to create xml " +                       "output for snapshot config show command"); +                goto out; +            } +            break;          default: -                gf_log ("cli", GF_LOG_ERROR, "Unknown config command :%d", -                        config_command); -                ret = -1; -                goto out; -        } +            gf_log("cli", GF_LOG_ERROR, "Unknown config command :%d", +                   config_command); +            ret = -1; +            goto out; +    } -        /* </snapConfig> */ -        ret = xmlTextWriterEndElement (writer); -        XML_RET_CHECK_AND_GOTO (ret, out); +    /* </snapConfig> */ +    ret = xmlTextWriterEndElement(writer); +    XML_RET_CHECK_AND_GOTO(ret, out); -        ret = 0; +    ret = 0;  out: -        return ret; +    return ret;  }  /* This function will generate snapshot activate or @@ -5629,67 +5422,66 @@ out:   * @return 0 on success and -1 on failure   */  static int -cli_xml_snapshot_activate_deactivate (xmlTextWriterPtr writer, xmlDocPtr doc, -                                      dict_t *dict, int cmd) +cli_xml_snapshot_activate_deactivate(xmlTextWriterPtr writer, xmlDocPtr doc, +                                     dict_t *dict, int cmd)  { -        int     ret     = -1; -        char   *buffer  = NULL; -        char   *tag     = NULL; - -        GF_ASSERT (writer); -        GF_ASSERT (doc); -        GF_ASSERT (dict); - -        if (GF_SNAP_OPTION_TYPE_ACTIVATE == cmd) { -                tag = "snapActivate"; -        } else if (GF_SNAP_OPTION_TYPE_DEACTIVATE == cmd) { -                tag = "snapDeactivate"; -        } else { -                gf_log ("cli", GF_LOG_ERROR, "invalid command %d", cmd); -                goto out; -        } - -        /* <snapActivate> or <snapDeactivate> */ -        ret = xmlTextWriterStartElement (writer, (xmlChar *)tag); -        XML_RET_CHECK_AND_GOTO (ret, out); - -        /* <snapshot> */ -        ret = xmlTextWriterStartElement (writer, (xmlChar *)"snapshot"); -        XML_RET_CHECK_AND_GOTO (ret, out); - -        ret = dict_get_str (dict, "snapname", &buffer); -        if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Failed to get snap name"); -                goto out; -        } - -        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *) "name", -                                               "%s", buffer); -        XML_RET_CHECK_AND_GOTO (ret, out); - -        ret = dict_get_str (dict, "snapuuid", &buffer); -        if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Failed to get snap uuid"); -                goto out; -        } - -        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *) "uuid", -                                               "%s", buffer); -        XML_RET_CHECK_AND_GOTO (ret, out); - -        /* </snapshot> */ -        ret = xmlTextWriterEndElement (writer); -        XML_RET_CHECK_AND_GOTO (ret, out); - - -        /* </snapActivate> or </snapDeactivate> */ -        ret = xmlTextWriterEndElement (writer); -        XML_RET_CHECK_AND_GOTO (ret, out); - -        ret = 0; +    int ret = -1; +    char *buffer = NULL; +    char *tag = NULL; + +    GF_ASSERT(writer); +    GF_ASSERT(doc); +    GF_ASSERT(dict); + +    if (GF_SNAP_OPTION_TYPE_ACTIVATE == cmd) { +        tag = "snapActivate"; +    } else if (GF_SNAP_OPTION_TYPE_DEACTIVATE == cmd) { +        tag = "snapDeactivate"; +    } else { +        gf_log("cli", GF_LOG_ERROR, "invalid command %d", cmd); +        goto out; +    } + +    /* <snapActivate> or <snapDeactivate> */ +    ret = xmlTextWriterStartElement(writer, (xmlChar *)tag); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    /* <snapshot> */ +    ret = xmlTextWriterStartElement(writer, (xmlChar *)"snapshot"); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    ret = dict_get_str(dict, "snapname", &buffer); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, "Failed to get snap name"); +        goto out; +    } + +    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"name", "%s", +                                          buffer); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    ret = dict_get_str(dict, "snapuuid", &buffer); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, "Failed to get snap uuid"); +        goto out; +    } + +    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"uuid", "%s", +                                          buffer); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    /* </snapshot> */ +    ret = xmlTextWriterEndElement(writer); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    /* </snapActivate> or </snapDeactivate> */ +    ret = xmlTextWriterEndElement(writer); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    ret = 0;  out: -        return ret; +    return ret;  }  #endif /* HAVE_LIB_XML */ @@ -5703,190 +5495,183 @@ out:   * @return 0 on success and -1 on failure   */  int -cli_xml_snapshot_delete (cli_local_t *local, dict_t *dict, gf_cli_rsp *rsp) +cli_xml_snapshot_delete(cli_local_t *local, dict_t *dict, gf_cli_rsp *rsp)  { -        int     ret             = -1; +    int ret = -1;  #ifdef HAVE_LIB_XML -        char   *str_value       = NULL; -        xmlTextWriterPtr writer = local->writer; -        xmlDocPtr doc           = local->doc; - -        GF_ASSERT (writer); -        GF_ASSERT (doc); -        GF_ASSERT (dict); - -        /* <snapshot> */ -        ret = xmlTextWriterStartElement (writer, (xmlChar *)"snapshot"); -        XML_RET_CHECK_AND_GOTO (ret, out); - -        ret = dict_get_str (dict, "snapname", &str_value); -        if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Failed to get snap name"); -                goto xmlend; -        } - -        if (!rsp->op_ret) { -                ret = xmlTextWriterWriteFormatElement (writer, -                                                       (xmlChar *) "status", -                                                       "Success"); -        } else { -                ret = xmlTextWriterWriteFormatElement (writer, -                                                       (xmlChar *) "status", -                                                       "Failure"); -                XML_RET_CHECK_AND_GOTO (ret, xmlend); - -                ret = cli_xml_output_common (writer, rsp->op_ret, -                                             rsp->op_errno, -                                             rsp->op_errstr); -        } -        XML_RET_CHECK_AND_GOTO (ret, xmlend); - -        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *) "name", -                                               "%s", str_value); -        XML_RET_CHECK_AND_GOTO (ret, xmlend); - -        ret = dict_get_str (dict, "snapuuid", &str_value); -        if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Failed to get snap uuid"); -                goto xmlend; -        } - -        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *) "uuid", -                                               "%s", str_value); -        XML_RET_CHECK_AND_GOTO (ret, out); +    char *str_value = NULL; +    xmlTextWriterPtr writer = local->writer; +    xmlDocPtr doc = local->doc; + +    GF_ASSERT(writer); +    GF_ASSERT(doc); +    GF_ASSERT(dict); + +    /* <snapshot> */ +    ret = xmlTextWriterStartElement(writer, (xmlChar *)"snapshot"); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    ret = dict_get_str(dict, "snapname", &str_value); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, "Failed to get snap name"); +        goto xmlend; +    } + +    if (!rsp->op_ret) { +        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"status", +                                              "Success"); +    } else { +        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"status", +                                              "Failure"); +        XML_RET_CHECK_AND_GOTO(ret, xmlend); + +        ret = cli_xml_output_common(writer, rsp->op_ret, rsp->op_errno, +                                    rsp->op_errstr); +    } +    XML_RET_CHECK_AND_GOTO(ret, xmlend); + +    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"name", "%s", +                                          str_value); +    XML_RET_CHECK_AND_GOTO(ret, xmlend); + +    ret = dict_get_str(dict, "snapuuid", &str_value); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, "Failed to get snap uuid"); +        goto xmlend; +    } + +    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"uuid", "%s", +                                          str_value); +    XML_RET_CHECK_AND_GOTO(ret, out);  xmlend: -        /* </snapshot> */ -        ret = xmlTextWriterEndElement (writer); -        XML_RET_CHECK_AND_GOTO (ret, out); +    /* </snapshot> */ +    ret = xmlTextWriterEndElement(writer); +    XML_RET_CHECK_AND_GOTO(ret, out);  #endif /* HAVE_LIB_XML */ -        ret = 0; +    ret = 0;  out: -        return ret; +    return ret;  }  int -cli_xml_output_snap_status_begin (cli_local_t *local, int op_ret, int op_errno, -                                  char *op_errstr) +cli_xml_output_snap_status_begin(cli_local_t *local, int op_ret, int op_errno, +                                 char *op_errstr)  {  #if (HAVE_LIB_XML) -        int                     ret = -1; +    int ret = -1; -        GF_ASSERT (local); +    GF_ASSERT(local); -        ret = cli_begin_xml_output (&(local->writer), &(local->doc)); -        XML_RET_CHECK_AND_GOTO (ret, out); +    ret = cli_begin_xml_output(&(local->writer), &(local->doc)); +    XML_RET_CHECK_AND_GOTO(ret, out); -        ret = cli_xml_output_common (local->writer, op_ret, op_errno, -                                     op_errstr); -        XML_RET_CHECK_AND_GOTO (ret, out); +    ret = cli_xml_output_common(local->writer, op_ret, op_errno, op_errstr); +    XML_RET_CHECK_AND_GOTO(ret, out); -        /* <snapStatus> */ -        ret = xmlTextWriterStartElement (local->writer, -                                         (xmlChar *) "snapStatus"); -        XML_RET_CHECK_AND_GOTO (ret, out); +    /* <snapStatus> */ +    ret = xmlTextWriterStartElement(local->writer, (xmlChar *)"snapStatus"); +    XML_RET_CHECK_AND_GOTO(ret, out); -        /* <snapshots> */ -        ret = xmlTextWriterStartElement (local->writer, (xmlChar *)"snapshots"); -        XML_RET_CHECK_AND_GOTO (ret, out); +    /* <snapshots> */ +    ret = xmlTextWriterStartElement(local->writer, (xmlChar *)"snapshots"); +    XML_RET_CHECK_AND_GOTO(ret, out);  out: -        gf_log ("cli", GF_LOG_TRACE, "Returning %d", ret); -        return ret; +    gf_log("cli", GF_LOG_TRACE, "Returning %d", ret); +    return ret;  #else -        return 0; +    return 0;  #endif  }  int -cli_xml_output_snap_status_end (cli_local_t *local) +cli_xml_output_snap_status_end(cli_local_t *local)  {  #if (HAVE_LIB_XML) -        int     ret = -1; +    int ret = -1; -        GF_ASSERT (local); +    GF_ASSERT(local); -        /* </snapshots> */ -        ret = xmlTextWriterEndElement (local->writer); -        XML_RET_CHECK_AND_GOTO (ret, out); +    /* </snapshots> */ +    ret = xmlTextWriterEndElement(local->writer); +    XML_RET_CHECK_AND_GOTO(ret, out); -        /* </snapStatus> */ -        ret = xmlTextWriterEndElement (local->writer); -        XML_RET_CHECK_AND_GOTO(ret, out); +    /* </snapStatus> */ +    ret = xmlTextWriterEndElement(local->writer); +    XML_RET_CHECK_AND_GOTO(ret, out); -        ret = cli_end_xml_output (local->writer, local->doc); +    ret = cli_end_xml_output(local->writer, local->doc);  out: -        gf_log ("cli", GF_LOG_TRACE, "Returning %d", ret); -        return ret; +    gf_log("cli", GF_LOG_TRACE, "Returning %d", ret); +    return ret;  #else -        return 0; +    return 0;  #endif  }  int -cli_xml_output_snap_delete_begin (cli_local_t *local, int op_ret, int op_errno, -                                  char *op_errstr) +cli_xml_output_snap_delete_begin(cli_local_t *local, int op_ret, int op_errno, +                                 char *op_errstr)  {  #if (HAVE_LIB_XML) -        int ret = -1; -        int delete_cmd = -1; +    int ret = -1; +    int delete_cmd = -1; -        GF_ASSERT (local); +    GF_ASSERT(local); -        ret = cli_begin_xml_output (&(local->writer), &(local->doc)); -        XML_RET_CHECK_AND_GOTO (ret, out); +    ret = cli_begin_xml_output(&(local->writer), &(local->doc)); +    XML_RET_CHECK_AND_GOTO(ret, out); -        ret = dict_get_int32 (local->dict, "sub-cmd", &delete_cmd); -        if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Failed to get sub-cmd"); -                goto out; -        } +    ret = dict_get_int32(local->dict, "sub-cmd", &delete_cmd); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, "Failed to get sub-cmd"); +        goto out; +    } -        ret = cli_xml_output_common (local->writer, op_ret, op_errno, -                                             op_errstr); -        XML_RET_CHECK_AND_GOTO (ret, out); +    ret = cli_xml_output_common(local->writer, op_ret, op_errno, op_errstr); +    XML_RET_CHECK_AND_GOTO(ret, out); -        /* <snapStatus> */ -        ret = xmlTextWriterStartElement (local->writer, -                                         (xmlChar *) "snapDelete"); -        XML_RET_CHECK_AND_GOTO (ret, out); +    /* <snapStatus> */ +    ret = xmlTextWriterStartElement(local->writer, (xmlChar *)"snapDelete"); +    XML_RET_CHECK_AND_GOTO(ret, out); -        /* <snapshots> */ -        ret = xmlTextWriterStartElement (local->writer, (xmlChar *)"snapshots"); -        XML_RET_CHECK_AND_GOTO (ret, out); +    /* <snapshots> */ +    ret = xmlTextWriterStartElement(local->writer, (xmlChar *)"snapshots"); +    XML_RET_CHECK_AND_GOTO(ret, out);  out: -        gf_log ("cli", GF_LOG_TRACE, "Returning %d", ret); -        return ret; +    gf_log("cli", GF_LOG_TRACE, "Returning %d", ret); +    return ret;  #else -        return 0; +    return 0;  #endif  }  int -cli_xml_output_snap_delete_end (cli_local_t *local) +cli_xml_output_snap_delete_end(cli_local_t *local)  {  #if (HAVE_LIB_XML) -        int     ret = -1; +    int ret = -1; -        GF_ASSERT (local); +    GF_ASSERT(local); -        /* </snapshots> */ -        ret = xmlTextWriterEndElement (local->writer); -        XML_RET_CHECK_AND_GOTO (ret, out); +    /* </snapshots> */ +    ret = xmlTextWriterEndElement(local->writer); +    XML_RET_CHECK_AND_GOTO(ret, out); -        /* </snapDelete> */ -        ret = xmlTextWriterEndElement (local->writer); -        XML_RET_CHECK_AND_GOTO(ret, out); +    /* </snapDelete> */ +    ret = xmlTextWriterEndElement(local->writer); +    XML_RET_CHECK_AND_GOTO(ret, out); -        ret = cli_end_xml_output (local->writer, local->doc); +    ret = cli_end_xml_output(local->writer, local->doc);  out: -        gf_log ("cli", GF_LOG_TRACE, "Returning %d", ret); -        return ret; +    gf_log("cli", GF_LOG_TRACE, "Returning %d", ret); +    return ret;  #else -        return 0; +    return 0;  #endif  }  /* This function will generate xml output for all the snapshot commands @@ -5900,493 +5685,484 @@ out:   * @return 0 on success and -1 on failure   */  int -cli_xml_output_snapshot (int cmd_type, dict_t *dict, int op_ret, -                         int op_errno, char *op_errstr) +cli_xml_output_snapshot(int cmd_type, dict_t *dict, int op_ret, int op_errno, +                        char *op_errstr)  {  #if (HAVE_LIB_XML) -        int                     ret     = -1; -        xmlTextWriterPtr        writer  = NULL; -        xmlDocPtr               doc     = NULL; - -        GF_ASSERT (dict); - -        ret = cli_begin_xml_output (&writer, &doc); -        if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Failed to output " -                        "xml begin block"); -                goto out; -        } - -        ret = cli_xml_output_common (writer, op_ret, op_errno, op_errstr); -        if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Failed to output " -                        "xml common block"); -                goto out; -        } - -        /* In case of command failure just printing the error message is good -         * enough */ -        if (0 != op_ret) { -                goto end; -        } - -        switch (cmd_type) { +    int ret = -1; +    xmlTextWriterPtr writer = NULL; +    xmlDocPtr doc = NULL; + +    GF_ASSERT(dict); + +    ret = cli_begin_xml_output(&writer, &doc); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, +               "Failed to output " +               "xml begin block"); +        goto out; +    } + +    ret = cli_xml_output_common(writer, op_ret, op_errno, op_errstr); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, +               "Failed to output " +               "xml common block"); +        goto out; +    } + +    /* In case of command failure just printing the error message is good +     * enough */ +    if (0 != op_ret) { +        goto end; +    } + +    switch (cmd_type) {          case GF_SNAP_OPTION_TYPE_CREATE: -                ret = cli_xml_snapshot_create (writer, doc, dict); -                if (ret) { -                        gf_log ("cli", GF_LOG_ERROR, "Failed to create " -                                "xml output for snapshot create command"); -                        goto out; -                } -                break; +            ret = cli_xml_snapshot_create(writer, doc, dict); +            if (ret) { +                gf_log("cli", GF_LOG_ERROR, +                       "Failed to create " +                       "xml output for snapshot create command"); +                goto out; +            } +            break;          case GF_SNAP_OPTION_TYPE_CLONE: -                ret = cli_xml_snapshot_clone (writer, doc, dict); -                if (ret) { -                        gf_log ("cli", GF_LOG_ERROR, "Failed to create " -                                "xml output for snapshot clone command"); -                        goto out; -                } -                break; +            ret = cli_xml_snapshot_clone(writer, doc, dict); +            if (ret) { +                gf_log("cli", GF_LOG_ERROR, +                       "Failed to create " +                       "xml output for snapshot clone command"); +                goto out; +            } +            break;          case GF_SNAP_OPTION_TYPE_RESTORE: -                ret = cli_xml_snapshot_restore (writer, doc, dict); -                if (ret) { -                        gf_log ("cli", GF_LOG_ERROR, "Failed to create " -                                "xml output for snapshot restore command"); -                        goto out; -                } -                break; +            ret = cli_xml_snapshot_restore(writer, doc, dict); +            if (ret) { +                gf_log("cli", GF_LOG_ERROR, +                       "Failed to create " +                       "xml output for snapshot restore command"); +                goto out; +            } +            break;          case GF_SNAP_OPTION_TYPE_LIST: -                ret = cli_xml_snapshot_list (writer, doc, dict); -                if (ret) { -                        gf_log ("cli", GF_LOG_ERROR, "Failed to create " -                                "xml output for snapshot list command"); -                        goto out; -                } -                break; +            ret = cli_xml_snapshot_list(writer, doc, dict); +            if (ret) { +                gf_log("cli", GF_LOG_ERROR, +                       "Failed to create " +                       "xml output for snapshot list command"); +                goto out; +            } +            break;          case GF_SNAP_OPTION_TYPE_STATUS: -                ret = cli_xml_snapshot_status (writer, doc, dict); -                if (ret) { -                        gf_log ("cli", GF_LOG_ERROR, "Failed to create" -                                "xml output for snapshot status command"); -                        goto out; -                } -                break; +            ret = cli_xml_snapshot_status(writer, doc, dict); +            if (ret) { +                gf_log("cli", GF_LOG_ERROR, +                       "Failed to create" +                       "xml output for snapshot status command"); +                goto out; +            } +            break;          case GF_SNAP_OPTION_TYPE_INFO: -                ret = cli_xml_snapshot_info (writer, doc, dict); -                if (ret) { -                        gf_log ("cli", GF_LOG_ERROR, "Failed to create " -                                "xml output for snapshot info command"); -                        goto out; -                } -                break; +            ret = cli_xml_snapshot_info(writer, doc, dict); +            if (ret) { +                gf_log("cli", GF_LOG_ERROR, +                       "Failed to create " +                       "xml output for snapshot info command"); +                goto out; +            } +            break;          case GF_SNAP_OPTION_TYPE_ACTIVATE:          case GF_SNAP_OPTION_TYPE_DEACTIVATE: -                ret = cli_xml_snapshot_activate_deactivate (writer, doc, -                                                            dict, cmd_type); -                if (ret) { -                        gf_log ("cli", GF_LOG_ERROR, "Failed to create " -                                "xml output for snapshot config command"); -                } -                break; +            ret = cli_xml_snapshot_activate_deactivate(writer, doc, dict, +                                                       cmd_type); +            if (ret) { +                gf_log("cli", GF_LOG_ERROR, +                       "Failed to create " +                       "xml output for snapshot config command"); +            } +            break;          case GF_SNAP_OPTION_TYPE_CONFIG: -                ret = cli_xml_snapshot_config (writer, doc, dict); -                if (ret) { -                        gf_log ("cli", GF_LOG_ERROR, "Failed to create " -                                "xml output for snapshot config command"); -                } -                break; +            ret = cli_xml_snapshot_config(writer, doc, dict); +            if (ret) { +                gf_log("cli", GF_LOG_ERROR, +                       "Failed to create " +                       "xml output for snapshot config command"); +            } +            break;          default: -                gf_log ("cli", GF_LOG_ERROR, -                        "Unexpected snapshot command: %d", cmd_type); -                goto out; -        } +            gf_log("cli", GF_LOG_ERROR, "Unexpected snapshot command: %d", +                   cmd_type); +            goto out; +    }  end: -        ret = cli_end_xml_output (writer, doc); -        if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Failed to output " -                        "xml end block"); -                goto out; -        } - -        ret = 0; +    ret = cli_end_xml_output(writer, doc); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, +               "Failed to output " +               "xml end block"); +        goto out; +    } + +    ret = 0;  out: -        return ret; +    return ret;  #else -        return 0; +    return 0;  #endif /* HAVE_LIB_XML */  }  int -cli_xml_snapshot_begin_composite_op (cli_local_t *local) +cli_xml_snapshot_begin_composite_op(cli_local_t *local)  { -        int ret         = -1; +    int ret = -1;  #ifdef HAVE_LIB_XML -        int cmd         = -1; -        int type        =  -1; - -        ret = dict_get_int32 (local->dict, "sub-cmd", &cmd); -        if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Failed to get " -                        "sub-cmd"); -                ret = 0; -                goto out; -        } - -        if (cmd == GF_SNAP_STATUS_TYPE_ITER || -            cmd == GF_SNAP_DELETE_TYPE_SNAP){ -                ret = 0; -                goto out; -        } - -        ret = dict_get_int32 (local->dict, "type", &type); -        if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Failed to get snapshot " -                        "command type from dictionary"); -                goto out; -        } - -        if (GF_SNAP_OPTION_TYPE_STATUS == type) -                ret = cli_xml_output_snap_status_begin (local, 0, 0, NULL); -        else if (GF_SNAP_OPTION_TYPE_DELETE == type) -                ret = cli_xml_output_snap_delete_begin (local, 0, 0, NULL); +    int cmd = -1; +    int type = -1; + +    ret = dict_get_int32(local->dict, "sub-cmd", &cmd); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, +               "Failed to get " +               "sub-cmd"); +        ret = 0; +        goto out; +    } -        if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Error creating xml output"); -                goto out; -        } +    if (cmd == GF_SNAP_STATUS_TYPE_ITER || cmd == GF_SNAP_DELETE_TYPE_SNAP) { +        ret = 0; +        goto out; +    } + +    ret = dict_get_int32(local->dict, "type", &type); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, +               "Failed to get snapshot " +               "command type from dictionary"); +        goto out; +    } + +    if (GF_SNAP_OPTION_TYPE_STATUS == type) +        ret = cli_xml_output_snap_status_begin(local, 0, 0, NULL); +    else if (GF_SNAP_OPTION_TYPE_DELETE == type) +        ret = cli_xml_output_snap_delete_begin(local, 0, 0, NULL); + +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, "Error creating xml output"); +        goto out; +    }  #endif /* HAVE_LIB_XML */ -        ret = 0; +    ret = 0;  out: -        return ret; +    return ret;  }  int -cli_xml_snapshot_end_composite_op (cli_local_t *local) +cli_xml_snapshot_end_composite_op(cli_local_t *local)  { -        int ret         = -1; +    int ret = -1;  #ifdef HAVE_LIB_XML -        int cmd         = -1; -        int type        = -1; - -        ret = dict_get_int32 (local->dict, "sub-cmd", &cmd); -        if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Failed to get " -                        "sub-cmd"); -                ret = 0; -                goto out; -        } - -        if (cmd == GF_SNAP_STATUS_TYPE_ITER || -            cmd == GF_SNAP_DELETE_TYPE_SNAP){ -                ret = 0; -                goto out; -        } - -        ret = dict_get_int32 (local->dict, "type", &type); -        if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Failed to get snapshot " -                        "command type from dictionary"); -                goto out; -        } - -        if (GF_SNAP_OPTION_TYPE_STATUS == type) -                ret = cli_xml_output_snap_status_end (local); -        else if (GF_SNAP_OPTION_TYPE_DELETE == type) -                ret = cli_xml_output_snap_delete_end (local); +    int cmd = -1; +    int type = -1; + +    ret = dict_get_int32(local->dict, "sub-cmd", &cmd); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, +               "Failed to get " +               "sub-cmd"); +        ret = 0; +        goto out; +    } -        if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Error creating xml " -                                "output"); -                goto out; -        } -#endif /* HAVE_LIB_XML */ +    if (cmd == GF_SNAP_STATUS_TYPE_ITER || cmd == GF_SNAP_DELETE_TYPE_SNAP) {          ret = 0; +        goto out; +    } + +    ret = dict_get_int32(local->dict, "type", &type); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, +               "Failed to get snapshot " +               "command type from dictionary"); +        goto out; +    } + +    if (GF_SNAP_OPTION_TYPE_STATUS == type) +        ret = cli_xml_output_snap_status_end(local); +    else if (GF_SNAP_OPTION_TYPE_DELETE == type) +        ret = cli_xml_output_snap_delete_end(local); + +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, +               "Error creating xml " +               "output"); +        goto out; +    } +#endif /* HAVE_LIB_XML */ +    ret = 0;  out: -        return ret; +    return ret;  }  int -cli_xml_snapshot_status_single_snap (cli_local_t *local, dict_t *dict, -                                     char *key) +cli_xml_snapshot_status_single_snap(cli_local_t *local, dict_t *dict, char *key)  {  #if (HAVE_LIB_XML) -        int ret = -1; +    int ret = -1; -        GF_VALIDATE_OR_GOTO ("cli", (local != NULL), out); -        GF_VALIDATE_OR_GOTO ("cli", (dict != NULL), out); -        GF_VALIDATE_OR_GOTO ("cli", (key != NULL), out); +    GF_VALIDATE_OR_GOTO("cli", (local != NULL), out); +    GF_VALIDATE_OR_GOTO("cli", (dict != NULL), out); +    GF_VALIDATE_OR_GOTO("cli", (key != NULL), out); -        ret = cli_xml_snapshot_status_per_snap (local->writer, local->doc, dict, -                                                key); +    ret = cli_xml_snapshot_status_per_snap(local->writer, local->doc, dict, +                                           key);  out: -        return ret; +    return ret;  #else -        return 0; +    return 0;  #endif /* HAVE_LIB_XML */  }  int -cli_xml_output_vol_getopts (dict_t *dict, int op_ret, int op_errno, -                            char *op_errstr) +cli_xml_output_vol_getopts(dict_t *dict, int op_ret, int op_errno, +                           char *op_errstr)  {  #if (HAVE_LIB_XML) -        int                     i = 0; -        int                     ret = -1; -        int                     count = 0; -        xmlTextWriterPtr        writer = NULL; -        xmlDocPtr               doc = NULL; -        char                    *key = NULL; -        char                    *value = NULL; -        char                    dict_key[50] = {0,}; - -        ret = cli_begin_xml_output (&writer, &doc); -        if (ret) -                goto out; - -        ret = cli_xml_output_common (writer, op_ret, op_errno, op_errstr); -        if (ret) -                goto out; - -        ret = xmlTextWriterStartElement (writer, (xmlChar *)"volGetopts"); -        XML_RET_CHECK_AND_GOTO (ret, out); - -        ret = dict_get_int32 (dict, "count", &count); +    int i = 0; +    int ret = -1; +    int count = 0; +    xmlTextWriterPtr writer = NULL; +    xmlDocPtr doc = NULL; +    char *key = NULL; +    char *value = NULL; +    char dict_key[50] = { +        0, +    }; + +    ret = cli_begin_xml_output(&writer, &doc); +    if (ret) +        goto out; + +    ret = cli_xml_output_common(writer, op_ret, op_errno, op_errstr); +    if (ret) +        goto out; + +    ret = xmlTextWriterStartElement(writer, (xmlChar *)"volGetopts"); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    ret = dict_get_int32(dict, "count", &count); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, +               "Failed to retrieve count " +               "from the dictionary"); +        goto out; +    } +    if (count <= 0) { +        gf_log("cli", GF_LOG_ERROR, +               "Value of count :%d is " +               "invalid", +               count); +        ret = -1; +        goto out; +    } +    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"count", "%d", +                                          count); + +    XML_RET_CHECK_AND_GOTO(ret, out); + +    for (i = 1; i <= count; i++) { +        sprintf(dict_key, "key%d", i); +        ret = dict_get_str(dict, dict_key, &key);          if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "Failed to retrieve count " -                        "from the dictionary"); -                goto out; -        } -        if (count <= 0) { -                gf_log ("cli", GF_LOG_ERROR, "Value of count :%d is " -                        "invalid", count); -                ret = -1; -                goto out; -        } -        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"count", -                                               "%d", count); - -        XML_RET_CHECK_AND_GOTO (ret, out); - -        for (i=1; i<=count; i++) { -                sprintf (dict_key, "key%d", i); -                ret = dict_get_str (dict, dict_key, &key); -                if (ret) { -                        gf_log ("cli", GF_LOG_ERROR, "Failed to" -                                " retrieve %s from the " -                                "dictionary", dict_key); -                        goto out; -                } -                sprintf (dict_key, "value%d", i); -                ret = dict_get_str (dict, dict_key, &value); -                if (ret) { -                        gf_log ("cli", GF_LOG_ERROR, "Failed to " -                                "retrieve key value for %s from" -                                "the dictionary", dict_key); -                        goto out; -                } -                ret = xmlTextWriterStartElement (writer, (xmlChar *)"Opt"); -                XML_RET_CHECK_AND_GOTO (ret, out); +            gf_log("cli", GF_LOG_ERROR, +                   "Failed to" +                   " retrieve %s from the " +                   "dictionary", +                   dict_key); +            goto out; +        } +        sprintf(dict_key, "value%d", i); +        ret = dict_get_str(dict, dict_key, &value); +        if (ret) { +            gf_log("cli", GF_LOG_ERROR, +                   "Failed to " +                   "retrieve key value for %s from" +                   "the dictionary", +                   dict_key); +            goto out; +        } +        ret = xmlTextWriterStartElement(writer, (xmlChar *)"Opt"); +        XML_RET_CHECK_AND_GOTO(ret, out); -                ret = xmlTextWriterWriteFormatElement (writer, -                                                       (xmlChar *)"Option", -                                                       "%s", key); -                XML_RET_CHECK_AND_GOTO (ret, out); +        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"Option", "%s", +                                              key); +        XML_RET_CHECK_AND_GOTO(ret, out); -                ret = xmlTextWriterWriteFormatElement (writer, -                                                       (xmlChar *)"Value", -                                                       "%s", value); -                XML_RET_CHECK_AND_GOTO (ret, out); +        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"Value", "%s", +                                              value); +        XML_RET_CHECK_AND_GOTO(ret, out); -                ret = xmlTextWriterEndElement (writer); -                XML_RET_CHECK_AND_GOTO (ret, out); -        } -        ret = cli_end_xml_output (writer, doc); +        ret = xmlTextWriterEndElement(writer); +        XML_RET_CHECK_AND_GOTO(ret, out); +    } +    ret = cli_end_xml_output(writer, doc);  out: -        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); -        return ret; +    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret); +    return ret;  #else -        return 0; +    return 0;  #endif /* HAVE_LIB_XML */  }  int -cli_quota_list_xml_error (cli_local_t *local, char *path, -                          char *errstr) +cli_quota_list_xml_error(cli_local_t *local, char *path, char *errstr)  {  #if (HAVE_LIB_XML) -        int     ret     =       -1; +    int ret = -1; -        ret = xmlTextWriterStartElement (local->writer, (xmlChar *)"limit"); -        XML_RET_CHECK_AND_GOTO (ret, out); +    ret = xmlTextWriterStartElement(local->writer, (xmlChar *)"limit"); +    XML_RET_CHECK_AND_GOTO(ret, out); -        ret = xmlTextWriterWriteFormatElement (local->writer, -                                              (xmlChar *)"path", -                                               "%s", path); -        XML_RET_CHECK_AND_GOTO (ret, out); +    ret = xmlTextWriterWriteFormatElement(local->writer, (xmlChar *)"path", +                                          "%s", path); +    XML_RET_CHECK_AND_GOTO(ret, out); -        ret = xmlTextWriterWriteFormatElement (local->writer, -                                              (xmlChar *)"errstr", -                                               "%s", errstr); -        XML_RET_CHECK_AND_GOTO (ret, out); +    ret = xmlTextWriterWriteFormatElement(local->writer, (xmlChar *)"errstr", +                                          "%s", errstr); +    XML_RET_CHECK_AND_GOTO(ret, out); -        ret = xmlTextWriterEndElement (local->writer); -        XML_RET_CHECK_AND_GOTO (ret, out); +    ret = xmlTextWriterEndElement(local->writer); +    XML_RET_CHECK_AND_GOTO(ret, out);  out: -        return ret; +    return ret;  #else -        return 0; +    return 0;  #endif  }  int -cli_quota_xml_output (cli_local_t *local, char *path, int64_t hl_str, -                      char *sl_final, int64_t sl_num, int64_t used, -                      int64_t avail, char *sl, char *hl, -                      gf_boolean_t limit_set) +cli_quota_xml_output(cli_local_t *local, char *path, int64_t hl_str, +                     char *sl_final, int64_t sl_num, int64_t used, +                     int64_t avail, char *sl, char *hl, gf_boolean_t limit_set)  {  #if (HAVE_LIB_XML) -        int     ret             = -1; - -        ret = xmlTextWriterStartElement (local->writer, (xmlChar *)"limit"); -        XML_RET_CHECK_AND_GOTO (ret, out); - -        ret = xmlTextWriterWriteFormatElement (local->writer, -                                               (xmlChar *)"path", -                                               "%s", path); -        XML_RET_CHECK_AND_GOTO (ret, out); - -        ret = xmlTextWriterWriteFormatElement (local->writer, -                                               (xmlChar *)"hard_limit", -                                               !limit_set ? "N/A" : -                                               "%"PRId64, hl_str); -        XML_RET_CHECK_AND_GOTO (ret, out); - -        ret = xmlTextWriterWriteFormatElement (local->writer, -                                               (xmlChar *)"soft_limit_percent", -                                               !limit_set ? "N/A" : -                                               "%s", sl_final); -        XML_RET_CHECK_AND_GOTO (ret, out); - -        ret = xmlTextWriterWriteFormatElement (local->writer, -                                               (xmlChar *)"soft_limit_value", -                                               !limit_set ? "N/A" : -                                               "%"PRId64, sl_num); -        XML_RET_CHECK_AND_GOTO (ret, out); - -        ret = xmlTextWriterWriteFormatElement (local->writer, -                                               (xmlChar *)"used_space", -                                               "%"PRId64, used); -        XML_RET_CHECK_AND_GOTO (ret, out); - -        ret = xmlTextWriterWriteFormatElement (local->writer, -                                               (xmlChar *)"avail_space", -                                               !limit_set ? "N/A" : -                                               "%"PRId64, avail); -        XML_RET_CHECK_AND_GOTO (ret, out); - -        ret = xmlTextWriterWriteFormatElement (local->writer, -                                              (xmlChar *)"sl_exceeded", -                                               !limit_set ? "N/A" : -                                               "%s", sl); -        XML_RET_CHECK_AND_GOTO (ret, out); - -        ret = xmlTextWriterWriteFormatElement (local->writer, -                                               (xmlChar *)"hl_exceeded", -                                               !limit_set ? "N/A" : -                                               "%s", hl); -        XML_RET_CHECK_AND_GOTO (ret, out); - - -        ret = xmlTextWriterEndElement (local->writer); -        XML_RET_CHECK_AND_GOTO (ret, out); +    int ret = -1; + +    ret = xmlTextWriterStartElement(local->writer, (xmlChar *)"limit"); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    ret = xmlTextWriterWriteFormatElement(local->writer, (xmlChar *)"path", +                                          "%s", path); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    ret = xmlTextWriterWriteFormatElement( +        local->writer, (xmlChar *)"hard_limit", !limit_set ? "N/A" : "%" PRId64, +        hl_str); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    ret = xmlTextWriterWriteFormatElement(local->writer, +                                          (xmlChar *)"soft_limit_percent", +                                          !limit_set ? "N/A" : "%s", sl_final); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    ret = xmlTextWriterWriteFormatElement( +        local->writer, (xmlChar *)"soft_limit_value", +        !limit_set ? "N/A" : "%" PRId64, sl_num); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    ret = xmlTextWriterWriteFormatElement( +        local->writer, (xmlChar *)"used_space", "%" PRId64, used); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    ret = xmlTextWriterWriteFormatElement( +        local->writer, (xmlChar *)"avail_space", +        !limit_set ? "N/A" : "%" PRId64, avail); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    ret = xmlTextWriterWriteFormatElement( +        local->writer, (xmlChar *)"sl_exceeded", !limit_set ? "N/A" : "%s", sl); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    ret = xmlTextWriterWriteFormatElement( +        local->writer, (xmlChar *)"hl_exceeded", !limit_set ? "N/A" : "%s", hl); +    XML_RET_CHECK_AND_GOTO(ret, out); + +    ret = xmlTextWriterEndElement(local->writer); +    XML_RET_CHECK_AND_GOTO(ret, out);  out: -        return ret; +    return ret;  #else -        return 0; +    return 0;  #endif /* HAVE_LIB_XML */  }  int -cli_quota_object_xml_output (cli_local_t *local, char *path, char *sl_str, -                             int64_t sl_val, quota_limits_t *limits, -                             quota_meta_t *used_space, int64_t avail, -                             char *sl, char *hl, gf_boolean_t limit_set) +cli_quota_object_xml_output(cli_local_t *local, char *path, char *sl_str, +                            int64_t sl_val, quota_limits_t *limits, +                            quota_meta_t *used_space, int64_t avail, char *sl, +                            char *hl, gf_boolean_t limit_set)  {  #if (HAVE_LIB_XML) -        int     ret             = -1; - -        ret = xmlTextWriterStartElement (local->writer, (xmlChar *)"limit"); -        XML_RET_CHECK_AND_GOTO (ret, out); - -        ret = xmlTextWriterWriteFormatElement (local->writer, -                                               (xmlChar *)"path", -                                              "%s", path); -        XML_RET_CHECK_AND_GOTO (ret, out); +    int ret = -1; -        ret = xmlTextWriterWriteFormatElement (local->writer, -                                               (xmlChar *)"hard_limit", -                                               !limit_set ? "N/A" : -                                               "%"PRId64, limits->hl); -        XML_RET_CHECK_AND_GOTO (ret, out); +    ret = xmlTextWriterStartElement(local->writer, (xmlChar *)"limit"); +    XML_RET_CHECK_AND_GOTO(ret, out); -        ret = xmlTextWriterWriteFormatElement (local->writer, -                                               (xmlChar *)"soft_limit_percent", -                                               !limit_set ? "N/A" : -                                               "%s", sl_str); -        XML_RET_CHECK_AND_GOTO (ret, out); +    ret = xmlTextWriterWriteFormatElement(local->writer, (xmlChar *)"path", +                                          "%s", path); +    XML_RET_CHECK_AND_GOTO(ret, out); -        ret = xmlTextWriterWriteFormatElement (local->writer, -                                               (xmlChar *)"soft_limit_value", -                                               !limit_set ? "N/A" : -                                               "%"PRIu64, sl_val); -        XML_RET_CHECK_AND_GOTO (ret, out); +    ret = xmlTextWriterWriteFormatElement( +        local->writer, (xmlChar *)"hard_limit", !limit_set ? "N/A" : "%" PRId64, +        limits->hl); +    XML_RET_CHECK_AND_GOTO(ret, out); -        ret = xmlTextWriterWriteFormatElement (local->writer, -                                               (xmlChar *)"file_count", -                                               "%"PRId64, -                                               used_space->file_count); +    ret = xmlTextWriterWriteFormatElement(local->writer, +                                          (xmlChar *)"soft_limit_percent", +                                          !limit_set ? "N/A" : "%s", sl_str); +    XML_RET_CHECK_AND_GOTO(ret, out); -        XML_RET_CHECK_AND_GOTO (ret, out); +    ret = xmlTextWriterWriteFormatElement( +        local->writer, (xmlChar *)"soft_limit_value", +        !limit_set ? "N/A" : "%" PRIu64, sl_val); +    XML_RET_CHECK_AND_GOTO(ret, out); -        ret = xmlTextWriterWriteFormatElement (local->writer, -                                               (xmlChar *)"dir_count", -                                               "%"PRIu64, -                                               used_space->dir_count); +    ret = xmlTextWriterWriteFormatElement(local->writer, +                                          (xmlChar *)"file_count", "%" PRId64, +                                          used_space->file_count); -        XML_RET_CHECK_AND_GOTO (ret, out); +    XML_RET_CHECK_AND_GOTO(ret, out); +    ret = xmlTextWriterWriteFormatElement(local->writer, (xmlChar *)"dir_count", +                                          "%" PRIu64, used_space->dir_count); -        ret = xmlTextWriterWriteFormatElement (local->writer, -                                               (xmlChar *)"available", -                                               !limit_set ? "N/A" : -                                               "%"PRId64, avail); +    XML_RET_CHECK_AND_GOTO(ret, out); -        XML_RET_CHECK_AND_GOTO (ret, out); +    ret = xmlTextWriterWriteFormatElement(local->writer, (xmlChar *)"available", +                                          !limit_set ? "N/A" : "%" PRId64, +                                          avail); -        ret = xmlTextWriterWriteFormatElement (local->writer, -                                               (xmlChar *)"sl_exceeded", -                                               !limit_set ? "N/A" : -                                               "%s", sl); -        XML_RET_CHECK_AND_GOTO (ret, out); +    XML_RET_CHECK_AND_GOTO(ret, out); -        ret = xmlTextWriterWriteFormatElement (local->writer, -                                               (xmlChar *)"hl_exceeded", -                                               !limit_set ? "N/A" : -                                               "%s", hl); -        XML_RET_CHECK_AND_GOTO (ret, out); +    ret = xmlTextWriterWriteFormatElement( +        local->writer, (xmlChar *)"sl_exceeded", !limit_set ? "N/A" : "%s", sl); +    XML_RET_CHECK_AND_GOTO(ret, out); +    ret = xmlTextWriterWriteFormatElement( +        local->writer, (xmlChar *)"hl_exceeded", !limit_set ? "N/A" : "%s", hl); +    XML_RET_CHECK_AND_GOTO(ret, out); -        ret = xmlTextWriterEndElement (local->writer); -        XML_RET_CHECK_AND_GOTO (ret, out); +    ret = xmlTextWriterEndElement(local->writer); +    XML_RET_CHECK_AND_GOTO(ret, out);  out: -        return ret; +    return ret;  #else -        return 0; +    return 0;  #endif /* HAVE_LIB_XML */  } diff --git a/cli/src/cli.c b/cli/src/cli.c index 025f72c9748..39a0984a134 100644 --- a/cli/src/cli.c +++ b/cli/src/cli.c @@ -64,16 +64,17 @@  extern int connected;  /* using argp for command line parsing */ -const char *argp_program_version = ""                                         \ -        PACKAGE_NAME" "PACKAGE_VERSION                                        \ -        "\nRepository revision: " GLUSTERFS_REPOSITORY_REVISION "\n"          \ -        "Copyright (c) 2006-2016 Red Hat, Inc. "                              \ -        "<https://www.gluster.org/>\n"                                        \ -        "GlusterFS comes with ABSOLUTELY NO WARRANTY.\n"                      \ -        "It is licensed to you under your choice of the GNU Lesser\n"         \ -        "General Public License, version 3 or any later version (LGPLv3\n"    \ -        "or later), or the GNU General Public License, version 2 (GPLv2),\n"  \ -        "in all cases as published by the Free Software Foundation."; +const char *argp_program_version = +    "" PACKAGE_NAME " " PACKAGE_VERSION +    "\nRepository revision: " GLUSTERFS_REPOSITORY_REVISION +    "\n" +    "Copyright (c) 2006-2016 Red Hat, Inc. " +    "<https://www.gluster.org/>\n" +    "GlusterFS comes with ABSOLUTELY NO WARRANTY.\n" +    "It is licensed to you under your choice of the GNU Lesser\n" +    "General Public License, version 3 or any later version (LGPLv3\n" +    "or later), or the GNU General Public License, version 2 (GPLv2),\n" +    "in all cases as published by the Free Software Foundation.";  const char *argp_program_bug_address = "<" PACKAGE_BUGREPORT ">";  struct rpc_clnt *global_quotad_rpc; @@ -81,231 +82,228 @@ struct rpc_clnt *global_rpc;  rpc_clnt_prog_t *cli_rpc_prog; -  extern struct rpc_clnt_program cli_prog;  static int -glusterfs_ctx_defaults_init (glusterfs_ctx_t *ctx) +glusterfs_ctx_defaults_init(glusterfs_ctx_t *ctx)  { -        cmd_args_t    *cmd_args = NULL; -        struct rlimit  lim = {0, }; -        call_pool_t   *pool = NULL; -        int            ret         = -1; - -        ret = xlator_mem_acct_init (THIS, cli_mt_end); -        if (ret != 0) { -                return ret; -        } +    cmd_args_t *cmd_args = NULL; +    struct rlimit lim = { +        0, +    }; +    call_pool_t *pool = NULL; +    int ret = -1; + +    ret = xlator_mem_acct_init(THIS, cli_mt_end); +    if (ret != 0) { +        return ret; +    } -        ctx->process_uuid = generate_glusterfs_ctx_id (); -        if (!ctx->process_uuid) -                return -1; +    ctx->process_uuid = generate_glusterfs_ctx_id(); +    if (!ctx->process_uuid) +        return -1; -        ctx->page_size  = 128 * GF_UNIT_KB; +    ctx->page_size = 128 * GF_UNIT_KB; -        ctx->iobuf_pool = iobuf_pool_new (); -        if (!ctx->iobuf_pool) -                return -1; +    ctx->iobuf_pool = iobuf_pool_new(); +    if (!ctx->iobuf_pool) +        return -1; -        ctx->event_pool = event_pool_new (DEFAULT_EVENT_POOL_SIZE, -                                          STARTING_EVENT_THREADS); -        if (!ctx->event_pool) -                return -1; +    ctx->event_pool = event_pool_new(DEFAULT_EVENT_POOL_SIZE, +                                     STARTING_EVENT_THREADS); +    if (!ctx->event_pool) +        return -1; -        pool = GF_CALLOC (1, sizeof (call_pool_t), -                          cli_mt_call_pool_t); -        if (!pool) -                return -1; +    pool = GF_CALLOC(1, sizeof(call_pool_t), cli_mt_call_pool_t); +    if (!pool) +        return -1; -        /* frame_mem_pool size 112 * 64 */ -        pool->frame_mem_pool = mem_pool_new (call_frame_t, 32); -        if (!pool->frame_mem_pool) -                return -1; +    /* frame_mem_pool size 112 * 64 */ +    pool->frame_mem_pool = mem_pool_new(call_frame_t, 32); +    if (!pool->frame_mem_pool) +        return -1; -        /* stack_mem_pool size 256 * 128 */ -        pool->stack_mem_pool = mem_pool_new (call_stack_t, 16); +    /* stack_mem_pool size 256 * 128 */ +    pool->stack_mem_pool = mem_pool_new(call_stack_t, 16); -        if (!pool->stack_mem_pool) -                return -1; +    if (!pool->stack_mem_pool) +        return -1; -        ctx->stub_mem_pool = mem_pool_new (call_stub_t, 16); -        if (!ctx->stub_mem_pool) -                return -1; +    ctx->stub_mem_pool = mem_pool_new(call_stub_t, 16); +    if (!ctx->stub_mem_pool) +        return -1; -        ctx->dict_pool = mem_pool_new (dict_t, 32); -        if (!ctx->dict_pool) -                return -1; +    ctx->dict_pool = mem_pool_new(dict_t, 32); +    if (!ctx->dict_pool) +        return -1; -        ctx->dict_pair_pool = mem_pool_new (data_pair_t, 512); -        if (!ctx->dict_pair_pool) -                return -1; +    ctx->dict_pair_pool = mem_pool_new(data_pair_t, 512); +    if (!ctx->dict_pair_pool) +        return -1; -        ctx->dict_data_pool = mem_pool_new (data_t, 512); -        if (!ctx->dict_data_pool) -                return -1; +    ctx->dict_data_pool = mem_pool_new(data_t, 512); +    if (!ctx->dict_data_pool) +        return -1; -        ctx->logbuf_pool = mem_pool_new (log_buf_t, 256); -        if (!ctx->logbuf_pool) -                return -1; +    ctx->logbuf_pool = mem_pool_new(log_buf_t, 256); +    if (!ctx->logbuf_pool) +        return -1; -        INIT_LIST_HEAD (&pool->all_frames); -        LOCK_INIT (&pool->lock); -        ctx->pool = pool; +    INIT_LIST_HEAD(&pool->all_frames); +    LOCK_INIT(&pool->lock); +    ctx->pool = pool; -        cmd_args = &ctx->cmd_args; +    cmd_args = &ctx->cmd_args; -        INIT_LIST_HEAD (&cmd_args->xlator_options); +    INIT_LIST_HEAD(&cmd_args->xlator_options); -        lim.rlim_cur = RLIM_INFINITY; -        lim.rlim_max = RLIM_INFINITY; -        setrlimit (RLIMIT_CORE, &lim); +    lim.rlim_cur = RLIM_INFINITY; +    lim.rlim_max = RLIM_INFINITY; +    setrlimit(RLIMIT_CORE, &lim); -        return 0; +    return 0;  } -  static int -logging_init (glusterfs_ctx_t *ctx, struct cli_state *state) +logging_init(glusterfs_ctx_t *ctx, struct cli_state *state)  { -        char *log_file = state->log_file ? state->log_file : -                         DEFAULT_CLI_LOG_FILE_DIRECTORY "/cli.log"; - -        /* passing ident as NULL means to use default ident for syslog */ -        if (gf_log_init (ctx, log_file, NULL) == -1) { -                fprintf (stderr, "ERROR: failed to open logfile %s\n", -                         log_file); -                return -1; -        } +    char *log_file = state->log_file ? state->log_file +                                     : DEFAULT_CLI_LOG_FILE_DIRECTORY +                         "/cli.log"; -        /* CLI should not have something to DEBUG after the release, -           hence defaulting to INFO loglevel */ -        gf_log_set_loglevel (ctx, (state->log_level == GF_LOG_NONE) ? -                             GF_LOG_INFO : state->log_level); +    /* passing ident as NULL means to use default ident for syslog */ +    if (gf_log_init(ctx, log_file, NULL) == -1) { +        fprintf(stderr, "ERROR: failed to open logfile %s\n", log_file); +        return -1; +    } -        return 0; +    /* CLI should not have something to DEBUG after the release, +       hence defaulting to INFO loglevel */ +    gf_log_set_loglevel(ctx, (state->log_level == GF_LOG_NONE) +                                 ? GF_LOG_INFO +                                 : state->log_level); + +    return 0;  }  int -cli_submit_request (struct rpc_clnt *rpc, void *req, call_frame_t *frame, -                    rpc_clnt_prog_t *prog, -                    int procnum, struct iobref *iobref, -                    xlator_t *this, fop_cbk_fn_t cbkfn, xdrproc_t xdrproc) +cli_submit_request(struct rpc_clnt *rpc, void *req, call_frame_t *frame, +                   rpc_clnt_prog_t *prog, int procnum, struct iobref *iobref, +                   xlator_t *this, fop_cbk_fn_t cbkfn, xdrproc_t xdrproc)  { -        int                     ret         = -1; -        int                     count      = 0; -        struct iovec            iov         = {0, }; -        struct iobuf            *iobuf = NULL; -        char                    new_iobref = 0; -        ssize_t                 xdr_size   = 0; - -        GF_ASSERT (this); - -        if (req) { -                xdr_size = xdr_sizeof (xdrproc, req); -                iobuf = iobuf_get2 (this->ctx->iobuf_pool, xdr_size); -                if (!iobuf) { -                        goto out; -                }; - -                if (!iobref) { -                        iobref = iobref_new (); -                        if (!iobref) { -                                goto out; -                        } - -                        new_iobref = 1; -                } - -                iobref_add (iobref, iobuf); - -                iov.iov_base = iobuf->ptr; -                iov.iov_len  = iobuf_size (iobuf); - - -                /* Create the xdr payload */ -                ret = xdr_serialize_generic (iov, req, xdrproc); -                if (ret == -1) { -                        goto out; -                } -                iov.iov_len = ret; -                count = 1; +    int ret = -1; +    int count = 0; +    struct iovec iov = { +        0, +    }; +    struct iobuf *iobuf = NULL; +    char new_iobref = 0; +    ssize_t xdr_size = 0; + +    GF_ASSERT(this); + +    if (req) { +        xdr_size = xdr_sizeof(xdrproc, req); +        iobuf = iobuf_get2(this->ctx->iobuf_pool, xdr_size); +        if (!iobuf) { +            goto out; +        }; + +        if (!iobref) { +            iobref = iobref_new(); +            if (!iobref) { +                goto out; +            } + +            new_iobref = 1; +        } + +        iobref_add(iobref, iobuf); + +        iov.iov_base = iobuf->ptr; +        iov.iov_len = iobuf_size(iobuf); + +        /* Create the xdr payload */ +        ret = xdr_serialize_generic(iov, req, xdrproc); +        if (ret == -1) { +            goto out;          } +        iov.iov_len = ret; +        count = 1; +    } -        if (!rpc) -                rpc = global_rpc; -        /* Send the msg */ -        ret = rpc_clnt_submit (rpc, prog, procnum, cbkfn, -                               &iov, count, -                               NULL, 0, iobref, frame, NULL, 0, NULL, 0, NULL); -        ret = 0; +    if (!rpc) +        rpc = global_rpc; +    /* Send the msg */ +    ret = rpc_clnt_submit(rpc, prog, procnum, cbkfn, &iov, count, NULL, 0, +                          iobref, frame, NULL, 0, NULL, 0, NULL); +    ret = 0;  out: -        if (new_iobref) -                iobref_unref (iobref); -        if (iobuf) -                iobuf_unref (iobuf); -        return ret; +    if (new_iobref) +        iobref_unref(iobref); +    if (iobuf) +        iobuf_unref(iobuf); +    return ret;  }  int -cli_rpc_notify (struct rpc_clnt *rpc, void *mydata, rpc_clnt_event_t event, -                void *data) +cli_rpc_notify(struct rpc_clnt *rpc, void *mydata, rpc_clnt_event_t event, +               void *data)  { -        xlator_t                *this = NULL; -        int                     ret = 0; - -        this = mydata; +    xlator_t *this = NULL; +    int ret = 0; -        switch (event) { -        case RPC_CLNT_CONNECT: -        { +    this = mydata; -                cli_cmd_broadcast_connected (); -                gf_log (this->name, GF_LOG_TRACE, "got RPC_CLNT_CONNECT"); -               break; +    switch (event) { +        case RPC_CLNT_CONNECT: { +            cli_cmd_broadcast_connected(); +            gf_log(this->name, GF_LOG_TRACE, "got RPC_CLNT_CONNECT"); +            break;          } -        case RPC_CLNT_DISCONNECT: -        { -                gf_log (this->name, GF_LOG_TRACE, "got RPC_CLNT_DISCONNECT"); -                connected = 0; -                if (!global_state->prompt && global_state->await_connected) { -                        ret = 1; -                        cli_out ("Connection failed. Please check if gluster " -                                  "daemon is operational."); -                        exit (ret); -                } -                break; +        case RPC_CLNT_DISCONNECT: { +            gf_log(this->name, GF_LOG_TRACE, "got RPC_CLNT_DISCONNECT"); +            connected = 0; +            if (!global_state->prompt && global_state->await_connected) { +                ret = 1; +                cli_out( +                    "Connection failed. Please check if gluster " +                    "daemon is operational."); +                exit(ret); +            } +            break;          }          default: -                gf_log (this->name, GF_LOG_TRACE, -                        "got some other RPC event %d", event); -                ret = 0; -                break; -        } +            gf_log(this->name, GF_LOG_TRACE, "got some other RPC event %d", +                   event); +            ret = 0; +            break; +    } -        return ret; +    return ret;  }  static gf_boolean_t -is_valid_int (char *str) +is_valid_int(char *str)  { -        if (*str == '-') -                ++str; +    if (*str == '-') +        ++str; -        /* Handle empty string or just "-".*/ -        if (!*str) -                return _gf_false; +    /* Handle empty string or just "-".*/ +    if (!*str) +        return _gf_false; -        /* Check for non-digit chars in the rest of the string */ -        while (*str) { -                if (!isdigit(*str)) -                        return _gf_false; +    /* Check for non-digit chars in the rest of the string */ +    while (*str) { +        if (!isdigit(*str)) +            return _gf_false;          else -                ++str; -        } -        return _gf_true; +            ++str; +    } +    return _gf_true;  }  /* @@ -315,527 +313,528 @@ is_valid_int (char *str)   *     -2: parsing issue (avoid unknown option error)   */  int -cli_opt_parse (char *opt, struct cli_state *state) +cli_opt_parse(char *opt, struct cli_state *state)  { -        char            *oarg           = NULL; -        gf_boolean_t    secure_mgmt_tmp = 0; +    char *oarg = NULL; +    gf_boolean_t secure_mgmt_tmp = 0; -        if (strcmp (opt, "") == 0) -                return 1; +    if (strcmp(opt, "") == 0) +        return 1; -        if (strcmp (opt, "version") == 0) { -                cli_out ("%s", argp_program_version); -                exit (0); -        } +    if (strcmp(opt, "version") == 0) { +        cli_out("%s", argp_program_version); +        exit(0); +    } -        if (strcmp (opt, "print-logdir") == 0) { -                cli_out ("%s", DEFAULT_LOG_FILE_DIRECTORY); -                exit (0); -        } +    if (strcmp(opt, "print-logdir") == 0) { +        cli_out("%s", DEFAULT_LOG_FILE_DIRECTORY); +        exit(0); +    } -        if (strcmp (opt, "print-statedumpdir") == 0) { -                cli_out ("%s", DEFAULT_VAR_RUN_DIRECTORY); -                exit (0); -        } +    if (strcmp(opt, "print-statedumpdir") == 0) { +        cli_out("%s", DEFAULT_VAR_RUN_DIRECTORY); +        exit(0); +    } -        if (strcmp (opt, "xml") == 0) { +    if (strcmp(opt, "xml") == 0) {  #if (HAVE_LIB_XML) -                state->mode |= GLUSTER_MODE_XML; +        state->mode |= GLUSTER_MODE_XML;  #else -                cli_err ("XML output not supported. Ignoring '--xml' option"); +        cli_err("XML output not supported. Ignoring '--xml' option");  #endif -                return 0; -        } - -        if (strcmp (opt, "wignore-partition") == 0) { -                state->mode |= GLUSTER_MODE_WIGNORE_PARTITION; -                return 0; -        } - -        if (strcmp (opt, "wignore") == 0) { -                state->mode |= GLUSTER_MODE_WIGNORE; -                return 0; -        } +        return 0; +    } -        oarg = strtail (opt, "mode="); -        if (oarg) { -                if (strcmp (oarg, "script") == 0) { -                        state->mode |= GLUSTER_MODE_SCRIPT; -                        return 0; -                } +    if (strcmp(opt, "wignore-partition") == 0) { +        state->mode |= GLUSTER_MODE_WIGNORE_PARTITION; +        return 0; +    } -                if (strcmp (oarg, "interactive") == 0) -                        return 0; +    if (strcmp(opt, "wignore") == 0) { +        state->mode |= GLUSTER_MODE_WIGNORE; +        return 0; +    } -                return -1; +    oarg = strtail(opt, "mode="); +    if (oarg) { +        if (strcmp(oarg, "script") == 0) { +            state->mode |= GLUSTER_MODE_SCRIPT; +            return 0;          } -        oarg = strtail (opt, "remote-host="); -        if (oarg) { -                state->remote_host = oarg; -                return 0; -        } +        if (strcmp(oarg, "interactive") == 0) +            return 0; -        oarg = strtail (opt, "log-file="); -        if (oarg) { -                state->log_file = oarg; -                return 0; -        } -        oarg = strtail (opt, "timeout="); -        if (oarg) { -                if (!is_valid_int (oarg) || atoi(oarg) <= 0) { -                        cli_err ("timeout value should be a positive integer"); -                        return -2; /* -2 instead of -1 to avoid unknown option -                                      error */ -                } -                cli_default_conn_timeout = atoi(oarg); -                return 0; -        } +        return -1; +    } -        oarg = strtail (opt, "log-level="); -        if (oarg) { -                int log_level = glusterd_check_log_level(oarg); -                if (log_level == -1) -                        return -1; -                state->log_level = (gf_loglevel_t) log_level; -                return 0; -        } +    oarg = strtail(opt, "remote-host="); +    if (oarg) { +        state->remote_host = oarg; +        return 0; +    } -        oarg = strtail (opt, "glusterd-sock="); -        if (oarg) { -                state->glusterd_sock = oarg; -                return 0; -        } +    oarg = strtail(opt, "log-file="); +    if (oarg) { +        state->log_file = oarg; +        return 0; +    } +    oarg = strtail(opt, "timeout="); +    if (oarg) { +        if (!is_valid_int(oarg) || atoi(oarg) <= 0) { +            cli_err("timeout value should be a positive integer"); +            return -2; /* -2 instead of -1 to avoid unknown option +                          error */ +        } +        cli_default_conn_timeout = atoi(oarg); +        return 0; +    } + +    oarg = strtail(opt, "log-level="); +    if (oarg) { +        int log_level = glusterd_check_log_level(oarg); +        if (log_level == -1) +            return -1; +        state->log_level = (gf_loglevel_t)log_level; +        return 0; +    } + +    oarg = strtail(opt, "glusterd-sock="); +    if (oarg) { +        state->glusterd_sock = oarg; +        return 0; +    } -        oarg = strtail (opt, "secure-mgmt="); -        if (oarg) { -                if (gf_string2boolean(oarg,&secure_mgmt_tmp) == 0) { -                        if (secure_mgmt_tmp) { -                                /* See declaration for why this is an int. */ -                                state->ctx->secure_mgmt = 1; -                        } -                } -                else { -                        cli_err ("invalid secure-mgmt value (ignored)"); -                } -                return 0; +    oarg = strtail(opt, "secure-mgmt="); +    if (oarg) { +        if (gf_string2boolean(oarg, &secure_mgmt_tmp) == 0) { +            if (secure_mgmt_tmp) { +                /* See declaration for why this is an int. */ +                state->ctx->secure_mgmt = 1; +            } +        } else { +            cli_err("invalid secure-mgmt value (ignored)");          } +        return 0; +    } -        return -1; +    return -1;  }  int -parse_cmdline (int argc, char *argv[], struct cli_state *state) +parse_cmdline(int argc, char *argv[], struct cli_state *state)  { -        int                 ret            = 0; -        int                 i              = 0; -        int                 j              = 0; -        char               *opt            = NULL; -        gf_boolean_t       geo_rep_config  = _gf_false; - -        state->argc=argc-1; -        state->argv=&argv[1]; - -        /* Do this first so that an option can override. */ -        if (sys_access (SECURE_ACCESS_FILE, F_OK) == 0) { -                state->ctx->secure_mgmt = 1; -                state->ctx->ssl_cert_depth = glusterfs_read_secure_access_file (); -        } - -        if (state->argc > GEO_REP_CMD_CONFIG_INDEX && -            strtail (state->argv[GEO_REP_CMD_INDEX], "geo") && -            strtail (state->argv[GEO_REP_CMD_CONFIG_INDEX], "co")) -                geo_rep_config = _gf_true; - -        for (i = 0; i < state->argc; i++) { -                opt = strtail (state->argv[i], "--"); -                if (opt && !geo_rep_config) { -                        ret = cli_opt_parse (opt, state); -                        if (ret == -1) { -                                cli_out ("unrecognized option --%s", opt); -                                return ret; -                        } else if (ret == -2) { -                                return ret; -                        } -                        for (j = i; j < state->argc - 1; j++) -                                state->argv[j] = state->argv[j + 1]; -                        state->argc--; -                        /* argv shifted, next check should be at i again */ -                        i--; -                        if (ret == 1) { -                                /* end of cli options */ -                                ret = 0; -                                break; -                        } -                } +    int ret = 0; +    int i = 0; +    int j = 0; +    char *opt = NULL; +    gf_boolean_t geo_rep_config = _gf_false; + +    state->argc = argc - 1; +    state->argv = &argv[1]; + +    /* Do this first so that an option can override. */ +    if (sys_access(SECURE_ACCESS_FILE, F_OK) == 0) { +        state->ctx->secure_mgmt = 1; +        state->ctx->ssl_cert_depth = glusterfs_read_secure_access_file(); +    } + +    if (state->argc > GEO_REP_CMD_CONFIG_INDEX && +        strtail(state->argv[GEO_REP_CMD_INDEX], "geo") && +        strtail(state->argv[GEO_REP_CMD_CONFIG_INDEX], "co")) +        geo_rep_config = _gf_true; + +    for (i = 0; i < state->argc; i++) { +        opt = strtail(state->argv[i], "--"); +        if (opt && !geo_rep_config) { +            ret = cli_opt_parse(opt, state); +            if (ret == -1) { +                cli_out("unrecognized option --%s", opt); +                return ret; +            } else if (ret == -2) { +                return ret; +            } +            for (j = i; j < state->argc - 1; j++) +                state->argv[j] = state->argv[j + 1]; +            state->argc--; +            /* argv shifted, next check should be at i again */ +            i--; +            if (ret == 1) { +                /* end of cli options */ +                ret = 0; +                break; +            }          } +    } -        state->argv[state->argc] = NULL; +    state->argv[state->argc] = NULL; -        return ret; +    return ret;  } -  int -cli_cmd_tree_init (struct cli_cmd_tree *tree) +cli_cmd_tree_init(struct cli_cmd_tree *tree)  { -        struct cli_cmd_word  *root = NULL; -        int                   ret = 0; +    struct cli_cmd_word *root = NULL; +    int ret = 0; -        root = &tree->root; -        root->tree = tree; +    root = &tree->root; +    root->tree = tree; -        return ret; +    return ret;  } -  int -cli_state_init (struct cli_state *state) +cli_state_init(struct cli_state *state)  { -        struct cli_cmd_tree  *tree = NULL; -        int                   ret = 0; - +    struct cli_cmd_tree *tree = NULL; +    int ret = 0; -        state->log_level = GF_LOG_NONE; +    state->log_level = GF_LOG_NONE; -        tree = &state->tree; -        tree->state = state; +    tree = &state->tree; +    tree->state = state; -        ret = cli_cmd_tree_init (tree); +    ret = cli_cmd_tree_init(tree); -        return ret; +    return ret;  }  int -cli_usage_out (const char *usage) +cli_usage_out(const char *usage)  { -        GF_ASSERT (usage); +    GF_ASSERT(usage); -        if (!usage || usage[0] == '\0') -                return -1; +    if (!usage || usage[0] == '\0') +        return -1; -        cli_err ("\nUsage:\n%s\n", usage); -        return 0; +    cli_err("\nUsage:\n%s\n", usage); +    return 0;  }  int -_cli_err (const char *fmt, ...) +_cli_err(const char *fmt, ...)  { -        va_list           ap; -        int               ret = 0; +    va_list ap; +    int ret = 0;  #ifdef HAVE_READLINE -        struct cli_state *state = global_state; +    struct cli_state *state = global_state;  #endif -        va_start (ap, fmt); +    va_start(ap, fmt);  #ifdef HAVE_READLINE -        if (state->rl_enabled && !state->rl_processing) { -                ret = cli_rl_err (state, fmt, ap); -                va_end (ap); -                return ret; -        } +    if (state->rl_enabled && !state->rl_processing) { +        ret = cli_rl_err(state, fmt, ap); +        va_end(ap); +        return ret; +    }  #endif -        ret = vfprintf (stderr, fmt, ap); -        fprintf (stderr, "\n"); -        va_end (ap); +    ret = vfprintf(stderr, fmt, ap); +    fprintf(stderr, "\n"); +    va_end(ap); -        return ret; +    return ret;  } -  int -_cli_out (const char *fmt, ...) +_cli_out(const char *fmt, ...)  { -        va_list           ap; -        int               ret = 0; +    va_list ap; +    int ret = 0;  #ifdef HAVE_READLINE -        struct cli_state *state = global_state; +    struct cli_state *state = global_state;  #endif -        va_start (ap, fmt); +    va_start(ap, fmt);  #ifdef HAVE_READLINE -        if (state->rl_enabled && !state->rl_processing) { -                ret = cli_rl_out (state, fmt, ap); -                va_end (ap); -                return ret; -        } +    if (state->rl_enabled && !state->rl_processing) { +        ret = cli_rl_out(state, fmt, ap); +        va_end(ap); +        return ret; +    }  #endif -        ret = vprintf (fmt, ap); -        printf ("\n"); -        va_end (ap); +    ret = vprintf(fmt, ap); +    printf("\n"); +    va_end(ap); -        return ret; +    return ret;  }  struct rpc_clnt * -cli_quotad_clnt_rpc_init (void) +cli_quotad_clnt_rpc_init(void)  { -        struct rpc_clnt *rpc = NULL; -        dict_t          *rpc_opts = NULL; -        int             ret = -1; - -        rpc_opts = dict_new (); -        if (!rpc_opts) { -                        ret = -1; -                        goto out; -                } - -        ret = dict_set_str (rpc_opts, "transport.address-family", "unix"); -        if (ret) -                goto out; - -        ret = dict_set_str (rpc_opts, "transport-type", "socket"); -        if (ret) -                goto out; - -        ret = dict_set_str (rpc_opts, "transport.socket.connect-path", -                                            "/var/run/gluster/quotad.socket"); -        if (ret) -                goto out; - -        rpc = cli_quotad_clnt_init (THIS, rpc_opts); -        if (!rpc) -                goto out; - -        global_quotad_rpc = rpc; +    struct rpc_clnt *rpc = NULL; +    dict_t *rpc_opts = NULL; +    int ret = -1; + +    rpc_opts = dict_new(); +    if (!rpc_opts) { +        ret = -1; +        goto out; +    } + +    ret = dict_set_str(rpc_opts, "transport.address-family", "unix"); +    if (ret) +        goto out; + +    ret = dict_set_str(rpc_opts, "transport-type", "socket"); +    if (ret) +        goto out; + +    ret = dict_set_str(rpc_opts, "transport.socket.connect-path", +                       "/var/run/gluster/quotad.socket"); +    if (ret) +        goto out; + +    rpc = cli_quotad_clnt_init(THIS, rpc_opts); +    if (!rpc) +        goto out; + +    global_quotad_rpc = rpc;  out: -        if (ret) { -                if (rpc_opts) -                        dict_unref(rpc_opts); -        } -        return rpc; +    if (ret) { +        if (rpc_opts) +            dict_unref(rpc_opts); +    } +    return rpc;  }  struct rpc_clnt * -cli_rpc_init (struct cli_state *state) +cli_rpc_init(struct cli_state *state)  { -        struct rpc_clnt         *rpc = NULL; -        dict_t                  *options = NULL; -        int                     ret = -1; -        int                     port = CLI_GLUSTERD_PORT; -        xlator_t                *this = NULL; +    struct rpc_clnt *rpc = NULL; +    dict_t *options = NULL; +    int ret = -1; +    int port = CLI_GLUSTERD_PORT; +    xlator_t *this = NULL;  #ifdef IPV6_DEFAULT -        char                    *addr_family = "inet6"; +    char *addr_family = "inet6";  #else -        char                    *addr_family = "inet"; +    char *addr_family = "inet";  #endif -        this = THIS; -        cli_rpc_prog = &cli_prog; -        options = dict_new (); -        if (!options) -                goto out; - -        /* Connect to glusterd using the specified method, giving preference -         * to a unix socket connection.  If nothing is specified, connect to -         * the default glusterd socket. -         */ -        if (state->glusterd_sock) { -                gf_log ("cli", GF_LOG_INFO, "Connecting to glusterd using " -                        "sockfile %s", state->glusterd_sock); -                ret = rpc_transport_unix_options_build (&options, -                                                        state->glusterd_sock, -                                                        0); -                if (ret) -                        goto out; -        } -        else if (state->remote_host) { -                gf_log ("cli", GF_LOG_INFO, "Connecting to remote glusterd at " -                        "%s", state->remote_host); -                ret = dict_set_str (options, "remote-host", state->remote_host); -                if (ret) -                        goto out; +    this = THIS; +    cli_rpc_prog = &cli_prog; +    options = dict_new(); +    if (!options) +        goto out; + +    /* Connect to glusterd using the specified method, giving preference +     * to a unix socket connection.  If nothing is specified, connect to +     * the default glusterd socket. +     */ +    if (state->glusterd_sock) { +        gf_log("cli", GF_LOG_INFO, +               "Connecting to glusterd using " +               "sockfile %s", +               state->glusterd_sock); +        ret = rpc_transport_unix_options_build(&options, state->glusterd_sock, +                                               0); +        if (ret) +            goto out; +    } else if (state->remote_host) { +        gf_log("cli", GF_LOG_INFO, +               "Connecting to remote glusterd at " +               "%s", +               state->remote_host); +        ret = dict_set_str(options, "remote-host", state->remote_host); +        if (ret) +            goto out; -                if (state->remote_port) -                        port = state->remote_port; +        if (state->remote_port) +            port = state->remote_port; -                ret = dict_set_int32 (options, "remote-port", port); -                if (ret) -                        goto out; +        ret = dict_set_int32(options, "remote-port", port); +        if (ret) +            goto out; -                ret = dict_set_str (options, "transport.address-family", -                                        addr_family); +        ret = dict_set_str(options, "transport.address-family", addr_family); -                if (ret) -                        goto out; -        } -        else { -                gf_log ("cli", GF_LOG_DEBUG, "Connecting to glusterd using " -                        "default socket"); -                ret = rpc_transport_unix_options_build -                        (&options, DEFAULT_GLUSTERD_SOCKFILE, 0); -                if (ret) -                        goto out; -        } +        if (ret) +            goto out; +    } else { +        gf_log("cli", GF_LOG_DEBUG, +               "Connecting to glusterd using " +               "default socket"); +        ret = rpc_transport_unix_options_build(&options, +                                               DEFAULT_GLUSTERD_SOCKFILE, 0); +        if (ret) +            goto out; +    } -        rpc = rpc_clnt_new (options, this, this->name, 16); -        if (!rpc) -                goto out; +    rpc = rpc_clnt_new(options, this, this->name, 16); +    if (!rpc) +        goto out; -        ret = rpc_clnt_register_notify (rpc, cli_rpc_notify, this); -        if (ret) { -                gf_log ("cli", GF_LOG_ERROR, "failed to register notify"); -                goto out; -        } +    ret = rpc_clnt_register_notify(rpc, cli_rpc_notify, this); +    if (ret) { +        gf_log("cli", GF_LOG_ERROR, "failed to register notify"); +        goto out; +    } -        ret = rpc_clnt_start (rpc); +    ret = rpc_clnt_start(rpc);  out: -        if (ret) { -                if (rpc) -                        rpc_clnt_unref (rpc); -                rpc = NULL; -        } -        return rpc; +    if (ret) { +        if (rpc) +            rpc_clnt_unref(rpc); +        rpc = NULL; +    } +    return rpc;  }  cli_local_t * -cli_local_get () +cli_local_get()  { -        cli_local_t     *local = NULL; +    cli_local_t *local = NULL; -        local = GF_CALLOC (1, sizeof (*local), cli_mt_cli_local_t); -        LOCK_INIT (&local->lock); -        INIT_LIST_HEAD (&local->dict_list); +    local = GF_CALLOC(1, sizeof(*local), cli_mt_cli_local_t); +    LOCK_INIT(&local->lock); +    INIT_LIST_HEAD(&local->dict_list); -        return local; +    return local;  }  void -cli_local_wipe (cli_local_t *local) +cli_local_wipe(cli_local_t *local)  { -        if (local) { -                GF_FREE (local->get_vol.volname); -                if (local->dict) -                        dict_unref (local->dict); -                GF_FREE (local); -        } - -        return; +    if (local) { +        GF_FREE(local->get_vol.volname); +        if (local->dict) +            dict_unref(local->dict); +        GF_FREE(local); +    } + +    return;  }  struct cli_state *global_state;  int -main (int argc, char *argv[]) +main(int argc, char *argv[])  { -        struct cli_state   state = {0, }; -        int                ret = -1; -        glusterfs_ctx_t   *ctx = NULL; +    struct cli_state state = { +        0, +    }; +    int ret = -1; +    glusterfs_ctx_t *ctx = NULL; -       mem_pools_init_early (); -       mem_pools_init_late (); +    mem_pools_init_early(); +    mem_pools_init_late(); -        ctx = glusterfs_ctx_new (); -        if (!ctx) -                return ENOMEM; +    ctx = glusterfs_ctx_new(); +    if (!ctx) +        return ENOMEM;  #ifdef DEBUG -        gf_mem_acct_enable_set (ctx); +    gf_mem_acct_enable_set(ctx);  #endif -        ret = glusterfs_globals_init (ctx); -        if (ret) -                return ret; +    ret = glusterfs_globals_init(ctx); +    if (ret) +        return ret; -	THIS->ctx = ctx; +    THIS->ctx = ctx; -        ret = glusterfs_ctx_defaults_init (ctx); -        if (ret) -                goto out; +    ret = glusterfs_ctx_defaults_init(ctx); +    if (ret) +        goto out; -        cli_default_conn_timeout = 120; -        cli_ten_minutes_timeout = 600; +    cli_default_conn_timeout = 120; +    cli_ten_minutes_timeout = 600; -        ret = cli_state_init (&state); -        if (ret) -                goto out; +    ret = cli_state_init(&state); +    if (ret) +        goto out; -        state.ctx = ctx; -        global_state = &state; +    state.ctx = ctx; +    global_state = &state; -        ret = parse_cmdline (argc, argv, &state); -        if (ret) -                goto out; +    ret = parse_cmdline(argc, argv, &state); +    if (ret) +        goto out; -        ret = logging_init (ctx, &state); -        if (ret) -                goto out; +    ret = logging_init(ctx, &state); +    if (ret) +        goto out; -        gf_log ("cli", GF_LOG_INFO, "Started running %s with version %s", -                argv[0], PACKAGE_VERSION); +    gf_log("cli", GF_LOG_INFO, "Started running %s with version %s", argv[0], +           PACKAGE_VERSION); -        global_rpc = cli_rpc_init (&state); -        if (!global_rpc) -                goto out; +    global_rpc = cli_rpc_init(&state); +    if (!global_rpc) +        goto out; -        global_quotad_rpc = cli_quotad_clnt_rpc_init (); -        if (!global_quotad_rpc) -                goto out; +    global_quotad_rpc = cli_quotad_clnt_rpc_init(); +    if (!global_quotad_rpc) +        goto out; -        ret = cli_cmds_register (&state); -        if (ret) -                goto out; +    ret = cli_cmds_register(&state); +    if (ret) +        goto out; -        ret = cli_cmd_cond_init (); -        if (ret) -                goto out; +    ret = cli_cmd_cond_init(); +    if (ret) +        goto out; -        ret = cli_input_init (&state); -        if (ret) -                goto out; +    ret = cli_input_init(&state); +    if (ret) +        goto out; -        ret = event_dispatch (ctx->event_pool); +    ret = event_dispatch(ctx->event_pool);  out: -//        glusterfs_ctx_destroy (ctx); +    //        glusterfs_ctx_destroy (ctx); -        mem_pools_fini (); +    mem_pools_fini(); -        return ret; +    return ret;  }  void -cli_print_line (int len) +cli_print_line(int len)  { -        GF_ASSERT (len > 0); +    GF_ASSERT(len > 0); -        while (len--) -                printf ("-"); +    while (len--) +        printf("-"); -        printf ("\n"); +    printf("\n");  }  void -print_quota_list_header (int type) +print_quota_list_header(int type)  { -        if (type == GF_QUOTA_OPTION_TYPE_LIST) { -                cli_out ("                  Path                   Hard-limit " -                         " Soft-limit      Used  Available  Soft-limit " -                         "exceeded? Hard-limit exceeded?"); -                cli_out ("-----------------------------------------------------" -                         "-----------------------------------------------------" -                         "---------------------"); -        } else { -                cli_out ("                  Path                   Hard-limit  " -                         " Soft-limit      Files       Dirs     Available  " -                         "Soft-limit exceeded? Hard-limit exceeded?"); -                cli_out ("-----------------------------------------------------" -                         "-----------------------------------------------------" -                         "-------------------------------------"); -        } +    if (type == GF_QUOTA_OPTION_TYPE_LIST) { +        cli_out( +            "                  Path                   Hard-limit " +            " Soft-limit      Used  Available  Soft-limit " +            "exceeded? Hard-limit exceeded?"); +        cli_out( +            "-----------------------------------------------------" +            "-----------------------------------------------------" +            "---------------------"); +    } else { +        cli_out( +            "                  Path                   Hard-limit  " +            " Soft-limit      Files       Dirs     Available  " +            "Soft-limit exceeded? Hard-limit exceeded?"); +        cli_out( +            "-----------------------------------------------------" +            "-----------------------------------------------------" +            "-------------------------------------"); +    }  }  void -print_quota_list_empty (char *path, int type) +print_quota_list_empty(char *path, int type)  { -        if (type == GF_QUOTA_OPTION_TYPE_LIST) -                cli_out ("%-40s %7s %9s %10s %7s %15s %20s", path, -                         "N/A", "N/A", "N/A", "N/A", "N/A", "N/A"); -        else -                cli_out ("%-40s %9s %9s %12s %10s %10s %15s %20s", path, -                         "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A"); +    if (type == GF_QUOTA_OPTION_TYPE_LIST) +        cli_out("%-40s %7s %9s %10s %7s %15s %20s", path, "N/A", "N/A", "N/A", +                "N/A", "N/A", "N/A"); +    else +        cli_out("%-40s %9s %9s %12s %10s %10s %15s %20s", path, "N/A", "N/A", +                "N/A", "N/A", "N/A", "N/A", "N/A");  } - diff --git a/cli/src/input.c b/cli/src/input.c index 10fc39cd6b4..0583f648f95 100644 --- a/cli/src/input.c +++ b/cli/src/input.c @@ -19,74 +19,72 @@  #define CMDBUFSIZ 1024  void * -cli_batch (void *d) +cli_batch(void *d)  { -        struct cli_state *state = NULL; -        int               ret = 0; +    struct cli_state *state = NULL; +    int ret = 0; -        state = d; +    state = d; -        ret = cli_cmd_process (state, state->argc, state->argv); +    ret = cli_cmd_process(state, state->argc, state->argv); -        gf_log ("", GF_LOG_INFO, "Exiting with: %d", ret); -        exit (-ret); +    gf_log("", GF_LOG_INFO, "Exiting with: %d", ret); +    exit(-ret); -        return NULL; +    return NULL;  } -  void * -cli_input (void *d) +cli_input(void *d)  { -        struct cli_state *state = NULL; -        int               ret = 0; -        char              cmdbuf[CMDBUFSIZ]; -        char             *cmd = NULL; -        size_t            len = 0; - -        state = d; - -        for (;;) { -                printf ("%s", state->prompt); - -                cmd = fgets (cmdbuf, CMDBUFSIZ, stdin); -                if (!cmd) -                        break; -                len = strlen(cmd); -                if (len > 0 && cmd[len - 1] == '\n') //strip trailing \n -                        cmd[len - 1] = '\0'; -                ret = cli_cmd_process_line (state, cmd); -                if (ret != 0 && state->mode & GLUSTER_MODE_ERR_FATAL) -                        break; -        } - -        exit (-ret); - -        return NULL; +    struct cli_state *state = NULL; +    int ret = 0; +    char cmdbuf[CMDBUFSIZ]; +    char *cmd = NULL; +    size_t len = 0; + +    state = d; + +    for (;;) { +        printf("%s", state->prompt); + +        cmd = fgets(cmdbuf, CMDBUFSIZ, stdin); +        if (!cmd) +            break; +        len = strlen(cmd); +        if (len > 0 && cmd[len - 1] == '\n')  // strip trailing \n +            cmd[len - 1] = '\0'; +        ret = cli_cmd_process_line(state, cmd); +        if (ret != 0 && state->mode & GLUSTER_MODE_ERR_FATAL) +            break; +    } + +    exit(-ret); + +    return NULL;  } -  int -cli_input_init (struct cli_state *state) +cli_input_init(struct cli_state *state)  { -        int  ret = 0; +    int ret = 0; -        if (state->argc) { -                ret = pthread_create (&state->input, NULL, cli_batch, state); -                return ret; -        } +    if (state->argc) { +        ret = pthread_create(&state->input, NULL, cli_batch, state); +        return ret; +    } -        if (isatty (STDIN_FILENO)) { -                state->prompt = "gluster> "; +    if (isatty(STDIN_FILENO)) { +        state->prompt = "gluster> "; -                cli_rl_enable (state); -        } else { -                state->prompt = ""; -                state->mode |= GLUSTER_MODE_SCRIPT | GLUSTER_MODE_ERR_FATAL; -        } +        cli_rl_enable(state); +    } else { +        state->prompt = ""; +        state->mode |= GLUSTER_MODE_SCRIPT | GLUSTER_MODE_ERR_FATAL; +    } -        if (!state->rl_enabled) -                ret = pthread_create (&state->input, NULL, cli_input, state); +    if (!state->rl_enabled) +        ret = pthread_create(&state->input, NULL, cli_input, state); -        return ret; +    return ret;  } diff --git a/cli/src/registry.c b/cli/src/registry.c index 1adf7d6e572..85f7686ade1 100644 --- a/cli/src/registry.c +++ b/cli/src/registry.c @@ -15,20 +15,18 @@  #include "cli.h"  #include "cli-cmd.h" -  static int -__is_spc (int ch) +__is_spc(int ch)  { -        if (ch == ' ') -                return 1; -        return 0; +    if (ch == ' ') +        return 1; +    return 0;  } -  static int -__is_div (int ch) +__is_div(int ch)  { -        switch (ch) { +    switch (ch) {          case '(':          case ')':          case '<': @@ -38,369 +36,356 @@ __is_div (int ch)          case '{':          case '}':          case '|': -                return 1; -        } +            return 1; +    } -        return 0; +    return 0;  } -  static int -__is_word (const char *word) +__is_word(const char *word)  { -        return (!__is_div (*word) && !__is_spc (*word)); +    return (!__is_div(*word) && !__is_spc(*word));  } -  int -counter_char (int ch) +counter_char(int ch)  { -        switch (ch) { +    switch (ch) {          case '(': -                return ')'; +            return ')';          case '<': -                return '>'; +            return '>';          case '[': -                return ']'; +            return ']';          case '{': -                return '}'; -        } +            return '}'; +    } -        return -1; +    return -1;  } -  const char * -__is_template_balanced (const char *template) +__is_template_balanced(const char *template)  { -        const char *trav = NULL; -        int   ch = 0; - -        trav = template; - -        while (*trav) { -                ch = *trav; - -                switch (ch) { -                case '<': -                case '(': -                case '[': -                        trav = __is_template_balanced (trav+1); -                        if (!trav) -                                return NULL; -                        if (*trav != counter_char (ch)) -                                return NULL; -                        break; -                case '>': -                case ')': -                case ']': -                        return trav; -                } +    const char *trav = NULL; +    int ch = 0; -                trav++; +    trav = template; + +    while (*trav) { +        ch = *trav; + +        switch (ch) { +            case '<': +            case '(': +            case '[': +                trav = __is_template_balanced(trav + 1); +                if (!trav) +                    return NULL; +                if (*trav != counter_char(ch)) +                    return NULL; +                break; +            case '>': +            case ')': +            case ']': +                return trav;          } -        return trav; -} +        trav++; +    } +    return trav; +}  int -is_template_balanced (const char *template) +is_template_balanced(const char *template)  { -        const char *trav = NULL; +    const char *trav = NULL; -        trav = __is_template_balanced (template); -        if (!trav || *trav) -                return -1; +    trav = __is_template_balanced(template); +    if (!trav || *trav) +        return -1; -        return 0; +    return 0;  } -  int -cli_cmd_token_count (const char *template) +cli_cmd_token_count(const char *template)  { -        int         count = 0; -        const char *trav = NULL; -        int         is_alnum = 0; - -        for (trav = template; *trav; trav++) { -                switch (*trav) { -                case '<': -                case '>': -                case '(': -                case ')': -                case '[': -                case ']': -                case '{': -                case '}': -                case '|': -                        count++; -                        /* fall through */ -                case ' ': -                        is_alnum = 0; -                        break; -                default: -                        if (!is_alnum) { -                                is_alnum = 1; -                                count++; -                        } +    int count = 0; +    const char *trav = NULL; +    int is_alnum = 0; + +    for (trav = template; *trav; trav++) { +        switch (*trav) { +            case '<': +            case '>': +            case '(': +            case ')': +            case '[': +            case ']': +            case '{': +            case '}': +            case '|': +                count++; +                /* fall through */ +            case ' ': +                is_alnum = 0; +                break; +            default: +                if (!is_alnum) { +                    is_alnum = 1; +                    count++;                  }          } +    } -        return count + 1; +    return count + 1;  } -  void -cli_cmd_tokens_destroy (char **tokens) +cli_cmd_tokens_destroy(char **tokens)  { -        char **tokenp = NULL; +    char **tokenp = NULL; -        if (!tokens) -                return; +    if (!tokens) +        return; -        tokenp = tokens; -        while (*tokenp) { -                free (*tokenp); -                tokenp++; -        } +    tokenp = tokens; +    while (*tokenp) { +        free(*tokenp); +        tokenp++; +    } -        free (tokens); +    free(tokens);  } -  int -cli_cmd_tokens_fill (char **tokens, const char *template) +cli_cmd_tokens_fill(char **tokens, const char *template)  { -        const char  *trav = NULL; -        char       **tokenp = NULL; -        char        *token = NULL; -        int          ret = 0; -        int          ch = 0; +    const char *trav = NULL; +    char **tokenp = NULL; +    char *token = NULL; +    int ret = 0; +    int ch = 0; -        tokenp = tokens; +    tokenp = tokens; -        for (trav = template; *trav; trav++) { -                ch = *trav; +    for (trav = template; *trav; trav++) { +        ch = *trav; -                if (__is_spc (ch)) -                        continue; +        if (__is_spc(ch)) +            continue; -                if (__is_div (ch)) { -                        token = calloc (2, 1); -                        if (!token) -                                return -1; -                        token[0] = ch; +        if (__is_div(ch)) { +            token = calloc(2, 1); +            if (!token) +                return -1; +            token[0] = ch; -                        *tokenp = token; -                        tokenp++; +            *tokenp = token; +            tokenp++; -                        continue; -                } +            continue; +        } -                token = strdup (trav); -                *tokenp = token; -                tokenp++; +        token = strdup(trav); +        *tokenp = token; +        tokenp++; -                for (token++; *token; token++) { -                        if (__is_spc (*token) || __is_div (*token)) { -                                *token = 0; -                                break; -                        } -                        trav++; -                } +        for (token++; *token; token++) { +            if (__is_spc(*token) || __is_div(*token)) { +                *token = 0; +                break; +            } +            trav++;          } +    } -        return ret; +    return ret;  } -  char ** -cli_cmd_tokenize (const char *template) +cli_cmd_tokenize(const char *template)  { -        char **tokens = NULL; -        int    ret = 0; -        int    count = 0; +    char **tokens = NULL; +    int ret = 0; +    int count = 0; -        ret = is_template_balanced (template); -        if (ret) -                return NULL; +    ret = is_template_balanced(template); +    if (ret) +        return NULL; -        count = cli_cmd_token_count (template); -        if (count <= 0) -                return NULL; +    count = cli_cmd_token_count(template); +    if (count <= 0) +        return NULL; -        tokens = calloc (count + 1, sizeof (char *)); -        if (!tokens) -                return NULL; +    tokens = calloc(count + 1, sizeof(char *)); +    if (!tokens) +        return NULL; -        ret = cli_cmd_tokens_fill (tokens, template); -        if (ret) -                goto err; +    ret = cli_cmd_tokens_fill(tokens, template); +    if (ret) +        goto err; -        return tokens; +    return tokens;  err: -        cli_cmd_tokens_destroy (tokens); -        return NULL; +    cli_cmd_tokens_destroy(tokens); +    return NULL;  }  void * -cli_getunamb (const char *tok, void **choices, cli_selector_t sel) +cli_getunamb(const char *tok, void **choices, cli_selector_t sel)  { -        void  **wcon = NULL; -        char      *w = NULL; -        unsigned  mn = 0; -        void    *ret = NULL; - -        if (!choices || !tok || !*tok) -                return NULL; - -        for (wcon = choices; *wcon; wcon++) { -                w = strtail ((char *)sel (*wcon), tok); -                if (!w) -                        /* no match */ -                        continue; -                if (!*w) -                        /* exact match */ -                        return *wcon; - -                ret = *wcon; -                mn++; -        } +    void **wcon = NULL; +    char *w = NULL; +    unsigned mn = 0; +    void *ret = NULL; -#ifdef FORCE_MATCH_EXACT +    if (!choices || !tok || !*tok)          return NULL; + +    for (wcon = choices; *wcon; wcon++) { +        w = strtail((char *)sel(*wcon), tok); +        if (!w) +            /* no match */ +            continue; +        if (!*w) +            /* exact match */ +            return *wcon; + +        ret = *wcon; +        mn++; +    } + +#ifdef FORCE_MATCH_EXACT +    return NULL;  #else -        return (mn == 1) ? ret : NULL; +    return (mn == 1) ? ret : NULL;  #endif  }  static const char * -sel_cmd_word (void *wcon) +sel_cmd_word(void *wcon)  { -        return ((struct cli_cmd_word *)wcon)->word; +    return ((struct cli_cmd_word *)wcon)->word;  }  struct cli_cmd_word * -cli_cmd_nextword (struct cli_cmd_word *word, const char *token) +cli_cmd_nextword(struct cli_cmd_word *word, const char *token)  { -        return (struct cli_cmd_word *)cli_getunamb (token, -                                                    (void **)word->nextwords, -                                                    sel_cmd_word); +    return (struct cli_cmd_word *)cli_getunamb(token, (void **)word->nextwords, +                                               sel_cmd_word);  } -  struct cli_cmd_word * -cli_cmd_newword (struct cli_cmd_word *word, const char *token) +cli_cmd_newword(struct cli_cmd_word *word, const char *token)  { -        struct cli_cmd_word **nextwords = NULL; -        struct cli_cmd_word  *nextword = NULL; +    struct cli_cmd_word **nextwords = NULL; +    struct cli_cmd_word *nextword = NULL; -        nextwords = realloc (word->nextwords, -                             (word->nextwords_cnt + 2) * sizeof (*nextwords)); -        if (!nextwords) -                return NULL; +    nextwords = realloc(word->nextwords, +                        (word->nextwords_cnt + 2) * sizeof(*nextwords)); +    if (!nextwords) +        return NULL; -        word->nextwords = nextwords; +    word->nextwords = nextwords; -        nextword = calloc (1, sizeof (*nextword)); -        if (!nextword) -                return NULL; +    nextword = calloc(1, sizeof(*nextword)); +    if (!nextword) +        return NULL; -        nextword->word = strdup (token); -        if (!nextword->word) { -                free (nextword); -                return NULL; -        } +    nextword->word = strdup(token); +    if (!nextword->word) { +        free(nextword); +        return NULL; +    } -        nextword->tree = word->tree; -        nextwords[word->nextwords_cnt++] = nextword; -        nextwords[word->nextwords_cnt] = NULL; +    nextword->tree = word->tree; +    nextwords[word->nextwords_cnt++] = nextword; +    nextwords[word->nextwords_cnt] = NULL; -        return nextword; +    return nextword;  } -  int -cli_cmd_ingest (struct cli_cmd_tree *tree, char **tokens, cli_cmd_cbk_t *cbkfn, -                const char *desc, const char *pattern) +cli_cmd_ingest(struct cli_cmd_tree *tree, char **tokens, cli_cmd_cbk_t *cbkfn, +               const char *desc, const char *pattern)  { -        int                    ret = 0; -        char                 **tokenp = NULL; -        char                  *token = NULL; -        struct cli_cmd_word   *word = NULL; -        struct cli_cmd_word   *next = NULL; - -        word = &tree->root; +    int ret = 0; +    char **tokenp = NULL; +    char *token = NULL; +    struct cli_cmd_word *word = NULL; +    struct cli_cmd_word *next = NULL; -        for (tokenp = tokens; (token = *tokenp); tokenp++) { -                if (!__is_word (token)) -                        break; +    word = &tree->root; -                next = cli_cmd_nextword (word, token); -                if (!next) -                        next = cli_cmd_newword (word, token); +    for (tokenp = tokens; (token = *tokenp); tokenp++) { +        if (!__is_word(token)) +            break; -                word = next; -                if (!word) -                        break; -        } +        next = cli_cmd_nextword(word, token); +        if (!next) +            next = cli_cmd_newword(word, token); +        word = next;          if (!word) -                return -1; +            break; +    } -        if (word->cbkfn) { -                /* warning - command already registered */ -        } +    if (!word) +        return -1; -        word->cbkfn = cbkfn; -        word->desc  = desc; -        word->pattern = pattern; +    if (word->cbkfn) { +        /* warning - command already registered */ +    } -        /* end of static strings in command template */ +    word->cbkfn = cbkfn; +    word->desc = desc; +    word->pattern = pattern; -        /* TODO: autocompletion beyond this point is just "nice to have" */ +    /* end of static strings in command template */ -        return ret; -} +    /* TODO: autocompletion beyond this point is just "nice to have" */ +    return ret; +}  int -cli_cmd_register (struct cli_cmd_tree *tree, struct cli_cmd *cmd) +cli_cmd_register(struct cli_cmd_tree *tree, struct cli_cmd *cmd)  { -        char **tokens = NULL; -        int    ret = 0; +    char **tokens = NULL; +    int ret = 0; -        GF_ASSERT (cmd); +    GF_ASSERT(cmd); -        if (cmd->reg_cbk) -                cmd->reg_cbk (cmd); +    if (cmd->reg_cbk) +        cmd->reg_cbk(cmd); -        if (cmd->disable) { -                ret = 0; -                goto out; -        } +    if (cmd->disable) { +        ret = 0; +        goto out; +    } -        tokens = cli_cmd_tokenize (cmd->pattern); -        if (!tokens) { -                ret = -1; -                goto out; -        } +    tokens = cli_cmd_tokenize(cmd->pattern); +    if (!tokens) { +        ret = -1; +        goto out; +    } -        ret = cli_cmd_ingest (tree, tokens, cmd->cbk, cmd->desc, cmd->pattern); -        if (ret) { -                ret = -1; -                goto out; -        } +    ret = cli_cmd_ingest(tree, tokens, cmd->cbk, cmd->desc, cmd->pattern); +    if (ret) { +        ret = -1; +        goto out; +    } -        ret = 0; +    ret = 0;  out: -        if (tokens) -                cli_cmd_tokens_destroy (tokens); +    if (tokens) +        cli_cmd_tokens_destroy(tokens); -        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); -        return ret; +    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret); +    return ret;  } -  | 
