From e52dc374bce30ed8a223e89628324ae18f433b96 Mon Sep 17 00:00:00 2001 From: Jeff Darcy Date: Wed, 20 Feb 2013 13:27:33 +0530 Subject: 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 Original-author: Raghavendra Bhat Signed-off-by: Raghavendra Bhat Signed-off-by: Jeff Darcy Reviewed-on: http://review.gluster.org/4634 Tested-by: Gluster Build System --- tests/bugs/bug-846240.t | 56 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 tests/bugs/bug-846240.t diff --git a/tests/bugs/bug-846240.t b/tests/bugs/bug-846240.t new file mode 100644 index 000000000..5c5fbf014 --- /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; -- cgit