diff options
Diffstat (limited to 'cli/src')
-rw-r--r-- | cli/src/cli-cmd-volume.c | 24 | ||||
-rw-r--r-- | cli/src/cli-rpc-ops.c | 48 |
2 files changed, 63 insertions, 9 deletions
diff --git a/cli/src/cli-cmd-volume.c b/cli/src/cli-cmd-volume.c index 7dc26144..17663091 100644 --- a/cli/src/cli-cmd-volume.c +++ b/cli/src/cli-cmd-volume.c @@ -1096,6 +1096,20 @@ print_quota_list_header (void) } int +cli_get_soft_limit (call_frame_t *frame, cli_local_t *local, dict_t *options, + const char **words) +{ + rpc_clnt_procedure_t *proc = NULL; + int ret = -1; + + CLI_LOCAL_INIT (local, words, frame, options); + proc = &cli_rpc_prog->proctable[GLUSTER_CLI_QUOTA]; + ret = proc->fn (frame, THIS, options); + + return ret; +} + +int cli_cmd_quota_cbk (struct cli_state *state, struct cli_cmd_word *word, const char **words, int wordcount) { @@ -1112,6 +1126,7 @@ cli_cmd_quota_cbk (struct cli_state *state, struct cli_cmd_word *word, char *volname = NULL; dict_t *xdata = NULL; char buf[256] = {0}; + FILE *fp = NULL; const char *question = "Disabling quota will delete all the quota " "configuration. Do you want to continue?"; @@ -1152,6 +1167,12 @@ cli_cmd_quota_cbk (struct cli_state *state, struct cli_cmd_word *word, goto out; } if (type == GF_QUOTA_OPTION_TYPE_LIST && wordcount == 4) { + ret = cli_get_soft_limit (frame, local, options, words); + if (ret) { + gf_log ("cli", GF_LOG_ERROR, "Failed to fetch default " + "soft-limit"); + goto out; + } proc = &cli_quotad_clnt.proctable[GF_AGGREGATOR_GETLIMIT]; xdata = dict_new (); if (!xdata) { @@ -1166,7 +1187,6 @@ cli_cmd_quota_cbk (struct cli_state *state, struct cli_cmd_word *word, //TODO: fix hardcoding sprintf (quota_conf_file, "/var/lib/glusterd/vols/%s/quota.conf", volname); - FILE *fp = NULL; fp = fopen (quota_conf_file, "r"); if (!fp) { gf_log ("cli", GF_LOG_ERROR, "Failed to open quota.conf"); @@ -1197,6 +1217,8 @@ cli_cmd_quota_cbk (struct cli_state *state, struct cli_cmd_word *word, ret = proc->fn (frame, THIS, options); out: + if (fp) + fclose (fp); if (ret) { cli_cmd_sent_status_get (&sent); if (sent == 0 && parse_err == 0) diff --git a/cli/src/cli-rpc-ops.c b/cli/src/cli-rpc-ops.c index 9c533af6..3edcd0d6 100644 --- a/cli/src/cli-rpc-ops.c +++ b/cli/src/cli-rpc-ops.c @@ -2457,8 +2457,8 @@ out: return ret; } -static int -print_quota_list_from_quotad (dict_t *rsp_dict) +int +print_quota_list_from_quotad (call_frame_t *frame, dict_t *rsp_dict) { int64_t used_space = 0; int64_t avail = 0; @@ -2469,7 +2469,13 @@ print_quota_list_from_quotad (dict_t *rsp_dict) char *hl_str = NULL; char *sl_final = NULL; char *path = NULL; + char *default_sl = NULL; int ret = -1; + cli_local_t *local = NULL; + dict_t *gd_rsp_dict = NULL; + + local = frame->local; + gd_rsp_dict = local->dict; struct quota_limit { int64_t hl; @@ -2489,6 +2495,13 @@ print_quota_list_from_quotad (dict_t *rsp_dict) "limit key not present in dict"); goto out; } + + ret = dict_get_str (gd_rsp_dict, "default-soft-limit", &default_sl); + if (ret) { + gf_log (frame->this->name, GF_LOG_ERROR, "failed to " + "get default soft limit"); + goto out; + } existing_limits = (struct quota_limit *)limit; existing_limits->hl = ntoh64 (existing_limits->hl); existing_limits->sl = ntoh64 (existing_limits->sl); @@ -2496,8 +2509,7 @@ print_quota_list_from_quotad (dict_t *rsp_dict) hl_str = gf_uint64_2human_readable (existing_limits->hl); if (existing_limits->sl == 0) { - //TODO: need to fix this by fetching default sl from glusterd - sl_final = "80%"; + sl_final = default_sl; } else { snprintf (percent_str, sizeof (percent_str), "%"PRIu64"%%", existing_limits->sl); @@ -2582,7 +2594,7 @@ cli_quotad_getlimit_cbk (struct rpc_req *req, struct iovec *iov, goto out; } } - print_quota_list_from_quotad (dict); + print_quota_list_from_quotad (frame, dict); out: cli_cmd_broadcast_response (ret); @@ -2658,12 +2670,17 @@ gf_cli_quota_cbk (struct rpc_req *req, struct iovec *iov, call_frame_t *frame = NULL; char *default_sl = NULL; char *limit_list = NULL; - + cli_local_t *local = NULL; + dict_t *aggr = NULL; + char *default_sl_dup = NULL; + int32_t entry_count = 0; if (-1 == req->rpc_status) { goto out; } frame = myframe; + local = frame->local; + aggr = local->dict; ret = xdr_to_generic (*iov, &rsp, (xdrproc_t)xdr_gf_cli_rsp); if (ret < 0) { @@ -2708,12 +2725,27 @@ gf_cli_quota_cbk (struct rpc_req *req, struct iovec *iov, gf_log (frame->this->name, GF_LOG_TRACE, "failed to get " "default soft limit"); + if (default_sl) { + default_sl_dup = gf_strdup (default_sl); + if (!default_sl_dup) { + ret = -1; + goto out; + } + ret = dict_set_dynstr (aggr, "default-soft-limit", + default_sl_dup); + if (ret) { + gf_log (frame->this->name, GF_LOG_TRACE, + "failed to set default soft limit"); + GF_FREE (default_sl_dup); + } + } + ret = dict_get_int32 (dict, "type", &type); if (ret) gf_log (frame->this->name, GF_LOG_TRACE, "failed to get type"); - ret = dict_get_int32 (dict, "count", &count); + ret = dict_get_int32 (dict, "count", &entry_count); if (ret) gf_log (frame->this->name, GF_LOG_TRACE, "failed to get count"); @@ -2728,7 +2760,7 @@ gf_cli_quota_cbk (struct rpc_req *req, struct iovec *iov, goto out; } - gf_cli_quota_list (volname, dict, count, rsp.op_errstr, + gf_cli_quota_list (volname, dict, entry_count, rsp.op_errstr, default_sl); } |