diff options
Diffstat (limited to 'cli/src/cli-cmd.c')
| -rw-r--r-- | cli/src/cli-cmd.c | 66 |
1 files changed, 34 insertions, 32 deletions
diff --git a/cli/src/cli-cmd.c b/cli/src/cli-cmd.c index cb0199b06..b81f75b5b 100644 --- a/cli/src/cli-cmd.c +++ b/cli/src/cli-cmd.c @@ -1,22 +1,12 @@ /* - Copyright (c) 2010 Gluster, Inc. <http://www.gluster.com> - This file is part of GlusterFS. - - GlusterFS is free software; you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as published - by the Free Software Foundation; either version 3 of the License, - or (at your option) any later version. - - GlusterFS is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program. If not, see - <http://www.gnu.org/licenses/>. -*/ + Copyright (c) 2010-2012 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> @@ -31,6 +21,7 @@ #include "cli.h" #include "cli-cmd.h" #include "cli-mem-types.h" +#include "protocol-common.h" #include <fnmatch.h> @@ -59,6 +50,9 @@ cli_cmd_needs_connection (struct cli_cmd_word *word) if (!strcasecmp ("getwd", word->word)) return 1; + if (!strcasecmp ("exit", word->word)) + return 0; + return CLI_DEFAULT_CONN_TIMEOUT; } @@ -132,7 +126,9 @@ cli_cmd_process (struct cli_state *state, int argc, char **argv) if ( strcmp (word->word,"help")==0 ) goto callback; - ret = cli_cmd_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."); @@ -205,8 +201,7 @@ cli_cmd_process_line (struct cli_state *state, const char *text) ret = cli_cmd_process (state, count, tokens); out: - if (copy) - free (copy); + free (copy); if (tokens) cli_cmd_tokens_destroy (tokens); @@ -236,6 +231,9 @@ cli_cmds_register (struct cli_state *state) if (ret) goto out; + ret = cli_cmd_snapshot_register (state); + if (ret) + goto out; out: return ret; } @@ -279,14 +277,14 @@ seconds_from_now (unsigned secs, struct timespec *ts) } int -cli_cmd_await_response () +cli_cmd_await_response (unsigned time) { struct timespec ts = {0,}; int ret = 0; cli_op_ret = -1; - seconds_from_now (CLI_DEFAULT_CMD_TIMEOUT, &ts); + seconds_from_now (time, &ts); while (!cmd_done && !ret) { ret = pthread_cond_timedwait (&cond, &cond_mutex, &ts); @@ -294,8 +292,6 @@ cli_cmd_await_response () cmd_done = 0; - cli_cmd_unlock (); - if (ret) return ret; @@ -362,22 +358,28 @@ int cli_cmd_submit (void *req, call_frame_t *frame, rpc_clnt_prog_t *prog, int procnum, struct iobref *iobref, - cli_serialize_t sfunc, xlator_t *this, - fop_cbk_fn_t cbkfn) + xlator_t *this, fop_cbk_fn_t cbkfn, xdrproc_t xdrproc) { - int ret = -1; + 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_CMD_TIMEOUT; cli_cmd_lock (); cmd_sent = 0; ret = cli_submit_request (req, frame, prog, - procnum, NULL, sfunc, - this, cbkfn); + procnum, NULL, this, cbkfn, xdrproc); if (!ret) { cmd_sent = 1; - ret = cli_cmd_await_response (); - } else - cli_cmd_unlock (); + ret = cli_cmd_await_response (timeout); + } + + cli_cmd_unlock (); gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); return ret; |
