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