Blob Blame History Raw
From e5450c639915f4c29ae2ad480e4128b5845254cc Mon Sep 17 00:00:00 2001
From: Jiffin Tony Thottan <jthottan@redhat.com>
Date: Tue, 25 Apr 2017 16:36:40 +0530
Subject: [PATCH 063/124] glusterd/ganesha : update cache invalidation properly
 during volume stop

As per current code, during volume stop for ganesha enabled volume the
feature.cache-invalidation was turned "off" in ganesha_manage_export().
And it never turn back to "on" when volume is started. It is not desire
to modify the volume options during stop, this patch fixes above mentioned
issue.

Label: DOWNSTREAM ONLY

Change-Id: Iea9c62e5cda4f54805b41ea6055cf0c3652a634c
Signed-off-by: Jiffin Tony Thottan <jthottan@redhat.com>
Reviewed-on: https://review.gluster.org/17111
Smoke: Gluster Build System <jenkins@build.gluster.org>
NetBSD-regression: NetBSD Build System <jenkins@build.gluster.org>
CentOS-regression: Gluster Build System <jenkins@build.gluster.org>
Reviewed-by: Kaleb KEITHLEY <kkeithle@redhat.com>
Reviewed-by: Raghavendra Talur <rtalur@redhat.com>
Signed-off-by: Jiffin Tony Thottan <jthottan@redhat.com>
Reviewed-on: https://code.engineering.redhat.com/gerrit/167148
Reviewed-by: Soumya Koduri <skoduri@redhat.com>
Tested-by: RHGS Build Bot <nigelb@redhat.com>
Reviewed-by: Sunil Kumar Heggodu Gopala Acharya <sheggodu@redhat.com>
---
 xlators/mgmt/glusterd/src/glusterd-ganesha.c    | 33 ++++++++++++++-----------
 xlators/mgmt/glusterd/src/glusterd-op-sm.c      |  4 +--
 xlators/mgmt/glusterd/src/glusterd-volume-ops.c |  2 +-
 xlators/mgmt/glusterd/src/glusterd.h            |  3 ++-
 4 files changed, 23 insertions(+), 19 deletions(-)

diff --git a/xlators/mgmt/glusterd/src/glusterd-ganesha.c b/xlators/mgmt/glusterd/src/glusterd-ganesha.c
index b743216..1c2ba7a 100644
--- a/xlators/mgmt/glusterd/src/glusterd-ganesha.c
+++ b/xlators/mgmt/glusterd/src/glusterd-ganesha.c
@@ -445,7 +445,8 @@ manage_export_config(char *volname, char *value, char **op_errstr)
 
 /* Exports and unexports a particular volume via NFS-Ganesha */
 int
-ganesha_manage_export(dict_t *dict, char *value, char **op_errstr)
+ganesha_manage_export(dict_t *dict, char *value,
+                      gf_boolean_t update_cache_invalidation, char **op_errstr)
 {
     runner_t runner = {
         0,
@@ -558,19 +559,21 @@ ganesha_manage_export(dict_t *dict, char *value, char **op_errstr)
         }
     }
 
-    vol_opts = volinfo->dict;
-    ret = dict_set_dynstr_with_alloc(vol_opts, "features.cache-invalidation",
-                                     value);
-    if (ret)
-        gf_asprintf(op_errstr,
-                    "Cache-invalidation could not"
-                    " be set to %s.",
-                    value);
-    ret = glusterd_store_volinfo(volinfo, GLUSTERD_VOLINFO_VER_AC_INCREMENT);
-    if (ret)
-        gf_asprintf(op_errstr, "failed to store volinfo for %s",
-                    volinfo->volname);
-
+    if (update_cache_invalidation) {
+        vol_opts = volinfo->dict;
+        ret = dict_set_dynstr_with_alloc(vol_opts,
+                                         "features.cache-invalidation", value);
+        if (ret)
+            gf_asprintf(op_errstr,
+                        "Cache-invalidation could not"
+                        " be set to %s.",
+                        value);
+        ret = glusterd_store_volinfo(volinfo,
+                                     GLUSTERD_VOLINFO_VER_AC_INCREMENT);
+        if (ret)
+            gf_asprintf(op_errstr, "failed to store volinfo for %s",
+                        volinfo->volname);
+    }
 out:
     return ret;
 }
