summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorkrad <krad@fb.com>2017-07-18 16:41:49 -0700
committerJeff Darcy <jeff@pl.atyp.us>2017-09-13 17:50:36 +0000
commit8a3de0b4ca841cc2405b7e60ecf70f8eca62b800 (patch)
tree9319a76e0a97f53720eab4ed35ac43cb43cd09d4 /tests
parent3b0757b51a34bc726a40935e644f0e0498e7beff (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.t128
-rwxr-xr-xtests/basic/volume-snapshot-xml.t3
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"