diff options
| -rw-r--r-- | cli/src/cli-cmd-volume.c | 74 | ||||
| -rw-r--r-- | cli/src/cli-rpc-ops.c | 524 | ||||
| -rw-r--r-- | cli/src/cli.h | 1 | ||||
| -rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-brick-ops.c | 29 | ||||
| -rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-geo-rep.c | 8 | ||||
| -rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-handler.c | 54 | ||||
| -rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-log-ops.c | 10 | ||||
| -rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-quota.c | 7 | ||||
| -rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-rebalance.c | 53 | ||||
| -rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-replace-brick.c | 14 | ||||
| -rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-rpc-ops.c | 4 | ||||
| -rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-utils.c | 35 | ||||
| -rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-utils.h | 5 | ||||
| -rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-volume-ops.c | 63 | 
14 files changed, 344 insertions, 537 deletions
diff --git a/cli/src/cli-cmd-volume.c b/cli/src/cli-cmd-volume.c index 3a67de13..b9bed82e 100644 --- a/cli/src/cli-cmd-volume.c +++ b/cli/src/cli-cmd-volume.c @@ -29,6 +29,17 @@  #include "cli1-xdr.h"  #include "run.h" +#define SAVE_WORDS_IN_LOCAL(local, words, frame)            \ +        do {                                                \ +                local = cli_local_get ();                   \ +                                                            \ +                if (local) {                                \ +                        local->words = words;               \ +                        if (frame)                          \ +                                frame->local = local;       \ +                }                                           \ +        } while (0) +  extern struct rpc_clnt *global_rpc;  extern rpc_clnt_prog_t *cli_rpc_prog; @@ -111,6 +122,7 @@ cli_cmd_sync_volume_cbk (struct cli_state *state, struct cli_cmd_word *word,          int                     sent = 0;          int                     parse_error = 0;          dict_t                  *dict = NULL; +        cli_local_t             *local = NULL;          if ((wordcount < 3) || (wordcount > 4)) {                  cli_usage_out (word->pattern); @@ -151,6 +163,8 @@ cli_cmd_sync_volume_cbk (struct cli_state *state, struct cli_cmd_word *word,          if (!frame)                  goto out; +        SAVE_WORDS_IN_LOCAL (local, words, frame); +          if (proc->fn) {                  ret = proc->fn (frame, THIS, dict);          } @@ -332,6 +346,7 @@ cli_cmd_volume_create_cbk (struct cli_state *state, struct cli_cmd_word *word,          int32_t                 brick_count = 0;          int32_t                 sub_count = 0;          int32_t                 type = GF_CLUSTER_TYPE_NONE; +        cli_local_t             *local = NULL;          proc = &cli_rpc_prog->proctable[GLUSTER_CLI_CREATE_VOLUME]; @@ -340,6 +355,8 @@ cli_cmd_volume_create_cbk (struct cli_state *state, struct cli_cmd_word *word,          if (!frame)                  goto out; +        SAVE_WORDS_IN_LOCAL (local, words, frame); +          ret = cli_cmd_volume_create_parse (words, wordcount, &options);          if (ret) { @@ -409,6 +426,7 @@ cli_cmd_volume_delete_cbk (struct cli_state *state, struct cli_cmd_word *word,          const char              *question = NULL;          int                     sent = 0;          int                     parse_error = 0; +        cli_local_t             *local = NULL;          question = "Deleting volume will erase all information about the volume. "                     "Do you want to continue?"; @@ -418,6 +436,8 @@ cli_cmd_volume_delete_cbk (struct cli_state *state, struct cli_cmd_word *word,          if (!frame)                  goto out; +        SAVE_WORDS_IN_LOCAL (local, words, frame); +          if (wordcount != 3) {                  cli_usage_out (word->pattern);                  parse_error = 1; @@ -460,6 +480,7 @@ cli_cmd_volume_start_cbk (struct cli_state *state, struct cli_cmd_word *word,          int                     parse_error = 0;          dict_t                  *dict = NULL;          int                     flags = 0; +        cli_local_t             *local = NULL;          frame = create_frame (THIS, THIS->ctx->pool);          if (!frame) @@ -471,6 +492,8 @@ cli_cmd_volume_start_cbk (struct cli_state *state, struct cli_cmd_word *word,                 goto out;          } +        SAVE_WORDS_IN_LOCAL (local, words, frame); +          dict = dict_new ();          if (!dict) {                  goto out; @@ -583,6 +606,7 @@ cli_cmd_volume_stop_cbk (struct cli_state *state, struct cli_cmd_word *word,          int                     parse_error = 0;          dict_t                  *dict = NULL;          char                    *volname = NULL; +        cli_local_t             *local = NULL;          const char *question = "Stopping volume will make its data inaccessible. "                                 "Do you want to continue?"; @@ -591,6 +615,8 @@ cli_cmd_volume_stop_cbk (struct cli_state *state, struct cli_cmd_word *word,          if (!frame)                  goto out; +        SAVE_WORDS_IN_LOCAL (local, words, frame); +          if (wordcount < 3 || wordcount > 4) {                  cli_usage_out (word->pattern);                  parse_error = 1; @@ -718,6 +744,7 @@ cli_cmd_volume_defrag_cbk (struct cli_state *state, struct cli_cmd_word *word,          dict_t               *dict = NULL;          int                     sent = 0;          int                     parse_error = 0; +        cli_local_t          *local = NULL;  #ifdef GF_SOLARIS_HOST_OS          cli_out ("Command not supported on Solaris");          goto out; @@ -727,6 +754,8 @@ cli_cmd_volume_defrag_cbk (struct cli_state *state, struct cli_cmd_word *word,          if (!frame)                  goto out; +        SAVE_WORDS_IN_LOCAL (local, words, frame); +          dict = dict_new ();          if (!dict)                  goto out; @@ -813,6 +842,7 @@ cli_cmd_volume_reset_cbk (struct cli_state *state, struct cli_cmd_word *word,          rpc_clnt_procedure_t    *proc = NULL;          call_frame_t            *frame = NULL;          dict_t                  *options = NULL; +        cli_local_t             *local = NULL;          proc = &cli_rpc_prog->proctable[GLUSTER_CLI_RESET_VOLUME]; @@ -820,6 +850,8 @@ cli_cmd_volume_reset_cbk (struct cli_state *state, struct cli_cmd_word *word,          if (!frame)                  goto out; +        SAVE_WORDS_IN_LOCAL (local, words, frame); +          ret = cli_cmd_volume_reset_parse (words, wordcount, &options);          if (ret) { @@ -859,6 +891,7 @@ cli_cmd_volume_profile_cbk (struct cli_state *state, struct cli_cmd_word *word,          rpc_clnt_procedure_t    *proc    = NULL;          call_frame_t            *frame   = NULL;          dict_t                  *options = NULL; +        cli_local_t             *local = NULL;          ret = cli_cmd_volume_profile_parse (words, wordcount, &options); @@ -874,6 +907,8 @@ cli_cmd_volume_profile_cbk (struct cli_state *state, struct cli_cmd_word *word,          if (!frame)                  goto out; +        SAVE_WORDS_IN_LOCAL (local, words, frame); +          if (proc->fn) {                  ret = proc->fn (frame, THIS, options);          } @@ -905,6 +940,7 @@ cli_cmd_volume_set_cbk (struct cli_state *state, struct cli_cmd_word *word,          rpc_clnt_procedure_t    *proc = NULL;          call_frame_t            *frame = NULL;          dict_t                  *options = NULL; +        cli_local_t             *local = NULL;          proc = &cli_rpc_prog->proctable[GLUSTER_CLI_SET_VOLUME]; @@ -912,6 +948,8 @@ cli_cmd_volume_set_cbk (struct cli_state *state, struct cli_cmd_word *word,          if (!frame)                  goto out; +        SAVE_WORDS_IN_LOCAL (local, words, frame); +          ret = cli_cmd_volume_set_parse (words, wordcount, &options);          if (ret) { @@ -952,6 +990,7 @@ cli_cmd_volume_add_brick_cbk (struct cli_state *state,          int                     sent = 0;          int                     parse_error = 0;          gf_answer_t             answer = GF_ANSWER_NO; +        cli_local_t             *local = NULL;          const char *question = "Changing the 'stripe count' of the volume is "                  "not a supported feature. In some cases it may result in data " @@ -963,6 +1002,8 @@ cli_cmd_volume_add_brick_cbk (struct cli_state *state,          if (!frame)                  goto out; +        SAVE_WORDS_IN_LOCAL (local, words, frame); +          ret = cli_cmd_volume_add_brick_parse (words, wordcount, &options);          if (ret) { @@ -1015,6 +1056,7 @@ cli_cmd_quota_cbk (struct cli_state *state, struct cli_cmd_word *word,          call_frame_t            *frame     = NULL;          dict_t                  *options   = NULL;          gf_answer_t              answer    = GF_ANSWER_NO; +        cli_local_t             *local     = NULL;          const char *question = "Disabling quota will delete all the quota "                                 "configuration. Do you want to continue?"; @@ -1030,6 +1072,8 @@ cli_cmd_quota_cbk (struct cli_state *state, struct cli_cmd_word *word,                  goto out;          } +        SAVE_WORDS_IN_LOCAL (local, words, frame); +          ret = cli_cmd_quota_parse (words, wordcount, &options);          if (ret < 0) {                  cli_usage_out (word->pattern); @@ -1071,6 +1115,7 @@ cli_cmd_volume_remove_brick_cbk (struct cli_state *state,          int                     sent = 0;          int                     parse_error = 0;          int                     need_question = 0; +        cli_local_t             *local = NULL;          const char *question = "Removing brick(s) can result in data loss. "                                 "Do you want to Continue?"; @@ -1079,6 +1124,8 @@ cli_cmd_volume_remove_brick_cbk (struct cli_state *state,          if (!frame)                  goto out; +        SAVE_WORDS_IN_LOCAL (local, words, frame); +          ret = cli_cmd_volume_remove_brick_parse (words, wordcount, &options,                                                   &need_question); @@ -1131,6 +1178,7 @@ cli_cmd_volume_replace_brick_cbk (struct cli_state *state,          dict_t                  *options = NULL;          int                     sent = 0;          int                     parse_error = 0; +        cli_local_t             *local = NULL;  #ifdef GF_SOLARIS_HOST_OS          cli_out ("Command not supported on Solaris"); @@ -1142,6 +1190,8 @@ cli_cmd_volume_replace_brick_cbk (struct cli_state *state,          if (!frame)                  goto out; +        SAVE_WORDS_IN_LOCAL (local, words, frame); +          ret = cli_cmd_volume_replace_brick_parse (words, wordcount, &options);          if (ret) { @@ -1190,6 +1240,7 @@ cli_cmd_volume_top_cbk (struct cli_state *state, struct cli_cmd_word *word,          dict_t                  *options = NULL;          int                     sent     = 0;          int                     parse_error = 0; +        cli_local_t             *local = NULL;          ret = cli_cmd_volume_top_parse (words, wordcount, &options); @@ -1205,6 +1256,8 @@ cli_cmd_volume_top_cbk (struct cli_state *state, struct cli_cmd_word *word,          if (!frame)                  goto out; +        SAVE_WORDS_IN_LOCAL (local, words, frame); +          if (proc->fn) {                  ret = proc->fn (frame, THIS, options);          } @@ -1236,6 +1289,7 @@ cli_cmd_log_rotate_cbk (struct cli_state *state, struct cli_cmd_word *word,          dict_t                  *options = NULL;          int                     sent = 0;          int                     parse_error = 0; +        cli_local_t             *local = NULL;          if (!((wordcount == 4) || (wordcount == 5))) {                  cli_usage_out (word->pattern); @@ -1249,6 +1303,8 @@ cli_cmd_log_rotate_cbk (struct cli_state *state, struct cli_cmd_word *word,          if (!frame)                  goto out; +        SAVE_WORDS_IN_LOCAL (local, words, frame); +          ret = cli_cmd_log_rotate_parse (words, wordcount, &options);          if (ret)                  goto out; @@ -1259,14 +1315,13 @@ cli_cmd_log_rotate_cbk (struct cli_state *state, struct cli_cmd_word *word,  out:          if (options) -                dict_destroy (options); +                dict_unref (options);          if (ret) {                  cli_cmd_sent_status_get (&sent);                  if ((sent == 0) && (parse_error == 0))                          cli_out ("Volume log rotate failed");          } -          CLI_STACK_DESTROY (frame);          return ret; @@ -1341,6 +1396,7 @@ cli_cmd_volume_gsync_set_cbk (struct cli_state *state, struct cli_cmd_word *word          dict_t                  *options = NULL;          rpc_clnt_procedure_t    *proc    = NULL;          call_frame_t            *frame   = NULL; +        cli_local_t             *local   = NULL;          proc = &cli_rpc_prog->proctable [GLUSTER_CLI_GSYNC_SET];          if (proc == NULL) { @@ -1354,6 +1410,8 @@ cli_cmd_volume_gsync_set_cbk (struct cli_state *state, struct cli_cmd_word *word                  goto out;          } +        SAVE_WORDS_IN_LOCAL (local, words, frame); +          ret = cli_cmd_gsync_set_parse (words, wordcount, &options);          if (ret) {                  cli_usage_out (word->pattern); @@ -1386,6 +1444,7 @@ cli_cmd_volume_status_cbk (struct cli_state *state,          call_frame_t         *frame       = NULL;          dict_t               *dict        = NULL;          uint32_t              cmd         = 0; +        cli_local_t          *local       = NULL;          ret = cli_cmd_volume_status_parse (words, wordcount, &dict); @@ -1413,6 +1472,8 @@ cli_cmd_volume_status_cbk (struct cli_state *state,          if (!frame)                  goto out; +        SAVE_WORDS_IN_LOCAL (local, words, frame); +          ret = proc->fn (frame, THIS, dict);   out: @@ -1612,12 +1673,15 @@ cli_cmd_volume_heal_cbk (struct cli_state *state, struct cli_cmd_word *word,          int                     parse_error = 0;          dict_t                  *options = NULL;          xlator_t                *this = NULL; +        cli_local_t             *local = NULL;          this = THIS;          frame = create_frame (this, this->ctx->pool);          if (!frame)                  goto out; +        SAVE_WORDS_IN_LOCAL (local, words, frame); +          if (wordcount < 3) {                 cli_usage_out (word->pattern);                 parse_error = 1; @@ -1662,11 +1726,14 @@ cli_cmd_volume_statedump_cbk (struct cli_state *state, struct cli_cmd_word *word          dict_t                          *options = NULL;          int                             sent = 0;          int                             parse_error = 0; +        cli_local_t                     *local = NULL;          frame = create_frame (THIS, THIS->ctx->pool);          if (!frame)                  goto out; +        SAVE_WORDS_IN_LOCAL (local, words, frame); +          if (wordcount < 3) {                  cli_usage_out (word->pattern);                  parse_error = 1; @@ -1747,11 +1814,14 @@ cli_cmd_volume_clearlocks_cbk (struct cli_state *state,          dict_t                          *options = NULL;          int                             sent = 0;          int                             parse_error = 0; +        cli_local_t                     *local = NULL;          frame = create_frame (THIS, THIS->ctx->pool);          if (!frame)                  goto out; +        SAVE_WORDS_IN_LOCAL (local, words, frame); +          if (wordcount < 7 || wordcount > 8) {                  cli_usage_out (word->pattern);                  parse_error = 1; diff --git a/cli/src/cli-rpc-ops.c b/cli/src/cli-rpc-ops.c index 868a587f..368a03cc 100644 --- a/cli/src/cli-rpc-ops.c +++ b/cli/src/cli-rpc-ops.c @@ -67,6 +67,10 @@ int32_t  gf_cli_get_volume (call_frame_t *frame, xlator_t *this,                        void *data); +int +cli_to_glusterd (gf_cli_req *req, call_frame_t *frame, fop_cbk_fn_t cbkfn, +                 xdrproc_t xdrproc, dict_t *dict, int procnum, xlator_t *this, +                 rpc_clnt_prog_t *prog, struct iobref *iobref);  rpc_clnt_prog_t cli_handshake_prog = {          .progname  = "cli handshake", @@ -2533,7 +2537,6 @@ gf_cli_create_volume (call_frame_t *frame, xlator_t *this,          gf_cli_req              req = {{0,}};          int                     ret = 0;          dict_t                  *dict = NULL; -        cli_local_t             *local = NULL;          if (!frame || !this ||  !data) {                  ret = -1; @@ -2542,34 +2545,14 @@ gf_cli_create_volume (call_frame_t *frame, xlator_t *this,          dict = dict_ref ((dict_t *)data); -        ret = dict_allocate_and_serialize (dict, &req.dict.dict_val, -                                           &req.dict.dict_len); -        if (ret < 0) { -                gf_log (this->name, GF_LOG_DEBUG, -                        "failed to get serialized length of dict"); -                goto out; -        } - -        local = cli_local_get (); - -        if (local) { -                local->dict = dict_ref (dict); -                frame->local = local; -        } - -        ret = cli_cmd_submit (&req, frame, cli_rpc_prog, -                              GLUSTER_CLI_CREATE_VOLUME, NULL, -                              this, gf_cli_create_volume_cbk, -                              (xdrproc_t) xdr_gf_cli_req); - - +        ret = cli_to_glusterd (&req, frame, gf_cli_create_volume_cbk, +                               (xdrproc_t) xdr_gf_cli_req, dict, +                               GLUSTER_CLI_CREATE_VOLUME, this, cli_rpc_prog, +                               NULL);  out:          gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); -        if (dict) -                dict_unref (dict); -          GF_FREE (req.dict.dict_val);          return ret; @@ -2581,7 +2564,6 @@ gf_cli_delete_volume (call_frame_t *frame, xlator_t *this,  {          gf_cli_req              req = {{0,}};          int                     ret = 0; -        cli_local_t             *local = NULL;          dict_t                  *dict = NULL;          if (!frame || !this ||  !data) { @@ -2589,35 +2571,19 @@ gf_cli_delete_volume (call_frame_t *frame, xlator_t *this,                  goto out;          } -        local = cli_local_get (); -          dict = dict_new ();          ret = dict_set_str (dict, "volname", data);          if (ret) {                  gf_log (THIS->name, GF_LOG_WARNING, "dict set failed");                  goto out;          } -        if (local) { -                local->dict = dict_ref (dict); -                frame->local = local; -        } -        ret = dict_allocate_and_serialize (dict, &req.dict.dict_val, -                                           &req.dict.dict_len); -        if (ret < 0) { -                gf_log (this->name, GF_LOG_ERROR, -                        "failed to get serialize dict"); -                goto out; -        } - -        ret = cli_cmd_submit (&req, frame, cli_rpc_prog, -                              GLUSTER_CLI_DELETE_VOLUME, NULL, -                              this, gf_cli_delete_volume_cbk, -                              (xdrproc_t)xdr_gf_cli_req); +        ret = cli_to_glusterd (&req, frame, gf_cli_delete_volume_cbk, +                               (xdrproc_t) xdr_gf_cli_req, dict, +                               GLUSTER_CLI_DELETE_VOLUME, this, cli_rpc_prog, +                               NULL);  out: -        if (dict) -                dict_unref (dict);          GF_FREE (req.dict.dict_val);          gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); @@ -2630,7 +2596,6 @@ gf_cli_start_volume (call_frame_t *frame, xlator_t *this,  {          gf_cli_req              req = {{0,}};          int                     ret = 0; -        cli_local_t             *local = NULL;          dict_t                  *dict = NULL;          if (!frame || !this ||  !data) { @@ -2639,26 +2604,11 @@ gf_cli_start_volume (call_frame_t *frame, xlator_t *this,          }          dict = data; -        local = cli_local_get (); - -        ret = dict_allocate_and_serialize (dict, &req.dict.dict_val, -                                           &req.dict.dict_len); -        if (ret < 0) { -                gf_log (this->name, GF_LOG_ERROR, -                        "failed to serialize dict"); -                goto out; -        } - -        if (local) { -                local->dict = dict_ref (dict); -                frame->local = local; -        } - -        ret = cli_cmd_submit (&req, frame, cli_rpc_prog, -                              GLUSTER_CLI_START_VOLUME, NULL, -                              this, gf_cli_start_volume_cbk, -                              (xdrproc_t) xdr_gf_cli_req); +        ret = cli_to_glusterd (&req, frame, gf_cli_start_volume_cbk, +                               (xdrproc_t) xdr_gf_cli_req, dict, +                               GLUSTER_CLI_START_VOLUME, this, cli_rpc_prog, +                               NULL);  out:          gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); @@ -2672,7 +2622,6 @@ gf_cli_stop_volume (call_frame_t *frame, xlator_t *this,  {          gf_cli_req             req = {{0,}};          int                    ret = 0; -        cli_local_t            *local = NULL;          dict_t                 *dict = data;          if (!frame || !this ||  !data) { @@ -2680,27 +2629,12 @@ gf_cli_stop_volume (call_frame_t *frame, xlator_t *this,                  goto out;          } -        local = cli_local_get ();          dict = data; -        if (local) { -                local->dict = dict_ref (dict); -                frame->local = local; -        } - -        ret = dict_allocate_and_serialize (dict, &req.dict.dict_val, -                                           &req.dict.dict_len); -        if (ret < 0) { -                gf_log (this->name, GF_LOG_ERROR, -                        "failed to serialize the data"); - -                goto out; -        } - -        ret = cli_cmd_submit (&req, frame, cli_rpc_prog, -                              GLUSTER_CLI_STOP_VOLUME, NULL, -                              this, gf_cli_stop_volume_cbk, -                              (xdrproc_t) xdr_gf_cli_req); +        ret = cli_to_glusterd (&req, frame, gf_cli_stop_volume_cbk, +                               (xdrproc_t) xdr_gf_cli_req, dict, +                               GLUSTER_CLI_STOP_VOLUME, this, cli_rpc_prog, +                               NULL);  out:          gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); @@ -2714,7 +2648,6 @@ gf_cli_defrag_volume (call_frame_t *frame, xlator_t *this,  {          gf_cli_req              req     =  {{0,}};          int                     ret     = 0; -        cli_local_t            *local   = NULL;          char                   *volname = NULL;          char                   *cmd_str = NULL;          dict_t                 *dict    = NULL; @@ -2762,7 +2695,6 @@ gf_cli_defrag_volume (call_frame_t *frame, xlator_t *this,          }  done: -        local = cli_local_get ();          req_dict = dict_new ();          if (!req_dict) { @@ -2784,30 +2716,12 @@ done:                  goto out;          } -        if (local) { -                local->dict = dict_ref (req_dict); -                frame->local = local; -                local = NULL; -        } - -        ret = dict_allocate_and_serialize (req_dict, &req.dict.dict_val, -                                           &req.dict.dict_len); -        if (ret < 0) { -                gf_log (this->name, GF_LOG_ERROR, -                        "failed to serialize the data"); - -                goto out; -        } - -        ret = cli_cmd_submit (&req, frame, cli_rpc_prog, -                              GLUSTER_CLI_DEFRAG_VOLUME, NULL, -                              this, gf_cli_defrag_volume_cbk, -                              (xdrproc_t) xdr_gf_cli_req); +        ret = cli_to_glusterd (&req, frame, gf_cli_defrag_volume_cbk, +                               (xdrproc_t) xdr_gf_cli_req, req_dict, +                               GLUSTER_CLI_DEFRAG_VOLUME, this, cli_rpc_prog, +                               NULL);  out: -        if (local) -                cli_local_wipe (local); -          gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret);          return ret; @@ -2864,22 +2778,13 @@ gf_cli_reset_volume (call_frame_t *frame, xlator_t *this,          dict = data; -        ret = dict_allocate_and_serialize (dict, &req.dict.dict_val, -                                           &req.dict.dict_len); -        if (ret < 0) { -                gf_log (this->name, GF_LOG_ERROR, -                        "failed to get serialized length of dict"); -                goto out; -        } - -        ret = cli_cmd_submit (&req, frame, cli_rpc_prog, -                               GLUSTER_CLI_RESET_VOLUME, NULL, -                               this, gf_cli_reset_volume_cbk, -                               (xdrproc_t) xdr_gf_cli_req); +        ret = cli_to_glusterd (&req, frame, gf_cli_reset_volume_cbk, +                               (xdrproc_t) xdr_gf_cli_req, dict, +                               GLUSTER_CLI_RESET_VOLUME, this, cli_rpc_prog, +                               NULL);  out: -                gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); - +        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret);          return ret;  } @@ -2898,18 +2803,10 @@ gf_cli_set_volume (call_frame_t *frame, xlator_t *this,          dict = data; -        ret = dict_allocate_and_serialize (dict, &req.dict.dict_val, -                                           &req.dict.dict_len); -        if (ret < 0) { -                gf_log (this->name, GF_LOG_DEBUG, -                        "failed to get serialized length of dict"); -                goto out; -        } - -        ret = cli_cmd_submit (&req, frame, cli_rpc_prog, -                              GLUSTER_CLI_SET_VOLUME, NULL, -                              this, gf_cli_set_volume_cbk, -                              (xdrproc_t) xdr_gf_cli_req); +        ret = cli_to_glusterd (&req, frame, gf_cli_set_volume_cbk, +                               (xdrproc_t) xdr_gf_cli_req, dict, +                               GLUSTER_CLI_SET_VOLUME, this, cli_rpc_prog, +                               NULL);  out:          gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); @@ -2944,18 +2841,9 @@ gf_cli_add_brick (call_frame_t *frame, xlator_t *this,                  goto out; -        ret = dict_allocate_and_serialize (dict, &req.dict.dict_val, -                                           &req.dict.dict_len); -        if (ret < 0) { -                gf_log (this->name, GF_LOG_DEBUG, -                        "failed to get serialized length of dict"); -                goto out; -        } - -        ret = cli_cmd_submit (&req, frame, cli_rpc_prog, -                              GLUSTER_CLI_ADD_BRICK, NULL, -                              this, gf_cli_add_brick_cbk, -                              (xdrproc_t) xdr_gf_cli_req); +        ret = cli_to_glusterd (&req, frame, gf_cli_add_brick_cbk, +                               (xdrproc_t) xdr_gf_cli_req, dict, +                               GLUSTER_CLI_ADD_BRICK, this, cli_rpc_prog, NULL);  out:          gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); @@ -2977,27 +2865,14 @@ gf_cli_remove_brick (call_frame_t *frame, xlator_t *this,          char                     *volname = NULL;          dict_t                   *req_dict = NULL;          int32_t                   cmd = 0; -        cli_local_t              *local = NULL;          if (!frame || !this ||  !data) {                  ret = -1;                  goto out;          } -        local = cli_local_get (); -        if (!local) { -                ret = -1; -                gf_log (this->name, GF_LOG_ERROR, -                        "Out of memory"); -                goto out; -        } - -        frame->local = local; -          dict = data; -        local->dict = dict_ref (dict); -          ret = dict_get_str (dict, "volname", &volname);          if (ret)                  goto out; @@ -3009,18 +2884,11 @@ gf_cli_remove_brick (call_frame_t *frame, xlator_t *this,          if ((command != GF_OP_CMD_STATUS) &&              (command != GF_OP_CMD_STOP)) { -                ret = dict_allocate_and_serialize (dict, &req.dict.dict_val, -                                                   &req.dict.dict_len); -                if (ret < 0) { -                        gf_log (this->name, GF_LOG_DEBUG, -                                "failed to get serialized length of dict"); -                        goto out; -                } -                ret = cli_cmd_submit (&req, frame, cli_rpc_prog, -                                      GLUSTER_CLI_REMOVE_BRICK, NULL, -                                      this, gf_cli_remove_brick_cbk, -                                      (xdrproc_t) xdr_gf_cli_req); +                ret = cli_to_glusterd (&req, frame, gf_cli_remove_brick_cbk, +                                       (xdrproc_t) xdr_gf_cli_req, dict, +                                       GLUSTER_CLI_REMOVE_BRICK, this, +                                       cli_rpc_prog, NULL);          } else {                  /* Need rebalance status to e sent :-) */                  req_dict = dict_new (); @@ -3048,22 +2916,14 @@ gf_cli_remove_brick (call_frame_t *frame, xlator_t *this,                          goto out;                  } -                ret = dict_allocate_and_serialize (req_dict, &status_req.dict.dict_val, -                                                   &status_req.dict.dict_len); -                if (ret < 0) { -                        gf_log (this->name, GF_LOG_ERROR, -                                "failed to serialize the data"); +                ret = cli_to_glusterd (&status_req, frame, +                                       gf_cli3_remove_brick_status_cbk, +                                       (xdrproc_t) xdr_gf_cli_req, req_dict, +                                       GLUSTER_CLI_DEFRAG_VOLUME, this, +                                       cli_rpc_prog, NULL); -                        goto out;                  } -                ret = cli_cmd_submit (&status_req, frame, cli_rpc_prog, -                                      GLUSTER_CLI_DEFRAG_VOLUME, NULL, -                                      this, gf_cli3_remove_brick_status_cbk, -                                      (xdrproc_t) xdr_gf_cli_req); - -        } -  out:          gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); @@ -3071,9 +2931,6 @@ out:          GF_FREE (status_req.dict.dict_val); -        if (req_dict) -                dict_unref (req_dict); -          return ret;  } @@ -3083,7 +2940,6 @@ gf_cli_replace_brick (call_frame_t *frame, xlator_t *this,  {          gf_cli_req                  req        =  {{0,}};          int                         ret        = 0; -        cli_local_t                *local      = NULL;          dict_t                     *dict       = NULL;          char                       *src_brick  = NULL;          char                       *dst_brick  = NULL; @@ -3097,17 +2953,6 @@ gf_cli_replace_brick (call_frame_t *frame, xlator_t *this,          dict = data; -        local = cli_local_get (); -        if (!local) { -                ret = -1; -                gf_log (this->name, GF_LOG_ERROR, -                        "Out of memory"); -                goto out; -        } - -        local->dict  = dict_ref (dict); -        frame->local = local; -          ret = dict_get_int32 (dict, "operation", &op);          if (ret) {                  gf_log (this->name, GF_LOG_DEBUG, @@ -3140,19 +2985,10 @@ gf_cli_replace_brick (call_frame_t *frame, xlator_t *this,                  "%s with operation=%d", src_brick,                  dst_brick, op); - -        ret = dict_allocate_and_serialize (dict, &req.dict.dict_val, -                                           &req.dict.dict_len); -        if (ret < 0) { -                gf_log (this->name, GF_LOG_DEBUG, -                        "failed to get serialized length of dict"); -                goto out; -        } - -        ret = cli_cmd_submit (&req, frame, cli_rpc_prog, -                              GLUSTER_CLI_REPLACE_BRICK, NULL, -                              this, gf_cli_replace_brick_cbk, -                              (xdrproc_t) xdr_gf_cli_req); +        ret = cli_to_glusterd (&req, frame, gf_cli_replace_brick_cbk, +                               (xdrproc_t) xdr_gf_cli_req, dict, +                               GLUSTER_CLI_REPLACE_BRICK, this, cli_rpc_prog, +                               NULL);  out:          gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); @@ -3178,18 +3014,10 @@ gf_cli_log_rotate (call_frame_t *frame, xlator_t *this,          dict = data; -        ret = dict_allocate_and_serialize (dict, &req.dict.dict_val, -                                           &req.dict.dict_len); - -        if (ret < 0) { -                gf_log (THIS->name, GF_LOG_ERROR, "failed to serialize dict"); -                goto out; -        } - -        ret = cli_cmd_submit (&req, frame, cli_rpc_prog, -                              GLUSTER_CLI_LOG_ROTATE, NULL, -                              this, gf_cli_log_rotate_cbk, -                              (xdrproc_t) xdr_gf_cli_req); +        ret = cli_to_glusterd (&req, frame, gf_cli_log_rotate_cbk, +                               (xdrproc_t) xdr_gf_cli_req, dict, +                               GLUSTER_CLI_LOG_ROTATE, this, cli_rpc_prog, +                               NULL);  out: @@ -3213,18 +3041,11 @@ gf_cli_sync_volume (call_frame_t *frame, xlator_t *this,          }          dict = data; -        ret = dict_allocate_and_serialize (dict, &req.dict.dict_val, -                                           &req.dict.dict_len); - -        if (ret < 0) { -                gf_log (THIS->name, GF_LOG_ERROR, "failed to serialize dict"); -                goto out; -        } -        ret = cli_cmd_submit (&req, frame, -                              cli_rpc_prog, GLUSTER_CLI_SYNC_VOLUME, -                              NULL, this, gf_cli_sync_volume_cbk, -                              (xdrproc_t) xdr_gf_cli_req); +        ret = cli_to_glusterd (&req, frame, gf_cli_sync_volume_cbk, +                               (xdrproc_t) xdr_gf_cli_req, dict, +                               GLUSTER_CLI_SYNC_VOLUME, this, cli_rpc_prog, +                               NULL);  out:          gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); @@ -3278,21 +3099,13 @@ gf_cli_quota (call_frame_t *frame, xlator_t *this,          dict = data; -        ret = dict_allocate_and_serialize (dict, &req.dict.dict_val, -                                           &req.dict.dict_len); -        if (ret < 0) { -                gf_log (this->name, GF_LOG_ERROR, -                        "failed to get serialized length of dict"); -                goto out; -        } - -        ret = cli_cmd_submit (&req, frame, cli_rpc_prog, -                              GLUSTER_CLI_QUOTA, NULL, -                              this, gf_cli_quota_cbk, -                              (xdrproc_t) xdr_gf_cli_req); +        ret = cli_to_glusterd (&req, frame, gf_cli_quota_cbk, +                               (xdrproc_t) xdr_gf_cli_req, dict, +                               GLUSTER_CLI_QUOTA, this, cli_rpc_prog, NULL); -        GF_FREE (req.dict.dict_val);  out: +        GF_FREE (req.dict.dict_val); +          return ret;  } @@ -3652,19 +3465,10 @@ gf_cli_gsync_set (call_frame_t *frame, xlator_t *this,          dict = data; -        ret = dict_allocate_and_serialize (dict, &req.dict.dict_val, -                                           &req.dict.dict_len); -        if (ret < 0) { -                gf_log (this->name, GF_LOG_ERROR, -                        "failed to serialize the data"); - -                goto out; -        } - -        ret = cli_cmd_submit (&req, frame, cli_rpc_prog, -                              GLUSTER_CLI_GSYNC_SET, NULL, -                              this, gf_cli_gsync_set_cbk, -                              (xdrproc_t) xdr_gf_cli_req); +        ret = cli_to_glusterd (&req, frame, gf_cli_gsync_set_cbk, +                               (xdrproc_t) xdr_gf_cli_req, dict, +                               GLUSTER_CLI_GSYNC_SET, this, cli_rpc_prog, +                               NULL);  out:          GF_FREE (req.dict.dict_val); @@ -4021,21 +3825,10 @@ gf_cli_profile_volume (call_frame_t *frame, xlator_t *this, void *data)                  goto out;          dict = data; -        ret = dict_allocate_and_serialize (dict, &req.dict.dict_val, -                                           &req.dict.dict_len); - -        if (ret < 0) { -                gf_log (this->name, GF_LOG_ERROR, -                        "failed to serialize the data"); - -                goto out; -        } - - -        ret = cli_cmd_submit (&req, frame, cli_rpc_prog, -                              GLUSTER_CLI_PROFILE_VOLUME, NULL, -                              this, gf_cli_profile_volume_cbk, -                              (xdrproc_t) xdr_gf_cli_req); +        ret = cli_to_glusterd (&req, frame, gf_cli_profile_volume_cbk, +                               (xdrproc_t) xdr_gf_cli_req, dict, +                               GLUSTER_CLI_PROFILE_VOLUME, this, cli_rpc_prog, +                               NULL);  out:          gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); @@ -4295,20 +4088,10 @@ gf_cli_top_volume (call_frame_t *frame, xlator_t *this, void *data)                  goto out;          dict = data; -        ret = dict_allocate_and_serialize (dict, &req.dict.dict_val, -                                           &req.dict.dict_len); -        if (ret < 0) { -                gf_log (this->name, GF_LOG_ERROR, -                        "failed to serialize the data"); - -                goto out; -        } - - -        ret = cli_cmd_submit (&req, frame, cli_rpc_prog, -                              GLUSTER_CLI_PROFILE_VOLUME, NULL, -                              this, gf_cli_top_volume_cbk, -                              (xdrproc_t) xdr_gf_cli_req); +        ret = cli_to_glusterd (&req, frame, gf_cli_top_volume_cbk, +                               (xdrproc_t) xdr_gf_cli_req, dict, +                               GLUSTER_CLI_PROFILE_VOLUME, this, cli_rpc_prog, +                               NULL);  out:          gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); @@ -5588,19 +5371,10 @@ gf_cli_status_volume (call_frame_t *frame, xlator_t *this,          dict = data; -        ret = dict_allocate_and_serialize (dict, &req.dict.dict_val, -                                           &req.dict.dict_len); -        if (ret < 0) { -                gf_log ("cli", GF_LOG_ERROR, -                        "failed to serialize the data"); - -                goto out; -        } -        ret = cli_cmd_submit (&req, frame, cli_rpc_prog, -                              GLUSTER_CLI_STATUS_VOLUME, NULL, -                              this, gf_cli_status_cbk, -                              (xdrproc_t)xdr_gf_cli_req); - +        ret = cli_to_glusterd (&req, frame, gf_cli_status_cbk, +                               (xdrproc_t) xdr_gf_cli_req, dict, +                               GLUSTER_CLI_STATUS_VOLUME, this, cli_rpc_prog, +                               NULL);   out:          gf_log ("cli", GF_LOG_DEBUG, "Returning: %d", ret);          return ret; @@ -5624,14 +5398,10 @@ gf_cli_status_volume_all (call_frame_t *frame, xlator_t *this, void *data)          if (ret)                  goto out; -        local = cli_local_get (); -        if (!local) { -                ret = -1; -                gf_log ("cli", GF_LOG_ERROR, "Failed to allocate local"); -                goto out; +        if (frame->local) { +                local = frame->local; +                local->all = _gf_true;          } -        frame->local = local; -        local->all = _gf_true;          ret = gf_cli_status_volume (frame, this, data);          if (ret) @@ -6008,7 +5778,6 @@ gf_cli_heal_volume (call_frame_t *frame, xlator_t *this,  {          gf_cli_req              req = {{0,}};          int                     ret = 0; -        cli_local_t             *local = NULL;          dict_t                  *dict = NULL;          if (!frame || !this ||  !data) { @@ -6017,26 +5786,11 @@ gf_cli_heal_volume (call_frame_t *frame, xlator_t *this,          }          dict = data; -        local = cli_local_get (); -        if (local) { -                local->dict = dict_ref (dict); -                frame->local = local; -        } - -        ret = dict_allocate_and_serialize (dict, &req.dict.dict_val, -                                           &req.dict.dict_len); -        if (ret < 0) { -                gf_log (this->name, GF_LOG_ERROR, -                        "failed to serialize the data"); - -                goto out; -        } - -        ret = cli_cmd_submit (&req, frame, cli_rpc_prog, -                              GLUSTER_CLI_HEAL_VOLUME, NULL, -                              this, gf_cli_heal_volume_cbk, -                              (xdrproc_t) xdr_gf_cli_req); +        ret = cli_to_glusterd (&req, frame, gf_cli_heal_volume_cbk, +                               (xdrproc_t) xdr_gf_cli_req, dict, +                               GLUSTER_CLI_HEAL_VOLUME, this, cli_rpc_prog, +                               NULL);  out:          gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); @@ -6103,23 +5857,12 @@ gf_cli_statedump_volume (call_frame_t *frame, xlator_t *this,          options = data; -        ret = dict_allocate_and_serialize (options, &req.dict.dict_val, -                                           &req.dict.dict_len); -        if (ret < 0) { -                gf_log (this->name, GF_LOG_ERROR, -                        "failed to serialize the data"); - -                goto out; -        } - -        ret = cli_cmd_submit (&req, frame, cli_rpc_prog, -                              GLUSTER_CLI_STATEDUMP_VOLUME, NULL, -                              this, gf_cli_statedump_volume_cbk, -                              (xdrproc_t)xdr_gf_cli_req); +        ret = cli_to_glusterd (&req, frame, gf_cli_statedump_volume_cbk, +                               (xdrproc_t) xdr_gf_cli_req, options, +                               GLUSTER_CLI_STATEDUMP_VOLUME, this, cli_rpc_prog, +                               NULL);  out: -        if (options) -                dict_destroy (options);          gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret);          GF_FREE (req.dict.dict_val); @@ -6303,27 +6046,88 @@ gf_cli_clearlocks_volume (call_frame_t *frame, xlator_t *this,          options = data; -        ret = dict_allocate_and_serialize (options, &req.dict.dict_val, -                                           &req.dict.dict_len); -        if (ret < 0) { -                gf_log ("cli", GF_LOG_ERROR, -                        "failed to serialize the data"); +        ret = cli_to_glusterd (&req, frame, gf_cli_clearlocks_volume_cbk, +                               (xdrproc_t) xdr_gf_cli_req, options, +                               GLUSTER_CLI_CLRLOCKS_VOLUME, this, cli_rpc_prog, +                               NULL); +out: +        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); +        GF_FREE (req.dict.dict_val); +        return ret; +} + +int +cli_to_glusterd (gf_cli_req *req, call_frame_t *frame, +                 fop_cbk_fn_t cbkfn, xdrproc_t xdrproc, dict_t *dict, +                 int procnum, xlator_t *this, rpc_clnt_prog_t *prog, +                 struct iobref *iobref) +{ +        int                ret = 0; +        size_t             len = 0; +        char               *cmd = NULL; +        int                i = 0; +        const char         **words = NULL; +        cli_local_t        *local = NULL; + +        if (!this || !frame || !dict) { +                ret = -1;                  goto out;          } -        ret = cli_cmd_submit (&req, frame, cli_rpc_prog, -                              GLUSTER_CLI_CLRLOCKS_VOLUME, NULL, -                              this, gf_cli_clearlocks_volume_cbk, -                              (xdrproc_t)xdr_gf_cli_req); +        if (!frame->local) { +                ret = -1; +                goto out; +        } -out: -        if (options) -                dict_destroy (options); -        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); +        local = frame->local; -        GF_FREE (req.dict.dict_val); +        if (!local->words) { +                ret = -1; +                goto out; +        } + +        words = local->words; +        local->dict = dict_ref (dict); + +        while (words[i]) +                len += strlen (words[i++]) + 1; + +        cmd = GF_CALLOC (1, len, gf_common_mt_char); + +        if (!cmd) { +                ret = -1; +                goto out; +        } + +        for (i = 0; words[i]; i++) { +                strncat (cmd, words[i], strlen (words[i])); +                strncat (cmd, " ", strlen (" ")); +        } + +        cmd [len - 1] = '\0'; + +        ret = dict_set_dynstr (dict, "cmd-str", cmd); +        if (ret) +                goto out; + +        ret = dict_allocate_and_serialize (dict, &(req->dict).dict_val, +                                           &(req->dict).dict_len); + +        if (ret < 0) { +                gf_log (this->name, GF_LOG_DEBUG, +                        "failed to get serialized length of dict"); +                goto out; +        } + +        ret = cli_cmd_submit (req, frame, prog, procnum, iobref, this, +                              cbkfn, (xdrproc_t) xdrproc); + +out: +        if (dict) +                dict_unref (dict);          return ret; +  }  struct rpc_clnt_procedure gluster_cli_actors[GLUSTER_CLI_MAXVALUE] = { diff --git a/cli/src/cli.h b/cli/src/cli.h index 4cb23541..0299220c 100644 --- a/cli/src/cli.h +++ b/cli/src/cli.h @@ -118,6 +118,7 @@ struct cli_local {          } get_vol;          dict_t          *dict; +        const char      **words;          /* Marker for volume status all */          gf_boolean_t    all;  #if (HAVE_LIB_XML) diff --git a/xlators/mgmt/glusterd/src/glusterd-brick-ops.c b/xlators/mgmt/glusterd/src/glusterd-brick-ops.c index 9efccd9a..b32c9872 100644 --- a/xlators/mgmt/glusterd/src/glusterd-brick-ops.c +++ b/xlators/mgmt/glusterd/src/glusterd-brick-ops.c @@ -343,7 +343,6 @@ glusterd_handle_add_brick (rpcsvc_request_t *req)          char                            *bricks = NULL;          char                            *volname = NULL;          int                             brick_count = 0; -        char                            *brick_list = NULL;          void                            *cli_rsp = NULL;          char                            err_str[2048] = {0,};          gf_cli_rsp                      rsp = {0,}; @@ -388,8 +387,6 @@ glusterd_handle_add_brick (rpcsvc_request_t *req)          ret = dict_get_str (dict, "volname", &volname); -        gf_cmd_log ("Volume add-brick", "on volname: %s attempted", -                    volname);          if (ret) {                  gf_log ("", GF_LOG_ERROR, "Unable to get volume name");                  snprintf (err_str, sizeof (err_str), "Unable to get volume " @@ -510,9 +507,6 @@ brick_val:                  goto out;          } -        gf_cmd_log ("Volume add-brick", "volname: %s type %d count:%d bricks:%s" -                    ,volname, volinfo->type, brick_count, brick_list); -          if (type != volinfo->type) {                  ret = dict_set_int32 (dict, "type", type);                  if (ret) @@ -523,19 +517,17 @@ brick_val:          ret = glusterd_op_begin (req, GD_OP_ADD_BRICK, dict);  out: -        gf_cmd_log ("Volume add-brick","on volname: %s %s", volname, -                   (ret != 0)? "FAILED" : "SUCCESS");          if (ret) { -                if (dict) -                        dict_unref (dict);                  rsp.op_ret = -1;                  rsp.op_errno = 0;                  if (err_str[0] == '\0')                          snprintf (err_str, sizeof (err_str), "Operation failed");                  rsp.op_errstr = err_str;                  cli_rsp = &rsp; -                glusterd_submit_reply(req, cli_rsp, NULL, 0, NULL, -                                      (xdrproc_t)xdr_gf_cli_rsp); +                glusterd_to_cli (req, cli_rsp, NULL, 0, NULL, +                                 (xdrproc_t)xdr_gf_cli_rsp, dict); +                if (dict) +                        dict_unref (dict);                  ret = 0; //sent error to cli, prevent second reply          } @@ -610,7 +602,6 @@ glusterd_handle_remove_brick (rpcsvc_request_t *req)                  goto out;          } -        gf_cmd_log ("Volume remove-brick","on volname: %s attempted", volname);          ret = dict_get_int32 (dict, "count", &count);          if (ret) {                  gf_log ("", GF_LOG_ERROR, "Unable to get count"); @@ -814,17 +805,11 @@ glusterd_handle_remove_brick (rpcsvc_request_t *req)                          break;                  }          } -        gf_cmd_log ("Volume remove-brick","volname: %s count:%d bricks:%s", -                    volname, count, brick_list);          ret = glusterd_op_begin (req, GD_OP_REMOVE_BRICK, dict); -        gf_cmd_log ("Volume remove-brick","on volname: %s %s", volname, -                    (ret) ? "FAILED" : "SUCCESS");  out:          if (ret) { -                if (dict) -                        dict_unref (dict);                  rsp.op_ret = -1;                  rsp.op_errno = 0;                  if (err_str[0] == '\0') @@ -832,8 +817,10 @@ out:                  gf_log ("", GF_LOG_ERROR, "%s", err_str);                  rsp.op_errstr = err_str;                  cli_rsp = &rsp; -                glusterd_submit_reply(req, cli_rsp, NULL, 0, NULL, -                                      (xdrproc_t)xdr_gf_cli_rsp); +                glusterd_to_cli (req, cli_rsp, NULL, 0, NULL, +                                 (xdrproc_t)xdr_gf_cli_rsp, dict); +                if (dict) +                        dict_unref (dict);                  ret = 0; //sent error to cli, prevent second reply diff --git a/xlators/mgmt/glusterd/src/glusterd-geo-rep.c b/xlators/mgmt/glusterd/src/glusterd-geo-rep.c index 29e3bdd7..3dcb12f3 100644 --- a/xlators/mgmt/glusterd/src/glusterd-geo-rep.c +++ b/xlators/mgmt/glusterd/src/glusterd-geo-rep.c @@ -131,21 +131,17 @@ glusterd_handle_gsync_set (rpcsvc_request_t *req)                  break;          } -        gf_cmd_log ("volume "GEOREP, " %s command on %s,%s", operation, master, -                    slave);          ret = glusterd_op_begin (req, GD_OP_GSYNC_SET, dict); -        gf_cmd_log ("volume "GEOREP, " %s command on %s,%s %s  ", operation, -                    master, slave, (ret != 0)? "FAILED" : "SUCCEEDED");  out:          glusterd_friend_sm ();          glusterd_op_sm ();          if (ret) { +                ret = glusterd_op_send_cli_response (cli_op, ret, 0, req, +                                                     dict, "operation failed");                  if (dict)                          dict_unref (dict); -                ret = glusterd_op_send_cli_response (cli_op, ret, 0, req, -                                                     NULL, "operation failed");          }          return ret;  } diff --git a/xlators/mgmt/glusterd/src/glusterd-handler.c b/xlators/mgmt/glusterd/src/glusterd-handler.c index 01f2adb3..13e53c17 100644 --- a/xlators/mgmt/glusterd/src/glusterd-handler.c +++ b/xlators/mgmt/glusterd/src/glusterd-handler.c @@ -982,19 +982,16 @@ glusterd_handle_reset_volume (rpcsvc_request_t *req)                  goto out;          } -        gf_cmd_log ("Volume reset", "volume  : %s", volname);          ret = glusterd_op_begin (req, GD_OP_RESET_VOLUME, dict); -        gf_cmd_log ("Volume reset", " on volume %s %s ", volname, -                ((ret == 0)? " SUCCEDED":" FAILED"));  out:          glusterd_friend_sm ();          glusterd_op_sm ();          if (ret) { +                ret = glusterd_op_send_cli_response (cli_op, ret, 0, req, +                                                     dict, "operation failed");                  if (dict)                          dict_unref (dict); -                ret = glusterd_op_send_cli_response (cli_op, ret, 0, req, -                                                     NULL, "operation failed");          }          return ret; @@ -1067,12 +1064,7 @@ glusterd_handle_set_volume (rpcsvc_request_t *req)                  goto out;          } - -        gf_cmd_log ("volume set", "volume-name:%s: key:%s, value:%s",volname, -                    key, value);          ret = glusterd_op_begin (req, GD_OP_SET_VOLUME, dict); -        gf_cmd_log ("volume set", "volume-name:%s: key:%s, value:%s %s", -                    volname, key, value, (ret == 0)? "SUCCEDED" : "FAILED" );  out:          glusterd_friend_sm (); @@ -1083,7 +1075,7 @@ out:                                                       (op_errstr)? op_errstr:"");          else if (ret)                  ret = glusterd_op_send_cli_response (cli_op, ret, 0, req, -                                                     NULL, "operation failed"); +                                                     dict, "operation failed");          if (op_errstr)                  GF_FREE (op_errstr); @@ -1187,8 +1179,8 @@ out:                  cli_rsp.op_errstr = msg;                  if (msg[0] == '\0')                          snprintf (msg, sizeof (msg), "Operation failed"); -                glusterd_submit_reply(req, &cli_rsp, NULL, 0, NULL, -                                      (xdrproc_t)xdr_gf_cli_rsp); +                glusterd_to_cli (req, &cli_rsp, NULL, 0, NULL, +                                 (xdrproc_t)xdr_gf_cli_rsp, dict);                  if (dict)                          dict_unref (dict); @@ -1830,22 +1822,19 @@ glusterd_handle_cli_profile_volume (rpcsvc_request_t *req)                  goto out;          } -        gf_cmd_log ("Volume stats", "volume  : %s, op: %d", volname, op);          ret = glusterd_op_begin (req, cli_op, dict); -        gf_cmd_log ("Volume stats", " on volume %s, op: %d %s ", -                    volname, op, -                    ((ret == 0)? " SUCCEDED":" FAILED"));  out:          glusterd_friend_sm ();          glusterd_op_sm (); -        if (ret && dict) -                dict_unref (dict);          free (cli_req.dict.dict_val); -        if (ret) +        if (ret) {                  ret = glusterd_op_send_cli_response (cli_op, ret, 0, req, -                                                     NULL, "operation failed"); +                                                     dict, "operation failed"); +                if (dict) +                        dict_unref (dict); +        }          gf_log (THIS->name, GF_LOG_DEBUG, "Returning %d", ret);          return ret; @@ -2648,15 +2637,15 @@ glusterd_handle_status_volume (rpcsvc_request_t *req)          ret = glusterd_op_begin (req, GD_OP_STATUS_VOLUME, dict);  out: -        if (ret && dict) -                dict_unref (dict); -          glusterd_friend_sm ();          glusterd_op_sm (); -        if (ret) +        if (ret) {                  ret = glusterd_op_send_cli_response (cli_op, ret, 0, req, -                                                     NULL, "operation failed"); +                                                     dict, "operation failed"); +                if (dict) +                        dict_unref (dict); +        }          free (cli_req.dict.dict_val);          return ret; @@ -2710,19 +2699,16 @@ glusterd_handle_cli_clearlocks_volume (rpcsvc_request_t *req)          ret = glusterd_op_begin (req, cli_op, dict); -        gf_cmd_log ("clear-locks", "on volume %s %s", volname, -                    ((0 == ret) ? "SUCCEEDED" : "FAILED")); -  out: -        if (ret && dict) -                dict_unref (dict); -          glusterd_friend_sm ();          glusterd_op_sm (); -        if (ret) +        if (ret) {                  ret = glusterd_op_send_cli_response (cli_op, ret, 0, req, -                                                     NULL, "operation failed"); +                                                     dict, "operation failed"); +                if (dict) +                        dict_unref (dict); +        }          free (cli_req.dict.dict_val);          return ret; diff --git a/xlators/mgmt/glusterd/src/glusterd-log-ops.c b/xlators/mgmt/glusterd/src/glusterd-log-ops.c index 4b35afde..9ab52a34 100644 --- a/xlators/mgmt/glusterd/src/glusterd-log-ops.c +++ b/xlators/mgmt/glusterd/src/glusterd-log-ops.c @@ -72,15 +72,15 @@ glusterd_handle_log_rotate (rpcsvc_request_t *req)          ret = glusterd_op_begin (req, GD_OP_LOG_ROTATE, dict);  out: -        if (ret && dict) -                dict_unref (dict); -          glusterd_friend_sm ();          glusterd_op_sm (); -        if (ret) +        if (ret) {                  ret = glusterd_op_send_cli_response (cli_op, ret, 0, req, -                                                     NULL, "operation failed"); +                                                     dict, "operation failed"); +                if (dict) +                        dict_unref (dict); +        }          free (cli_req.dict.dict_val);          return ret; diff --git a/xlators/mgmt/glusterd/src/glusterd-quota.c b/xlators/mgmt/glusterd/src/glusterd-quota.c index 1f97fe11..103f88e7 100644 --- a/xlators/mgmt/glusterd/src/glusterd-quota.c +++ b/xlators/mgmt/glusterd/src/glusterd-quota.c @@ -91,20 +91,17 @@ glusterd_handle_quota (rpcsvc_request_t *req)                  strncpy (operation, "remove", sizeof (operation));                  break;          } -        gf_cmd_log ("volume quota", " %s command on %s", operation, volname);          ret = glusterd_op_begin (req, GD_OP_QUOTA, dict); -        gf_cmd_log ("volume quota", " %s command on %s %s", operation,volname, -                    (ret != 0)? "FAILED" : "SUCCEEDED");  out:          glusterd_friend_sm ();          glusterd_op_sm ();          if (ret) { +                ret = glusterd_op_send_cli_response (cli_op, ret, 0, req, +                                                     dict, "operation failed");                  if (dict)                          dict_unref (dict); -                ret = glusterd_op_send_cli_response (cli_op, ret, 0, req, -                                                     NULL, "operation failed");          }          return ret; diff --git a/xlators/mgmt/glusterd/src/glusterd-rebalance.c b/xlators/mgmt/glusterd/src/glusterd-rebalance.c index 2de20fdc..dab8f68f 100644 --- a/xlators/mgmt/glusterd/src/glusterd-rebalance.c +++ b/xlators/mgmt/glusterd/src/glusterd-rebalance.c @@ -40,51 +40,6 @@  int32_t  glusterd_brick_op_cbk (struct rpc_req *req, struct iovec *iov,                            int count, void *myframe); - -void -glusterd_rebalance_cmd_attempted_log (int cmd, char *volname) -{ -        switch (cmd) { -                case GF_DEFRAG_CMD_START_LAYOUT_FIX: -                        gf_cmd_log ("Volume rebalance"," on volname: %s " -                                    "cmd: start fix layout , attempted", -                                    volname); -                        gf_log ("glusterd", GF_LOG_INFO, "Received rebalance " -                                "volume start layout fix on %s", volname); -                        break; -                case GF_DEFRAG_CMD_START_FORCE: -                        gf_cmd_log ("Volume rebalance"," on volname: %s " -                                    "cmd: start data force attempted", -                                    volname); -                        gf_log ("glusterd", GF_LOG_INFO, "Received rebalance " -                                "volume start migrate data on %s", volname); -                        break; -                case GF_DEFRAG_CMD_START: -                        gf_cmd_log ("Volume rebalance"," on volname: %s " -                                    "cmd: start, attempted", volname); -                        gf_log ("glusterd", GF_LOG_INFO, "Received rebalance " -                                "volume start on %s", volname); -                        break; -                case GF_DEFRAG_CMD_STOP: -                        gf_cmd_log ("Volume rebalance"," on volname: %s " -                                    "cmd: stop, attempted", volname); -                        gf_log ("glusterd", GF_LOG_INFO, "Received rebalance " -                                "volume stop on %s", volname); -                        break; -                default: -                        break; -        } -} - -void -glusterd_rebalance_cmd_log (int cmd, char *volname, int status) -{ -        if (cmd != GF_DEFRAG_CMD_STATUS) { -                gf_cmd_log ("volume rebalance"," on volname: %s %d %s", -                            volname, cmd, ((status)?"FAILED":"SUCCESS")); -        } -} -  int  glusterd_defrag_start_validate (glusterd_volinfo_t *volinfo, char *op_errstr,                                  size_t len) @@ -463,8 +418,6 @@ glusterd_handle_defrag_volume (rpcsvc_request_t *req)                  goto out;          } -        glusterd_rebalance_cmd_attempted_log (cmd, volname); -          ret = dict_set_static_bin (dict, "node-uuid", MY_UUID, 16);          if (ret)                  goto out; @@ -482,10 +435,10 @@ out:          glusterd_op_sm ();          if (ret) { +                ret = glusterd_op_send_cli_response (GD_OP_REBALANCE, ret, 0, req, +                                                     dict, "operation failed");                  if (dict)                          dict_unref (dict); -                ret = glusterd_op_send_cli_response (GD_OP_REBALANCE, ret, 0, req, -                                                     NULL, "operation failed");          }          free (cli_req.dict.dict_val);//malloced by xdr @@ -628,8 +581,6 @@ glusterd_op_rebalance (dict_t *dict, char **op_errstr, dict_t *rsp_dict)                  break;          } -        glusterd_rebalance_cmd_log (cmd, volname, ret); -  out:          if (ret && op_errstr && msg[0])                  *op_errstr = gf_strdup (msg); diff --git a/xlators/mgmt/glusterd/src/glusterd-replace-brick.c b/xlators/mgmt/glusterd/src/glusterd-replace-brick.c index f9212799..5fcbb84e 100644 --- a/xlators/mgmt/glusterd/src/glusterd-replace-brick.c +++ b/xlators/mgmt/glusterd/src/glusterd-replace-brick.c @@ -140,25 +140,21 @@ glusterd_handle_replace_brick (rpcsvc_request_t *req)          gf_log ("", GF_LOG_DEBUG, "dst brick=%s", dst_brick);          gf_log ("glusterd", GF_LOG_INFO, "Received replace brick %s request",                  operation); -        gf_cmd_log ("Volume replace-brick","volname: %s src_brick:%s" -                    " dst_brick:%s op:%s", volname, src_brick, dst_brick, -                    operation);          ret = glusterd_op_begin (req, GD_OP_REPLACE_BRICK, dict); -        gf_cmd_log ("Volume replace-brick","on volname: %s %s", volname, -                   (ret) ? "FAILED" : "SUCCESS");  out: -        if (ret && dict) -                dict_unref (dict);          free (cli_req.dict.dict_val);//malloced by xdr          glusterd_friend_sm ();          glusterd_op_sm (); -        if (ret) +        if (ret) {                  ret = glusterd_op_send_cli_response (cli_op, ret, 0, req, -                                                     NULL, "operation failed"); +                                                     dict, "operation failed"); +                if (dict) +                        dict_unref (dict); +        }          return ret;  } diff --git a/xlators/mgmt/glusterd/src/glusterd-rpc-ops.c b/xlators/mgmt/glusterd/src/glusterd-rpc-ops.c index 0a31868c..89d2dd1e 100644 --- a/xlators/mgmt/glusterd/src/glusterd-rpc-ops.c +++ b/xlators/mgmt/glusterd/src/glusterd-rpc-ops.c @@ -172,8 +172,8 @@ glusterd_op_send_cli_response (glusterd_op_t op, int32_t op_ret,          cli_rsp = &rsp;          xdrproc = (xdrproc_t) xdr_gf_cli_rsp; -        glusterd_submit_reply (req, cli_rsp, NULL, 0, NULL, -                               xdrproc); +        glusterd_to_cli (req, cli_rsp, NULL, 0, NULL, +                         xdrproc, ctx);          ret = 0;          GF_FREE (free_ptr); diff --git a/xlators/mgmt/glusterd/src/glusterd-utils.c b/xlators/mgmt/glusterd/src/glusterd-utils.c index efae2b51..821ea2cc 100644 --- a/xlators/mgmt/glusterd/src/glusterd-utils.c +++ b/xlators/mgmt/glusterd/src/glusterd-utils.c @@ -37,7 +37,6 @@  #include "glusterd-pmap.h"  #include "xdr-generic.h" -  #include <sys/resource.h>  #include <inttypes.h>  #include <signal.h> @@ -5712,3 +5711,37 @@ glusterd_volset_help (dict_t *dict, char **op_errstr)          gf_log ("glusterd", GF_LOG_DEBUG, "Returning %d", ret);          return ret;  } + +int +glusterd_to_cli (rpcsvc_request_t *req, gf_cli_rsp *arg, struct iovec *payload, +                 int payloadcount, struct iobref *iobref, xdrproc_t xdrproc, +                 dict_t *dict) +{ +        int                ret = -1; +        char               *cmd = NULL; +        int                op_ret = 0; +        char               *op_errstr = NULL; +        int                op_errno = 0; + +        op_ret = arg->op_ret; +        op_errstr = arg->op_errstr; +        op_errno = arg->op_errno; + +        ret = dict_get_str (dict, "cmd-str", &cmd); +        if (ret) +                gf_log ("glusterd", GF_LOG_ERROR, "Failed to get command string"); + +        if (cmd) { +                if (op_ret) +                        gf_cmd_log ("", "%s : FAILED %s %s", cmd, +                                       (op_errstr)? ":":" ", +                                       (op_errstr)? op_errstr: " "); +                else +                        gf_cmd_log ("", "%s : SUCCESS", cmd); +        } + +        glusterd_submit_reply (req, arg, payload, payloadcount, iobref, +                               (xdrproc_t) xdrproc); + +        return ret; +} diff --git a/xlators/mgmt/glusterd/src/glusterd-utils.h b/xlators/mgmt/glusterd/src/glusterd-utils.h index 3084af9b..167bffaa 100644 --- a/xlators/mgmt/glusterd/src/glusterd-utils.h +++ b/xlators/mgmt/glusterd/src/glusterd-utils.h @@ -67,6 +67,11 @@ glusterd_submit_reply (rpcsvc_request_t *req, void *arg,                         struct iobref *iobref, xdrproc_t xdrproc);  int +glusterd_to_cli (rpcsvc_request_t *req, gf_cli_rsp *arg, struct iovec *payload, +                 int payloadcount, struct iobref *iobref, xdrproc_t xdrproc, +                 dict_t *dict); + +int  glusterd_submit_request (struct rpc_clnt *rpc, void *req,                           call_frame_t *frame, rpc_clnt_prog_t *prog,                           int procnum, struct iobref *iobref, diff --git a/xlators/mgmt/glusterd/src/glusterd-volume-ops.c b/xlators/mgmt/glusterd/src/glusterd-volume-ops.c index 8d7c8475..c6bde925 100644 --- a/xlators/mgmt/glusterd/src/glusterd-volume-ops.c +++ b/xlators/mgmt/glusterd/src/glusterd-volume-ops.c @@ -98,7 +98,6 @@ glusterd_handle_create_volume (rpcsvc_request_t *req)                            "name");                  goto out;          } -        gf_cmd_log ("Volume create", "on volname: %s attempted", volname);          if ((ret = glusterd_check_volume_exists (volname))) {                  snprintf(err_str, 2048, "Volume %s already exists", volname); @@ -153,11 +152,6 @@ glusterd_handle_create_volume (rpcsvc_request_t *req)                  free_ptr = brick_list;          } -        gf_cmd_log ("Volume create", "on volname: %s type:%s count:%d bricks:%s", -                    volname, ((type == 0)? "DEFAULT": -                    ((type == 1)? "STRIPE":"REPLICATE")), brick_count, bricks); - -          while ( i < brick_count) {                  i++;                  brick= strtok_r (brick_list, " \n", &tmpptr); @@ -193,21 +187,19 @@ glusterd_handle_create_volume (rpcsvc_request_t *req)                  goto out;          ret = glusterd_op_begin (req, GD_OP_CREATE_VOLUME, dict); -        gf_cmd_log ("Volume create", "on volname: %s %s", volname, -                    (ret != 0) ? "FAILED": "SUCCESS");  out:          if (ret) { -                if (dict) -                        dict_unref (dict);                  rsp.op_ret = -1;                  rsp.op_errno = 0;                  if (err_str[0] == '\0')                          snprintf (err_str, sizeof (err_str), "Operation failed");                  rsp.op_errstr = err_str;                  cli_rsp = &rsp; -                glusterd_submit_reply(req, cli_rsp, NULL, 0, NULL, -                                      (xdrproc_t)xdr_gf_cli_rsp); +                glusterd_to_cli (req, cli_rsp, NULL, 0, NULL, +                                 (xdrproc_t)xdr_gf_cli_rsp, dict); +                if (dict) +                        dict_unref (dict);                  ret = 0; //Client response sent, prevent second response          } @@ -270,12 +262,7 @@ glusterd_handle_cli_start_volume (rpcsvc_request_t *req)          ret = glusterd_op_begin (req, GD_OP_START_VOLUME, dict); -        gf_cmd_log ("volume start","on volname: %s %s", volname, -                    ((ret == 0) ? "SUCCESS": "FAILED")); -  out: -        if (ret && dict) -                dict_unref (dict);          free (cli_req.dict.dict_val); //its malloced by xdr          glusterd_friend_sm (); @@ -283,7 +270,9 @@ out:          if (ret)                  ret = glusterd_op_send_cli_response (cli_op, ret, 0, req, -                                                     NULL, "operation failed"); +                                                     dict, "operation failed"); +        if (dict) +                dict_unref (dict);          return ret;  } @@ -334,8 +323,6 @@ glusterd_handle_cli_stop_volume (rpcsvc_request_t *req)                  "for volume %s", dup_volname);          ret = glusterd_op_begin (req, GD_OP_STOP_VOLUME, dict); -        gf_cmd_log ("Volume stop","on volname: %s %s", dup_volname, -                    ((ret)?"FAILED":"SUCCESS"));  out:          free (cli_req.dict.dict_val); //its malloced by xdr @@ -344,10 +331,10 @@ out:          glusterd_op_sm ();          if (ret) { +                ret = glusterd_op_send_cli_response (cli_op, ret, 0, req, +                                                     dict, "operation failed");                  if (dict)                          dict_unref (dict); -                ret = glusterd_op_send_cli_response (cli_op, ret, 0, req, -                                                     NULL, "operation failed");          }          return ret; @@ -394,26 +381,22 @@ glusterd_handle_cli_delete_volume (rpcsvc_request_t *req)                  goto out;          } -        gf_cmd_log ("Volume delete","on volname: %s attempted", volname); -          gf_log ("glusterd", GF_LOG_INFO, "Received delete vol req"                  "for volume %s", volname);          ret = glusterd_op_begin (req, GD_OP_DELETE_VOLUME, dict); -        gf_cmd_log ("Volume delete", "on volname: %s %s", volname, -                   ((ret) ? "FAILED" : "SUCCESS"));  out:          free (cli_req.dict.dict_val); //its malloced by xdr -        if (ret && dict) -                dict_unref (dict);          glusterd_friend_sm ();          glusterd_op_sm ();          if (ret) {                  ret = glusterd_op_send_cli_response (cli_op, ret, 0, req, -                                                     NULL, "operation failed"); +                                                     dict, "operation failed"); +                if (dict) +                        dict_unref (dict);          }          return ret; @@ -485,13 +468,7 @@ glusterd_handle_cli_heal_volume (rpcsvc_request_t *req)          ret = glusterd_op_begin (req, GD_OP_HEAL_VOLUME, dict); -        gf_cmd_log ("volume heal","on volname: %s %s", volname, -                    ((ret == 0) ? "SUCCESS": "FAILED")); -  out: -        if (ret && dict) -                dict_unref (dict); -          glusterd_friend_sm ();          glusterd_op_sm (); @@ -499,7 +476,9 @@ out:                  if (!op_errstr)                          op_errstr = gf_strdup ("operation failed");                  ret = glusterd_op_send_cli_response (cli_op, ret, 0, req, -                                                     NULL, op_errstr); +                                                     dict, op_errstr); +                if (dict) +                        dict_unref (dict);                  GF_FREE (op_errstr);          } @@ -515,6 +494,7 @@ glusterd_handle_cli_statedump_volume (rpcsvc_request_t *req)          char                            *options = NULL;          dict_t                          *dict = NULL;          int32_t                         option_cnt = 0; +        glusterd_op_t                   cli_op = GD_OP_STATEDUMP_VOLUME;          GF_ASSERT (req); @@ -562,12 +542,13 @@ glusterd_handle_cli_statedump_volume (rpcsvc_request_t *req)          ret = glusterd_op_begin (req, GD_OP_STATEDUMP_VOLUME, dict); -        gf_cmd_log ("statedump", "on volume %s %s", volname, -                    ((0 == ret) ? "SUCCEEDED" : "FAILED")); -  out: -        if (ret && dict) -                dict_unref (dict); +        if (ret) { +                ret = glusterd_op_send_cli_response (cli_op, ret, 0, req, +                                                     dict, "Operation failed"); +                if (dict) +                        dict_unref (dict); +        }          free (cli_req.dict.dict_val);          glusterd_friend_sm ();          glusterd_op_sm();  | 
