diff options
-rw-r--r-- | tests/basic/afr/arbiter-add-brick.t | 6 | ||||
-rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-brick-ops.c | 10 |
2 files changed, 16 insertions, 0 deletions
diff --git a/tests/basic/afr/arbiter-add-brick.t b/tests/basic/afr/arbiter-add-brick.t index c6fe18cec16..fe919de0ab4 100644 --- a/tests/basic/afr/arbiter-add-brick.t +++ b/tests/basic/afr/arbiter-add-brick.t @@ -60,5 +60,11 @@ EXPECT "1048576" stat -c %s $M0/file2 EXPECT "0" stat -c %s $B0/${V0}2/file1 EXPECT "0" stat -c %s $B0/${V0}2/file2 +#Increasing replica count of arbiter volumes must not be allowed. +TEST ! $CLI volume add-brick $V0 replica 4 $H0:$B0/${V0}3 +TEST ! $CLI volume add-brick $V0 replica 4 arbiter 1 $H0:$B0/${V0}3 + +#Adding another distribute leg should succeed. +TEST $CLI volume add-brick $V0 replica 3 arbiter 1 $H0:$B0/${V0}{3..5} TEST force_umount $M0 cleanup; diff --git a/xlators/mgmt/glusterd/src/glusterd-brick-ops.c b/xlators/mgmt/glusterd/src/glusterd-brick-ops.c index 3e358e95795..43465dbf4d8 100644 --- a/xlators/mgmt/glusterd/src/glusterd-brick-ops.c +++ b/xlators/mgmt/glusterd/src/glusterd-brick-ops.c @@ -1722,6 +1722,16 @@ glusterd_op_stage_add_brick (dict_t *dict, char **op_errstr, dict_t *rsp_dict) *op_errstr = gf_strdup (msg); goto out; } + /* Do not allow increasing replica count for arbiter volumes. */ + if (replica_count && volinfo->arbiter_count) { + ret = -1; + snprintf (msg, sizeof (msg), "Increasing replica count " + "for arbiter volumes is not supported."); + gf_msg (THIS->name, GF_LOG_ERROR, 0, + GD_MSG_BRICK_ADD_FAIL, "%s", msg); + *op_errstr = gf_strdup (msg); + goto out; + } } is_force = dict_get_str_boolean (dict, "force", _gf_false); |