diff options
Diffstat (limited to 'tests/bugs/glusterfs/bug-844688.t')
| -rwxr-xr-x | tests/bugs/glusterfs/bug-844688.t | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/tests/bugs/glusterfs/bug-844688.t b/tests/bugs/glusterfs/bug-844688.t new file mode 100755 index 00000000000..65f41b342a5 --- /dev/null +++ b/tests/bugs/glusterfs/bug-844688.t @@ -0,0 +1,55 @@ +#!/bin/bash + +. $(dirname $0)/../../include.rc +. $(dirname $0)/../../volume.rc + +function check_callstack_log { + local text=$1 + statedump_file=$(generate_mount_statedump $V0); + grep $text $statedump_file 2>/dev/null 1>/dev/null; + if [ $? -eq 0 ]; then + echo "1"; + else + echo "0"; + fi; +} + +cleanup; + +TEST glusterd +TEST pidof glusterd +TEST $CLI volume create $V0 $H0:$B0/brick0 +TEST $CLI volume start $V0 +TEST glusterfs -s $H0 --volfile-id $V0 $M0 + +mount_pid=$(get_mount_process_pid $V0); +# enable dumping of call stack creation and frame creation times in statedump +# monitoring is enabled by default + +# We want to make sure that there is a pending frame in gluster stack. +# For that we are creating a blocking lock scenario. + +TEST touch $M0/lockfile; +# Open two fd's on the same file +exec 8>$M0/lockfile; +exec 9>$M0/lockfile; + +# First flock will succeed and the second one will block, hence the background run. +flock -x 8 ; +flock -x 9 & + +EXPECT_WITHIN $PROCESS_UP_TIMEOUT "1" check_callstack_log "callstack-creation-time"; +EXPECT_WITHIN $PROCESS_UP_TIMEOUT "1" check_callstack_log "frame-creation-time"; + +flock -u 8 +flock -u 9; + +# Closing the fd's +exec 8>&- +exec 9>&- + +TEST rm -f $M0/lockfile; +EXPECT_WITHIN $UMOUNT_TIMEOUT "Y" force_umount $M0 + +rm -f $statedumpdir/glusterdump.$mount_pid.*; +cleanup |