@@ -867,7 +870,7 @@ glusterd_handle_ganesha_op(dict_t *dict, char **op_errstr, char *key,
     GF_ASSERT(value);
 
     if (strcmp(key, "ganesha.enable") == 0) {
-        ret = ganesha_manage_export(dict, value, op_errstr);
+        ret = ganesha_manage_export(dict, value, _gf_true, op_errstr);
         if (ret < 0)
             goto out;
     }
diff --git a/xlators/mgmt/glusterd/src/glusterd-op-sm.c b/xlators/mgmt/glusterd/src/glusterd-op-sm.c
index a630c48..52809a8 100644
--- a/xlators/mgmt/glusterd/src/glusterd-op-sm.c
+++ b/xlators/mgmt/glusterd/src/glusterd-op-sm.c
@@ -1178,7 +1178,7 @@ glusterd_op_stage_set_volume(dict_t *dict, char **op_errstr)
 
         if ((strcmp(key, "ganesha.enable") == 0) &&
             (strcmp(value, "off") == 0)) {
-            ret = ganesha_manage_export(dict, "off", op_errstr);
+            ret = ganesha_manage_export(dict, "off", _gf_true, op_errstr);
             if (ret)
                 goto out;
         }
@@ -1691,7 +1691,7 @@ glusterd_op_stage_reset_volume(dict_t *dict, char **op_errstr)
      */
     if (volinfo && (!strcmp(key, "all") || !strcmp(key, "ganesha.enable"))) {
         if (glusterd_check_ganesha_export(volinfo)) {
-            ret = ganesha_manage_export(dict, "off", op_errstr);
+            ret = ganesha_manage_export(dict, "off", _gf_true, op_errstr);
             if (ret)
                 gf_msg(this->name, GF_LOG_WARNING, 0, GD_MSG_NFS_GNS_RESET_FAIL,
                        "Could not reset ganesha.enable key");
diff --git a/xlators/mgmt/glusterd/src/glusterd-volume-ops.c b/xlators/mgmt/glusterd/src/glusterd-volume-ops.c
index 81c668c..de4eccb 100644
--- a/xlators/mgmt/glusterd/src/glusterd-volume-ops.c
+++ b/xlators/mgmt/glusterd/src/glusterd-volume-ops.c
@@ -1825,7 +1825,7 @@ glusterd_op_stage_stop_volume(dict_t *dict, char **op_errstr)
 
     ret = glusterd_check_ganesha_export(volinfo);
     if (ret) {
-        ret = ganesha_manage_export(dict, "off", op_errstr);
+        ret = ganesha_manage_export(dict, "off", _gf_false, op_errstr);
         if (ret) {
             gf_msg(THIS->name, GF_LOG_WARNING, 0,
                    GD_MSG_NFS_GNS_UNEXPRT_VOL_FAIL,
diff --git a/xlators/mgmt/glusterd/src/glusterd.h b/xlators/mgmt/glusterd/src/glusterd.h
index 5135181..e858ce4 100644
--- a/xlators/mgmt/glusterd/src/glusterd.h
+++ b/xlators/mgmt/glusterd/src/glusterd.h
@@ -1368,7 +1368,8 @@ glusterd_op_stage_set_ganesha(dict_t *dict, char **op_errstr);
 int
 glusterd_op_set_ganesha(dict_t *dict, char **errstr);
 int
-ganesha_manage_export(dict_t *dict, char *value, char **op_errstr);
+ganesha_manage_export(dict_t *dict, char *value,
+                      gf_boolean_t update_cache_invalidation, char **op_errstr);
 gf_boolean_t
 glusterd_is_ganesha_cluster();
 gf_boolean_t
-- 
1.8.3.1