summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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 5e1cb75cbed..9340067e256 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)
@@ -860,6 +907,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 f1174e60fed..8bee3bbd998 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