diff options
author | Samikshan Bairagya <samikshan@gmail.com> | 2016-09-23 16:35:15 +0530 |
---|---|---|
committer | Atin Mukherjee <amukherj@redhat.com> | 2016-12-30 20:47:27 -0800 |
commit | 08056421b886b1ebf1e0eed93d9f6f9b6d017489 (patch) | |
tree | a83374aa443f956d17d4b0de897345c7be47c1a4 /xlators/mgmt/glusterd/src/glusterd-handler.c | |
parent | 14ae0c6b14c9a32f15cdb3c94edbf08bb2e708b6 (diff) |
glusterd, cli: Get global options through volume get functionality
Currently it is not possible to retrieve values of global options
by using the 'gluster volume get' functionality if there are no
volumes present. In order to get the global options one has to use
'gluster volume get' with a specific volume name. This usage makes
the illusion as though the option is set only on one volume, which
is incorrect. When setting the global options, 'gluster volume set'
provides a way to set them using the volume name as 'all'.
Similarly, retrieving the global options should be made possible by
using the volume name 'all' with the 'gluster volume get'
functionality. This patch adds that functionality to 'volume get'
Usage:
# gluster volume get all <OPTION/all>
Change-Id: Ic2fdb9eda69d4806d432dae26d117d9660fe6d4e
BUG: 1378842
Signed-off-by: Samikshan Bairagya <samikshan@gmail.com>
Reviewed-on: http://review.gluster.org/15563
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: Atin Mukherjee <amukherj@redhat.com>
Diffstat (limited to 'xlators/mgmt/glusterd/src/glusterd-handler.c')
-rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-handler.c | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/xlators/mgmt/glusterd/src/glusterd-handler.c b/xlators/mgmt/glusterd/src/glusterd-handler.c index aec03922f7b..879f1021fd7 100644 --- a/xlators/mgmt/glusterd/src/glusterd-handler.c +++ b/xlators/mgmt/glusterd/src/glusterd-handler.c @@ -4620,6 +4620,19 @@ glusterd_handle_barrier (rpcsvc_request_t *req) return glusterd_big_locked_handler (req, __glusterd_handle_barrier); } +static gf_boolean_t +gd_is_global_option (char *opt_key) +{ + GF_VALIDATE_OR_GOTO (THIS->name, opt_key, out); + + return (strcmp (opt_key, GLUSTERD_SHARED_STORAGE_KEY) == 0 || + strcmp (opt_key, GLUSTERD_QUORUM_RATIO_KEY) == 0 || + strcmp (opt_key, GLUSTERD_GLOBAL_OP_VERSION_KEY) == 0); + +out: + return _gf_false; +} + int32_t glusterd_get_volume_opts (rpcsvc_request_t *req, dict_t *dict) { @@ -4632,6 +4645,7 @@ glusterd_get_volume_opts (rpcsvc_request_t *req, dict_t *dict) char *volname = NULL; char *value = NULL; char err_str[2048] = {0,}; + char warn_str[2048] = {0,}; char dict_key[50] = {0,}; xlator_t *this = NULL; glusterd_conf_t *priv = NULL; @@ -4657,6 +4671,12 @@ glusterd_get_volume_opts (rpcsvc_request_t *req, dict_t *dict) goto out; } + if (strcasecmp (volname, "all") == 0) { + ret = glusterd_get_global_options_for_all_vols (dict, + &rsp.op_errstr); + goto out; + } + ret = dict_get_str (dict, "key", &key); if (ret) { snprintf (err_str, sizeof (err_str), "Failed to get key " @@ -4722,6 +4742,25 @@ glusterd_get_volume_opts (rpcsvc_request_t *req, dict_t *dict) orig_key = key; key = key_fixed; } + if (gd_is_global_option (key)) { + snprintf (warn_str, sizeof (warn_str), + "Warning: Support to get " + "global option value using " + "`volume get <volname>` will be " + "deprecated from next release. " + "Consider using `volume get all` " + "instead for global options"); + + ret = dict_set_str (dict, "warning", warn_str); + if (ret) { + gf_msg (this->name, GF_LOG_ERROR, + 0, GD_MSG_DICT_SET_FAILED, + "Failed to set warning " + "message in dictionary"); + goto out; + } + } + if (strcmp (key, "cluster.op-version") == 0) { sprintf (dict_key, "key%d", count); ret = dict_set_str(dict, dict_key, key); |