diff options
| -rw-r--r-- | cli/src/cli-cmd.c | 65 | ||||
| -rw-r--r-- | cli/src/cli-cmd.h | 13 | ||||
| -rw-r--r-- | cli/src/cli.c | 5 | ||||
| -rw-r--r-- | cli/src/cli3_1-cops.c | 182 | ||||
| -rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-handler.c | 27 | ||||
| -rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-op-sm.c | 4 | 
6 files changed, 185 insertions, 111 deletions
diff --git a/cli/src/cli-cmd.c b/cli/src/cli-cmd.c index c88d3fe8505..ee30ea996e6 100644 --- a/cli/src/cli-cmd.c +++ b/cli/src/cli-cmd.c @@ -175,23 +175,41 @@ out:  }  int -cli_cmd_await_response () +cli_cmd_cond_init ()  { +         pthread_mutex_init (&cond_mutex, NULL);         pthread_cond_init (&cond, NULL); -       cmd_done = 0; +       pthread_mutex_init (&conn_mutex, NULL); +       pthread_cond_init (&conn, NULL); + +       return 0; +} + +int +cli_cmd_lock () +{         pthread_mutex_lock (&cond_mutex); -        { -                cli_op_ret = 0; -                while (!cmd_done) { -                        pthread_cond_wait (&cond, &cond_mutex); -                } -        } +       return 0; +} + +int +cli_cmd_unlock () +{          pthread_mutex_unlock (&cond_mutex); +        return 0; +} + +int +cli_cmd_await_response () +{ -        pthread_mutex_destroy (&cond_mutex); -        pthread_cond_destroy (&cond); +        cmd_done = 0; +        while (!cmd_done) +                pthread_cond_wait (&cond, &cond_mutex); + +        cli_cmd_unlock ();          return cli_op_ret;  } @@ -214,8 +232,6 @@ cli_cmd_broadcast_response (int32_t status)  int32_t  cli_cmd_await_connected ()  { -       pthread_mutex_init (&conn_mutex, NULL); -       pthread_cond_init (&conn, NULL);         pthread_mutex_lock (&conn_mutex);          { @@ -225,8 +241,6 @@ cli_cmd_await_connected ()          }          pthread_mutex_unlock (&conn_mutex); -        pthread_mutex_destroy (&conn_mutex); -        pthread_cond_destroy (&conn);          return 0;  } @@ -245,3 +259,26 @@ cli_cmd_broadcast_connected ()          return 0;  } + +int +cli_cmd_submit (void *req, call_frame_t *frame, +                rpc_clnt_prog_t *prog, +                int procnum, struct iobref *iobref, +                cli_serialize_t sfunc, xlator_t *this, +                fop_cbk_fn_t cbkfn) +{ +        int     ret = -1; + +        cli_cmd_lock (); +        ret = cli_submit_request (req, frame, prog, +                                  procnum, NULL, sfunc, +                                  this, cbkfn); + +        if (!ret) +                ret = cli_cmd_await_response (); +        else +                cli_cmd_unlock (); + +        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); +        return ret; +} diff --git a/cli/src/cli-cmd.h b/cli/src/cli-cmd.h index b08f5b3d5f2..87a9d3d892e 100644 --- a/cli/src/cli-cmd.h +++ b/cli/src/cli-cmd.h @@ -45,4 +45,17 @@ void cli_cmd_tokens_destroy (char **tokens);  int cli_cmd_await_response ();  int cli_cmd_broadcast_response (int32_t status); + +int cli_cmd_cond_init (); + +int cli_cmd_lock (); + +int cli_cmd_unlock (); + +int +cli_cmd_submit (void *req, call_frame_t *frame, +                rpc_clnt_prog_t *prog, +                int procnum, struct iobref *iobref, +                cli_serialize_t sfunc, xlator_t *this, +                fop_cbk_fn_t cbkfn);  #endif /* __CLI_CMD_H__ */ diff --git a/cli/src/cli.c b/cli/src/cli.c index 5f734d8e8f2..59782b42db2 100644 --- a/cli/src/cli.c +++ b/cli/src/cli.c @@ -218,7 +218,7 @@ glusterfs_ctx_defaults_init (glusterfs_ctx_t *ctx)          /* parsing command line arguments */          cmd_args->log_file  = "/dev/stderr"; -        cmd_args->log_level = GF_LOG_NORMAL; +        cmd_args->log_level = GF_LOG_NONE;          INIT_LIST_HEAD (&cmd_args->xlator_options); @@ -524,6 +524,9 @@ main (int argc, char *argv[])          if (ret)                  goto out; +        ret = cli_cmd_cond_init (); +        if (ret) +                goto out;          ret = event_dispatch (ctx->event_pool); diff --git a/cli/src/cli3_1-cops.c b/cli/src/cli3_1-cops.c index 8e6c76ae688..4275adec88e 100644 --- a/cli/src/cli3_1-cops.c +++ b/cli/src/cli3_1-cops.c @@ -35,6 +35,17 @@  extern rpc_clnt_prog_t *cli_rpc_prog;  extern int      cli_op_ret; +char *cli_volume_type[] = {"None", +                           "Stripe", +                           "Replicate" +}; + + +char *cli_volume_status[] = {"Created", +                             "Started", +                             "Stopped" +}; +  int  gf_cli3_1_probe_cbk (struct rpc_req *req, struct iovec *iov,                          int count, void *myframe) @@ -215,6 +226,8 @@ gf_cli3_1_get_volume_cbk (struct rpc_req *req, struct iovec *iov,          int32_t                    status = 0;          int32_t                    type = 0;          int32_t                    brick_count = 0; +        char                       *brick = NULL; +        int32_t                    j = 1;          if (-1 == req->rpc_status) {                  goto out; @@ -266,6 +279,7 @@ gf_cli3_1_get_volume_cbk (struct rpc_req *req, struct iovec *iov,                  cli_out ("Number of Volumes: %d", count);                  while ( i <= count) { +                        cli_out ("");                          snprintf (key, 256, "volume%d.name", i);                          ret = dict_get_str (dict, key, &volname);                          if (ret) @@ -286,9 +300,24 @@ gf_cli3_1_get_volume_cbk (struct rpc_req *req, struct iovec *iov,                          if (ret)                                  goto out; -                        cli_out ("Volume Name:%s, type:%d, status:%d," -                                  "brick_count: %d", -                                  volname, type, status, brick_count); +                        cli_out ("Volume Name: %s", volname); +                        cli_out ("Type: %s", cli_volume_type[type]); +                        cli_out ("Status: %s", cli_volume_status[status], brick_count); +                        cli_out ("Number of Bricks: %d", brick_count); +                        j = 1; + +                        if (brick_count) +                                cli_out ("Bricks:"); + +                        while ( j <= brick_count) { +                                snprintf (key, 1024, "volume%d.brick%d", +                                          i, j); +                                ret = dict_get_str (dict, key, &brick); +                                if (ret) +                                        goto out; +                                cli_out ("Brick%d: %s", j, brick); +                                j++; +                        }                          i++;                  }          } else { @@ -307,8 +336,10 @@ out:          if (dict)                  dict_destroy (dict); +        gf_log ("", GF_LOG_NORMAL, "Returning: %d", ret);          return ret;  } +  int  gf_cli3_1_create_volume_cbk (struct rpc_req *req, struct iovec *iov,                               int count, void *myframe) @@ -527,6 +558,7 @@ gf_cli3_1_rename_volume_cbk (struct rpc_req *req, struct iovec *iov,          ret = rsp.op_ret;  out: +        cli_cmd_broadcast_response (ret);          return ret;  } @@ -555,6 +587,7 @@ gf_cli3_1_set_volume_cbk (struct rpc_req *req, struct iovec *iov,          ret = rsp.op_ret;  out: +        cli_cmd_broadcast_response (ret);          return ret;  } @@ -612,6 +645,7 @@ gf_cli3_1_remove_brick_cbk (struct rpc_req *req, struct iovec *iov,          ret = rsp.op_ret;  out: +        cli_cmd_broadcast_response (ret);          return ret;  } @@ -641,6 +675,7 @@ gf_cli3_1_replace_brick_cbk (struct rpc_req *req, struct iovec *iov,          ret = rsp.op_ret;  out: +        cli_cmd_broadcast_response (ret);          return ret;  } @@ -671,13 +706,10 @@ gf_cli3_1_probe (call_frame_t *frame, xlator_t *this,          req.hostname = hostname;          req.port     = port; -        ret = cli_submit_request (&req, frame, cli_rpc_prog, -                                   GD_MGMT_CLI_PROBE, NULL, gf_xdr_from_cli_probe_req, -                                   this, gf_cli3_1_probe_cbk); +        ret = cli_cmd_submit (&req, frame, cli_rpc_prog, +                              GD_MGMT_CLI_PROBE, NULL, gf_xdr_from_cli_probe_req, +                              this, gf_cli3_1_probe_cbk); -        if (!ret) { -                ret = cli_cmd_await_response (); -        }  out:          gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret);          return ret; @@ -710,14 +742,11 @@ gf_cli3_1_deprobe (call_frame_t *frame, xlator_t *this,          req.hostname = hostname;          req.port     = port; -        ret = cli_submit_request (&req, frame, cli_rpc_prog, -                                   GD_MGMT_CLI_DEPROBE, NULL, -                                   gf_xdr_from_cli_deprobe_req, -                                   this, gf_cli3_1_deprobe_cbk); +        ret = cli_cmd_submit (&req, frame, cli_rpc_prog, +                              GD_MGMT_CLI_DEPROBE, NULL, +                              gf_xdr_from_cli_deprobe_req, +                              this, gf_cli3_1_deprobe_cbk); -        if (!ret) { -                ret = cli_cmd_await_response (); -        }  out:          gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret);          return ret; @@ -737,14 +766,11 @@ gf_cli3_1_list_friends (call_frame_t *frame, xlator_t *this,          req.flags = GF_CLI_LIST_ALL; -        ret = cli_submit_request (&req, frame, cli_rpc_prog, -                                   GD_MGMT_CLI_LIST_FRIENDS, NULL, -                                   gf_xdr_from_cli_peer_list_req, -                                   this, gf_cli3_1_list_friends_cbk); +        ret = cli_cmd_submit (&req, frame, cli_rpc_prog, +                              GD_MGMT_CLI_LIST_FRIENDS, NULL, +                              gf_xdr_from_cli_peer_list_req, +                              this, gf_cli3_1_list_friends_cbk); -        if (!ret) { -                ret = cli_cmd_await_response (); -        }  out:          gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret);          return ret; @@ -764,14 +790,11 @@ gf_cli3_1_get_volume (call_frame_t *frame, xlator_t *this,          req.flags = GF_CLI_GET_VOLUME_ALL; -        ret = cli_submit_request (&req, frame, cli_rpc_prog, -                                   GD_MGMT_CLI_GET_VOLUME, NULL, -                                   gf_xdr_from_cli_get_vol_req, -                                   this, gf_cli3_1_get_volume_cbk); +        ret = cli_cmd_submit (&req, frame, cli_rpc_prog, +                              GD_MGMT_CLI_GET_VOLUME, NULL, +                              gf_xdr_from_cli_get_vol_req, +                              this, gf_cli3_1_get_volume_cbk); -        if (!ret) { -                ret = cli_cmd_await_response (); -        }  out:          gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret);          return ret; @@ -823,14 +846,11 @@ gf_cli3_1_create_volume (call_frame_t *frame, xlator_t *this,                  frame->local = local;          } -        ret = cli_submit_request (&req, frame, cli_rpc_prog, -                                   GD_MGMT_CLI_CREATE_VOLUME, NULL, -                                   gf_xdr_from_cli_create_vol_req, -                                   this, gf_cli3_1_create_volume_cbk); +        ret = cli_cmd_submit (&req, frame, cli_rpc_prog, +                              GD_MGMT_CLI_CREATE_VOLUME, NULL, +                              gf_xdr_from_cli_create_vol_req, +                              this, gf_cli3_1_create_volume_cbk); -        if (!ret) { -                ret = cli_cmd_await_response (); -        }  out: @@ -865,13 +885,10 @@ gf_cli3_1_delete_volume (call_frame_t *frame, xlator_t *this,          req.volname = data; -        ret = cli_submit_request (&req, frame, cli_rpc_prog, -                                   GD_MGMT_CLI_DELETE_VOLUME, NULL, -                                   gf_xdr_from_cli_delete_vol_req, -                                   this, gf_cli3_1_delete_volume_cbk); -        if (!ret) { -                ret = cli_cmd_await_response (); -        } +        ret = cli_cmd_submit (&req, frame, cli_rpc_prog, +                              GD_MGMT_CLI_DELETE_VOLUME, NULL, +                              gf_xdr_from_cli_delete_vol_req, +                              this, gf_cli3_1_delete_volume_cbk);  out:          gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); @@ -901,14 +918,11 @@ gf_cli3_1_start_volume (call_frame_t *frame, xlator_t *this,          req.volname = data; -        ret = cli_submit_request (&req, frame, cli_rpc_prog, -                                   GD_MGMT_CLI_START_VOLUME, NULL, -                                   gf_xdr_from_cli_start_vol_req, -                                   this, gf_cli3_1_start_volume_cbk); +        ret = cli_cmd_submit (&req, frame, cli_rpc_prog, +                              GD_MGMT_CLI_START_VOLUME, NULL, +                              gf_xdr_from_cli_start_vol_req, +                              this, gf_cli3_1_start_volume_cbk); -        if (!ret) { -                ret = cli_cmd_await_response (); -        }  out:          gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); @@ -937,14 +951,11 @@ gf_cli3_1_stop_volume (call_frame_t *frame, xlator_t *this,                  frame->local = local;          } -        ret = cli_submit_request (&req, frame, cli_rpc_prog, -                                   GD_MGMT_CLI_STOP_VOLUME, NULL, -                                   gf_xdr_from_cli_stop_vol_req, -                                   this, gf_cli3_1_stop_volume_cbk); +        ret = cli_cmd_submit (&req, frame, cli_rpc_prog, +                              GD_MGMT_CLI_STOP_VOLUME, NULL, +                              gf_xdr_from_cli_stop_vol_req, +                              this, gf_cli3_1_stop_volume_cbk); -        if (!ret) { -                ret = cli_cmd_await_response (); -        }  out:          gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); @@ -973,14 +984,11 @@ gf_cli3_1_defrag_volume (call_frame_t *frame, xlator_t *this,          req.volname = data; -        ret = cli_submit_request (&req, frame, cli_rpc_prog, -                                   GD_MGMT_CLI_DEFRAG_VOLUME, NULL, -                                   gf_xdr_from_cli_defrag_vol_req, -                                   this, gf_cli3_1_defrag_volume_cbk); +        ret = cli_cmd_submit (&req, frame, cli_rpc_prog, +                              GD_MGMT_CLI_DEFRAG_VOLUME, NULL, +                              gf_xdr_from_cli_defrag_vol_req, +                              this, gf_cli3_1_defrag_volume_cbk); -        if (!ret) { -                ret = cli_cmd_await_response (); -        }  out:          gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); @@ -1012,10 +1020,10 @@ gf_cli3_1_rename_volume (call_frame_t *frame, xlator_t *this,          if (ret)                  goto out; -        ret = cli_submit_request (&req, frame, cli_rpc_prog, -                                   GD_MGMT_CLI_RENAME_VOLUME, NULL, -                                   gf_xdr_from_cli_rename_vol_req, -                                   this, gf_cli3_1_rename_volume_cbk); +        ret = cli_cmd_submit (&req, frame, cli_rpc_prog, +                              GD_MGMT_CLI_RENAME_VOLUME, NULL, +                              gf_xdr_from_cli_rename_vol_req, +                              this, gf_cli3_1_rename_volume_cbk);  out:          gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); @@ -1053,10 +1061,10 @@ gf_cli3_1_set_volume (call_frame_t *frame, xlator_t *this,          } -        ret = cli_submit_request (&req, frame, cli_rpc_prog, -                                   GD_MGMT_CLI_SET_VOLUME, NULL, -                                   gf_xdr_from_cli_set_vol_req, -                                   this, gf_cli3_1_set_volume_cbk); +        ret = cli_cmd_submit (&req, frame, cli_rpc_prog, +                              GD_MGMT_CLI_SET_VOLUME, NULL, +                              gf_xdr_from_cli_set_vol_req, +                              this, gf_cli3_1_set_volume_cbk);  out:          gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); @@ -1098,14 +1106,11 @@ gf_cli3_1_add_brick (call_frame_t *frame, xlator_t *this,                  goto out;          } -        ret = cli_submit_request (&req, frame, cli_rpc_prog, -                                   GD_MGMT_CLI_ADD_BRICK, NULL, -                                   gf_xdr_from_cli_add_brick_req, -                                   this, gf_cli3_1_add_brick_cbk); +        ret = cli_cmd_submit (&req, frame, cli_rpc_prog, +                              GD_MGMT_CLI_ADD_BRICK, NULL, +                              gf_xdr_from_cli_add_brick_req, +                              this, gf_cli3_1_add_brick_cbk); -        if (!ret) { -                ret = cli_cmd_await_response (); -        }  out:          gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); @@ -1155,10 +1160,11 @@ gf_cli3_1_remove_brick (call_frame_t *frame, xlator_t *this,                  goto out;          } -        ret = cli_submit_request (&req, frame, cli_rpc_prog, -                                   GD_MGMT_CLI_REMOVE_BRICK, NULL, -                                   gf_xdr_from_cli_remove_brick_req, -                                   this, gf_cli3_1_remove_brick_cbk); +        ret = cli_cmd_submit (&req, frame, cli_rpc_prog, +                              GD_MGMT_CLI_REMOVE_BRICK, NULL, +                              gf_xdr_from_cli_remove_brick_req, +                              this, gf_cli3_1_remove_brick_cbk); +  out:          gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); @@ -1198,10 +1204,10 @@ gf_cli3_1_replace_brick (call_frame_t *frame, xlator_t *this,          if (GF_REPLACE_OP_START == req.op) {          } -        ret = cli_submit_request (&req, frame, cli_rpc_prog, -                                   GD_MGMT_CLI_REPLACE_BRICK, NULL, -                                   gf_xdr_from_cli_replace_brick_req, -                                   this, gf_cli3_1_replace_brick_cbk); +        ret = cli_cmd_submit (&req, frame, cli_rpc_prog, +                              GD_MGMT_CLI_REPLACE_BRICK, NULL, +                              gf_xdr_from_cli_replace_brick_req, +                              this, gf_cli3_1_replace_brick_cbk);  out:          gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); diff --git a/xlators/mgmt/glusterd/src/glusterd-handler.c b/xlators/mgmt/glusterd/src/glusterd-handler.c index 8fe0b31a6cb..80ca1f32551 100644 --- a/xlators/mgmt/glusterd/src/glusterd-handler.c +++ b/xlators/mgmt/glusterd/src/glusterd-handler.c @@ -298,8 +298,11 @@ glusterd_add_volume_detail_to_dict (glusterd_volinfo_t *volinfo,                                      dict_t  *volumes, int   count)  { -        int             ret = -1; -        char            key[256] = {0, }; +        int                     ret = -1; +        char                    key[256] = {0, }; +        glusterd_brickinfo_t    *brickinfo = NULL; +        char                    *buf = NULL; +        int                     i = 1;          GF_ASSERT (volinfo);          GF_ASSERT (volumes); @@ -324,6 +327,17 @@ glusterd_add_volume_detail_to_dict (glusterd_volinfo_t *volinfo,          if (ret)                  goto out; +        list_for_each_entry (brickinfo, &volinfo->bricks, brick_list) { +                char    brick[1024] = {0,}; +                snprintf (key, 256, "volume%d.brick%d", count, i); +                snprintf (brick, 1024, "%s:%s", brickinfo->hostname, +                          brickinfo->path); +                buf = gf_strdup (brick); +                ret = dict_set_dynstr (volumes, key, buf); +                if (ret) +                        goto out; +                i++; +        }  out:          return ret;  } @@ -1753,16 +1767,17 @@ glusterd_get_volumes (rpcsvc_request_t *req, dict_t *dict, int32_t flags)          ret = 0;  out: -        if (ret) { -                if (volumes) -                        dict_destroy (volumes); -        }          rsp.op_ret = ret;          ret = glusterd_submit_reply (req, &rsp, NULL, 0, NULL,                                       gf_xdr_serialize_cli_peer_list_rsp); +        if (volumes) +                dict_destroy (volumes); + +        if (rsp.volumes.volumes_val) +                GF_FREE (rsp.volumes.volumes_val);          return ret;  } diff --git a/xlators/mgmt/glusterd/src/glusterd-op-sm.c b/xlators/mgmt/glusterd/src/glusterd-op-sm.c index 1a954cce2e8..8016f93db2c 100644 --- a/xlators/mgmt/glusterd/src/glusterd-op-sm.c +++ b/xlators/mgmt/glusterd/src/glusterd-op-sm.c @@ -2025,9 +2025,9 @@ glusterd_op_clear_ctx (glusterd_op_t op)          ctx = opinfo.op_ctx[op]; -        if (ctx) -                GF_FREE (ctx); +        opinfo.op_ctx[op] = NULL; +        //Cleanup to be done here          return 0;  }  | 
