Blob Blame History Raw
From 6e912edf580252d4eb967a5bffedbb1f42931a21 Mon Sep 17 00:00:00 2001
From: Poornima G <pgurusid@redhat.com>
Date: Thu, 25 Aug 2016 10:25:24 +0530
Subject: [PATCH 121/141] 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: 1284873
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>
Reviewed-on: https://code.engineering.redhat.com/gerrit/87034
Reviewed-by: Rajesh Joseph <rjoseph@redhat.com>
Tested-by: Rajesh Joseph <rjoseph@redhat.com>
---
 tests/bugs/md-cache/bug-1211863.t               |    7 ++++---
 xlators/mgmt/glusterd/src/glusterd-volume-set.c |    2 +-
 xlators/performance/md-cache/src/md-cache.c     |    4 ++--
 3 files changed, 7 insertions(+), 6 deletions(-)

diff --git a/tests/bugs/md-cache/bug-1211863.t b/tests/bugs/md-cache/bug-1211863.t
index 4fa9e33..ece42fe 100644
--- a/tests/bugs/md-cache/bug-1211863.t
+++ b/tests/bugs/md-cache/bug-1211863.t
@@ -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"
diff --git a/xlators/mgmt/glusterd/src/glusterd-volume-set.c b/xlators/mgmt/glusterd/src/glusterd-volume-set.c
index de7bcb4..a293021 100644
--- a/xlators/mgmt/glusterd/src/glusterd-volume-set.c
+++ b/xlators/mgmt/glusterd/src/glusterd-volume-set.c
@@ -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,
diff --git a/xlators/performance/md-cache/src/md-cache.c b/xlators/performance/md-cache/src/md-cache.c
index ab6dcff..ab9860b 100644
--- a/xlators/performance/md-cache/src/md-cache.c
+++ b/xlators/performance/md-cache/src/md-cache.c
@@ -2811,8 +2811,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} },
 };
-- 
1.7.1