diff options
Diffstat (limited to 'cli')
-rw-r--r-- | cli/src/Makefile.am | 2 | ||||
-rw-r--r-- | cli/src/cli-cmd-global.c | 131 | ||||
-rw-r--r-- | cli/src/cli-cmd-misc.c | 3 | ||||
-rw-r--r-- | cli/src/cli-cmd-parser.c | 12 | ||||
-rw-r--r-- | cli/src/cli-cmd-volume.c | 52 | ||||
-rw-r--r-- | cli/src/cli-cmd.c | 6 | ||||
-rw-r--r-- | cli/src/cli-cmd.h | 2 |
7 files changed, 147 insertions, 61 deletions
diff --git a/cli/src/Makefile.am b/cli/src/Makefile.am index db1d089b8f9..92cf35a581c 100644 --- a/cli/src/Makefile.am +++ b/cli/src/Makefile.am @@ -1,6 +1,6 @@ sbin_PROGRAMS = gluster -gluster_SOURCES = cli.c registry.c input.c cli-cmd.c cli-rl.c \ +gluster_SOURCES = cli.c registry.c input.c cli-cmd.c cli-rl.c cli-cmd-global.c \ cli-cmd-volume.c cli-cmd-peer.c cli-rpc-ops.c cli-cmd-parser.c\ cli-cmd-system.c cli-cmd-misc.c cli-xml-output.c cli-quotad-client.c cli-cmd-snapshot.c diff --git a/cli/src/cli-cmd-global.c b/cli/src/cli-cmd-global.c new file mode 100644 index 00000000000..9b71821b00c --- /dev/null +++ b/cli/src/cli-cmd-global.c @@ -0,0 +1,131 @@ +/* + Copyright (c) 2015 Red Hat, Inc. <http://www.redhat.com> + This file is part of GlusterFS. + + This file is licensed to you under your choice of the GNU Lesser + General Public License, version 3 or any later version (LGPLv3 or + later), or the GNU General Public License, version 2 (GPLv2), in all + cases as published by the Free Software Foundation. +*/ +#include <stdio.h> +#include <string.h> +#include <stdlib.h> +#include <stdint.h> +#include <pthread.h> + +#include <sys/socket.h> +#include <netdb.h> +#include <sys/types.h> +#include <sys/wait.h> +#include <netinet/in.h> + +#ifndef _CONFIG_H +#define _CONFIG_H +#include "config.h" +#endif + +#include "cli.h" +#include "cli-cmd.h" +#include "cli-mem-types.h" +#include "cli1-xdr.h" +#include "run.h" +#include "syscall.h" +#include "common-utils.h" + +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); +int cli_cmd_ganesha_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", + }, + { "nfs-ganesha {enable| disable} ", + cli_cmd_ganesha_cbk, + "Enable/disable NFS-Ganesha support", + }, + {NULL, NULL, NULL} +}; + +int +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; + + for (cmd = global_cmds; cmd->pattern; cmd++) + if (_gf_false == cmd->disable) + cli_out ("%s - %s", cmd->pattern, cmd->desc); + + return 0; +} + +int +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; + } +out: + return ret; + +} + +int cli_cmd_ganesha_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; + + proc = &cli_rpc_prog->proctable[GLUSTER_CLI_GANESHA]; + + frame = create_frame (THIS, THIS->ctx->pool); + if (!frame) + goto out; + + ret = cli_cmd_ganesha_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; + } + + CLI_LOCAL_INIT (local, words, frame, 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 ("Setting global option failed"); + } + + CLI_STACK_DESTROY (frame); + return ret; +} + diff --git a/cli/src/cli-cmd-misc.c b/cli/src/cli-cmd-misc.c index 566d7c978d9..ccfeb6d87f1 100644 --- a/cli/src/cli-cmd-misc.c +++ b/cli/src/cli-cmd-misc.c @@ -33,6 +33,7 @@ extern struct cli_cmd cli_log_cmds[]; extern struct cli_cmd cli_system_cmds[]; extern struct cli_cmd cli_bd_cmds[]; extern struct cli_cmd snapshot_cmds[]; +extern struct cli_cmd global_cmds[]; struct cli_cmd cli_misc_cmds[]; int @@ -48,7 +49,7 @@ cli_cmd_display_help (struct cli_state *state, struct cli_cmd_word *in_word, { struct cli_cmd *cmd[] = {volume_cmds, cli_probe_cmds, cli_misc_cmds, snapshot_cmds, - NULL}; + global_cmds, NULL}; struct cli_cmd *cmd_ind = NULL; int i = 0; diff --git a/cli/src/cli-cmd-parser.c b/cli/src/cli-cmd-parser.c index bb0af2fc383..b30306b2584 100644 --- a/cli/src/cli-cmd-parser.c +++ b/cli/src/cli-cmd-parser.c @@ -819,7 +819,7 @@ out: } /* Parsing global option for NFS-Ganesha config - * gluster features.ganesha enable/disable */ + * gluster nfs-ganesha enable/disable */ int32_t cli_cmd_ganesha_parse (struct cli_state *state, @@ -833,7 +833,7 @@ cli_cmd_ganesha_parse (struct cli_state *state, char *value = NULL; int i = 0; char *w = NULL; - char *opwords[] = { "enable", "disable" }; + char *opwords[] = { "enable", "disable", NULL }; const char *question = NULL; gf_answer_t answer = GF_ANSWER_NO; @@ -853,7 +853,7 @@ cli_cmd_ganesha_parse (struct cli_state *state, value = (char *) words[1]; if (!key || !value) { - cli_out ("Usage : features.ganesha <enable/disable>"); + cli_out ("Usage : nfs-ganesha <enable/disable>"); ret = -1; goto out; } @@ -862,7 +862,7 @@ cli_cmd_ganesha_parse (struct cli_state *state, if (ret == -1) goto out; - if (strcmp (key, "features.ganesha")) { + if (strcmp (key, "nfs-ganesha")) { gf_asprintf (op_errstr, "Global option: error: ' %s '" "is not a valid global option.", key); ret = -1; @@ -872,13 +872,13 @@ cli_cmd_ganesha_parse (struct cli_state *state, w = str_getunamb (value, opwords); if (!w) { cli_out ("Invalid global option \n" - "Usage : features.ganesha <enable/disable>"); + "Usage : nfs-ganesha <enable/disable>"); ret = -1; goto out; } question = "Enabling NFS-Ganesha requires Gluster-NFS to be" - "disabled across the trusted pool. Do you " + " disabled across the trusted pool. Do you " "still want to continue?"; if (strcmp (value, "enable") == 0) { diff --git a/cli/src/cli-cmd-volume.c b/cli/src/cli-cmd-volume.c index 30df22ff199..b5d5920bebc 100644 --- a/cli/src/cli-cmd-volume.c +++ b/cli/src/cli-cmd-volume.c @@ -1372,54 +1372,6 @@ out: return ret; } -int cli_cmd_ganesha_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; - - proc = &cli_rpc_prog->proctable[GLUSTER_CLI_GANESHA]; - - frame = create_frame (THIS, THIS->ctx->pool); - if (!frame) - goto out; - - ret = cli_cmd_ganesha_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; - } - - CLI_LOCAL_INIT (local, words, frame, 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 ("Setting global option failed"); - } - - 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) @@ -2625,10 +2577,6 @@ struct cli_cmd volume_cmds[] = { cli_cmd_quota_cbk, "quota translator specific operations"}, - { "features.ganesha { enable| disable } ", - cli_cmd_ganesha_cbk, - "global ganesha 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, diff --git a/cli/src/cli-cmd.c b/cli/src/cli-cmd.c index cc9072246d3..5ea1edc9cac 100644 --- a/cli/src/cli-cmd.c +++ b/cli/src/cli-cmd.c @@ -234,6 +234,9 @@ cli_cmds_register (struct cli_state *state) ret = cli_cmd_snapshot_register (state); if (ret) goto out; + ret = cli_cmd_global_register (state); + if (ret) + goto out; out: return ret; } @@ -371,7 +374,8 @@ cli_cmd_submit (struct rpc_clnt* rpc, void *req, call_frame_t *frame, unsigned timeout = 0; if ((GLUSTER_CLI_PROFILE_VOLUME == procnum) || - (GLUSTER_CLI_HEAL_VOLUME == procnum)) + (GLUSTER_CLI_HEAL_VOLUME == procnum) || + (GLUSTER_CLI_GANESHA == procnum)) timeout = CLI_TEN_MINUTES_TIMEOUT; else timeout = CLI_DEFAULT_CMD_TIMEOUT; diff --git a/cli/src/cli-cmd.h b/cli/src/cli-cmd.h index cf036928ddf..d39c8b38f7f 100644 --- a/cli/src/cli-cmd.h +++ b/cli/src/cli-cmd.h @@ -84,6 +84,8 @@ int cli_cmd_system_register (struct cli_state *state); int cli_cmd_snapshot_register (struct cli_state *state); +int cli_cmd_global_register (struct cli_state *state); + int cli_cmd_misc_register (struct cli_state *state); struct cli_cmd_word *cli_cmd_nextword (struct cli_cmd_word *word, |