d1681e
From 2cd1f86d0bd47f93f6e278530fc76a1e44aa9333 Mon Sep 17 00:00:00 2001
d1681e
From: Jiffin Tony Thottan <jthottan@redhat.com>
d1681e
Date: Tue, 25 Apr 2017 16:36:40 +0530
d1681e
Subject: [PATCH 59/74] glusterd/ganesha : update cache invalidation properly
d1681e
 during volume stop
d1681e
d1681e
As per current code, during volume stop for ganesha enabled volume the
d1681e
feature.cache-invalidation was turned "off" in ganesha_manage_export().
d1681e
And it never turn back to "on" when volume is started. It is not desire
d1681e
to modify the volume options during stop, this patch fixes above mentioned
d1681e
issue.
d1681e
d1681e
Change-Id: Iea9c62e5cda4f54805b41ea6055cf0c3652a634c
d1681e
Signed-off-by: Jiffin Tony Thottan <jthottan@redhat.com>
d1681e
Reviewed-on: https://review.gluster.org/17111
d1681e
Smoke: Gluster Build System <jenkins@build.gluster.org>
d1681e
NetBSD-regression: NetBSD Build System <jenkins@build.gluster.org>
d1681e
CentOS-regression: Gluster Build System <jenkins@build.gluster.org>
d1681e
Reviewed-by: Kaleb KEITHLEY <kkeithle@redhat.com>
d1681e
Reviewed-by: Raghavendra Talur <rtalur@redhat.com>
d1681e
---
d1681e
 xlators/mgmt/glusterd/src/glusterd-ganesha.c    | 30 ++++++++++++++-----------
d1681e
 xlators/mgmt/glusterd/src/glusterd-op-sm.c      |  4 ++--
d1681e
 xlators/mgmt/glusterd/src/glusterd-volume-ops.c |  2 +-
d1681e
 xlators/mgmt/glusterd/src/glusterd.h            |  3 ++-
d1681e
 4 files changed, 22 insertions(+), 17 deletions(-)
d1681e
d1681e
diff --git a/xlators/mgmt/glusterd/src/glusterd-ganesha.c b/xlators/mgmt/glusterd/src/glusterd-ganesha.c
d1681e
index 2392341..5d6144a 100644
d1681e
--- a/xlators/mgmt/glusterd/src/glusterd-ganesha.c
d1681e
+++ b/xlators/mgmt/glusterd/src/glusterd-ganesha.c
d1681e
@@ -463,7 +463,8 @@ manage_export_config (char *volname, char *value, char **op_errstr)
d1681e
 
d1681e
 /* Exports and unexports a particular volume via NFS-Ganesha */
d1681e
 int
d1681e
-ganesha_manage_export (dict_t *dict, char *value, char **op_errstr)
d1681e
+ganesha_manage_export (dict_t *dict, char *value,
d1681e
+                       gf_boolean_t update_cache_invalidation, char **op_errstr)
d1681e
 {
d1681e
         runner_t                 runner = {0,};
d1681e
         int                      ret = -1;
d1681e
@@ -573,17 +574,20 @@ ganesha_manage_export (dict_t *dict, char *value, char **op_errstr)
d1681e
                 }
d1681e
         }
d1681e
 
d1681e
-        vol_opts = volinfo->dict;
d1681e
-        ret = dict_set_dynstr_with_alloc (vol_opts,
d1681e
-                                 "features.cache-invalidation", value);
d1681e
-        if (ret)
d1681e
-                gf_asprintf (op_errstr, "Cache-invalidation could not"
d1681e
-                                        " be set to %s.", value);
d1681e
-        ret = glusterd_store_volinfo (volinfo,
d1681e
-                        GLUSTERD_VOLINFO_VER_AC_INCREMENT);
d1681e
-        if (ret)
d1681e
-                gf_asprintf (op_errstr, "failed to store volinfo for %s"
d1681e
-                             , volinfo->volname);
d1681e
+        if (update_cache_invalidation) {
d1681e
+                vol_opts = volinfo->dict;
d1681e
+                ret = dict_set_dynstr_with_alloc (vol_opts,
d1681e
+                                                  "features.cache-invalidation",
d1681e
+                                                  value);
d1681e
+                if (ret)
d1681e
+                        gf_asprintf (op_errstr, "Cache-invalidation could not"
d1681e
+                                                " be set to %s.", value);
d1681e
+                ret = glusterd_store_volinfo (volinfo,
d1681e
+                                              GLUSTERD_VOLINFO_VER_AC_INCREMENT);
d1681e
+                if (ret)
d1681e
+                        gf_asprintf (op_errstr, "failed to store volinfo for %s"
d1681e
+                                     , volinfo->volname);
d1681e
+        }
d1681e
 
