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; } |