summaryrefslogtreecommitdiff
path: root/0063-glusterd-ganesha-update-cache-invalidation-properly-.patch
blob: 7bbd92014718e42e1542795ed8e4530a70e1f124 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
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