17b94a
From e5450c639915f4c29ae2ad480e4128b5845254cc Mon Sep 17 00:00:00 2001
17b94a
From: Jiffin Tony Thottan <jthottan@redhat.com>
17b94a
Date: Tue, 25 Apr 2017 16:36:40 +0530
17b94a
Subject: [PATCH 063/124] glusterd/ganesha : update cache invalidation properly
17b94a
 during volume stop
17b94a
17b94a
As per current code, during volume stop for ganesha enabled volume the
17b94a
feature.cache-invalidation was turned "off" in ganesha_manage_export().
17b94a
And it never turn back to "on" when volume is started. It is not desire
17b94a
to modify the volume options during stop, this patch fixes above mentioned
17b94a
issue.
17b94a
17b94a
Label: DOWNSTREAM ONLY
17b94a
17b94a
Change-Id: Iea9c62e5cda4f54805b41ea6055cf0c3652a634c
17b94a
Signed-off-by: Jiffin Tony Thottan <jthottan@redhat.com>
17b94a
Reviewed-on: https://review.gluster.org/17111
17b94a
Smoke: Gluster Build System <jenkins@build.gluster.org>
17b94a
NetBSD-regression: NetBSD Build System <jenkins@build.gluster.org>
17b94a
CentOS-regression: Gluster Build System <jenkins@build.gluster.org>
17b94a
Reviewed-by: Kaleb KEITHLEY <kkeithle@redhat.com>
17b94a
Reviewed-by: Raghavendra Talur <rtalur@redhat.com>
17b94a
Signed-off-by: Jiffin Tony Thottan <jthottan@redhat.com>
17b94a
Reviewed-on: https://code.engineering.redhat.com/gerrit/167148
17b94a
Reviewed-by: Soumya Koduri <skoduri@redhat.com>
17b94a
Tested-by: RHGS Build Bot <nigelb@redhat.com>
17b94a
Reviewed-by: Sunil Kumar Heggodu Gopala Acharya <sheggodu@redhat.com>
17b94a
---
17b94a
 xlators/mgmt/glusterd/src/glusterd-ganesha.c    | 33 ++++++++++++++-----------
17b94a
 xlators/mgmt/glusterd/src/glusterd-op-sm.c      |  4 +--
17b94a
 xlators/mgmt/glusterd/src/glusterd-volume-ops.c |  2 +-
17b94a
 xlators/mgmt/glusterd/src/glusterd.h            |  3 ++-
17b94a
 4 files changed, 23 insertions(+), 19 deletions(-)
17b94a
17b94a
diff --git a/xlators/mgmt/glusterd/src/glusterd-ganesha.c b/xlators/mgmt/glusterd/src/glusterd-ganesha.c
17b94a
index b743216..1c2ba7a 100644
17b94a
--- a/xlators/mgmt/glusterd/src/glusterd-ganesha.c
17b94a
+++ b/xlators/mgmt/glusterd/src/glusterd-ganesha.c
17b94a
@@ -445,7 +445,8 @@ manage_export_config(char *volname, char *value, char **op_errstr)
17b94a
 
17b94a
 /* Exports and unexports a particular volume via NFS-Ganesha */
17b94a
 int
17b94a
-ganesha_manage_export(dict_t *dict, char *value, char **op_errstr)
17b94a
+ganesha_manage_export(dict_t *dict, char *value,
17b94a
+                      gf_boolean_t update_cache_invalidation, char **op_errstr)
17b94a
 {
17b94a
     runner_t runner = {
17b94a
         0,
17b94a
@@ -558,19 +559,21 @@ ganesha_manage_export(dict_t *dict, char *value, char **op_errstr)
17b94a
         }
17b94a
     }
17b94a
 
17b94a
-    vol_opts = volinfo->dict;
17b94a
-    ret = dict_set_dynstr_with_alloc(vol_opts, "features.cache-invalidation",
17b94a
-                                     value);
17b94a
-    if (ret)
17b94a
-        gf_asprintf(op_errstr,
17b94a
-                    "Cache-invalidation could not"
17b94a
-                    " be set to %s.",
17b94a
-                    value);
17b94a
-    ret = glusterd_store_volinfo(volinfo, GLUSTERD_VOLINFO_VER_AC_INCREMENT);
17b94a
-    if (ret)
17b94a
-        gf_asprintf(op_errstr, "failed to store volinfo for %s",
17b94a
-                    volinfo->volname);
17b94a
-
17b94a
+    if (update_cache_invalidation) {
17b94a
+        vol_opts = volinfo->dict;
17b94a
+        ret = dict_set_dynstr_with_alloc(vol_opts,
17b94a
+                                         "features.cache-invalidation", value);
17b94a
+        if (ret)
17b94a
+            gf_asprintf(op_errstr,
17b94a
+                        "Cache-invalidation could not"
17b94a
+                        " be set to %s.",
17b94a
+                        value);
17b94a
+        ret = glusterd_store_volinfo(volinfo,
17b94a
+                                     GLUSTERD_VOLINFO_VER_AC_INCREMENT);
17b94a
+        if (ret)
17b94a
+            gf_asprintf(op_errstr, "failed to store volinfo for %s",
17b94a
+                        volinfo->volname);
17b94a
+    }
17b94a
 out:
