diff options
| author | Kotresh HR <khiremat@redhat.com> | 2017-10-17 11:28:43 -0400 | 
|---|---|---|
| committer | Atin Mukherjee <amukherj@redhat.com> | 2017-11-12 06:50:03 +0000 | 
| commit | 781bc5bd68824cae4456855823be17f43b5ae683 (patch) | |
| tree | bd01fa9154463263bc07befce813c2accf51d08a | |
| parent | e5c33ca37f05d92312768976b1dbd359a213a4b3 (diff) | |
glusterd: Validate changelog on geo-rep volume
If geo-rep is configured on volume, don't allow
to disable changelog.
Change-Id: I7d1ba8b2939c8fe6ee6c59fb923d9aa1bdab553c
BUG: 1503227
Signed-off-by: Kotresh HR <khiremat@redhat.com>
| -rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-messages.h | 10 | ||||
| -rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-volgen.c | 53 | 
2 files changed, 62 insertions, 1 deletions
diff --git a/xlators/mgmt/glusterd/src/glusterd-messages.h b/xlators/mgmt/glusterd/src/glusterd-messages.h index dbc146babc7..cf84cd30f11 100644 --- a/xlators/mgmt/glusterd/src/glusterd-messages.h +++ b/xlators/mgmt/glusterd/src/glusterd-messages.h @@ -41,7 +41,7 @@  #define GLUSTERD_COMP_BASE      GLFS_MSGID_GLUSTERD -#define GLFS_NUM_MESSAGES       612 +#define GLFS_NUM_MESSAGES       613  #define GLFS_MSGID_END          (GLUSTERD_COMP_BASE + GLFS_NUM_MESSAGES + 1)  /* Messaged with message IDs */ @@ -4945,6 +4945,14 @@   */  #define GD_MSG_PORTS_EXHAUSTED (GLUSTERD_COMP_BASE + 612) +/*! + * @messageid + * @diagnosis + * @recommendedaction + * + */ +#define GD_MSG_CHANGELOG_GET_FAIL (GLUSTERD_COMP_BASE + 613) +  /*------------*/  #define glfs_msg_end_x GLFS_MSGID_END, "Invalid: End of messages" diff --git a/xlators/mgmt/glusterd/src/glusterd-volgen.c b/xlators/mgmt/glusterd/src/glusterd-volgen.c index 7f7f82493e2..c07cbf396cc 100644 --- a/xlators/mgmt/glusterd/src/glusterd-volgen.c +++ b/xlators/mgmt/glusterd/src/glusterd-volgen.c @@ -1219,6 +1219,56 @@ loglevel_option_handler (volgen_graph_t *graph,  }  static int +server_check_changelog_off (volgen_graph_t *graph, struct volopt_map_entry *vme, +                            glusterd_volinfo_t *volinfo) +{ +        gf_boolean_t enabled = _gf_false; +        int ret = 0; + +        GF_ASSERT (volinfo); +        GF_ASSERT (vme); + +        if (strcmp (vme->option, "changelog") != 0) +                return 0; + +        ret = gf_string2boolean (vme->value, &enabled); +        if (ret || enabled) +                goto out; + +        ret = glusterd_volinfo_get_boolean (volinfo, VKEY_CHANGELOG); +        if (ret < 0) { +                gf_msg ("glusterd", GF_LOG_WARNING, 0, +                        GD_MSG_CHANGELOG_GET_FAIL, +                        "failed to get the changelog status"); +                ret = -1; +                goto out; +        } + +        if (ret) { +                enabled = _gf_false; +                glusterd_check_geo_rep_configured (volinfo, &enabled); + +                if (enabled) { +                        gf_msg ("glusterd", GF_LOG_WARNING, 0, +                                GD_MSG_XLATOR_SET_OPT_FAIL, +                                GEOREP" sessions active" +                                "for the volume %s, cannot disable changelog ", +                                volinfo->volname); +                        set_graph_errstr (graph, +                                          VKEY_CHANGELOG" cannot be disabled " +                                          "while "GEOREP" sessions exist"); +                        ret = -1; +                        goto out; +                } +        } + +        ret = 0; + out: +        gf_msg_debug ("glusterd", 0, "Returning %d", ret); +        return ret; +} + +static int  server_check_marker_off (volgen_graph_t *graph, struct volopt_map_entry *vme,                           glusterd_volinfo_t *volinfo)  { @@ -1434,6 +1484,9 @@ server_spec_option_handler (volgen_graph_t *graph,                  ret = server_check_marker_off (graph, vme, volinfo);          if (!ret) +                ret = server_check_changelog_off (graph, vme, volinfo); + +        if (!ret)                  ret = loglevel_option_handler (graph, vme, "brick");          if (!ret)  | 
