cli: remove-brick no longer defaults to commit-force

Problem : When gluster volume remove-brick is executed with out any option, it
defaults to force commit which results in data loss.

Fix : remove-brick can not be executed with out explicit option, user needs to
provide the option in the command line else the command will throw back an usage
error.

Earlier usage : volume remove-brick <VOLNAME> [replica <COUNT>] <BRICK> ...
                [start|stop|status|commit|force]

Current usage : volume remove-brick <VOLNAME> [replica <COUNT>] <BRICK> ...
                <start|stop|status|commit|force>

Change-Id: I2a49131f782a6c0dcd03b4dc8ebe5907999b0b49
BUG: 1077682
Signed-off-by: Atin Mukherjee <amukherj@redhat.com>
Reviewed-on: http://review.gluster.org/7292
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Shyamsundar Ranganathan <sam.somari@gmail.com>
Reviewed-by: Vijay Bellur <vbellur@redhat.com>
This commit is contained in:
Atin Mukherjee 2014-03-19 11:30:22 +05:30 committed by Vijay Bellur
parent e75be8977e
commit 5dedef81b6
7 changed files with 45 additions and 12 deletions

View File

@ -1118,7 +1118,7 @@ cli_cmd_volume_remove_brick_parse (const char **words, int wordcount,
GF_ASSERT (words);
GF_ASSERT (options);
if (wordcount < 4)
if (wordcount < 5)
goto out;
dict = dict_new ();
@ -1136,7 +1136,7 @@ cli_cmd_volume_remove_brick_parse (const char **words, int wordcount,
brick_index = 3;
w = str_getunamb (words[3], type_opword);
if (w && !strcmp ("replica", w)) {
if (wordcount < 5) {
if (wordcount < 6) {
ret = -1;
goto out;
}
@ -1158,10 +1158,8 @@ cli_cmd_volume_remove_brick_parse (const char **words, int wordcount,
w = str_getunamb (words[wordcount - 1], opwords);
if (!w) {
/* Should be default 'force' */
command = GF_OP_CMD_COMMIT_FORCE;
if (question)
*question = 1;
ret = -1;
goto out;
} else {
/* handled this option */
wordcount--;

View File

@ -2299,7 +2299,8 @@ struct cli_cmd volume_cmds[] = {
cli_cmd_volume_add_brick_cbk,
"add brick to volume <VOLNAME>"},
{ "volume remove-brick <VOLNAME> [replica <COUNT>] <BRICK> ... [start|stop|status|commit|force]",
{ "volume remove-brick <VOLNAME> [replica <COUNT>] <BRICK> ..."
" <start|stop|status|commit|force>",
cli_cmd_volume_remove_brick_cbk,
"remove brick from volume <VOLNAME>"},

View File

@ -22,7 +22,7 @@ EXPECT 'Started' volinfo_field $V0 'Status';
TEST $CLI volume add-brick $V0 $H0:$B0/${V0}{9,10,11,12};
EXPECT '12' brick_count $V0
TEST $CLI volume remove-brick $V0 $H0:$B0/${V0}{1,2,3,4};
TEST $CLI volume remove-brick $V0 $H0:$B0/${V0}{1,2,3,4} force;
EXPECT '8' brick_count $V0
TEST $CLI volume stop $V0;

34
tests/bugs/bug-1077682.t Normal file
View File

@ -0,0 +1,34 @@
#!/bin/bash
. $(dirname $0)/../include.rc
. $(dirname $0)/../volume.rc
function get-task-status()
{
$CLI $COMMAND | grep -o $PATTERN
if [ ${PIPESTATUS[0]} -ne 0 ];
then
return 1
fi
return 0
}
cleanup;
TEST glusterd
TEST pidof glusterd
TEST $CLI volume create $V0 $H0:$B0/${V0}{1,2,3,4}
TEST $CLI volume start $V0
TEST ! $CLI volume remove-brick $V0 $H0:$B0/${V0}1
TEST $CLI volume remove-brick $V0 $H0:$B0/${V0}2 force
TEST $CLI volume remove-brick $V0 $H0:$B0/${V0}3 start
EXPECT_WITHIN 10 "completed" remove_brick_status_completed_field "$V0" \
"$H0:$B0/${V0}3"
TEST $CLI volume remove-brick $V0 $H0:$B0/${V0}3 commit
TEST killall glusterd
TEST glusterd
cleanup

View File

@ -35,7 +35,7 @@ EXPECT '1' brick_count $V0
TEST $CLI volume add-brick $V0 $H0:$B0/${V0}2;
EXPECT '2' brick_count $V0
TEST $CLI volume remove-brick $V0 $H0:$B0/${V0}2;
TEST $CLI volume remove-brick $V0 $H0:$B0/${V0}2 force;
EXPECT '1' brick_count $V0
cleanup;

View File

@ -19,10 +19,10 @@ function brick_count()
TEST $CLI volume start $V0
TEST $CLI volume remove-brick $V0 $H0:$B0/${V0}2;
TEST $CLI volume remove-brick $V0 $H0:$B0/${V0}2 force;
EXPECT '2' brick_count $V0
TEST $CLI volume remove-brick $V0 $H0:$B0/${V0}3;
TEST $CLI volume remove-brick $V0 $H0:$B0/${V0}3 force;
EXPECT '1' brick_count $V0
cleanup;

View File

@ -27,7 +27,7 @@ function remove_brick_start {
}
function remove_brick {
$CLI volume remove-brick $V0 replica 2 $H0:$B0/${V0}{1,4,7} 2>&1|grep -oE 'success|failed'
$CLI volume remove-brick $V0 replica 2 $H0:$B0/${V0}{1,4,7} force 2>&1|grep -oE 'success|failed'
}
#remove-brick start variant