diff options
-rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-handler.c | 202 |
1 files changed, 119 insertions, 83 deletions
diff --git a/xlators/mgmt/glusterd/src/glusterd-handler.c b/xlators/mgmt/glusterd/src/glusterd-handler.c index 0d9e60dba1c..86d1d5f23fb 100644 --- a/xlators/mgmt/glusterd/src/glusterd-handler.c +++ b/xlators/mgmt/glusterd/src/glusterd-handler.c @@ -4603,6 +4603,7 @@ glusterd_get_volume_opts (rpcsvc_request_t *req, dict_t *dict) char *orig_key = NULL; char *key_fixed = NULL; char *volname = NULL; + char *value = NULL; char err_str[2048] = {0,}; char dict_key[50] = {0,}; xlator_t *this = NULL; @@ -4650,111 +4651,146 @@ glusterd_get_volume_opts (rpcsvc_request_t *req, dict_t *dict) goto out; } if (strcmp(key, "all")) { - exists = glusterd_check_option_exists (key, &key_fixed); - if (!exists) { - snprintf (err_str, sizeof (err_str), "Option " - "with name: %s does not exist", key); - gf_msg (this->name, GF_LOG_ERROR, EINVAL, - GD_MSG_UNKNOWN_KEY, "%s", - err_str); - if (key_fixed) - snprintf (err_str + ret, - sizeof (err_str) - ret, - "Did you mean %s?", - key_fixed); - ret = -1; - goto out; - } - if (key_fixed) { - orig_key = key; - key = key_fixed; - } - if (strcmp (key, "cluster.op-version") == 0) { - sprintf (dict_key, "key%d", count); - ret = dict_set_str(dict, dict_key, key); - if (ret) { - gf_msg (this->name, GF_LOG_ERROR, 0, - GD_MSG_DICT_SET_FAILED, "Failed to " - "set %s in dictionary", key); - goto out; - } - sprintf (dict_key, "value%d", count); - sprintf (op_version_buff, "%d", priv->op_version); - ret = dict_set_str (dict, dict_key, op_version_buff); - if (ret) { - gf_msg (this->name, GF_LOG_ERROR, 0, - GD_MSG_DICT_SET_FAILED, "Failed to " - "set value for key %s in dictionary", - key); - goto out; - } - } - else if (strcmp (key, "config.memory-accounting") == 0) { + if (fnmatch (GD_HOOKS_SPECIFIC_KEY, key, FNM_NOESCAPE) == 0) { sprintf (dict_key, "key%d", count); ret = dict_set_str(dict, dict_key, key); if (ret) { gf_msg (this->name, GF_LOG_ERROR, 0, GD_MSG_DICT_SET_FAILED, "Failed to " - "set %s in dictionary", key); + "set %s in dictionary", key); goto out; } sprintf (dict_key, "value%d", count); - - if (volinfo->memory_accounting) - ret = dict_set_str(dict, dict_key,"Enabled"); - else - ret = dict_set_str(dict, dict_key,"Disabled"); + ret = dict_get_str (volinfo->dict, key, &value); if (ret) { gf_msg (this->name, GF_LOG_ERROR, 0, - GD_MSG_DICT_SET_FAILED, "Failed to " - "set value for key %s in dictionary", - key); + GD_MSG_DICT_GET_FAILED, "Failed to " + "get %s in dictionary", key); goto out; } - } - else if (strcmp (key, "config.transport") == 0) { - sprintf (dict_key, "key%d", count); - ret = dict_set_str(dict, dict_key, key); + ret = dict_set_str(dict, dict_key, value); if (ret) { gf_msg (this->name, GF_LOG_ERROR, 0, GD_MSG_DICT_SET_FAILED, "Failed to " "set %s in dictionary", key); goto out; } - sprintf (dict_key, "value%d", count); - - if (volinfo->transport_type == GF_TRANSPORT_RDMA) - ret = dict_set_str(dict, dict_key,"rdma"); - else if (volinfo->transport_type == GF_TRANSPORT_TCP) - ret = dict_set_str(dict, dict_key,"tcp"); - else if (volinfo->transport_type == - GF_TRANSPORT_BOTH_TCP_RDMA) - ret = dict_set_str(dict, dict_key,"tcp,rdma"); - else - ret = dict_set_str(dict, dict_key,"none"); - - if (ret) { - gf_msg (this->name, GF_LOG_ERROR, 0, - GD_MSG_DICT_SET_FAILED, "Failed to " - "set value for key %s in dictionary", - key); + } else { + exists = glusterd_check_option_exists (key, &key_fixed); + if (!exists) { + snprintf (err_str, sizeof (err_str), "Option " + "with name: %s does not exist", key); + gf_msg (this->name, GF_LOG_ERROR, EINVAL, + GD_MSG_UNKNOWN_KEY, "%s", + err_str); + if (key_fixed) + snprintf (err_str + ret, + sizeof (err_str) - ret, + "Did you mean %s?", + key_fixed); + ret = -1; goto out; } - } - else { - ret = glusterd_get_default_val_for_volopt (dict, - _gf_false, - key, orig_key, - volinfo->dict, - &rsp.op_errstr); - if (ret && !rsp.op_errstr) { - snprintf (err_str, sizeof(err_str), - "Failed to fetch the value of" - " %s, check log file for more" - " details", key); + if (key_fixed) { + orig_key = key; + key = key_fixed; + } + if (strcmp (key, "cluster.op-version") == 0) { + sprintf (dict_key, "key%d", count); + ret = dict_set_str(dict, dict_key, key); + if (ret) { + gf_msg (this->name, GF_LOG_ERROR, 0, + GD_MSG_DICT_SET_FAILED, "Failed" + "to set %s in dictionary", key); + goto out; + } + sprintf (dict_key, "value%d", count); + sprintf (op_version_buff, "%d", + priv->op_version); + ret = dict_set_str (dict, dict_key, + op_version_buff); + if (ret) { + gf_msg (this->name, GF_LOG_ERROR, 0, + GD_MSG_DICT_SET_FAILED, "Failed" + " to set value for key %s in " + "dictionary", key); + goto out; + } + } else if (strcmp (key, + "config.memory-accounting") == 0) { + sprintf (dict_key, "key%d", count); + ret = dict_set_str(dict, dict_key, key); + if (ret) { + gf_msg (this->name, GF_LOG_ERROR, 0, + GD_MSG_DICT_SET_FAILED, "Failed" + " to set %s in dictionary", + key); + goto out; + } + sprintf (dict_key, "value%d", count); + + if (volinfo->memory_accounting) + ret = dict_set_str(dict, dict_key, + "Enabled"); + else + ret = dict_set_str(dict, dict_key, + "Disabled"); + if (ret) { + gf_msg (this->name, GF_LOG_ERROR, 0, + GD_MSG_DICT_SET_FAILED, "Failed" + " to set value for key %s in " + "dictionary", key); + goto out; + } + } else if (strcmp (key, "config.transport") == 0) { + sprintf (dict_key, "key%d", count); + ret = dict_set_str(dict, dict_key, key); + if (ret) { + gf_msg (this->name, GF_LOG_ERROR, 0, + GD_MSG_DICT_SET_FAILED, "Failed" + "to set %s in dictionary", key); + goto out; + } + sprintf (dict_key, "value%d", count); + + if (volinfo->transport_type + == GF_TRANSPORT_RDMA) + ret = dict_set_str(dict, dict_key, + "rdma"); + else if (volinfo->transport_type + == GF_TRANSPORT_TCP) + ret = dict_set_str(dict, dict_key, + "tcp"); + else if (volinfo->transport_type == + GF_TRANSPORT_BOTH_TCP_RDMA) + ret = dict_set_str(dict, dict_key, + "tcp,rdma"); + else + ret = dict_set_str(dict, dict_key, + "none"); + + if (ret) { + gf_msg (this->name, GF_LOG_ERROR, 0, + GD_MSG_DICT_SET_FAILED, "Failed" + " to set value for key %s in " + "dictionary", key); + goto out; + } + } else { + ret = glusterd_get_default_val_for_volopt + (dict, + _gf_false, + key, orig_key, + volinfo->dict, + &rsp.op_errstr); + if (ret && !rsp.op_errstr) { + snprintf (err_str, sizeof(err_str), + "Failed to fetch the value of" + " %s, check log file for more" + " details", key); + } } } - /* Request is for a single option, explicitly set count to 1 * in the dictionary. */ |