diff options
| author | Kaushal M <kaushal@redhat.com> | 2013-09-26 18:07:51 +0530 | 
|---|---|---|
| committer | Anand Avati <avati@redhat.com> | 2013-09-29 17:04:16 -0700 | 
| commit | 623d232d29bbed71349334988054a5bd205b1a39 (patch) | |
| tree | 0c9e6b0d58b6e1d2ceb1e71523018f0316bcc057 | |
| parent | f84c710e93ab48dceabd3824f5286ed3edd9b60d (diff) | |
glusterd: Fix storing volumes on setting global opts
Glusterd would not store all the volumes when a global options were set.
When setting a global option, like 'nfs.*' options, glusterd used to
modify the volinfo for all the volumes, but would store only the volinfo
for the named volume. This lead to mismatch in the persisted and the
in-memory representation of those volumes, which lead to problems like
peers being rejected because of volume mismatches.
Change-Id: I8bca10585e34b7135cb32af0055dbd462b3fb9b5
BUG: 1012400
Signed-off-by: Kaushal M <kaushal@redhat.com>
Reviewed-on: http://review.gluster.org/6007
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Niels de Vos <ndevos@redhat.com>
Reviewed-by: Amar Tumballi <amarts@redhat.com>
Reviewed-by: Anand Avati <avati@redhat.com>
| -rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-op-sm.c | 9 | 
1 files changed, 6 insertions, 3 deletions
diff --git a/xlators/mgmt/glusterd/src/glusterd-op-sm.c b/xlators/mgmt/glusterd/src/glusterd-op-sm.c index c1c9ff75e..571fc1c78 100644 --- a/xlators/mgmt/glusterd/src/glusterd-op-sm.c +++ b/xlators/mgmt/glusterd/src/glusterd-op-sm.c @@ -1475,6 +1475,7 @@ glusterd_op_set_volume (dict_t *dict)          char                                     str[50] = {0, };          char                                    *op_errstr = NULL;          gf_boolean_t                             global_opt    = _gf_false; +        gf_boolean_t                             global_opts_set = _gf_false;          glusterd_volinfo_t                      *voliter = NULL;          int32_t                                  dict_count = 0;          gf_boolean_t                             check_op_version = _gf_false; @@ -1536,7 +1537,6 @@ glusterd_op_set_volume (dict_t *dict)          for (count = 1; ret != -1 ; count++) { -                global_opt = _gf_false;                  sprintf (str, "key%d", count);                  ret = dict_get_str (dict, str, &key);                  if (ret) @@ -1584,8 +1584,11 @@ glusterd_op_set_volume (dict_t *dict)                          }                  } -                if (glusterd_check_globaloption (key)) +                global_opt = _gf_false; +                if (glusterd_check_globaloption (key)) {                          global_opt = _gf_true; +                        global_opts_set = _gf_true; +                }                  if (!global_opt)                          value = gf_strdup (value); @@ -1641,7 +1644,7 @@ glusterd_op_set_volume (dict_t *dict)                  }          } -        if (!global_opt) { +        if (!global_opts_set) {                  gd_update_volume_op_versions (volinfo);                  ret = glusterd_create_volfiles_and_notify_services (volinfo);                  if (ret) {  | 
