From def8890d5ea7e73dfa37023e5d324be0bc289f5a Mon Sep 17 00:00:00 2001 From: Krutika Dhananjay Date: Mon, 2 Dec 2013 11:37:55 +0530 Subject: cli: Fail creation of bricks on root partition in script mode Also added an option 'wignore' to save ourselves the trouble of modifying test scripts in our regression test suite as well as those that are still under review. Change-Id: Id320c03595506e9da187e766991c19640bd000c5 BUG: 1028281 Signed-off-by: Krutika Dhananjay Reviewed-on: http://review.gluster.org/6409 Reviewed-by: Kaushal M Reviewed-by: Krishnan Parthasarathi Tested-by: Gluster Build System Reviewed-by: Anand Avati --- cli/src/cli-cmd-volume.c | 6 ++-- cli/src/cli.c | 7 +++++ cli/src/cli.h | 1 + tests/bugs/bug-948729/bug-948729-mode-script.t | 43 +++++++------------------- tests/bugs/bug-948729/bug-948729.t | 3 +- tests/include.rc | 2 +- 6 files changed, 26 insertions(+), 36 deletions(-) diff --git a/cli/src/cli-cmd-volume.c b/cli/src/cli-cmd-volume.c index f11fa21db96..f3b1828a0c7 100644 --- a/cli/src/cli-cmd-volume.c +++ b/cli/src/cli-cmd-volume.c @@ -395,7 +395,7 @@ cli_cmd_volume_create_cbk (struct cli_state *state, struct cli_cmd_word *word, } } - if (state->mode & GLUSTER_MODE_SCRIPT) { + if (state->mode & GLUSTER_MODE_WIGNORE) { ret = dict_set_int32 (options, "force", _gf_true); if (ret) { gf_log ("cli", GF_LOG_ERROR, "Failed to set force " @@ -981,7 +981,7 @@ cli_cmd_volume_add_brick_cbk (struct cli_state *state, } } - if (state->mode & GLUSTER_MODE_SCRIPT) { + if (state->mode & GLUSTER_MODE_WIGNORE) { ret = dict_set_int32 (options, "force", _gf_true); if (ret) { gf_log ("cli", GF_LOG_ERROR, "Failed to set force " @@ -1552,7 +1552,7 @@ cli_cmd_volume_replace_brick_cbk (struct cli_state *state, goto out; } - if (state->mode & GLUSTER_MODE_SCRIPT) { + if (state->mode & GLUSTER_MODE_WIGNORE) { ret = dict_set_int32 (options, "force", _gf_true); if (ret) { gf_log ("cli", GF_LOG_ERROR, "Failed to set force" diff --git a/cli/src/cli.c b/cli/src/cli.c index 67f1ad25793..a77200c6692 100644 --- a/cli/src/cli.c +++ b/cli/src/cli.c @@ -326,14 +326,21 @@ cli_opt_parse (char *opt, struct cli_state *state) return 0; } + if (strcmp (opt, "wignore") == 0) { + state->mode |= GLUSTER_MODE_WIGNORE; + return 0; + } + oarg = strtail (opt, "mode="); if (oarg) { if (strcmp (oarg, "script") == 0) { state->mode |= GLUSTER_MODE_SCRIPT; return 0; } + if (strcmp (oarg, "interactive") == 0) return 0; + return -1; } diff --git a/cli/src/cli.h b/cli/src/cli.h index 1fe8ffff7fb..f5db29383c0 100644 --- a/cli/src/cli.h +++ b/cli/src/cli.h @@ -45,6 +45,7 @@ enum argp_option_keys { #define GLUSTER_MODE_SCRIPT (1 << 0) #define GLUSTER_MODE_ERR_FATAL (1 << 1) #define GLUSTER_MODE_XML (1 << 2) +#define GLUSTER_MODE_WIGNORE (1 << 3) #define GLUSTERD_GET_QUOTA_AUX_MOUNT_PATH(abspath, volname, path) \ diff --git a/tests/bugs/bug-948729/bug-948729-mode-script.t b/tests/bugs/bug-948729/bug-948729-mode-script.t index 541ca897d5f..5a1fdd3b1db 100644 --- a/tests/bugs/bug-948729/bug-948729-mode-script.t +++ b/tests/bugs/bug-948729/bug-948729-mode-script.t @@ -13,10 +13,6 @@ uuid1=`uuidgen`; uuid2=`uuidgen`; uuid3=`uuidgen`; -V1=patchy1 -V2=patchy2 -V3=patchy3 - TEST launch_cluster 2; TEST $CLI_1 peer probe $H2; @@ -24,17 +20,11 @@ TEST $CLI_1 peer probe $H2; EXPECT_WITHIN 20 1 check_peers; B3=/d/backends/3 -B4=/d/backends/4 -B5=/d/backends/5 -B6=/d/backends/6 -mkdir -p $B3 $B4 $B5 $B6 +mkdir -p $B3 TEST truncate -s 16M $B1/brick1 TEST truncate -s 16M $B2/brick2 TEST truncate -s 16M $B3/brick3 -TEST truncate -s 16M $B4/brick4 -TEST truncate -s 16M $B5/brick5 -TEST truncate -s 16M $B6/brick6 TEST LD1=`losetup --find --show $B1/brick1` TEST mkfs.xfs $LD1 @@ -42,44 +32,35 @@ TEST LD2=`losetup --find --show $B2/brick2` TEST mkfs.xfs $LD2 TEST LD3=`losetup --find --show $B3/brick3` TEST mkfs.xfs $LD3 -TEST LD4=`losetup --find --show $B4/brick4` -TEST mkfs.xfs $LD4 -TEST LD5=`losetup --find --show $B5/brick5` -TEST mkfs.xfs $LD5 -TEST LD6=`losetup --find --show $B6/brick6` -TEST mkfs.xfs $LD6 -mkdir -p $B1/$V0 $B2/$V0 $B3/$V0 $B4/$V0 $B5/$V0 $B6/$V0 +mkdir -p $B1/$V0 $B2/$V0 $B3/$V0 TEST mount -t xfs $LD1 $B1/$V0 TEST mount -t xfs $LD2 $B2/$V0 TEST mount -t xfs $LD3 $B3/$V0 -TEST mount -t xfs $LD4 $B4/$V0 -TEST mount -t xfs $LD5 $B5/$V0 -TEST mount -t xfs $LD6 $B6/$V0 + +cli1=$(echo $CLI1 | sed 's/ --wignore//') #Case 0: Parent directory of the brick is absent -TEST ! $CLI_1 volume create $V0 $H1:$B1/$V0/nonexistent/b1 $H2:$B2/$V0/nonexistent/b2 +TEST ! $cli1 volume create $V0 $H1:$B1/$V0/nonexistent/b1 $H2:$B2/$V0/nonexistent/b2 #Case 1: File system root being used as brick directory -TEST $CLI_1 volume create $V0 $H1:$B5/$V0 $H2:$B6/$V0 +TEST ! $cli1 volume create $V0 $H1:$B1/$V0 $H2:$B2/$V0 #Case 2: Brick directory contains only one component -TEST $CLI_1 volume create $V1 $H1:/$uuid1 $H2:/$uuid2 +TEST ! $cli1 volume create $V0 $H1:/$uuid1 $H2:/$uuid2 #Case 3: Sub-directories of the backend FS being used as brick directory -TEST $CLI_1 volume create $V2 $H1:$B1/$V0/brick1 $H2:$B2/$V0/brick2 +TEST $cli1 volume create $V0 $H1:$B1/$V0/brick1 $H2:$B2/$V0/brick2 #add-brick tests -TEST ! $CLI_1 volume add-brick $V0 $H1:$B3/$V0/nonexistent/brick3 -TEST $CLI_1 volume add-brick $V0 $H1:$B3/$V0 -TEST $CLI_1 volume add-brick $V1 $H1:/$uuid3 -TEST $CLI_1 volume add-brick $V2 $H1:$B4/$V0/brick3 +TEST ! $cli1 volume add-brick $V0 $H1:$B3/$V0/nonexistent/brick3 +TEST ! $cli1 volume add-brick $V0 $H1:$B3/$V0 +TEST ! $cli1 volume add-brick $V0 $H1:/$uuid3 +TEST $cli1 volume add-brick $V0 $H1:$B3/$V0/brick3 #####replace-brick tests #FIX-ME : replace-brick does not currently work in the newly introduced #####cluster test framework -rmdir /$uuid1 /$uuid2 /$uuid3 - cleanup; diff --git a/tests/bugs/bug-948729/bug-948729.t b/tests/bugs/bug-948729/bug-948729.t index f94db1ea055..3914a454c53 100644 --- a/tests/bugs/bug-948729/bug-948729.t +++ b/tests/bugs/bug-948729/bug-948729.t @@ -40,8 +40,9 @@ TEST mount -t xfs $LD1 $B1/$V0 TEST mount -t xfs $LD2 $B2/$V0 TEST mount -t xfs $LD3 $B3/$V0 -#Tests without --mode=script option +#Tests without options 'mode=script' and 'wignore' cli1=$(echo $CLI1 | sed 's/ --mode=script//') +cli1=$(echo $cli1 | sed 's/ --wignore//') #Case 0: Parent directory of the brick is absent TEST ! $cli1 volume create $V0 $H1:$B1/$V0/nonexistent/b1 $H2:$B2/$V0/nonexistent/b2 diff --git a/tests/include.rc b/tests/include.rc index 40dd8ac96b9..0369d26109b 100644 --- a/tests/include.rc +++ b/tests/include.rc @@ -8,7 +8,7 @@ H0=${H0:=`hostname --fqdn`}; # hostname DEBUG=${DEBUG:=0} # turn on debugging? statedumpdir=`gluster --print-statedumpdir`; # Default directory for statedump -CLI="gluster --mode=script"; +CLI="gluster --mode=script --wignore"; mkdir -p $B0; mkdir -p $M0 $M1; -- cgit