summaryrefslogtreecommitdiffstats
path: root/cli
diff options
context:
space:
mode:
authorVijay Bellur <vijay@gluster.com>2010-07-25 00:38:01 +0000
committerAnand V. Avati <avati@dev.gluster.com>2010-07-25 23:29:53 -0700
commit931a59e2b9130c6e748f2b7193cd0c2ac5a557bf (patch)
tree2d7e8f31c6865176c3d619646dfcaf3c84abd011 /cli
parentea294f8fd967e8fc6e77558ecf1ab4fd298b7c4f (diff)
DVM: bug fixes in cli and glusterd for probe, start volumev3.1.0qa2
Signed-off-by: Vijay Bellur <vijay@gluster.com> Signed-off-by: Anand V. Avati <avati@dev.gluster.com> BUG: 1187 () URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=1187
Diffstat (limited to 'cli')
-rw-r--r--cli/src/cli-mem-types.h1
-rw-r--r--cli/src/cli.c10
-rw-r--r--cli/src/cli.h43
-rw-r--r--cli/src/cli3_1-cops.c194
-rw-r--r--cli/src/input.c1
5 files changed, 199 insertions, 50 deletions
diff --git a/cli/src/cli-mem-types.h b/cli/src/cli-mem-types.h
index 279e5e90826..b064a965926 100644
--- a/cli/src/cli-mem-types.h
+++ b/cli/src/cli-mem-types.h
@@ -30,6 +30,7 @@ enum cli_mem_types_ {
cli_mt_xlator_cmdline_option_t,
cli_mt_char,
cli_mt_call_pool_t,
+ cli_mt_cli_local_t,
cli_mt_end
};
diff --git a/cli/src/cli.c b/cli/src/cli.c
index b31e9feda45..d70c67f8535 100644
--- a/cli/src/cli.c
+++ b/cli/src/cli.c
@@ -424,6 +424,16 @@ out:
return rpc;
}
+cli_local_t *
+cli_local_get ()
+{
+ cli_local_t *local = NULL;
+
+ local = GF_CALLOC (1, sizeof (*local), cli_mt_cli_local_t);
+
+ return local;
+}
+
struct cli_state *global_state;
int
diff --git a/cli/src/cli.h b/cli/src/cli.h
index 808e9236024..140a1af13ac 100644
--- a/cli/src/cli.h
+++ b/cli/src/cli.h
@@ -95,6 +95,31 @@ struct cli_state {
int remote_port;
};
+struct cli_local {
+ union {
+ struct {
+ dict_t *dict;
+ } create_vol;
+
+ struct {
+ char *volname;
+ } start_vol;
+
+ struct {
+ char *volname;
+ } stop_vol;
+
+ struct {
+ char *volname;
+ } delete_vol;
+
+ struct {
+ char *volname;
+ } defrag_vol;
+ } u;
+};
+
+typedef struct cli_local cli_local_t;
typedef ssize_t (*cli_serialize_t) (struct iovec outmsg, void *args);
@@ -115,29 +140,31 @@ int cli_rl_out (struct cli_state *state, const char *fmt, va_list ap);
int cli_out (const char *fmt, ...);
int
-cli_submit_request (void *req, call_frame_t *frame,
- rpc_clnt_prog_t *prog,
- int procnum, struct iobref *iobref,
+cli_submit_request (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);
int32_t
-cli_cmd_volume_create_parse (const char **words, int wordcount,
+cli_cmd_volume_create_parse (const char **words, int wordcount,
dict_t **options);
int32_t
-cli_cmd_volume_set_parse (const char **words, int wordcount,
+cli_cmd_volume_set_parse (const char **words, int wordcount,
dict_t **options);
int32_t
-cli_cmd_volume_add_brick_parse (const char **words, int wordcount,
+cli_cmd_volume_add_brick_parse (const char **words, int wordcount,
dict_t **options);
int32_t
-cli_cmd_volume_remove_brick_parse (const char **words, int wordcount,
+cli_cmd_volume_remove_brick_parse (const char **words, int wordcount,
dict_t **options);
int32_t
-cli_cmd_volume_replace_brick_parse (const char **words, int wordcount,
+cli_cmd_volume_replace_brick_parse (const char **words, int wordcount,
dict_t **options);
+
+cli_local_t * cli_local_get ();
#endif /* __CLI_H__ */
diff --git a/cli/src/cli3_1-cops.c b/cli/src/cli3_1-cops.c
index 444c0031d91..d76485734ef 100644
--- a/cli/src/cli3_1-cops.c
+++ b/cli/src/cli3_1-cops.c
@@ -54,13 +54,13 @@ gf_cli3_1_probe_cbk (struct rpc_req *req, struct iovec *iov,
}
gf_log ("cli", GF_LOG_NORMAL, "Received resp to probe");
- cli_out ("Probe %s", (rsp.op_ret) ? "Unsuccessful": "Successful");
+ cli_out ("Probe %s", (rsp.op_ret) ? "unsuccessful": "successful");
- cli_cmd_broadcast_response ();
- ret = 0;
+ ret = rsp.op_ret;
out:
+ cli_cmd_broadcast_response ();
return ret;
}
@@ -84,13 +84,13 @@ gf_cli3_1_deprobe_cbk (struct rpc_req *req, struct iovec *iov,
}
gf_log ("cli", GF_LOG_NORMAL, "Received resp to deprobe");
- cli_out ("Detach %s", (rsp.op_ret) ? "Unsuccessful": "Successful");
+ cli_out ("Detach %s", (rsp.op_ret) ? "unsuccessful": "successful");
- cli_cmd_broadcast_response ();
- ret = 0;
+ ret = rsp.op_ret;
out:
+ cli_cmd_broadcast_response ();
return ret;
}
@@ -191,6 +191,7 @@ gf_cli3_1_list_friends_cbk (struct rpc_req *req, struct iovec *iov,
ret = 0;
out:
+ cli_cmd_broadcast_response ();
if (ret)
cli_out ("Command Execution Failed");
@@ -313,6 +314,9 @@ gf_cli3_1_create_volume_cbk (struct rpc_req *req, struct iovec *iov,
{
gf1_cli_create_vol_rsp rsp = {0,};
int ret = 0;
+ cli_local_t *local = NULL;
+ char *volname = NULL;
+ dict_t *dict = NULL;
if (-1 == req->rpc_status) {
goto out;
@@ -324,14 +328,20 @@ gf_cli3_1_create_volume_cbk (struct rpc_req *req, struct iovec *iov,
goto out;
}
+ local = ((call_frame_t *) (myframe))->local;
+
+ dict = local->u.create_vol.dict;
+
+ ret = dict_get_str (dict, "volname", &volname);
gf_log ("cli", GF_LOG_NORMAL, "Received resp to create volume");
- cli_out ("Create Volume %s", (rsp.op_ret) ? "Unsuccessful":
- "Successful");
+ cli_out ("Creation of volume %s has been %s", volname,
+ (rsp.op_ret) ? "unsuccessful": "successful");
- ret = 0;
+ ret = rsp.op_ret;
out:
+ cli_cmd_broadcast_response ();
return ret;
}
@@ -341,6 +351,9 @@ gf_cli3_1_delete_volume_cbk (struct rpc_req *req, struct iovec *iov,
{
gf1_cli_delete_vol_rsp rsp = {0,};
int ret = 0;
+ cli_local_t *local = NULL;
+ char *volname = NULL;
+ call_frame_t *frame = NULL;
if (-1 == req->rpc_status) {
goto out;
@@ -352,14 +365,22 @@ gf_cli3_1_delete_volume_cbk (struct rpc_req *req, struct iovec *iov,
goto out;
}
+ frame = myframe;
+ local = frame->local;
+
+ if (local)
+ volname = local->u.delete_vol.volname;
+
gf_log ("cli", GF_LOG_NORMAL, "Received resp to delete volume");
- cli_out ("Delete Volume %s", (rsp.op_ret) ? "Unsuccessful":
- "Successful");
+ cli_out ("Deleting volume %s has been %s", volname,
+ (rsp.op_ret) ? "unsuccessful": "successful");
- ret = 0;
+ ret = rsp.op_ret;
out:
+ cli_cmd_broadcast_response ();
+ gf_log ("", GF_LOG_NORMAL, "Returning with %d", ret);
return ret;
}
@@ -367,8 +388,11 @@ int
gf_cli3_1_start_volume_cbk (struct rpc_req *req, struct iovec *iov,
int count, void *myframe)
{
- gf1_cli_start_vol_rsp rsp = {0,};
+ gf1_cli_start_vol_rsp rsp = {0,};
int ret = 0;
+ cli_local_t *local = NULL;
+ char *volname = NULL;
+ call_frame_t *frame = NULL;
if (-1 == req->rpc_status) {
goto out;
@@ -380,14 +404,22 @@ gf_cli3_1_start_volume_cbk (struct rpc_req *req, struct iovec *iov,
goto out;
}
+ frame = myframe;
+
+ if (frame)
+ local = frame->local;
+
+ if (local)
+ volname = local->u.start_vol.volname;
gf_log ("cli", GF_LOG_NORMAL, "Received resp to start volume");
- cli_out ("Start Volume %s", (rsp.op_ret) ? "Unsuccessful":
- "Successful");
+ cli_out ("Starting volume %s has been %s", volname,
+ (rsp.op_ret) ? "unsuccessful": "successful");
- ret = 0;
+ ret = rsp.op_ret;
out:
+ cli_cmd_broadcast_response ();
return ret;
}
@@ -397,6 +429,9 @@ gf_cli3_1_stop_volume_cbk (struct rpc_req *req, struct iovec *iov,
{
gf1_cli_stop_vol_rsp rsp = {0,};
int ret = 0;
+ cli_local_t *local = NULL;
+ char *volname = NULL;
+ call_frame_t *frame = NULL;
if (-1 == req->rpc_status) {
goto out;
@@ -408,14 +443,22 @@ gf_cli3_1_stop_volume_cbk (struct rpc_req *req, struct iovec *iov,
goto out;
}
+ frame = myframe;
+
+ if (frame)
+ local = frame->local;
+
+ if (local)
+ volname = local->u.start_vol.volname;
gf_log ("cli", GF_LOG_NORMAL, "Received resp to stop volume");
- cli_out ("Delete Volume %s", (rsp.op_ret) ? "Unsuccessful":
- "Successful");
+ cli_out ("Stopping volume %s has been %s", volname,
+ (rsp.op_ret) ? "unsuccessful": "successful");
- ret = 0;
+ ret = rsp.op_ret;
out:
+ cli_cmd_broadcast_response ();
return ret;
}
@@ -425,6 +468,9 @@ gf_cli3_1_defrag_volume_cbk (struct rpc_req *req, struct iovec *iov,
{
gf1_cli_defrag_vol_rsp rsp = {0,};
int ret = 0;
+ cli_local_t *local = NULL;
+ char *volname = NULL;
+ call_frame_t *frame = NULL;
if (-1 == req->rpc_status) {
goto out;
@@ -436,14 +482,22 @@ gf_cli3_1_defrag_volume_cbk (struct rpc_req *req, struct iovec *iov,
goto out;
}
+ frame = myframe;
+
+ if (frame)
+ local = frame->local;
+
+ if (local)
+ volname = local->u.start_vol.volname;
gf_log ("cli", GF_LOG_NORMAL, "Received resp to probe");
- cli_out ("Defrag Volume %s", (rsp.op_ret) ? "Unsuccessful":
- "Successful");
+ cli_out ("Defrag of volume %s has been %s", volname,
+ (rsp.op_ret) ? "unsuccessful": "successful");
- ret = 0;
+ ret = rsp.op_ret;
out:
+ cli_cmd_broadcast_response ();
return ret;
}
@@ -466,10 +520,10 @@ gf_cli3_1_rename_volume_cbk (struct rpc_req *req, struct iovec *iov,
gf_log ("cli", GF_LOG_NORMAL, "Received resp to probe");
- cli_out ("Rename Volume %s", (rsp.op_ret) ? "Unsuccessful":
- "Successful");
+ cli_out ("Rename volume %s", (rsp.op_ret) ? "unsuccessful":
+ "successful");
- ret = 0;
+ ret = rsp.op_ret;
out:
return ret;
@@ -494,10 +548,10 @@ gf_cli3_1_set_volume_cbk (struct rpc_req *req, struct iovec *iov,
gf_log ("cli", GF_LOG_NORMAL, "Received resp to set");
- cli_out ("Set Volume %s", (rsp.op_ret) ? "Unsuccessful":
- "Successful");
+ cli_out ("Set volume %s", (rsp.op_ret) ? "unsuccessful":
+ "successful");
- ret = 0;
+ ret = rsp.op_ret;
out:
return ret;
@@ -522,12 +576,13 @@ gf_cli3_1_add_brick_cbk (struct rpc_req *req, struct iovec *iov,
gf_log ("cli", GF_LOG_NORMAL, "Received resp to add brick");
- cli_out ("Add Brick %s", (rsp.op_ret) ? "Unsuccessful":
- "Successful");
+ cli_out ("Add Brick %s", (rsp.op_ret) ? "unsuccessful":
+ "successful");
- ret = 0;
+ ret = rsp.op_ret;
out:
+ cli_cmd_broadcast_response ();
return ret;
}
@@ -550,10 +605,10 @@ gf_cli3_1_remove_brick_cbk (struct rpc_req *req, struct iovec *iov,
}
gf_log ("cli", GF_LOG_NORMAL, "Received resp to remove brick");
- cli_out ("Remove Brick %s", (rsp.op_ret) ? "Unsuccessful":
- "Successful");
+ cli_out ("Remove Brick %s", (rsp.op_ret) ? "unsuccessful":
+ "successful");
- ret = 0;
+ ret = rsp.op_ret;
out:
return ret;
@@ -579,10 +634,10 @@ gf_cli3_1_replace_brick_cbk (struct rpc_req *req, struct iovec *iov,
gf_log ("cli", GF_LOG_NORMAL, "Received resp to replace brick");
- cli_out ("Replace Brick %s", (rsp.op_ret) ? "Unsuccessful":
- "Successful");
+ cli_out ("Replace Brick %s", (rsp.op_ret) ? "unsuccessful":
+ "successful");
- ret = 0;
+ ret = rsp.op_ret;
out:
return ret;
@@ -620,7 +675,7 @@ gf_cli3_1_probe (call_frame_t *frame, xlator_t *this,
this, gf_cli3_1_probe_cbk);
if (!ret) {
- //ret = cli_cmd_await_response ();
+ ret = cli_cmd_await_response ();
}
out:
gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret);
@@ -660,7 +715,7 @@ gf_cli3_1_deprobe (call_frame_t *frame, xlator_t *this,
this, gf_cli3_1_deprobe_cbk);
if (!ret) {
- //ret = cli_cmd_await_response ();
+ ret = cli_cmd_await_response ();
}
out:
gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret);
@@ -687,7 +742,7 @@ gf_cli3_1_list_friends (call_frame_t *frame, xlator_t *this,
this, gf_cli3_1_list_friends_cbk);
if (!ret) {
- //ret = cli_cmd_await_response ();
+ ret = cli_cmd_await_response ();
}
out:
gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret);
@@ -728,13 +783,14 @@ gf_cli3_1_create_volume (call_frame_t *frame, xlator_t *this,
gf1_cli_create_vol_req req = {0,};
int ret = 0;
dict_t *dict = NULL;
+ cli_local_t *local = NULL;
if (!frame || !this || !data) {
ret = -1;
goto out;
}
- dict = data;
+ dict = dict_ref ((dict_t *)data);
ret = dict_get_str (dict, "volname", &req.volname);
@@ -759,13 +815,20 @@ gf_cli3_1_create_volume (call_frame_t *frame, xlator_t *this,
goto out;
}
+ local = cli_local_get ();
+
+ if (local) {
+ local->u.create_vol.dict = dict;
+ frame->local = local;
+ }
+
ret = cli_submit_request (&req, frame, cli_rpc_prog,
GD_MGMT_CLI_CREATE_VOLUME, NULL,
gf_xdr_from_cli_create_vol_req,
this, gf_cli3_1_create_volume_cbk);
if (!ret) {
- //ret = cli_cmd_await_response ();
+ ret = cli_cmd_await_response ();
}
@@ -785,18 +848,29 @@ gf_cli3_1_delete_volume (call_frame_t *frame, xlator_t *this,
{
gf1_cli_delete_vol_req req = {0,};
int ret = 0;
+ cli_local_t *local = NULL;
if (!frame || !this || !data) {
ret = -1;
goto out;
}
+ local = cli_local_get ();
+
+ if (local) {
+ local->u.delete_vol.volname = data;
+ frame->local = local;
+ }
+
req.volname = data;
ret = cli_submit_request (&req, frame, cli_rpc_prog,
GD_MGMT_CLI_DELETE_VOLUME, NULL,
gf_xdr_from_cli_delete_vol_req,
this, gf_cli3_1_delete_volume_cbk);
+ if (!ret) {
+ ret = cli_cmd_await_response ();
+ }
out:
gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret);
@@ -810,12 +884,20 @@ gf_cli3_1_start_volume (call_frame_t *frame, xlator_t *this,
{
gf1_cli_start_vol_req req = {0,};
int ret = 0;
+ cli_local_t *local = NULL;
if (!frame || !this || !data) {
ret = -1;
goto out;
}
+ local = cli_local_get ();
+
+ if (local) {
+ local->u.start_vol.volname = data;
+ frame->local = local;
+ }
+
req.volname = data;
ret = cli_submit_request (&req, frame, cli_rpc_prog,
@@ -823,6 +905,9 @@ gf_cli3_1_start_volume (call_frame_t *frame, xlator_t *this,
gf_xdr_from_cli_start_vol_req,
this, gf_cli3_1_start_volume_cbk);
+ if (!ret) {
+ ret = cli_cmd_await_response ();
+ }
out:
gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret);
@@ -835,6 +920,7 @@ gf_cli3_1_stop_volume (call_frame_t *frame, xlator_t *this,
{
gf1_cli_stop_vol_req req = {0,};
int ret = 0;
+ cli_local_t *local = NULL;
if (!frame || !this || !data) {
ret = -1;
@@ -843,11 +929,21 @@ gf_cli3_1_stop_volume (call_frame_t *frame, xlator_t *this,
req.volname = data;
+ local = cli_local_get ();
+
+ if (local) {
+ local->u.stop_vol.volname = data;
+ frame->local = local;
+ }
+
ret = cli_submit_request (&req, frame, cli_rpc_prog,
GD_MGMT_CLI_STOP_VOLUME, NULL,
gf_xdr_from_cli_stop_vol_req,
this, gf_cli3_1_stop_volume_cbk);
+ if (!ret) {
+ ret = cli_cmd_await_response ();
+ }
out:
gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret);
@@ -860,12 +956,20 @@ gf_cli3_1_defrag_volume (call_frame_t *frame, xlator_t *this,
{
gf1_cli_defrag_vol_req req = {0,};
int ret = 0;
+ cli_local_t *local = NULL;
if (!frame || !this || !data) {
ret = -1;
goto out;
}
+ local = cli_local_get ();
+
+ if (local) {
+ local->u.defrag_vol.volname = data;
+ frame->local = local;
+ }
+
req.volname = data;
ret = cli_submit_request (&req, frame, cli_rpc_prog,
@@ -873,6 +977,9 @@ gf_cli3_1_defrag_volume (call_frame_t *frame, xlator_t *this,
gf_xdr_from_cli_defrag_vol_req,
this, gf_cli3_1_defrag_volume_cbk);
+ if (!ret) {
+ ret = cli_cmd_await_response ();
+ }
out:
gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret);
@@ -995,6 +1102,9 @@ gf_cli3_1_add_brick (call_frame_t *frame, xlator_t *this,
gf_xdr_from_cli_add_brick_req,
this, gf_cli3_1_add_brick_cbk);
+ if (!ret) {
+ ret = cli_cmd_await_response ();
+ }
out:
gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret);
diff --git a/cli/src/input.c b/cli/src/input.c
index 314058e052a..a577a0f4c13 100644
--- a/cli/src/input.c
+++ b/cli/src/input.c
@@ -42,6 +42,7 @@ cli_batch (void *d)
state = d;
ret = cli_cmd_process (state, state->argc, state->argv);
+ gf_log ("", GF_LOG_NORMAL, "Exiting with: %d", ret);
exit (ret);
return NULL;