summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMohammed Rafi KC <rkavunga@redhat.com>2015-04-28 19:17:40 +0530
committerVijay Bellur <vbellur@redhat.com>2015-05-09 20:25:13 -0700
commit6e27b9744f89430d4a33b36f96a78d7b048b16ff (patch)
tree790c1204e649e7fe20ddee9845f947890b826d31
parent9acae44525798d7275c490c4e941fa88d214e46e (diff)
tiering/cli: Check replica count and bricks are proper or not
Back port of http://review.gluster.org/10428 Right now, attach-tier calls parsing function for add-brick. Add-brick does not have any check for brick count and replca count compatibility. >Change-Id: I44ec13eadffc003a9ebf8c4eb0193df559933a68 >BUG: 1215122 >Signed-off-by: Mohammed Rafi KC <rkavunga@redhat.com> >Reviewed-on: http://review.gluster.org/10428 >Reviewed-by: Dan Lambright <dlambrig@redhat.com> >Tested-by: Gluster Build System <jenkins@build.gluster.com> >Reviewed-by: Vijay Bellur <vbellur@redhat.com> Change-Id: Ie86d5b61b044386a062bfc9782178853e3af0f11 BUG: 1219850 Signed-off-by: Mohammed Rafi KC <rkavunga@redhat.com> Reviewed-on: http://review.gluster.org/10710 Reviewed-by: Dan Lambright <dlambrig@redhat.com> Tested-by: Gluster Build System <jenkins@build.gluster.com>
-rw-r--r--cli/src/cli-cmd-volume.c57
-rwxr-xr-xtests/basic/tier/tier.t3
2 files changed, 59 insertions, 1 deletions
diff --git a/cli/src/cli-cmd-volume.c b/cli/src/cli-cmd-volume.c
index ecd838d52c0..a6df78ff188 100644
--- a/cli/src/cli-cmd-volume.c
+++ b/cli/src/cli-cmd-volume.c
@@ -835,6 +835,53 @@ out:
}
int
+cli_tier_validate_replica_type (dict_t *dict, int type)
+{
+
+ int brick_count = -1;
+ int replica_count = 1;
+ int ret = -1;
+
+ ret = dict_get_int32 (dict, "count", &brick_count);
+ if (ret) {
+ gf_log ("cli", GF_LOG_ERROR, "Failed to get brick count");
+ goto out;
+ }
+
+ ret = dict_get_int32 (dict, "replica-count", &replica_count);
+ if (ret) {
+ gf_log ("cli", GF_LOG_DEBUG, "Failed to get replica count. "
+ "Defaulting to one");
+ replica_count = 1;
+ }
+
+ /*
+ * Change the calculation of sub_count once attach-tier support
+ * disperse volume.
+ * sub_count = disperse_count for disperse volume
+ * */
+
+
+ if (brick_count % replica_count) {
+ if (type == GF_CLUSTER_TYPE_REPLICATE)
+ cli_err ("number of bricks is not a multiple of "
+ "replica count");
+ else if (type == GF_CLUSTER_TYPE_DISPERSE)
+ cli_err ("number of bricks is not a multiple of "
+ "disperse count");
+ else
+ cli_err ("number of bricks given doesn't match "
+ "required count");
+
+ ret = -1;
+ goto out;
+ }
+ ret = 0;
+out:
+ return ret;
+}
+
+int
cli_cmd_volume_attach_tier_cbk (struct cli_state *state,
struct cli_cmd_word *word, const char **words,
int wordcount)
@@ -869,6 +916,16 @@ cli_cmd_volume_attach_tier_cbk (struct cli_state *state,
goto out;
}
+ /*
+ * Merge this check when attach-tier has it's own cli parse function.
+ */
+ ret = cli_tier_validate_replica_type (options, type);
+ if (ret) {
+ cli_usage_out (word->pattern);
+ parse_error = 1;
+ goto out;
+ }
+
if (state->mode & GLUSTER_MODE_WIGNORE) {
ret = dict_set_int32 (options, "force", _gf_true);
if (ret) {
diff --git a/tests/basic/tier/tier.t b/tests/basic/tier/tier.t
index 81abc5779ab..8e72071af1a 100755
--- a/tests/basic/tier/tier.t
+++ b/tests/basic/tier/tier.t
@@ -59,11 +59,12 @@ PROMOTE_TIMEOUT=5
MIGRATION_TIMEOUT=10
cleanup
-
TEST glusterd
TEST pidof glusterd
TEST $CLI volume create $V0 replica 2 $H0:$B0/${V0}{0..$LAST_BRICK}
+# testing bug 1215122, ie should fail if replica count and bricks are not compatible.
+TEST ! $CLI volume attach-tier $V0 replica 5 $H0:$B0/${V0}$CACHE_BRICK_FIRST $H0:$B0/${V0}$CACHE_BRICK_LAST
TEST $CLI volume attach-tier $V0 replica 2 $H0:$B0/${V0}$CACHE_BRICK_FIRST $H0:$B0/${V0}$CACHE_BRICK_LAST
TEST $CLI volume start $V0
TEST $CLI volume set $V0 features.ctr-enabled on