17b94a
     return ret;
17b94a
 }
17b94a
@@ -867,7 +870,7 @@ glusterd_handle_ganesha_op(dict_t *dict, char **op_errstr, char *key,
17b94a
     GF_ASSERT(value);
17b94a
 
17b94a
     if (strcmp(key, "ganesha.enable") == 0) {
17b94a
-        ret = ganesha_manage_export(dict, value, op_errstr);
17b94a
+        ret = ganesha_manage_export(dict, value, _gf_true, op_errstr);
17b94a
         if (ret < 0)
17b94a
             goto out;
17b94a
     }
17b94a
diff --git a/xlators/mgmt/glusterd/src/glusterd-op-sm.c b/xlators/mgmt/glusterd/src/glusterd-op-sm.c
17b94a
index a630c48..52809a8 100644
17b94a
--- a/xlators/mgmt/glusterd/src/glusterd-op-sm.c
17b94a
+++ b/xlators/mgmt/glusterd/src/glusterd-op-sm.c
17b94a
@@ -1178,7 +1178,7 @@ glusterd_op_stage_set_volume(dict_t *dict, char **op_errstr)
17b94a
 
17b94a
         if ((strcmp(key, "ganesha.enable") == 0) &&
17b94a
             (strcmp(value, "off") == 0)) {
17b94a
-            ret = ganesha_manage_export(dict, "off", op_errstr);
17b94a
+            ret = ganesha_manage_export(dict, "off", _gf_true, op_errstr);
17b94a
             if (ret)
17b94a
                 goto out;
17b94a
         }
17b94a
@@ -1691,7 +1691,7 @@ glusterd_op_stage_reset_volume(dict_t *dict, char **op_errstr)
17b94a
      */
17b94a
     if (volinfo && (!strcmp(key, "all") || !strcmp(key, "ganesha.enable"))) {
17b94a
         if (glusterd_check_ganesha_export(volinfo)) {
17b94a
-            ret = ganesha_manage_export(dict, "off", op_errstr);
17b94a
+            ret = ganesha_manage_export(dict, "off", _gf_true, op_errstr);
17b94a
             if (ret)
17b94a
                 gf_msg(this->name, GF_LOG_WARNING, 0, GD_MSG_NFS_GNS_RESET_FAIL,
17b94a
                        "Could not reset ganesha.enable key");
17b94a
diff --git a/xlators/mgmt/glusterd/src/glusterd-volume-ops.c b/xlators/mgmt/glusterd/src/glusterd-volume-ops.c
17b94a
index 81c668c..de4eccb 100644
17b94a
--- a/xlators/mgmt/glusterd/src/glusterd-volume-ops.c
17b94a
+++ b/xlators/mgmt/glusterd/src/glusterd-volume-ops.c
17b94a
@@ -1825,7 +1825,7 @@ glusterd_op_stage_stop_volume(dict_t *dict, char **op_errstr)
17b94a
 
17b94a
     ret = glusterd_check_ganesha_export(volinfo);
17b94a
     if (ret) {
17b94a
-        ret = ganesha_manage_export(dict, "off", op_errstr);
17b94a
+        ret = ganesha_manage_export(dict, "off", _gf_false, op_errstr);
17b94a
         if (ret) {
17b94a
             gf_msg(THIS->name, GF_LOG_WARNING, 0,
17b94a
                    GD_MSG_NFS_GNS_UNEXPRT_VOL_FAIL,
17b94a
diff --git a/xlators/mgmt/glusterd/src/glusterd.h b/xlators/mgmt/glusterd/src/glusterd.h
17b94a
index 5135181..e858ce4 100644
17b94a
--- a/xlators/mgmt/glusterd/src/glusterd.h
17b94a
+++ b/xlators/mgmt/glusterd/src/glusterd.h
17b94a
@@ -1368,7 +1368,8 @@ glusterd_op_stage_set_ganesha(dict_t *dict, char **op_errstr);
17b94a
 int
17b94a
 glusterd_op_set_ganesha(dict_t *dict, char **errstr);
17b94a
 int
17b94a
-ganesha_manage_export(dict_t *dict, char *value, char **op_errstr);
17b94a
+ganesha_manage_export(dict_t *dict, char *value,
17b94a
+                      gf_boolean_t update_cache_invalidation, char **op_errstr);
17b94a
 gf_boolean_t
17b94a
 glusterd_is_ganesha_cluster();
17b94a
 gf_boolean_t
17b94a
-- 
17b94a
1.8.3.1
17b94a