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/src/cli-cmd-volume.c | |
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/src/cli-cmd-volume.c')
-rw-r--r-- | cli/src/cli-cmd-volume.c | 254 |
1 files changed, 144 insertions, 110 deletions
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) |