d1681e
 out:
d1681e
         return ret;
d1681e
@@ -858,7 +862,7 @@ glusterd_handle_ganesha_op (dict_t *dict, char **op_errstr,
d1681e
 
d1681e
 
d1681e
         if (strcmp (key, "ganesha.enable") == 0) {
d1681e
-                ret =  ganesha_manage_export (dict, value, op_errstr);
d1681e
+                ret =  ganesha_manage_export (dict, value, _gf_true, op_errstr);
d1681e
                 if (ret < 0)
d1681e
                         goto out;
d1681e
         }
d1681e
diff --git a/xlators/mgmt/glusterd/src/glusterd-op-sm.c b/xlators/mgmt/glusterd/src/glusterd-op-sm.c
d1681e
index 06e9e25..86f18f0 100644
d1681e
--- a/xlators/mgmt/glusterd/src/glusterd-op-sm.c
d1681e
+++ b/xlators/mgmt/glusterd/src/glusterd-op-sm.c
d1681e
@@ -1128,7 +1128,7 @@ glusterd_op_stage_set_volume (dict_t *dict, char **op_errstr)
d1681e
 
d1681e
                 if ((strcmp (key, "ganesha.enable") == 0) &&
d1681e
                     (strcmp (value, "off") == 0)) {
d1681e
-                        ret = ganesha_manage_export (dict, "off", op_errstr);
d1681e
+                        ret = ganesha_manage_export (dict, "off", _gf_true, op_errstr);
d1681e
                         if (ret)
d1681e
                                 goto out;
d1681e
                 }
d1681e
@@ -1655,7 +1655,7 @@ glusterd_op_stage_reset_volume (dict_t *dict, char **op_errstr)
d1681e
          */
d1681e
         if (volinfo && (!strcmp (key, "all") || !strcmp(key, "ganesha.enable"))) {
d1681e
                 if (glusterd_check_ganesha_export (volinfo)) {
d1681e
-                        ret = ganesha_manage_export (dict, "off", op_errstr);
d1681e
+                        ret = ganesha_manage_export (dict, "off", _gf_true, op_errstr);
d1681e
                         if (ret)
d1681e
                                 gf_msg (this->name, GF_LOG_WARNING, 0,
d1681e
                                         GD_MSG_NFS_GNS_RESET_FAIL,
d1681e
diff --git a/xlators/mgmt/glusterd/src/glusterd-volume-ops.c b/xlators/mgmt/glusterd/src/glusterd-volume-ops.c
d1681e
index 92db458..725d194 100644
d1681e
--- a/xlators/mgmt/glusterd/src/glusterd-volume-ops.c
d1681e
+++ b/xlators/mgmt/glusterd/src/glusterd-volume-ops.c
d1681e
@@ -1739,7 +1739,7 @@ glusterd_op_stage_stop_volume (dict_t *dict, char **op_errstr)
d1681e
         }
d1681e
         ret = glusterd_check_ganesha_export (volinfo);
d1681e
         if (ret) {
d1681e
-                ret = ganesha_manage_export(dict, "off", op_errstr);
d1681e
+                ret = ganesha_manage_export(dict, "off", _gf_false, op_errstr);
d1681e
                 if (ret) {
d1681e
                         gf_msg (THIS->name, GF_LOG_WARNING, 0,
d1681e
                                 GD_MSG_NFS_GNS_UNEXPRT_VOL_FAIL, "Could not "
d1681e
diff --git a/xlators/mgmt/glusterd/src/glusterd.h b/xlators/mgmt/glusterd/src/glusterd.h
d1681e
index 2d8dbb9..3ad5ed6 100644
d1681e
--- a/xlators/mgmt/glusterd/src/glusterd.h
d1681e
+++ b/xlators/mgmt/glusterd/src/glusterd.h
d1681e
@@ -1176,7 +1176,8 @@ int glusterd_check_ganesha_cmd (char *key, char *value,
d1681e
                                 char **errstr, dict_t *dict);
d1681e
 int glusterd_op_stage_set_ganesha (dict_t *dict, char **op_errstr);
d1681e
 int glusterd_op_set_ganesha (dict_t *dict, char **errstr);
d1681e
-int ganesha_manage_export (dict_t *dict, char *value, char **op_errstr);
d1681e
+int ganesha_manage_export (dict_t *dict, char *value,
d1681e
+                           gf_boolean_t update_cache_invalidation, char **op_errstr);
d1681e
 int manage_export_config (char *volname, char *value, char **op_errstr);
d1681e
 
d1681e
 gf_boolean_t
d1681e
-- 
d1681e
1.8.3.1
d1681e