diff options
| author | krad <krad@fb.com> | 2017-07-18 16:41:49 -0700 | 
|---|---|---|
| committer | Jeff Darcy <jeff@pl.atyp.us> | 2017-09-13 17:50:36 +0000 | 
| commit | 8a3de0b4ca841cc2405b7e60ecf70f8eca62b800 (patch) | |
| tree | 9319a76e0a97f53720eab4ed35ac43cb43cd09d4 /tests | |
| parent | 3b0757b51a34bc726a40935e644f0e0498e7beff (diff) | |
Disable brick daemon from incorrect brick directory
Summary:
Currently the bricks can open any mount directory from the given volume. This patch adds a provision to prevent
bricks from opening brick directories that aren't created for them. This will help with operating gluster on large
scale.
We add a new xattr GF_XATTR_BRICK_NAME to the brick directory. When we start a brick daemon, we make sure the path on
disk matches with the config provided. For backward compatibility, we ignore if there is no value for
GF_XATTR_BRICK_NAME and set the current brick daemon's path as value.
We ignore GF_XATTR_BRICK_NAME during healing and reset GF_XATTR_BRICK_NAME on brick replace.
Test Plan: Run fb-smoke
Reviewers: jdarcy, sshreyas
Reviewed By: sshreyas
Differential Revision: https://phabricator.intern.facebook.com/D5448921
Porting note: disabled some checks to deal with the snapshot case
Change-Id: I98e62033dfd07f30ad3b99ac003ce94c8d935e5f
Signed-off-by: Jeff Darcy <jdarcy@fb.com>
Reviewed-on: https://review.gluster.org/18275
Reviewed-by: Jeff Darcy <jeff@pl.atyp.us>
Tested-by: Jeff Darcy <jeff@pl.atyp.us>
CentOS-regression: Gluster Build System <jenkins@build.gluster.org>
Smoke: Gluster Build System <jenkins@build.gluster.org>
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/basic/brick-reopen.t | 128 | ||||
| -rwxr-xr-x | tests/basic/volume-snapshot-xml.t | 3 | 
2 files changed, 131 insertions, 0 deletions
diff --git a/tests/basic/brick-reopen.t b/tests/basic/brick-reopen.t new file mode 100644 index 00000000000..1f25315e6e2 --- /dev/null +++ b/tests/basic/brick-reopen.t @@ -0,0 +1,128 @@ +#!/bin/bash + +. $(dirname $0)/../include.rc +. $(dirname $0)/../volume.rc + +function write() { +        dd if=/dev/urandom of=$M0/test bs=1k count=200 +} + +function swap_bricks { +        # swap brick 0 and 1 directories +        mv $B0/brick0 "$B0/brick0-tmp" && +        mv $B0/brick1 $B0/brick0 && +        mv "$B0/brick0-tmp" $B0/brick1 +} + +function kick_glusterd { +        killall glusterd && +        ! pidof glusterd && +        glusterd && +        pidof glusterd + +        if [ $? -eq 0 ]; then +                echo "Y" +        else +                echo "N" +        fi +} + +function mute { +        cmd=$@ +        $cmd &> /dev/null +        if [ $? -eq 0 ]; then +                echo "Y" +        else +                echo "N" +        fi +} + +cleanup; + +# Setup +TEST mute glusterd +TEST mute pidof glusterd +TEST mkdir -p $B0/brick{0,1} +TEST $CLI volume create $V0 replica 2 $H0:$B0/brick{0,1} + +TEST $CLI volume start $V0 +TEST glusterfs --volfile-id=$V0 --volfile-server=$H0 $M0 --entry-timeout=0 --attribute-timeout=0; +EXPECT_WITHIN $CHILD_UP_TIMEOUT "1" afr_child_up_status $V0 0 + +# Stop volume and force start volume +TEST write +TEST $CLI volume stop $V0 +TEST ! write +TEST $CLI volume start $V0 force +EXPECT_WITHIN $CHILD_UP_TIMEOUT "1" afr_child_up_status $V0 0 +TEST write + +# Kill one brick and force restart volume +TEST kill_brick $V0 $H0 $B0/brick0 +TEST $CLI volume start $V0 force +EXPECT_WITHIN $CHILD_UP_TIMEOUT "1" afr_child_up_status $V0 0 +TEST write + +# Kill one brick and kill mgmt +TEST kill_brick $V0 $H0 $B0/brick0 +TEST kick_glusterd +EXPECT_WITHIN $CHILD_UP_TIMEOUT "1" afr_child_up_status $V0 0 +TEST write + +# Stop volume, swap brick directories and force start volume +TEST $CLI volume stop $V0 +TEST swap_bricks +TEST ! $CLI volume start $V0 force +EXPECT "0" afr_child_up_status $V0 0 +TEST ! write + +# Re-swap the brick directories and force start volume +TEST swap_bricks +TEST $CLI volume start $V0 force +EXPECT_WITHIN $CHILD_UP_TIMEOUT "1" afr_child_up_status $V0 0 +TEST write + +# retest scenario with kick glusterd +TEST kill_brick $V0 $H0 $B0/brick0 +TEST kill_brick $V0 $H0 $B0/brick1 +TEST swap_bricks +TEST kick_glusterd +EXPECT_WITHIN $CHILD_UP_TIMEOUT "0" afr_child_up_status $V0 0 +TEST ! write + +TEST swap_bricks +TEST kick_glusterd +EXPECT_WITHIN $CHILD_UP_TIMEOUT "1" afr_child_up_status $V0 0 +TEST write + +# test backward compatibility +TEST $CLI volume stop $V0 +TEST mute setfattr -x "trusted.glusterfs.brick-path" $B0/${V0}0 +TEST mute ! getfattr -n "trusted.glusterfs.brick-path" $B0/${V0}0 +TEST $CLI volume start $V0 force +EXPECT_WITHIN $CHILD_UP_TIMEOUT "1" afr_child_up_status $V0 0 +TEST mute getfattr -n "trusted.glusterfs.brick-path" $B0/${V0}0 +TEST $CLI volume stop $V0 +TEST $CLI volume start $V0 force +EXPECT_WITHIN $CHILD_UP_TIMEOUT "1" afr_child_up_status $V0 0 + +# redo the test with kicking glusterd +TEST kill_brick $V0 $H0 $B0/brick0 +TEST mute setfattr -x "trusted.glusterfs.brick-path" $B0/${V0}0 +TEST mute ! getfattr -n "trusted.glusterfs.brick-path" $B0/${V0}0 +TEST kick_glusterd +EXPECT_WITHIN $CHILD_UP_TIMEOUT "1" afr_child_up_status $V0 0 +TEST mute getfattr -n "trusted.glusterfs.brick-path" $B0/${V0}0 +TEST kill_brick $V0 $H0 $B0/brick0 +TEST kick_glusterd +EXPECT_WITHIN $CHILD_UP_TIMEOUT "1" afr_child_up_status $V0 0 + +# replace brick and force start volume +TEST kill_brick $V0 $H0 $B0/brick0 +TEST gluster volume replace-brick $V0 $H0:$B0/brick0 $H0:$B0/brick3 commit force +TEST $CLI volume start $V0 force +EXPECT_WITHIN $CHILD_UP_TIMEOUT "1" afr_child_up_status $V0 0 +TEST write + +cleanup + diff --git a/tests/basic/volume-snapshot-xml.t b/tests/basic/volume-snapshot-xml.t index d58e898083a..a8ccfee8fe8 100755 --- a/tests/basic/volume-snapshot-xml.t +++ b/tests/basic/volume-snapshot-xml.t @@ -41,11 +41,14 @@ EXPECT "Started" get-xml "snapshot info snap1" "status"  # Snapshot list xmls  EXPECT "2" get-xml "snapshot list" "count" +#$CLI snapshot list $V0 > /dev/tty  EXPECT "snap2" get-xml "snapshot list $V0" "snapshot"  # Snapshot status xmls +#$CLI snapshot status > /dev/tty  EXPECT "snap2" get-xml "snapshot status" "name"  EXPECT "snap2" get-xml "snapshot deactivate snap2" "name" +#$CLI snapshot status > /dev/tty  EXPECT "N/A" get-xml "snapshot status" "pid"  EXPECT "snap1" get-xml "snapshot status snap1" "name"  EXPECT "Yes" get-xml "snapshot status snap1" "brick_running"  | 
