diff options
author | Raghavendra Bhat <raghavendra@redhat.com> | 2013-02-20 13:27:33 +0530 |
---|---|---|
committer | Anand Avati <avati@redhat.com> | 2013-02-20 13:04:52 -0800 |
commit | e4b504d624f503cce44fbf45d68abfef4cd02d1c (patch) | |
tree | 5b54f4efd390874fcbc458af8ff86dca7efa6a9e | |
parent | a50dd81148c6c001bf0902fb60a8ea1450bb5e6f (diff) |
testcase for the open-behind xlator when open fails
Test if the fops which are put into a stub and are waiting for
the open to complete should be unwound with the error if open
call itself fails.
Change-Id: I8c363d98303a7df1a0ca9ea6ef207c7123fdd388
BUG: 846240
Signed-off-by: Raghavendra Bhat <raghavendra@redhat.com>
Reviewed-on: http://review.gluster.org/4553
Reviewed-by: Anand Avati <avati@redhat.com>
Tested-by: Anand Avati <avati@redhat.com>
-rw-r--r-- | tests/bugs/bug-846240.t | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/tests/bugs/bug-846240.t b/tests/bugs/bug-846240.t new file mode 100644 index 00000000000..5c5fbf0147a --- /dev/null +++ b/tests/bugs/bug-846240.t @@ -0,0 +1,56 @@ +#!/bin/bash + +. $(dirname $0)/../include.rc +. $(dirname $0)/../volume.rc + +cleanup; + +TEST glusterd +TEST pidof glusterd +TEST $CLI volume info; + +function volinfo_field() +{ + local vol=$1; + local field=$2; + + $CLI volume info $vol | grep "^$field: " | sed 's/.*: //'; +} + +TEST $CLI volume create $V0 $H0:$B0/brick1 $H0:$B0/brick2; +EXPECT 'Created' volinfo_field $V0 'Status'; + +TEST $CLI volume start $V0; +EXPECT 'Started' volinfo_field $V0 'Status'; + +MOUNTDIR=$M0; +TEST glusterfs --volfile-server=$H0 --volfile-id=$V0 $MOUNTDIR; +TEST glusterfs --volfile-server=$H0 --volfile-id=$V0 $M1; + +TEST touch $M0/testfile; + +# open the file with the fd as 4 +exec 4>"$M0/testfile"; + +# remove the file from the other mount point. If unlink is sent from +# $M0 itself, then the file will be actually opened by open-behind which +# we dont want for this testcase +TEST rm -f $M1/testfile; + +# below command opens the file and writes to the file. +# upon open, open-behind unwinds the open call with success. +# now when write comes, open-behind actually opens the file +# and then sends write on the fd. But before sending open itself, +# the file would have been removed from the mount $M1. open() gets error +# and the write call which is put into a stub (open had to be sent first) +# should unwind with the error received in the open call. +echo "data" >> $M0/testfile 2>/dev/null 1>/dev/null; +TEST [ $? -ne 0 ] + +exec 4>&- + +TEST rm -rf $MOUNTDIR/* + +TEST umount $MOUNTDIR -l + +cleanup; |