diff options
Diffstat (limited to 'tests/bitrot')
-rw-r--r-- | tests/bitrot/br-stub.c | 47 | ||||
-rw-r--r-- | tests/bitrot/br-stub.t | 21 |
2 files changed, 54 insertions, 14 deletions
diff --git a/tests/bitrot/br-stub.c b/tests/bitrot/br-stub.c index 6cb12ed0a8e..e164170bb83 100644 --- a/tests/bitrot/br-stub.c +++ b/tests/bitrot/br-stub.c @@ -31,8 +31,10 @@ brstub_validate_version (char *bpath, unsigned long version) if (ret < 0) goto err; - if (xv->ongoingversion != version) + if (xv->ongoingversion != version) { match = -1; + fprintf (stderr, "ongoingversion: %lu\n", xv->ongoingversion); + } free (xv); return match; @@ -42,11 +44,12 @@ brstub_validate_version (char *bpath, unsigned long version) } int -brstub_open_validation (char *filp, char *bpath, unsigned long startversion) +brstub_write_validation (char *filp, char *bpath, unsigned long startversion) { int fd1 = 0; int fd2 = 0; int ret = 0; + char *string = "string\n"; /* read only check */ fd1 = open (filp, O_RDONLY); @@ -55,18 +58,37 @@ brstub_open_validation (char *filp, char *bpath, unsigned long startversion) close (fd1); ret = brstub_validate_version (bpath, startversion); - if (ret < 0) + if (ret == 0) goto err; - /* single open (write/) check */ fd1 = open (filp, O_RDWR); if (fd1 < 0) goto err; - close (fd1); + ret = write (fd1, string, strlen (string)); + if (ret <= 0) + goto err; + /** + * Fsync is done so that the write call has properly reached the + * disk. For fuse mounts write-behind xlator would have held the + * writes with itself and for nfs, client would have held the + * write in its cache. So write fop would not have triggered the + * versioning as it would have not reached the bit-rot-stub. + */ + fsync (fd1); startversion++; ret = brstub_validate_version (bpath, startversion); + if (ret < 0) + goto err; + ret = write (fd1, string, strlen (string)); + if (ret <= 0) + goto err; + ret = brstub_validate_version (bpath, startversion); + if (ret < 0) + goto err; + + close (fd1); /* multi open (write/) check */ fd1 = open (filp, O_RDWR); if (fd1 < 0) @@ -74,13 +96,20 @@ brstub_open_validation (char *filp, char *bpath, unsigned long startversion) fd2 = open (filp, O_WRONLY); if (fd1 < 0) goto err; + + ret = write (fd1, string, strlen (string)); + if (ret <= 0) + goto err; + + ret = write (fd1, string, strlen (string)); + if (ret <= 0) + goto err; close (fd1); close (fd2); /** - * incremented once per open()/open().../close()/close() sequence + * incremented once per write()/write().../close()/close() sequence */ - startversion++; ret = brstub_validate_version (bpath, startversion); if (ret < 0) goto err; @@ -106,11 +135,11 @@ brstub_new_object_validate (char *filp, char *brick) printf ("Validating initial version..\n"); ret = brstub_validate_version (bpath, 1); - if (ret < 0) + if (ret == 0) goto err; printf ("Validating version on modifications..\n"); - ret = brstub_open_validation (filp, bpath, 1); + ret = brstub_write_validation (filp, bpath, 1); if (ret < 0) goto err; diff --git a/tests/bitrot/br-stub.t b/tests/bitrot/br-stub.t index 11d02418785..bab4c7cdbd1 100644 --- a/tests/bitrot/br-stub.t +++ b/tests/bitrot/br-stub.t @@ -2,6 +2,7 @@ . $(dirname $0)/../include.rc . $(dirname $0)/../volume.rc +. $(dirname $0)/../nfs.rc STUB_SOURCE=$(dirname $0)/br-stub.c STUB_EXEC=$(dirname $0)/br-stub @@ -17,9 +18,9 @@ EXPECT "$V0" volinfo_field $V0 'Volume Name'; EXPECT 'Created' volinfo_field $V0 'Status'; EXPECT '2' brick_count $V0 -## Turn off open-behind (stub does not work with anonfd yet..) -TEST $CLI volume set $V0 performance.open-behind off -EXPECT 'off' volinfo_field $V0 'performance.open-behind' +## Turn off write-behind (write-behind clubs writes together) +TEST $CLI volume set $V0 performance.write-behind off +#EXPECT 'off' volinfo_field $V0 'performance.open-behind' ## Start the volume TEST $CLI volume start $V0; @@ -27,6 +28,7 @@ EXPECT 'Started' volinfo_field $V0 'Status'; ## Mount the volume TEST $GFS --volfile-server=$H0 --volfile-id=$V0 $M0; +TEST mount_nfs $H0:/$V0 $N0 nolock; ## Build stub C source build_tester $STUB_SOURCE -o $STUB_EXEC -I$(dirname $0)/../../xlators/features/bit-rot/src/stub @@ -34,11 +36,20 @@ TEST [ -e $STUB_EXEC ] ## create & check version fname="$M0/filezero" -touch $fname +touch $fname; backpath=$(get_backend_paths $fname) + +TEST $STUB_EXEC $fname $(dirname $backpath) + +rm -f $fname; + +## test nfs +fname="$N0/filezero" +touch $fname; # backpath remains same.. + TEST $STUB_EXEC $fname $(dirname $backpath) -## cleanups.. +##cleanups.. rm -f $STUB_EXEC cleanup; |