diff options
author | Yaniv Kaul <ykaul@redhat.com> | 2019-06-05 20:16:40 +0300 |
---|---|---|
committer | Atin Mukherjee <amukherj@redhat.com> | 2019-07-16 13:34:56 +0000 |
commit | 7162c8ad9d404773656b4eb02c8fc17f067e7699 (patch) | |
tree | a83da6e6b2be8f4e38d83947347dad9ffb1ffa91 /cli | |
parent | 6bf9637a93011298d032332ca93009ba4e377e46 (diff) |
cli: defer create_frame() (and dict creation) to later stages.
Where possible, defer create_frame() - whenever possible, after
command line verification, for example.
Change-Id: Id6606e90e7ea6190f30b225c4733b229c519bb2f
updates: bz#1193929
Signed-off-by: Yaniv Kaul <ykaul@redhat.com>
Diffstat (limited to 'cli')
-rw-r--r-- | cli/src/cli-cmd-global.c | 10 | ||||
-rw-r--r-- | cli/src/cli-cmd-peer.c | 20 | ||||
-rw-r--r-- | cli/src/cli-cmd-snapshot.c | 12 | ||||
-rw-r--r-- | cli/src/cli-cmd-system.c | 54 | ||||
-rw-r--r-- | cli/src/cli-cmd-volume.c | 254 |
5 files changed, 199 insertions, 151 deletions
diff --git a/cli/src/cli-cmd-global.c b/cli/src/cli-cmd-global.c index d0729ac1f0a..d7c4d97ad72 100644 --- a/cli/src/cli-cmd-global.c +++ b/cli/src/cli-cmd-global.c @@ -101,10 +101,6 @@ cli_cmd_get_state_cbk(struct cli_state *state, struct cli_cmd_word *word, cli_local_t *local = NULL; char *op_errstr = NULL; - frame = create_frame(THIS, THIS->ctx->pool); - if (!frame) - goto out; - ret = cli_cmd_get_state_parse(state, words, wordcount, &options, &op_errstr); @@ -120,6 +116,12 @@ cli_cmd_get_state_cbk(struct cli_state *state, struct cli_cmd_word *word, goto out; } + frame = create_frame(THIS, THIS->ctx->pool); + if (!frame) { + ret = -1; + goto out; + } + CLI_LOCAL_INIT(local, words, frame, options); proc = &cli_rpc_prog->proctable[GLUSTER_CLI_GET_STATE]; diff --git a/cli/src/cli-cmd-peer.c b/cli/src/cli-cmd-peer.c index e42a1139b87..342b1d67aaa 100644 --- a/cli/src/cli-cmd-peer.c +++ b/cli/src/cli-cmd-peer.c @@ -48,10 +48,6 @@ cli_cmd_peer_probe_cbk(struct cli_state *state, struct cli_cmd_word *word, proc = &cli_rpc_prog->proctable[GLUSTER_CLI_PROBE]; - frame = create_frame(THIS, THIS->ctx->pool); - if (!frame) - goto out; - dict = dict_new(); if (!dict) goto out; @@ -77,6 +73,12 @@ cli_cmd_peer_probe_cbk(struct cli_state *state, struct cli_cmd_word *word, } */ + frame = create_frame(THIS, THIS->ctx->pool); + if (!frame) { + ret = -1; + goto out; + } + CLI_LOCAL_INIT(local, words, frame, dict); if (proc->fn) { @@ -127,10 +129,6 @@ cli_cmd_peer_deprobe_cbk(struct cli_state *state, struct cli_cmd_word *word, "want to proceed?"; proc = &cli_rpc_prog->proctable[GLUSTER_CLI_DEPROBE]; - frame = create_frame(THIS, THIS->ctx->pool); - if (!frame) - goto out; - dict = dict_new(); ret = dict_set_str(dict, "hostname", (char *)words[2]); @@ -162,6 +160,12 @@ cli_cmd_peer_deprobe_cbk(struct cli_state *state, struct cli_cmd_word *word, goto out; } + frame = create_frame(THIS, THIS->ctx->pool); + if (!frame) { + ret = -1; + goto out; + } + CLI_LOCAL_INIT(local, words, frame, dict); if (proc->fn) { diff --git a/cli/src/cli-cmd-snapshot.c b/cli/src/cli-cmd-snapshot.c index 814ab82f6eb..176c6d745b5 100644 --- a/cli/src/cli-cmd-snapshot.c +++ b/cli/src/cli-cmd-snapshot.c @@ -36,12 +36,6 @@ cli_cmd_snapshot_cbk(struct cli_state *state, struct cli_cmd_word *word, proc = &cli_rpc_prog->proctable[GLUSTER_CLI_SNAP]; - frame = create_frame(THIS, THIS->ctx->pool); - if (frame == NULL) { - ret = -1; - goto out; - } - /* Parses the command entered by the user */ ret = cli_cmd_snapshot_parse(words, wordcount, &options, state); if (ret) { @@ -55,6 +49,12 @@ cli_cmd_snapshot_cbk(struct cli_state *state, struct cli_cmd_word *word, goto out; } + frame = create_frame(THIS, THIS->ctx->pool); + if (frame == NULL) { + ret = -1; + goto out; + } + CLI_LOCAL_INIT(local, words, frame, options); if (proc->fn) diff --git a/cli/src/cli-cmd-system.c b/cli/src/cli-cmd-system.c index cb3a9ea7484..a0e6b3e59e9 100644 --- a/cli/src/cli-cmd-system.c +++ b/cli/src/cli-cmd-system.c @@ -43,25 +43,26 @@ cli_cmd_getspec_cbk(struct cli_state *state, struct cli_cmd_word *word, call_frame_t *frame = NULL; dict_t *dict = NULL; - frame = create_frame(THIS, THIS->ctx->pool); - if (!frame) + if (wordcount != 3) { + cli_usage_out(word->pattern); goto out; + } dict = dict_new(); if (!dict) goto out; - if (wordcount != 3) { - cli_usage_out(word->pattern); - goto out; - } - ret = dict_set_str(dict, "volid", (char *)words[2]); if (ret) goto out; proc = &cli_rpc_prog->proctable[GLUSTER_CLI_GETSPEC]; if (proc->fn) { + frame = create_frame(THIS, THIS->ctx->pool); + if (!frame) { + ret = -1; + goto out; + } ret = proc->fn(frame, THIS, dict); } @@ -74,6 +75,7 @@ out: if (dict) dict_unref(dict); + CLI_STACK_DESTROY(frame); return ret; } @@ -86,25 +88,26 @@ cli_cmd_pmap_b2p_cbk(struct cli_state *state, struct cli_cmd_word *word, call_frame_t *frame = NULL; dict_t *dict = NULL; - frame = create_frame(THIS, THIS->ctx->pool); - if (!frame) + if (wordcount != 4) { + cli_usage_out(word->pattern); goto out; + } dict = dict_new(); if (!dict) goto out; - if (wordcount != 4) { - cli_usage_out(word->pattern); - goto out; - } - ret = dict_set_str(dict, "brick", (char *)words[3]); if (ret) goto out; proc = &cli_rpc_prog->proctable[GLUSTER_CLI_PMAP_PORTBYBRICK]; if (proc->fn) { + frame = create_frame(THIS, THIS->ctx->pool); + if (!frame) { + ret = -1; + goto out; + } ret = proc->fn(frame, THIS, dict); } @@ -116,6 +119,8 @@ out: if (dict) dict_unref(dict); + + CLI_STACK_DESTROY(frame); return ret; } @@ -175,6 +180,7 @@ make_seq_dict(int argc, char **argv) { char index[] = "4294967296"; // 1<<32 int i = 0; + int len; int ret = 0; dict_t *dict = dict_new(); @@ -182,8 +188,8 @@ make_seq_dict(int argc, char **argv) return NULL; for (i = 0; i < argc; i++) { - snprintf(index, sizeof(index), "%d", i); - ret = dict_set_str(dict, index, argv[i]); + len = snprintf(index, sizeof(index), "%d", i); + ret = dict_set_strn(dict, index, len, argv[i]); if (ret == -1) break; } @@ -439,6 +445,7 @@ cli_cmd_sys_exec_cbk(struct cli_state *state, struct cli_cmd_word *word, char *tmp = NULL; int ret = -1; int i = -1; + int len; int cmd_args_count = 0; int in_cmd_args_count = 0; rpc_clnt_procedure_t *proc = NULL; @@ -451,15 +458,16 @@ cli_cmd_sys_exec_cbk(struct cli_state *state, struct cli_cmd_word *word, goto out; } - dict = dict_new(); - if (!dict) - goto out; - command = strtok_r((char *)words[2], " ", &saveptr); if (command == NULL) { gf_log("cli", GF_LOG_ERROR, "Failed to parse command"); goto out; } + + dict = dict_new(); + if (!dict) + goto out; + do { tmp = strtok_r(NULL, " ", &saveptr); if (tmp) { @@ -487,9 +495,9 @@ cli_cmd_sys_exec_cbk(struct cli_state *state, struct cli_cmd_word *word, for (i = 1; i <= cmd_args_count; i++) { in_cmd_args_count++; - snprintf(cmd_arg_name, sizeof(cmd_arg_name), "cmd_arg_%d", - in_cmd_args_count); - ret = dict_set_str(dict, cmd_arg_name, (char *)words[2 + i]); + len = snprintf(cmd_arg_name, sizeof(cmd_arg_name), "cmd_arg_%d", + in_cmd_args_count); + ret = dict_set_strn(dict, cmd_arg_name, len, (char *)words[2 + i]); if (ret) { gf_log("", GF_LOG_ERROR, "Unable to set %s in dict", cmd_arg_name); goto out; diff --git a/cli/src/cli-cmd-volume.c b/cli/src/cli-cmd-volume.c index 819faa0ca63..5c53410701b 100644 --- a/cli/src/cli-cmd-volume.c +++ b/cli/src/cli-cmd-volume.c @@ -65,10 +65,6 @@ cli_cmd_volume_info_cbk(struct cli_state *state, struct cli_cmd_word *word, proc = &cli_rpc_prog->proctable[GLUSTER_CLI_GET_VOLUME]; - frame = create_frame(THIS, THIS->ctx->pool); - if (!frame) - goto out; - if ((wordcount == 2) || (wordcount == 3 && !strcmp(words[2], "all"))) { ctx.flags = GF_CLI_GET_NEXT_VOLUME; proc = &cli_rpc_prog->proctable[GLUSTER_CLI_GET_NEXT_VOLUME]; @@ -91,6 +87,10 @@ cli_cmd_volume_info_cbk(struct cli_state *state, struct cli_cmd_word *word, if (!local) goto out; + frame = create_frame(THIS, THIS->ctx->pool); + if (!frame) + goto out; + local->get_vol.flags = ctx.flags; if (ctx.volname) local->get_vol.volname = gf_strdup(ctx.volname); @@ -216,10 +216,6 @@ cli_cmd_volume_create_cbk(struct cli_state *state, struct cli_cmd_word *word, proc = &cli_rpc_prog->proctable[GLUSTER_CLI_CREATE_VOLUME]; - frame = create_frame(THIS, THIS->ctx->pool); - if (!frame) - goto out; - ret = cli_cmd_volume_create_parse(state, words, wordcount, &options, &bricks); @@ -245,6 +241,12 @@ cli_cmd_volume_create_cbk(struct cli_state *state, struct cli_cmd_word *word, } } + frame = create_frame(THIS, THIS->ctx->pool); + if (!frame) { + ret = -1; + goto out; + } + CLI_LOCAL_INIT(local, words, frame, options); if (proc->fn) { @@ -287,14 +289,6 @@ cli_cmd_volume_delete_cbk(struct cli_state *state, struct cli_cmd_word *word, "Do you want to continue?"; proc = &cli_rpc_prog->proctable[GLUSTER_CLI_DELETE_VOLUME]; - frame = create_frame(THIS, THIS->ctx->pool); - if (!frame) - goto out; - - dict = dict_new(); - if (!dict) - goto out; - if (wordcount != 3) { cli_usage_out(word->pattern); parse_error = 1; @@ -303,6 +297,10 @@ cli_cmd_volume_delete_cbk(struct cli_state *state, struct cli_cmd_word *word, volname = (char *)words[2]; + dict = dict_new(); + if (!dict) + goto out; + ret = dict_set_str(dict, "volname", volname); if (ret) { gf_log(THIS->name, GF_LOG_WARNING, "dict set failed"); @@ -324,6 +322,12 @@ cli_cmd_volume_delete_cbk(struct cli_state *state, struct cli_cmd_word *word, goto out; } + frame = create_frame(THIS, THIS->ctx->pool); + if (!frame) { + ret = -1; + goto out; + } + CLI_LOCAL_INIT(local, words, frame, dict); if (proc->fn) { @@ -359,30 +363,15 @@ cli_cmd_volume_start_cbk(struct cli_state *state, struct cli_cmd_word *word, int flags = 0; cli_local_t *local = NULL; - frame = create_frame(THIS, THIS->ctx->pool); - if (!frame) - goto out; - if (wordcount < 3 || wordcount > 4) { cli_usage_out(word->pattern); parse_error = 1; goto out; } - dict = dict_new(); - if (!dict) { - goto out; - } - if (!words[2]) goto out; - ret = dict_set_str(dict, "volname", (char *)words[2]); - if (ret) { - gf_log(THIS->name, GF_LOG_ERROR, "dict set failed"); - goto out; - } - if (wordcount == 4) { if (!strcmp("force", words[3])) { flags |= GF_CLI_FLAG_OP_FORCE; @@ -393,6 +382,18 @@ cli_cmd_volume_start_cbk(struct cli_state *state, struct cli_cmd_word *word, goto out; } } + + dict = dict_new(); + if (!dict) { + goto out; + } + + ret = dict_set_str(dict, "volname", (char *)words[2]); + if (ret) { + gf_log(THIS->name, GF_LOG_ERROR, "dict set failed"); + goto out; + } + ret = dict_set_int32(dict, "flags", flags); if (ret) { gf_log(THIS->name, GF_LOG_ERROR, "dict set failed"); @@ -401,6 +402,12 @@ cli_cmd_volume_start_cbk(struct cli_state *state, struct cli_cmd_word *word, proc = &cli_rpc_prog->proctable[GLUSTER_CLI_START_VOLUME]; + frame = create_frame(THIS, THIS->ctx->pool); + if (!frame) { + ret = -1; + goto out; + } + CLI_LOCAL_INIT(local, words, frame, dict); if (proc->fn) { @@ -487,10 +494,6 @@ cli_cmd_volume_stop_cbk(struct cli_state *state, struct cli_cmd_word *word, "Stopping volume will make its data inaccessible. " "Do you want to continue?"; - frame = create_frame(THIS, THIS->ctx->pool); - if (!frame) - goto out; - if (wordcount < 3 || wordcount > 4) { cli_usage_out(word->pattern); parse_error = 1; @@ -541,6 +544,12 @@ cli_cmd_volume_stop_cbk(struct cli_state *state, struct cli_cmd_word *word, proc = &cli_rpc_prog->proctable[GLUSTER_CLI_STOP_VOLUME]; + frame = create_frame(THIS, THIS->ctx->pool); + if (!frame) { + ret = -1; + goto out; + } + CLI_LOCAL_INIT(local, words, frame, dict); if (proc->fn) { @@ -577,20 +586,16 @@ cli_cmd_volume_rename_cbk(struct cli_state *state, struct cli_cmd_word *word, int sent = 0; int parse_error = 0; - frame = create_frame(THIS, THIS->ctx->pool); - if (!frame) - goto out; - - dict = dict_new(); - if (!dict) - goto out; - if (wordcount != 4) { cli_usage_out(word->pattern); parse_error = 1; goto out; } + dict = dict_new(); + if (!dict) + goto out; + ret = dict_set_str(dict, "old-volname", (char *)words[2]); if (ret) @@ -604,6 +609,11 @@ cli_cmd_volume_rename_cbk(struct cli_state *state, struct cli_cmd_word *word, proc = &cli_rpc_prog->proctable[GLUSTER_CLI_RENAME_VOLUME]; if (proc->fn) { + frame = create_frame(THIS, THIS->ctx->pool); + if (!frame) { + ret = -1; + goto out; + } ret = proc->fn(frame, THIS, dict); } @@ -642,10 +652,6 @@ cli_cmd_volume_defrag_cbk(struct cli_state *state, struct cli_cmd_word *word, goto out; #endif - frame = create_frame(THIS, THIS->ctx->pool); - if (!frame) - goto out; - ret = cli_cmd_volume_defrag_parse(words, wordcount, &dict); if (ret) { @@ -655,6 +661,12 @@ cli_cmd_volume_defrag_cbk(struct cli_state *state, struct cli_cmd_word *word, proc = &cli_rpc_prog->proctable[GLUSTER_CLI_DEFRAG_VOLUME]; + frame = create_frame(THIS, THIS->ctx->pool); + if (!frame) { + ret = -1; + goto out; + } + CLI_LOCAL_INIT(local, words, frame, dict); if (proc->fn) { @@ -703,10 +715,6 @@ cli_cmd_volume_reset_cbk(struct cli_state *state, struct cli_cmd_word *word, proc = &cli_rpc_prog->proctable[GLUSTER_CLI_RESET_VOLUME]; - frame = create_frame(THIS, THIS->ctx->pool); - if (!frame) - goto out; - ret = cli_cmd_volume_reset_parse(words, wordcount, &options); if (ret) { cli_usage_out(word->pattern); @@ -714,6 +722,12 @@ cli_cmd_volume_reset_cbk(struct cli_state *state, struct cli_cmd_word *word, goto out; } + frame = create_frame(THIS, THIS->ctx->pool); + if (!frame) { + ret = -1; + goto out; + } + CLI_LOCAL_INIT(local, words, frame, options); if (proc->fn) { @@ -818,10 +832,6 @@ cli_cmd_volume_set_cbk(struct cli_state *state, struct cli_cmd_word *word, proc = &cli_rpc_prog->proctable[GLUSTER_CLI_SET_VOLUME]; - frame = create_frame(THIS, THIS->ctx->pool); - if (!frame) - goto out; - ret = cli_cmd_volume_set_parse(state, words, wordcount, &options, &op_errstr); if (ret) { @@ -835,6 +845,12 @@ cli_cmd_volume_set_cbk(struct cli_state *state, struct cli_cmd_word *word, goto out; } + frame = create_frame(THIS, THIS->ctx->pool); + if (!frame) { + ret = -1; + goto out; + } + CLI_LOCAL_INIT(local, words, frame, options); if (proc->fn) { @@ -1042,10 +1058,6 @@ cli_cmd_volume_add_brick_cbk(struct cli_state *state, struct cli_cmd_word *word, "filesystem operations on the volume after the change. Do you " "really want to continue with 'stripe' count option ? "; - frame = create_frame(THIS, THIS->ctx->pool); - if (!frame) - goto out; - ret = cli_cmd_volume_add_brick_parse(state, words, wordcount, &options, 0); if (ret) { cli_usage_out(word->pattern); @@ -1090,6 +1102,12 @@ cli_cmd_volume_add_brick_cbk(struct cli_state *state, struct cli_cmd_word *word, proc = &cli_rpc_prog->proctable[GLUSTER_CLI_ADD_BRICK]; + frame = create_frame(THIS, THIS->ctx->pool); + if (!frame) { + ret = -1; + goto out; + } + CLI_LOCAL_INIT(local, words, frame, options); if (proc->fn) { @@ -1291,12 +1309,6 @@ cli_cmd_quota_handle_list_all(const char **words, dict_t *options) goto out; } - frame = create_frame(THIS, THIS->ctx->pool); - if (!frame) { - ret = -1; - goto out; - } - volname_dup = gf_strdup(volname); if (!volname_dup) { ret = -1; @@ -1328,6 +1340,12 @@ cli_cmd_quota_handle_list_all(const char **words, dict_t *options) if (ret) goto out; + frame = create_frame(THIS, THIS->ctx->pool); + if (!frame) { + ret = -1; + goto out; + } + CLI_LOCAL_INIT(local, words, frame, xdata); proc = &cli_quotad_clnt.proctable[GF_AGGREGATOR_GETLIMIT]; @@ -1740,10 +1758,6 @@ cli_cmd_volume_remove_brick_cbk(struct cli_state *state, int32_t command = GF_OP_CMD_NONE; char *question = NULL; - frame = create_frame(THIS, THIS->ctx->pool); - if (!frame) - goto out; - ret = cli_cmd_volume_remove_brick_parse(state, words, wordcount, &options, &need_question, &brick_count, &command); @@ -1809,6 +1823,12 @@ cli_cmd_volume_remove_brick_cbk(struct cli_state *state, proc = &cli_rpc_prog->proctable[GLUSTER_CLI_REMOVE_BRICK]; + frame = create_frame(THIS, THIS->ctx->pool); + if (!frame) { + ret = -1; + goto out; + } + CLI_LOCAL_INIT(local, words, frame, options); if (proc->fn) { @@ -1855,10 +1875,6 @@ cli_cmd_volume_reset_brick_cbk(struct cli_state *state, #endif proc = &cli_rpc_prog->proctable[GLUSTER_CLI_RESET_BRICK]; - frame = create_frame(THIS, THIS->ctx->pool); - if (!frame) - goto out; - ret = cli_cmd_volume_reset_brick_parse(words, wordcount, &options); if (ret) { @@ -1877,6 +1893,12 @@ cli_cmd_volume_reset_brick_cbk(struct cli_state *state, } } + frame = create_frame(THIS, THIS->ctx->pool); + if (!frame) { + ret = -1; + goto out; + } + CLI_LOCAL_INIT(local, words, frame, options); if (proc->fn) { @@ -1923,10 +1945,6 @@ cli_cmd_volume_replace_brick_cbk(struct cli_state *state, #endif proc = &cli_rpc_prog->proctable[GLUSTER_CLI_REPLACE_BRICK]; - frame = create_frame(THIS, THIS->ctx->pool); - if (!frame) - goto out; - ret = cli_cmd_volume_replace_brick_parse(words, wordcount, &options); if (ret) { @@ -1935,6 +1953,12 @@ cli_cmd_volume_replace_brick_cbk(struct cli_state *state, goto out; } + frame = create_frame(THIS, THIS->ctx->pool); + if (!frame) { + ret = -1; + goto out; + } + CLI_LOCAL_INIT(local, words, frame, options); if (proc->fn) { @@ -2039,6 +2063,10 @@ cli_cmd_log_rotate_cbk(struct cli_state *state, struct cli_cmd_word *word, proc = &cli_rpc_prog->proctable[GLUSTER_CLI_LOG_ROTATE]; + ret = cli_cmd_log_rotate_parse(words, wordcount, &options); + if (ret) + goto out; + frame = create_frame(THIS, THIS->ctx->pool); if (!frame) { gf_log(THIS->name, GF_LOG_ERROR, "failed to create frame"); @@ -2046,10 +2074,6 @@ cli_cmd_log_rotate_cbk(struct cli_state *state, struct cli_cmd_word *word, goto out; } - ret = cli_cmd_log_rotate_parse(words, wordcount, &options); - if (ret) - goto out; - CLI_LOCAL_INIT(local, words, frame, options); if (proc->fn) { @@ -2151,12 +2175,6 @@ cli_cmd_volume_gsync_set_cbk(struct cli_state *state, struct cli_cmd_word *word, proc = &cli_rpc_prog->proctable[GLUSTER_CLI_GSYNC_SET]; - frame = create_frame(THIS, THIS->ctx->pool); - if (frame == NULL) { - ret = -1; - goto out; - } - ret = cli_cmd_gsync_set_parse(words, wordcount, &options, &errstr); if (ret) { if (errstr) { @@ -2169,6 +2187,12 @@ cli_cmd_volume_gsync_set_cbk(struct cli_state *state, struct cli_cmd_word *word, goto out; } + frame = create_frame(THIS, THIS->ctx->pool); + if (frame == NULL) { + ret = -1; + goto out; + } + CLI_LOCAL_INIT(local, words, frame, options); if (proc->fn) @@ -2615,9 +2639,6 @@ cli_cmd_volume_heal_cbk(struct cli_state *state, struct cli_cmd_word *word, int heal_op = 0; this = THIS; - frame = create_frame(this, this->ctx->pool); - if (!frame) - goto out; if (wordcount < 3) { cli_usage_out(word->pattern); @@ -2644,6 +2665,12 @@ cli_cmd_volume_heal_cbk(struct cli_state *state, struct cli_cmd_word *word, proc = &cli_rpc_prog->proctable[GLUSTER_CLI_HEAL_VOLUME]; + frame = create_frame(this, this->ctx->pool); + if (!frame) { + ret = -1; + goto out; + } + CLI_LOCAL_INIT(local, words, frame, options); if (proc->fn) { @@ -2678,10 +2705,6 @@ cli_cmd_volume_statedump_cbk(struct cli_state *state, struct cli_cmd_word *word, int parse_error = 0; cli_local_t *local = NULL; - frame = create_frame(THIS, THIS->ctx->pool); - if (!frame) - goto out; - if (wordcount < 3) { cli_usage_out(word->pattern); parse_error = 1; @@ -2707,6 +2730,12 @@ cli_cmd_volume_statedump_cbk(struct cli_state *state, struct cli_cmd_word *word, proc = &cli_rpc_prog->proctable[GLUSTER_CLI_STATEDUMP_VOLUME]; + frame = create_frame(THIS, THIS->ctx->pool); + if (!frame) { + ret = -1; + goto out; + } + CLI_LOCAL_INIT(local, words, frame, options); if (proc->fn) { @@ -2734,12 +2763,11 @@ cli_cmd_volume_list_cbk(struct cli_state *state, struct cli_cmd_word *word, rpc_clnt_procedure_t *proc = NULL; int sent = 0; - frame = create_frame(THIS, THIS->ctx->pool); - if (!frame) - goto out; - proc = &cli_rpc_prog->proctable[GLUSTER_CLI_LIST_VOLUME]; if (proc->fn) { + frame = create_frame(THIS, THIS->ctx->pool); + if (!frame) + goto out; ret = proc->fn(frame, THIS, NULL); } @@ -2768,10 +2796,6 @@ cli_cmd_volume_clearlocks_cbk(struct cli_state *state, int parse_error = 0; cli_local_t *local = NULL; - frame = create_frame(THIS, THIS->ctx->pool); - if (!frame) - goto out; - if (wordcount < 7 || wordcount > 8) { cli_usage_out(word->pattern); parse_error = 1; @@ -2798,6 +2822,12 @@ cli_cmd_volume_clearlocks_cbk(struct cli_state *state, proc = &cli_rpc_prog->proctable[GLUSTER_CLI_CLRLOCKS_VOLUME]; + frame = create_frame(THIS, THIS->ctx->pool); + if (!frame) { + ret = -1; + goto out; + } + CLI_LOCAL_INIT(local, words, frame, options); if (proc->fn) { @@ -2828,10 +2858,6 @@ cli_cmd_volume_barrier_cbk(struct cli_state *state, struct cli_cmd_word *word, int parse_error = 0; cli_local_t *local = NULL; - frame = create_frame(THIS, THIS->ctx->pool); - if (!frame) - goto out; - if (wordcount != 4) { cli_usage_out(word->pattern); parse_error = 1; @@ -2853,6 +2879,12 @@ cli_cmd_volume_barrier_cbk(struct cli_state *state, struct cli_cmd_word *word, proc = &cli_rpc_prog->proctable[GLUSTER_CLI_BARRIER_VOLUME]; + frame = create_frame(THIS, THIS->ctx->pool); + if (!frame) { + ret = -1; + goto out; + } + CLI_LOCAL_INIT(local, words, frame, options); if (proc->fn) @@ -2887,10 +2919,6 @@ cli_cmd_volume_getopt_cbk(struct cli_state *state, struct cli_cmd_word *word, goto out; } - frame = create_frame(THIS, THIS->ctx->pool); - if (!frame) - goto out; - options = dict_new(); if (!options) goto out; @@ -2905,6 +2933,12 @@ cli_cmd_volume_getopt_cbk(struct cli_state *state, struct cli_cmd_word *word, proc = &cli_rpc_prog->proctable[GLUSTER_CLI_GET_VOL_OPT]; + frame = create_frame(THIS, THIS->ctx->pool); + if (!frame) { + ret = -1; + goto out; + } + CLI_LOCAL_INIT(local, words, frame, options); if (proc->fn) |