diff options
Diffstat (limited to 'tests/bugs/replicate')
| -rw-r--r-- | tests/bugs/replicate/bug-1250170-fsync.c | 56 | ||||
| -rw-r--r-- | tests/bugs/replicate/bug-1250170-fsync.t | 35 | 
2 files changed, 91 insertions, 0 deletions
diff --git a/tests/bugs/replicate/bug-1250170-fsync.c b/tests/bugs/replicate/bug-1250170-fsync.c new file mode 100644 index 00000000000..1d3025bcd9f --- /dev/null +++ b/tests/bugs/replicate/bug-1250170-fsync.c @@ -0,0 +1,56 @@ +#include <stdio.h> +#include <stdlib.h> +#include <inttypes.h> +#include <sys/types.h> +#include <sys/stat.h> +#include <fcntl.h> +#include <unistd.h> +#include <string.h> + +int main (int argc, char **argv) +{ +        char *file = NULL; +        int fd = -1; +        char *buffer = NULL; +        size_t buf_size = 0; +        size_t written = 0; +        int ret = 0; +        off_t offset = 0; +        int i = 0; +        int loop_count = 5; + +        if (argc < 2) { +                printf ("Usage:%s <filename>\n", argv[0]); +                return -1; +        } + +        file = argv[1]; +        buf_size = 1024; +        buffer = calloc(1, buf_size); +        if (!buffer) { +                perror("calloc"); +                return -1; +        } +        memset (buffer, 'R', buf_size); + +        fd = open(file, O_WRONLY); +        if (fd == -1) { +                perror("open"); +                return -1; +        } + +        for (i = 0; i < loop_count; i++) { +                ret =  write (fd, buffer, buf_size); +                if (ret == -1) { +                        perror("write"); +                        return ret; +                } else { +                        written += ret; +                } +                offset = lseek (fd, 0 , SEEK_SET); +        } + +        free(buffer); +        return 0; + +} diff --git a/tests/bugs/replicate/bug-1250170-fsync.t b/tests/bugs/replicate/bug-1250170-fsync.t new file mode 100644 index 00000000000..7a3fdbf8bb5 --- /dev/null +++ b/tests/bugs/replicate/bug-1250170-fsync.t @@ -0,0 +1,35 @@ +#!/bin/bash + +. $(dirname $0)/../../include.rc +. $(dirname $0)/../../volume.rc + +cleanup; +TEST gcc  $(dirname $0)/bug-1250170-fsync.c -o  $(dirname $0)/bug-1250170-fsync +TEST glusterd +TEST pidof glusterd + +TEST $CLI volume create $V0 replica 2 $H0:$B0/${V0}{0,1} +TEST $CLI volume set $V0 performance.write-behind off +TEST $CLI volume start $V0 +TEST $GFS --volfile-id=$V0 --volfile-server=$H0 $M0; + +TEST touch $M0/file +TEST kill_brick $V0 $H0 $B0/${V0}0 +TEST gluster volume profile $V0 start +#Perform 5 non-sequential writes. +TEST $(dirname $0)/bug-1250170-fsync $M0/file + +#Run profile info initially to filter out the interval statistics in the +#subsequent runs. +TEST $CLI volume profile $V0 info +#We get only cumulative statistics. +write_count=$($CLI volume profile $V0 info | grep WRITE |awk '{count += $8} END {print count}') +fsync_count=$($CLI volume profile $V0 info | grep FSYNC |awk '{count += $8} END {print count}') + +EXPECT "5" echo $write_count +TEST [ -z $fsync_count ] + +TEST $CLI volume profile $V0 stop +TEST umount $M0 +rm -f $(dirname $0)/bug-1250170-fsync +cleanup  | 
