diff options
Diffstat (limited to 'tests/bugs/readdir-ahead')
| -rw-r--r-- | tests/bugs/readdir-ahead/bug-1390050.c | 72 | ||||
| -rw-r--r-- | tests/bugs/readdir-ahead/bug-1390050.t | 29 | ||||
| -rwxr-xr-x | tests/bugs/readdir-ahead/bug-1436090.t | 12 | ||||
| -rwxr-xr-x | tests/bugs/readdir-ahead/bug-1439640.t | 1 | ||||
| -rwxr-xr-x | tests/bugs/readdir-ahead/bug-1512437.t | 23 | ||||
| -rw-r--r-- | tests/bugs/readdir-ahead/bug-1670253-consistent-metadata.t | 23 |
6 files changed, 154 insertions, 6 deletions
diff --git a/tests/bugs/readdir-ahead/bug-1390050.c b/tests/bugs/readdir-ahead/bug-1390050.c new file mode 100644 index 00000000000..9578df2dd90 --- /dev/null +++ b/tests/bugs/readdir-ahead/bug-1390050.c @@ -0,0 +1,72 @@ +#include <stdio.h> +#include <sys/types.h> +#include <sys/stat.h> +#include <unistd.h> +#include <fcntl.h> +#include <dirent.h> +#include <string.h> +#include <errno.h> + +int +main(int argc, char *argv[]) +{ + const char *glfs_dir = NULL, *filepath = NULL; + DIR *dirfd = NULL; + int filefd = 0, ret = 0; + struct stat stbuf = { + 0, + }; + size_t size_before_write = 0; + + glfs_dir = argv[1]; + filepath = argv[2]; + dirfd = opendir(glfs_dir); + if (dirfd == NULL) { + fprintf(stderr, "opening directory failed (%s)\n", strerror(errno)); + goto err; + } + + filefd = open(filepath, O_RDWR); + if (filefd < 0) { + fprintf(stderr, "open failed on path %s (%s)\n", filepath, + strerror(errno)); + goto err; + } + + ret = stat(filepath, &stbuf); + if (ret < 0) { + fprintf(stderr, "stat failed on path %s (%s)\n", filepath, + strerror(errno)); + goto err; + } + + size_before_write = stbuf.st_size; + + ret = write(filefd, "testdata", strlen("testdata123") + 1); + if (ret <= 0) { + fprintf(stderr, "write failed (%s)\n", strerror(errno)); + goto err; + } + + while (readdir(dirfd)) { + /* do nothing */ + } + + ret = stat(filepath, &stbuf); + if (ret < 0) { + fprintf(stderr, "stat failed on path %s (%s)\n", strerror(errno)); + goto err; + } + + if (stbuf.st_size == size_before_write) { + fprintf(stderr, + "file size (%lu) has not changed even after " + "its written to\n", + stbuf.st_size); + goto err; + } + + return 0; +err: + return -1; +} diff --git a/tests/bugs/readdir-ahead/bug-1390050.t b/tests/bugs/readdir-ahead/bug-1390050.t new file mode 100644 index 00000000000..ab1d7d4ead9 --- /dev/null +++ b/tests/bugs/readdir-ahead/bug-1390050.t @@ -0,0 +1,29 @@ +#!/bin/bash + +. $(dirname $0)/../../include.rc +. $(dirname $0)/../../volume.rc +. $(dirname $0)/../../fileio.rc + +cleanup; + +TEST glusterd + +TEST $CLI volume create $V0 $H0:$B{0..1}/$V0 +TEST $CLI volume set $V0 readdir-ahead on + +DIRECTORY="$M0/subdir1/subdir2" + +#Make sure md-cache has large timeout to hold stat from readdirp_cbk in its cache +TEST $CLI volume set $V0 performance.md-cache-timeout 600 +TEST $CLI volume start $V0 +TEST glusterfs --volfile-server=$H0 --volfile-id=$V0 $M0 +rm -rf $M0/* +TEST mkdir -p $DIRECTORY +rm -rf $DIRECTORY/* +TEST touch $DIRECTORY/file{0..10} +rdd_tester=$(dirname $0)/rdd-tester +TEST build_tester $(dirname $0)/bug-1390050.c -o $rdd_tester +TEST $rdd_tester $DIRECTORY $DIRECTORY/file4 +rm -f $rdd_tester +cleanup; + diff --git a/tests/bugs/readdir-ahead/bug-1436090.t b/tests/bugs/readdir-ahead/bug-1436090.t index 58e9093f1c3..e0877f15684 100755 --- a/tests/bugs/readdir-ahead/bug-1436090.t +++ b/tests/bugs/readdir-ahead/bug-1436090.t @@ -19,12 +19,12 @@ EXPECT 'Started' cluster_volinfo_field 1 $V0 'Status'; TEST glusterfs -s $H1 --volfile-id $V0 $M0; TEST mkdir $M0/dir1 -# Create a large file (3.2 GB), so that rebalance takes time -# Reading from /dev/urandom is slow, so we will cat it together -dd if=/dev/urandom of=/tmp/FILE2 bs=64k count=10240 -for i in {1..5}; do - cat /tmp/FILE2 >> $M0/dir1/foo -done +# Create a large file (4 GB), so that rebalance takes time +# Since we really don't care about the contents of the file, we use fallocate +# to generate the file much faster. We could also use truncate, which is even +# faster, but rebalance could take advantage of an sparse file and migrate it +# in an optimized way, but we don't want a fast migration. +TEST fallocate -l 4G $M0/dir1/foo TEST mv $M0/dir1/foo $M0/dir1/bar diff --git a/tests/bugs/readdir-ahead/bug-1439640.t b/tests/bugs/readdir-ahead/bug-1439640.t index cc6c829fccc..dcd54076444 100755 --- a/tests/bugs/readdir-ahead/bug-1439640.t +++ b/tests/bugs/readdir-ahead/bug-1439640.t @@ -8,6 +8,7 @@ cleanup; TEST glusterd TEST $CLI volume create $V0 $H0:$B{0..1}/$V0 +TEST $CLI volume set $V0 readdir-ahead on TEST $CLI volume start $V0 TEST ! $CLI volume set $V0 parallel-readdir sdf diff --git a/tests/bugs/readdir-ahead/bug-1512437.t b/tests/bugs/readdir-ahead/bug-1512437.t new file mode 100755 index 00000000000..50eaa7d6696 --- /dev/null +++ b/tests/bugs/readdir-ahead/bug-1512437.t @@ -0,0 +1,23 @@ +#!/bin/bash + +. $(dirname $0)/../../include.rc +. $(dirname $0)/../../volume.rc + +cleanup; + +TEST glusterd + +TEST $CLI volume create $V0 $H0:$B0/${V0}1 +TEST $CLI volume start $V0 + +TEST $CLI volume set $V0 parallel-readdir on +TEST $CLI volume set $V0 readdir-optimize on + +TEST glusterfs --volfile-server=$H0 --volfile-id=$V0 $M0 +TEST mkdir -p $M0/subdir1/subdir2; +umount $M0 +TEST glusterfs --volfile-server=$H0 --volfile-id=$V0 $M0 +count=`ls -1 $M0/subdir1 | wc -l` +TEST [ $count -eq 1 ] + +cleanup; diff --git a/tests/bugs/readdir-ahead/bug-1670253-consistent-metadata.t b/tests/bugs/readdir-ahead/bug-1670253-consistent-metadata.t new file mode 100644 index 00000000000..6adfc17c92c --- /dev/null +++ b/tests/bugs/readdir-ahead/bug-1670253-consistent-metadata.t @@ -0,0 +1,23 @@ +#!/bin/bash + +. $(dirname $0)/../../include.rc +. $(dirname $0)/../../volume.rc + +cleanup; + +TEST glusterd + +TEST $CLI volume create $V0 replica 3 $H0:$B0/${V0}{0,1,2} +TEST $CLI volume set $V0 readdir-ahead on #on by default as of writing this .t. +TEST $CLI volume set $V0 consistent-metadata on +TEST $CLI volume start $V0 +TEST glusterfs --volfile-server=$H0 --volfile-id=$V0 $M0 +TEST touch $M0/FILE +echo "abc" >> $M0/FILE +EXPECT "^0$" echo $? +EXPECT "abc" cat $M0/FILE +echo "truncate" >$M0/FILE +EXPECT "^0$" echo $? +EXPECT "truncate" cat $M0/FILE +EXPECT_WITHIN $UMOUNT_TIMEOUT "Y" force_umount $M0 +cleanup; |
