diff options
| author | Kaushal M <kaushal@gluster.com> | 2011-09-05 14:33:43 +0530 | 
|---|---|---|
| committer | Vijay Bellur <vijay@gluster.com> | 2011-09-27 06:45:10 -0700 | 
| commit | 45172a5415abc6b2f17eea74d51805ac85cc0072 (patch) | |
| tree | e2576cf6cda22bd0f3109bc358c51fb419f3a390 /cli/src/cli-cmd-volume.c | |
| parent | 16b7e3bf201686ca03f8c35c20295e05abe52df8 (diff) | |
cli : new volume statedump command
Changes:
        1. Add a new 'volume statedump' command, that performs statedumps of
        all the bricks in the volume and saves them in a specified location.
        2. Add new server option 'server.statedump-path'.
        3. Remove multiple function definitions in glusterd.h
Statedump Information:
The 'volume statedump' command performs statedumps on all the bricks in
a given volume. The syntax of the command is,
        gluster volume statedump <VOLNAME> [type]......
Types include,
        * all
        * mem
        * iobuf
        * callpool
        * priv
        * fd
        * inode
Defaults to 'all' when no type is specified.
The statedump files are created by default in /tmp directory of the
server on which the bricks are present.
This path can be changed by setting the 'server.statedump-path' option.
The statedump files will be named as,
        <brick-name>.<pid of brick process>.dump
Change-Id: I01c0e1a8aad490da818e086d89f292bd2ed06fd4
BUG: 1964
Reviewed-on: http://review.gluster.com/321
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Amar Tumballi <amar@gluster.com>
Diffstat (limited to 'cli/src/cli-cmd-volume.c')
| -rw-r--r-- | cli/src/cli-cmd-volume.c | 70 | 
1 files changed, 70 insertions, 0 deletions
diff --git a/cli/src/cli-cmd-volume.c b/cli/src/cli-cmd-volume.c index 00077253237..9b85bf819c1 100644 --- a/cli/src/cli-cmd-volume.c +++ b/cli/src/cli-cmd-volume.c @@ -1510,6 +1510,72 @@ out:          return ret;  } +int +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; + +        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) { +               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); +               } +        } else { +                options = dict_new (); +                if (!options) { +                        ret = -1; +                        gf_log ("cli", GF_LOG_ERROR, "Could not create dict"); +                        goto out; +                } +                ret = dict_set_str (options, "options",""); +                if (ret) +                        goto out; +                ret = dict_set_int32 (options, "option-cnt", 0); +                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]; +        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"); +        } + +        return ret; +} + +  struct cli_cmd volume_cmds[] = {          { "volume info [all|<VOLNAME>]",            cli_cmd_volume_info_cbk, @@ -1616,6 +1682,10 @@ struct cli_cmd volume_cmds[] = {            cli_cmd_volume_heal_cbk,            "Start healing of volume specified by <VOLNAME>"}, +        {"volume statedump <VOLNAME> [all|mem|iobuf|callpool|priv|fd|inode]...", +         cli_cmd_volume_statedump_cbk, +         "perform statedump on bricks"}, +          { NULL, NULL, NULL }  };  | 
