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:
parent
e75be8977e
commit
5dedef81b6
@ -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--;
|
||||
|
@ -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>"},
|
||||
|
||||
|
@ -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
34
tests/bugs/bug-1077682.t
Normal 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
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user