diff options
author | Amar Tumballi <amar@gluster.com> | 2011-06-16 23:42:53 +0000 |
---|---|---|
committer | Anand Avati <avati@gluster.com> | 2011-06-23 21:30:59 -0700 |
commit | 89452c4db44966bb80601c73c3b835d002af9fd5 (patch) | |
tree | b5cd35165617489ad545d5f26ac57bf6093e8355 | |
parent | c9854677fcd5a0a68e885cc18b6d9d6d92218f23 (diff) |
gluster volume info: fix the output of 'stripe-replicated' volumes
also fix the glusterd-store to preserve the required information
Signed-off-by: Amar Tumballi <amar@gluster.com>
Signed-off-by: Anand Avati <avati@gluster.com>
BUG: 3040 (need a way to create volumes with 'stripe+replicate' setup..)
URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=3040
-rw-r--r-- | cli/src/cli-rpc-ops.c | 43 | ||||
-rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-handler.c | 5 | ||||
-rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-store.c | 13 | ||||
-rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-store.h | 1 |
4 files changed, 49 insertions, 13 deletions
diff --git a/cli/src/cli-rpc-ops.c b/cli/src/cli-rpc-ops.c index cea1129097d..2c1a9f7833c 100644 --- a/cli/src/cli-rpc-ops.c +++ b/cli/src/cli-rpc-ops.c @@ -53,8 +53,10 @@ extern int connected; char *cli_volume_type[] = {"Distribute", "Stripe", "Replicate", + "Striped-Replicate (RAID 01)", "Distributed-Stripe", "Distributed-Replicate", + "Distributed-Striped-Replicate (RAID 01)", }; @@ -380,6 +382,7 @@ gf_cli3_1_get_volume_cbk (struct rpc_req *req, struct iovec *iov, int32_t type = 0; int32_t brick_count = 0; int32_t sub_count = 0; + int32_t stripe_count = 0; int32_t vol_type = 0; char *brick = NULL; int32_t j = 1; @@ -484,6 +487,11 @@ gf_cli3_1_get_volume_cbk (struct rpc_req *req, struct iovec *iov, if (ret) goto out; + snprintf (key, 256, "volume%d.stripe_count", i); + ret = dict_get_int32 (dict, key, &stripe_count); + if (ret) + goto out; + snprintf (key, 256, "volume%d.transport", i); ret = dict_get_int32 (dict, key, &transport); if (ret) @@ -491,23 +499,32 @@ gf_cli3_1_get_volume_cbk (struct rpc_req *req, struct iovec *iov, vol_type = type; - // Stripe - if ((type == 1) && (sub_count < brick_count)) - vol_type = 3; - - // Replicate - if ((type == 2) && (sub_count < brick_count)) - vol_type = 4; + // Distributed (stripe/replicate/raid01) setups + if ((type > 1) && ( sub_count < brick_count)) + vol_type = type + 3; cli_out ("Volume Name: %s", volname); cli_out ("Type: %s", cli_volume_type[vol_type]); cli_out ("Status: %s", cli_volume_status[status]); - if ((sub_count > 1) && (brick_count > sub_count)) - cli_out ("Number of Bricks: %d x %d = %d", - brick_count / sub_count, sub_count, - brick_count); - else - cli_out ("Number of Bricks: %d", brick_count); + if ((sub_count > 1) && (brick_count > sub_count)) { + if (!stripe_count) + cli_out ("Number of Bricks: %d x %d = %d", + brick_count / sub_count, sub_count, + brick_count); + else + cli_out ("Number of Bricks: %d x %d x %d = %d", + brick_count / sub_count, stripe_count, + sub_count / stripe_count, brick_count); + } else { + if (!stripe_count) + cli_out ("Number of Bricks: %d", + brick_count); + else + cli_out ("Number of Bricks: %d x %d = %d", + stripe_count, + (brick_count / stripe_count), + brick_count); + } cli_out ("Transport-type: %s", ((transport == 0)?"tcp": diff --git a/xlators/mgmt/glusterd/src/glusterd-handler.c b/xlators/mgmt/glusterd/src/glusterd-handler.c index 8d963b9ab09..5f2460d5ee9 100644 --- a/xlators/mgmt/glusterd/src/glusterd-handler.c +++ b/xlators/mgmt/glusterd/src/glusterd-handler.c @@ -319,6 +319,11 @@ glusterd_add_volume_detail_to_dict (glusterd_volinfo_t *volinfo, if (ret) goto out; + snprintf (key, 256, "volume%d.stripe_count", count); + ret = dict_set_int32 (volumes, key, volinfo->stripe_count); + if (ret) + goto out; + snprintf (key, 256, "volume%d.transport", count); ret = dict_set_int32 (volumes, key, volinfo->transport_type); if (ret) diff --git a/xlators/mgmt/glusterd/src/glusterd-store.c b/xlators/mgmt/glusterd/src/glusterd-store.c index 095385c7c7b..110d459dca3 100644 --- a/xlators/mgmt/glusterd/src/glusterd-store.c +++ b/xlators/mgmt/glusterd/src/glusterd-store.c @@ -591,6 +591,12 @@ glusterd_volume_exclude_options_write (int fd, glusterd_volinfo_t *volinfo) if (ret) goto out; + snprintf (buf, sizeof (buf), "%d", volinfo->stripe_count); + ret = glusterd_store_save_value (fd, GLUSTERD_STORE_KEY_VOL_STRIPE_CNT, + buf); + if (ret) + goto out; + snprintf (buf, sizeof (buf), "%d", volinfo->version); ret = glusterd_store_save_value (fd, GLUSTERD_STORE_KEY_VOL_VERSION, buf); @@ -1555,6 +1561,9 @@ glusterd_store_retrieve_volume (char *volname) } else if (!strncmp (key, GLUSTERD_STORE_KEY_VOL_SUB_COUNT, strlen (GLUSTERD_STORE_KEY_VOL_SUB_COUNT))) { volinfo->sub_count = atoi (value); + } else if (!strncmp (key, GLUSTERD_STORE_KEY_VOL_STRIPE_CNT, + strlen (GLUSTERD_STORE_KEY_VOL_STRIPE_CNT))) { + volinfo->stripe_count = atoi (value); } else if (!strncmp (key, GLUSTERD_STORE_KEY_VOL_TRANSPORT, strlen (GLUSTERD_STORE_KEY_VOL_TRANSPORT))) { volinfo->transport_type = atoi (value); @@ -1613,6 +1622,10 @@ glusterd_store_retrieve_volume (char *volname) if (op_errno != GD_STORE_EOF) goto out; + if (volinfo->stripe_count) + volinfo->replica_count = (volinfo->sub_count / + volinfo->stripe_count); + ret = glusterd_store_iter_destroy (iter); if (ret) diff --git a/xlators/mgmt/glusterd/src/glusterd-store.h b/xlators/mgmt/glusterd/src/glusterd-store.h index 1dbd6dcf1f7..811347b396a 100644 --- a/xlators/mgmt/glusterd/src/glusterd-store.h +++ b/xlators/mgmt/glusterd/src/glusterd-store.h @@ -50,6 +50,7 @@ typedef enum glusterd_store_ver_ac_{ #define GLUSTERD_STORE_KEY_VOL_STATUS "status" #define GLUSTERD_STORE_KEY_VOL_PORT "port" #define GLUSTERD_STORE_KEY_VOL_SUB_COUNT "sub_count" +#define GLUSTERD_STORE_KEY_VOL_STRIPE_CNT "stripe_count" #define GLUSTERD_STORE_KEY_VOL_BRICK "brick" #define GLUSTERD_STORE_KEY_VOL_VERSION "version" #define GLUSTERD_STORE_KEY_VOL_TRANSPORT "transport-type" |