summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVijay Bellur <vijay@gluster.com>2010-09-04 12:49:16 +0000
committerVijay Bellur <vijay@dev.gluster.com>2010-09-05 06:27:24 -0700
commitdba7332557fa0e8169c980b67a0f60a50f99bcf8 (patch)
tree2e222cc66430870d1237906c55590ca9f0f64351
parent461dc0ce08d1deb6a9314e118bb511894d5390c8 (diff)
cli: Add support for GET volume
Signed-off-by: Vijay Bellur <vijay@gluster.com> Signed-off-by: Vijay Bellur <vijay@dev.gluster.com> BUG: 971 (dynamic volume management) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=971
-rw-r--r--cli/src/cli-cmd-volume.c10
-rw-r--r--cli/src/cli3_1-cops.c13
2 files changed, 20 insertions, 3 deletions
diff --git a/cli/src/cli-cmd-volume.c b/cli/src/cli-cmd-volume.c
index 34651ae161f..d2820768945 100644
--- a/cli/src/cli-cmd-volume.c
+++ b/cli/src/cli-cmd-volume.c
@@ -85,6 +85,14 @@ cli_cmd_volume_info_cbk (struct cli_state *state, struct cli_cmd_word *word,
!strcmp (words[2], "all"))) {
ctx.flags = GF_CLI_GET_NEXT_VOLUME;
proc = &cli_rpc_prog->proctable[GF1_CLI_GET_NEXT_VOLUME];
+ } else if (wordcount == 3) {
+ ctx.flags = GF_CLI_GET_VOLUME;
+ ctx.volname = (char *)words[2];
+ if (strlen (ctx.volname) > 1024) {
+ cli_out ("Invalid volume name");
+ goto out;
+ }
+ proc = &cli_rpc_prog->proctable[GF1_CLI_GET_VOLUME];
}
local = cli_local_get ();
@@ -93,6 +101,8 @@ cli_cmd_volume_info_cbk (struct cli_state *state, struct cli_cmd_word *word,
goto out;
local->u.get_vol.flags = ctx.flags;
+ if (ctx.volname)
+ local->u.get_vol.volname = gf_strdup (ctx.volname);
frame->local = local;
diff --git a/cli/src/cli3_1-cops.c b/cli/src/cli3_1-cops.c
index 5bf0e3670a9..67d469209a8 100644
--- a/cli/src/cli3_1-cops.c
+++ b/cli/src/cli3_1-cops.c
@@ -249,7 +249,7 @@ gf_cli3_1_get_volume_cbk (struct rpc_req *req, struct iovec *iov,
int ret = 0;
dict_t *dict = NULL;
char *volname = NULL;
- int32_t i = 1;
+ int32_t i = 0;
char key[1024] = {0,};
int32_t status = 0;
int32_t type = 0;
@@ -309,13 +309,20 @@ gf_cli3_1_get_volume_cbk (struct rpc_req *req, struct iovec *iov,
local = ((call_frame_t *)myframe)->local;
//cli_out ("Number of Volumes: %d", count);
- if (!count) {
+ if (!count && (local->u.get_vol.flags ==
+ GF_CLI_GET_NEXT_VOLUME)) {
local->u.get_vol.volname = NULL;
ret = 0;
goto out;
+ } else if (!count && (local->u.get_vol.flags ==
+ GF_CLI_GET_VOLUME)) {
+ cli_out ("Volume %s not present",
+ local->u.get_vol.volname);
+ ret = 0;
+ goto out;
}
- while ( i <= count) {
+ while ( i < count) {
cli_out ("");
snprintf (key, 256, "volume%d.name", i);
ret = dict_get_str (dict, key, &volname);