allow brick to be added in a plain replicate volume if a brick is removed

Signed-off-by: Raghavendra Bhat <raghavendrabhat@gluster.com>
Signed-off-by: Vijay Bellur <vijay@dev.gluster.com>

BUG: 1574 ()
URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=1574
This commit is contained in:
Raghavendra Bhat 2010-09-08 08:53:21 +00:00 committed by Vijay Bellur
parent 5ed8eba1b1
commit 43d36d4563
2 changed files with 32 additions and 8 deletions

View File

@ -1386,6 +1386,12 @@ glusterd_handle_add_brick (rpcsvc_request_t *req)
goto brick_val;
if (!brick_count || !volinfo->sub_count)
goto brick_val;
if (volinfo->brick_count < volinfo->sub_count) {
if ((volinfo->sub_count - volinfo->brick_count) == brick_count)
goto brick_val;
}
if ((brick_count % volinfo->sub_count) != 0) {
snprintf(err_str, 2048, "Incorrect number of bricks"
" supplied %d for type %s with count %d",

View File

@ -1477,16 +1477,34 @@ generate_client_volfile (glusterd_volinfo_t *volinfo, char *filename)
num_bricks++;
if (GF_CLUSTER_TYPE_REPLICATE == volinfo->type) {
gf_log ("", GF_LOG_DEBUG,
"Volfile is distributed-replicated");
replicate_count = volinfo->sub_count;
dist_count = num_bricks / replicate_count;
if (volinfo->brick_count <= volinfo->sub_count) {
gf_log ("", GF_LOG_DEBUG,
"Volfile is plain replicated");
replicate_count = volinfo->sub_count;
dist_count = num_bricks / replicate_count;
if (!dist_count) {
replicate_count = num_bricks;
dist_count = num_bricks / replicate_count;
}
} else {
gf_log ("", GF_LOG_DEBUG,
"Volfile is distributed-replicated");
replicate_count = volinfo->sub_count;
dist_count = num_bricks / replicate_count;
}
} else if (GF_CLUSTER_TYPE_STRIPE == volinfo->type) {
gf_log ("", GF_LOG_DEBUG,
"Volfile is distributed-striped");
stripe_count = volinfo->sub_count;
dist_count = num_bricks / stripe_count;
if (volinfo->brick_count == volinfo->sub_count) {
gf_log ("", GF_LOG_DEBUG,
"Volfile is plain striped");
stripe_count = volinfo->sub_count;
dist_count = num_bricks / stripe_count;
} else {
gf_log ("", GF_LOG_DEBUG,
"Volfile is distributed-striped");
stripe_count = volinfo->sub_count;
dist_count = num_bricks / stripe_count;
}
} else {
gf_log ("", GF_LOG_DEBUG,
"Volfile is plain distributed");