diff options
-rwxr-xr-x | tests/bugs/bug-913555.t | 64 | ||||
-rwxr-xr-x | tests/cluster.rc | 106 |
2 files changed, 132 insertions, 38 deletions
diff --git a/tests/bugs/bug-913555.t b/tests/bugs/bug-913555.t index 0e08bd377ae..f58d7bd6dd6 100755 --- a/tests/bugs/bug-913555.t +++ b/tests/bugs/bug-913555.t @@ -4,16 +4,8 @@ . $(dirname $0)/../include.rc . $(dirname $0)/../volume.rc +. $(dirname $0)/../cluster.rc -function vglusterd { - wd=$1/wd-$2 - cp -r /var/lib/glusterd $wd - rm -rf $wd/peers/* $wd/vols/* - echo -n "UUID=$(uuidgen)\noperating-version=1\n" > $wd/glusterd.info - opt1="management.transport.socket.bind-address=127.0.0.$2" - opt2="management.working-directory=$wd" - glusterd --xlator-option $opt1 --xlator-option $opt2 -} function check_fs { df $1 &> /dev/null @@ -21,46 +13,42 @@ function check_fs { } function check_peers { - $VCLI peer status | grep 'Peer in Cluster (Connected)' | wc -l + $CLI_1 peer status | grep 'Peer in Cluster (Connected)' | wc -l } -cleanup; +function glusterfsd_count { + pidof glusterfsd | wc -w; +} -topwd=$(mktemp -d) -trap "rm -rf $topwd" EXIT +cleanup; -vglusterd $topwd 100 -VCLI="$CLI --remote-host=127.0.0.100" -vglusterd $topwd 101 -TEST $VCLI peer probe 127.0.0.101 -vglusterd $topwd 102 -TEST $VCLI peer probe 127.0.0.102 +TEST launch_cluster 3; # start 3-node virtual cluster +TEST $CLI_1 peer probe $H2; # peer probe server 2 from server 1 cli +TEST $CLI_1 peer probe $H3; # peer probe server 3 from server 1 cli EXPECT_WITHIN 20 2 check_peers -create_cmd="$VCLI volume create $V0" -for i in $(seq 100 102); do - mkdir -p $B0/$V0$i - create_cmd="$create_cmd 127.0.0.$i:$B0/$V0$i" -done - -TEST $create_cmd -TEST $VCLI volume set $V0 cluster.server-quorum-type server -TEST $VCLI volume start $V0 -TEST glusterfs --volfile-server=127.0.0.100 --volfile-id=$V0 $M0 +TEST $CLI_1 volume create $V0 $H1:$B1/$V0 $H2:$B2/$V0 $H3:$B3/$V0 +TEST $CLI_1 volume set $V0 cluster.server-quorum-type server +TEST $CLI_1 volume start $V0 +TEST glusterfs --volfile-server=$H1 --volfile-id=$V0 $M0 # Kill one pseudo-node, make sure the others survive and volume stays up. -kill -9 $(ps -ef | grep gluster | grep 127.0.0.102 | awk '{print $2}') -EXPECT_WITHIN 20 1 check_peers -fs_status=$(check_fs $M0) -nnodes=$(pidof glusterfsd | wc -w) -TEST [ "$fs_status" = 0 -a "$nnodes" = 2 ] +TEST kill_node 3; +EXPECT_WITHIN 20 1 check_peers; +EXPECT 0 check_fs $M0; +EXPECT 2 glusterfsd_count; # Kill another pseudo-node, make sure the last one dies and volume goes down. -kill -9 $(ps -ef | grep gluster | grep 127.0.0.101 | awk '{print $2}') +TEST kill_node 2; EXPECT_WITHIN 20 0 check_peers -fs_status=$(check_fs $M0) -nnodes=$(pidof glusterfsd | wc -w) -TEST [ "$fs_status" = 1 -a "$nnodes" = 0 ] +EXPECT 1 check_fs $M0; +EXPECT 0 glusterfsd_count; # the two glusterfsds of the other two glusterds + # must be dead + +TEST $glusterd_2; +TEST $glusterd_3; +EXPECT_WITHIN 20 3 glusterfsd_count; # restore quorum, all ok +EXPECT_WITHIN 5 0 check_fs $M0; cleanup diff --git a/tests/cluster.rc b/tests/cluster.rc new file mode 100755 index 00000000000..1c06bca4766 --- /dev/null +++ b/tests/cluster.rc @@ -0,0 +1,106 @@ +#!/bin/bash + +CLUSTER_PFX="127.1.1"; # ".x" for each glusterd +CLUSTER_COUNT=1; # Just initial definition + +function launch_cluster() { + local count=$1; + + CLUSTER_COUNT=$count; + + define_backends $count; + define_hosts $count; + define_glusterds $count; + define_clis $count; + + start_glusterds; +} + + +function define_backends() { + local b; + + for i in `seq 1 $count`; do + eval "B$i=$B0/$i"; + done + + for i in `seq 1 $count`; do + b="B$i"; + mkdir -pv ${!b}/glusterd; + done +} + + +function define_glusterds() { + local count=$1; + local h; + local b; + local wopt; + local bopt; + local popt; + + for i in `seq 1 $count`; do + b="B$i"; + h="H$i"; + wopt="management.working-directory=${!b}/glusterd"; + bopt="management.transport.socket.bind-address=${!h}"; + popt="--pid-file=${!b}/glusterd.pid"; + eval "glusterd_$i='glusterd --xlator-option $wopt --xlator-option $bopt $popt'"; + eval "glusterd$i='glusterd --xlator-option $wopt --xlator-option $bopt $popt'"; + done +} + + +function start_glusterds() { + local g; + + for i in `seq 1 $CLUSTER_COUNT`; do + g="glusterd_$i"; + ${!g}; + done +} + + +function kill_glusterd() { + local index=$1; + local b; + local pidfile; + + b="B$index"; + pidfile="${!b}/glusterd.pid"; + + kill `cat $pidfile`; +} + + +function kill_node() { + local index=$1; + local h; + + h="H$index"; + + kill -9 $(ps -ef | grep gluster | grep ${!h} | awk '{print $2}'); +} + + +function define_hosts() { + local count=$1; + + for i in `seq 1 $count`; do + eval "H_$i=${CLUSTER_PFX}.$i" + eval "H$i=${CLUSTER_PFX}.$i"; + done +} + + +function define_clis() { + local count=$1; + local h; + + for i in `seq 1 $count`; do + h="H$i"; + eval "CLI_$i='$CLI --remote-host=${!h}'"; + eval "CLI$i='$CLI --remote-host=${!h}'"; + done +} + |