md-cache: Do not use features.cache-invalidation for both md-cache and upcall

Currently, the volume set option features.cache-invalidation enables upcall
feature on server side and md-cache cache-invalidation on client side.
There are multiple problems that can arise from this:
1. The scenario when user wants to, enable upcall for nfs-ganesha setup,
   but do not want to enable md-cache cache-invalidation, as the
   nfs-clients have already cached the metadata and upcall is used to
   to invalidate the nfs-client cache. In this case, users should have
   a way of disabling md-cache invalidation without disabling upcall.

2. Upcall requires a op-version of GD_OP_VERSION_3_7_0, where as
   md-cache invalidation requires an op version of GD_OP_VERSION_3_9_0.
   Consider a setup where the servers are in op-version GD_OP_VERSION_3_7_0,
   and th clients are in op-version GD_OP_VERSION_3_9_0. if there is one
   single volume set option, user can enable this feature in this setup.
   But it can lead to stale xattr cache as the xattr invalidation was
   introduced in upcall only in release 3.8. Hence, we should not be
   able to enable md-cache invalidation, if all the servers and clients
   are not on opversion >= GD_OP_VERSION_3_9_0.

To solve the above mentioned issues, we have seperate volume options
for enabling md-cache invalidation and upcall. But this can lead to
issues when user enable md-cache invalidation and forgets to enable
upcall. Probably in the next release, these can be enables by default.

Change-Id: Ie70eff97fe12fcb623eec8f4f5861ac065bf483e
BUG: 1211863
Signed-off-by: Poornima G <pgurusid@redhat.com>
Reviewed-on: http://review.gluster.org/15314
NetBSD-regression: NetBSD Build System <jenkins@build.gluster.org>
CentOS-regression: Gluster Build System <jenkins@build.gluster.org>
Smoke: Gluster Build System <jenkins@build.gluster.org>
Reviewed-by: soumya k <skoduri@redhat.com>
Reviewed-by: Raghavendra G <rgowdapp@redhat.com>
This commit is contained in:
Poornima G 2016-08-25 10:25:24 +05:30 committed by Raghavendra G
parent be93ca2b9f
commit 3f5273e19a
3 changed files with 7 additions and 6 deletions

View File

@ -42,16 +42,17 @@ 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
TEST $CLI volume set $V0 performance.cache-invalidation on
## 18. Restart the volume to restart the bick process
## 19. Restart the volume to restart the bick process
TEST $CLI volume stop $V0
TEST $CLI volume start $V0
## 20. Create two gluster mounts
## 21. 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,
## 23. 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"

View File

@ -1967,7 +1967,7 @@ struct volopt_map_entry glusterd_volopt_map[] = {
.op_version = 2,
.flags = OPT_FLAG_CLIENT_OPT
},
{ .key = "features.cache-invalidation",
{ .key = "performance.cache-invalidation",
.voltype = "performance/md-cache",
.option = "cache-invalidation",
.op_version = GD_OP_VERSION_3_9_0,

View File

@ -2795,8 +2795,8 @@ struct volume_options options[] = {
{ .key = {"cache-invalidation"},
.type = GF_OPTION_TYPE_BOOL,
.default_value = "false",
.description = "When \"on\", invalidates/updates the metadata cache "
"on receiving of the cache-invalidation notifications",
.description = "When \"on\", invalidates/updates the metadata cache,"
" on receiving the cache-invalidation notifications",
},
{ .key = {NULL} },
};