diff options
author | Poornima G <pgurusid@redhat.com> | 2015-12-11 05:12:07 -0500 |
---|---|---|
committer | Raghavendra G <rgowdapp@redhat.com> | 2016-07-20 05:12:05 -0700 |
commit | 1f97d7101b3313ce647638310e1028da8dac6785 (patch) | |
tree | 869593e615ad5c7eff936a3dac72eab7aecebf0a /tests/bugs/md-cache | |
parent | 1929141da34d36f537e9798e3618e0e3bdc61eb6 (diff) |
md-cache: Add cache invalidation support to invalidate the meta data cache
Problem:
md-cache currently updates its stat in cbks of selected fops.
The default cache time is 1 second, if this is increasd to reap the
benefits of caching, we may end up with stale cache for long time,
as there is no logic yet to notify md-cache of backend changes by
another client.
Solution:
Use the existing upcall mechanism to invalidate the cache.
For this feature to work, "features.cache-invalidation" volume
option should be enabled.
This patch as is doesn't improve any performance, the benifit of the
patch is that it provides coherency for stat cache, hence the cache
timeout can be quite longer which in turn can improve the performance.
Change-Id: I2dbb0afa7b5e4a5a248f910188e0918e02f18692
BUG: 1211863
Signed-off-by: Poornima G <pgurusid@redhat.com>
Reviewed-on: http://review.gluster.org/12951
Smoke: Gluster Build System <jenkins@build.gluster.org>
CentOS-regression: Gluster Build System <jenkins@build.gluster.org>
NetBSD-regression: NetBSD Build System <jenkins@build.gluster.org>
Reviewed-by: Raghavendra G <rgowdapp@redhat.com>
Diffstat (limited to 'tests/bugs/md-cache')
-rw-r--r-- | tests/bugs/md-cache/bug-1211863.t | 60 |
1 files changed, 53 insertions, 7 deletions
diff --git a/tests/bugs/md-cache/bug-1211863.t b/tests/bugs/md-cache/bug-1211863.t index b969fbb4b29..4fa9e33d7a1 100644 --- a/tests/bugs/md-cache/bug-1211863.t +++ b/tests/bugs/md-cache/bug-1211863.t @@ -5,18 +5,64 @@ cleanup; -TEST glusterd +## 1. Start glusterd +TEST glusterd; -TEST $CLI volume create $V0 $H0:$B0/$V0 +## 2. Lets create volume +TEST $CLI volume create $V0 $H0:$B0/${V0}{1,2,3}; + +## 3. Start the volume TEST $CLI volume start $V0 -TEST $CLI volume set $V0 cache-samba-metadata on -EXPECT 'on' volinfo_field $V0 'performance.cache-samba-metadata' +## 4. Enable the upcall xlator, and increase the md-cache timeout to max +TEST $CLI volume set $V0 performance.md-cache-timeout 600 +TEST $CLI volume set $V0 performance.cache-samba-metadata on -TEST $CLI volume set $V0 cache-samba-metadata off -EXPECT 'off' volinfo_field $V0 'performance.cache-samba-metadata' +## 6. Create two gluster mounts +TEST glusterfs --volfile-id=/$V0 --volfile-server=$H0 $M0 +TEST glusterfs --volfile-id=/$V0 --volfile-server=$H0 $M1 + +## 8. Create a file +TEST touch $M0/file1 + +## 9. Setxattr from mount-0 +TEST "setfattr -n user.DOSATTRIB -v "abc" $M0/file1" +## 10. Getxattr from mount-1, this should return the correct value as it is a fresh getxattr +TEST "getfattr -n user.DOSATTRIB $M1/file1 | grep -q abc" + +## 11. Now modify the same xattr from mount-0 again +TEST "setfattr -n user.DOSATTRIB -v "xyz" $M0/file1" +## 12. Since the xattr is already cached in mount-1 it returns the old xattr + #value, until the timeout (600) +TEST "getfattr -n user.DOSATTRIB $M1/file1 | grep -q abc" + +## 13. Unmount to clean all the cache +EXPECT_WITHIN $UMOUNT_TIMEOUT "Y" force_umount $M0 +EXPECT_WITHIN $UMOUNT_TIMEOUT "Y" force_umount $M1 +TEST $CLI volume set $V0 features.cache-invalidation on +TEST $CLI volume set $V0 features.cache-invalidation-timeout 600 + +## 18. Restart the volume to restart the bick process TEST $CLI volume stop $V0 -TEST $CLI volume delete $V0 +TEST $CLI volume start $V0 + +## 20. Create two gluster mounts +TEST glusterfs --volfile-id=/$V0 --volfile-server=$H0 $M0 +TEST glusterfs --volfile-id=/$V0 --volfile-server=$H0 $M1 + +## 22. Repeat the tests 11-14, but this time since cache invalidation is on, + #the getxattr will reflect the new value +TEST "setfattr -n user.DOSATTRIB -v "abc" $M0/file1" +TEST "getfattr -n user.DOSATTRIB $M1/file1 | grep -q abc" +TEST "setfattr -n user.DOSATTRIB -v "xyz" $M0/file1" +sleep 2; #There can be a very very small window where the next getxattr + #reaches md-cache, before the cache-invalidation caused by previous + #setxattr, reaches md-cache. Hence sleeping for 2 sec. + #Also it should not be > 600. +TEST "getfattr -n user.DOSATTRIB $M1/file1 | grep -q xyz" + +TEST $CLI volume set $V0 cache-samba-metadata off +EXPECT 'off' volinfo_field $V0 'performance.cache-samba-metadata' cleanup; |