From 97fdc05ab86ca2af992c42b09ed40413be2ef0d8 Mon Sep 17 00:00:00 2001 From: Csaba Henk Date: Fri, 29 Apr 2011 06:24:40 +0000 Subject: glusterd / cli / rpc: move geo-replication reply parameters into dict Signed-off-by: Csaba Henk Signed-off-by: Anand Avati BUG: 2785 (gsyncd logs on slave side go to /dev/null) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2785 --- cli/src/cli-rpc-ops.c | 61 ++++++++++++++++------------ rpc/xdr/src/cli1-xdr.c | 16 +------- rpc/xdr/src/cli1-xdr.h | 12 ++---- rpc/xdr/src/cli1-xdr.x | 8 +--- xlators/mgmt/glusterd/src/glusterd-rpc-ops.c | 32 +++------------ 5 files changed, 46 insertions(+), 83 deletions(-) diff --git a/cli/src/cli-rpc-ops.c b/cli/src/cli-rpc-ops.c index 794eab017..1a2c4ee94 100644 --- a/cli/src/cli-rpc-ops.c +++ b/cli/src/cli-rpc-ops.c @@ -2586,33 +2586,38 @@ out: int -gf_cli3_1_gsync_config_command (gf1_cli_gsync_set_rsp rsp) +gf_cli3_1_gsync_config_command (dict_t *dict) { char cmd[PATH_MAX] = {0,}; - int ret = -1; + char *subop = NULL; + char *gwd = NULL; + char *slave = NULL; + char *master = NULL; + char *op_name = NULL; - if (rsp.op_ret < 0) - return 0; - - if (!rsp.gsync_prefix || !rsp.master || !rsp.slave || !rsp.glusterd_workdir) + if (dict_get_str (dict, "subop", &subop) != 0) return -1; - if (strcmp (rsp.subop, "get") != 0 && strcmp (rsp.subop, "get-all") != 0) { + if (strcmp (subop, "get") != 0 && strcmp (subop, "get-all") != 0) { cli_out (GEOREP" config updated successfully"); return 0; } + if (dict_get_str (dict, "glusterd_workdir", &gwd) != 0 || + dict_get_str (dict, "slave", &slave) != 0) + return -1; + + if (dict_get_str (dict, "master", &master) != 0) + master = ""; + if (dict_get_str (dict, "op_name", &op_name) != 0) + op_name = ""; + snprintf (cmd, PATH_MAX, GSYNCD_PREFIX"/gsyncd -c %s/"GSYNC_CONF" %s%s %s --config-%s%s%s", - rsp.glusterd_workdir, - *rsp.master ? ":" : "", rsp.master, rsp.slave, rsp.subop, - *rsp.op_name ? " " : "", rsp.op_name); - ret = system (cmd); - /* - * gf_log() failure from system() ? - */ - - return ret ? -1 : 0; + gwd, *master ? ":" : "", master, slave, + subop, *op_name ? " " : "", op_name); + + return system (cmd) ? -1 : 0; } int @@ -2679,6 +2684,8 @@ gf_cli3_1_gsync_set_cbk (struct rpc_req *req, struct iovec *iov, int ret = 0; gf1_cli_gsync_set_rsp rsp = {0, }; dict_t *dict = NULL; + char *master = NULL; + char *slave = NULL; if (req->rpc_status == -1) { ret = -1; @@ -2699,9 +2706,7 @@ gf_cli3_1_gsync_set_cbk (struct rpc_req *req, struct iovec *iov, goto out; } - ret = dict_unserialize (rsp.status_dict.status_dict_val, - rsp.status_dict.status_dict_len, - &dict); + ret = dict_unserialize (rsp.dict.dict_val, rsp.dict.dict_len, &dict); if (ret) goto out; @@ -2715,17 +2720,21 @@ gf_cli3_1_gsync_set_cbk (struct rpc_req *req, struct iovec *iov, switch (rsp.type) { case GF_GSYNC_OPTION_TYPE_START: - cli_out ("Starting " GEOREP " session between %s & %s" - " has been successful", rsp.master, rsp.slave); - break; - case GF_GSYNC_OPTION_TYPE_STOP: - cli_out ("Stopping " GEOREP " session between %s & %s" - " has been successful", rsp.master, rsp.slave); + if (dict_get_str (dict, "master", &master) != 0) + master = "???"; + if (dict_get_str (dict, "slave", &slave) != 0) + slave = "???"; + + cli_out ("%s " GEOREP " session between %s & %s" + " has been successful", + rsp.type == GF_GSYNC_OPTION_TYPE_START ? + "Starting" : "Stopping", + master, slave); break; case GF_GSYNC_OPTION_TYPE_CONFIG: - ret = gf_cli3_1_gsync_config_command (rsp); + ret = gf_cli3_1_gsync_config_command (dict); break; case GF_GSYNC_OPTION_TYPE_STATUS: diff --git a/rpc/xdr/src/cli1-xdr.c b/rpc/xdr/src/cli1-xdr.c index e0a1e1075..e525bb755 100644 --- a/rpc/xdr/src/cli1-xdr.c +++ b/rpc/xdr/src/cli1-xdr.c @@ -749,20 +749,8 @@ xdr_gf1_cli_gsync_set_rsp (XDR *xdrs, gf1_cli_gsync_set_rsp *objp) return FALSE; if (!xdr_int (xdrs, &objp->type)) return FALSE; - if (!xdr_string (xdrs, &objp->op_name, ~0)) - return FALSE; - if (!xdr_string (xdrs, &objp->subop, ~0)) - return FALSE; - if (!xdr_string (xdrs, &objp->master, ~0)) - return FALSE; - if (!xdr_string (xdrs, &objp->slave, ~0)) - return FALSE; - if (!xdr_string (xdrs, &objp->gsync_prefix, ~0)) - return FALSE; - if (!xdr_string (xdrs, &objp->glusterd_workdir, ~0)) - return FALSE; - if (!xdr_bytes (xdrs, (char **)&objp->status_dict.status_dict_val, - (u_int *) &objp->status_dict.status_dict_len, ~0)) + if (!xdr_bytes (xdrs, (char **)&objp->dict.dict_val, + (u_int *) &objp->dict.dict_len, ~0)) return FALSE; return TRUE; diff --git a/rpc/xdr/src/cli1-xdr.h b/rpc/xdr/src/cli1-xdr.h index 5b6bfd8f1..42e5cbff8 100644 --- a/rpc/xdr/src/cli1-xdr.h +++ b/rpc/xdr/src/cli1-xdr.h @@ -474,16 +474,10 @@ struct gf1_cli_gsync_set_rsp { int op_errno; char *op_errstr; int type; - char *op_name; - char *subop; - char *master; - char *slave; - char *gsync_prefix; - char *glusterd_workdir; struct { - u_int status_dict_len; - char *status_dict_val; - } status_dict; + u_int dict_len; + char *dict_val; + } dict; }; typedef struct gf1_cli_gsync_set_rsp gf1_cli_gsync_set_rsp; diff --git a/rpc/xdr/src/cli1-xdr.x b/rpc/xdr/src/cli1-xdr.x index 154a2c8e3..4b15dcd29 100644 --- a/rpc/xdr/src/cli1-xdr.x +++ b/rpc/xdr/src/cli1-xdr.x @@ -338,13 +338,7 @@ struct gf1_cli_gsync_set_rsp { int op_errno; string op_errstr<>; int type; - string op_name<>; - string subop<>; - string master<>; - string slave<>; - string gsync_prefix<>; - string glusterd_workdir<>; - opaque status_dict<>; + opaque dict<>; }; struct gf1_cli_stats_volume_req { diff --git a/xlators/mgmt/glusterd/src/glusterd-rpc-ops.c b/xlators/mgmt/glusterd/src/glusterd-rpc-ops.c index 65ccec4d4..bee892873 100644 --- a/xlators/mgmt/glusterd/src/glusterd-rpc-ops.c +++ b/xlators/mgmt/glusterd/src/glusterd-rpc-ops.c @@ -259,22 +259,12 @@ glusterd_op_send_cli_response (glusterd_op_t op, int32_t op_ret, { int type = 0; char *str = NULL; - char *master = NULL; - char *slave = NULL; - char *op_name = NULL; - char *subop = NULL; gf1_cli_gsync_set_rsp rsp = {0,}; ctx = op_ctx; rsp.op_ret = op_ret; rsp.op_errno = op_errno; rsp.op_errstr = ""; - rsp.op_name = ""; - rsp.subop = ""; - rsp.master = ""; - rsp.slave = ""; - rsp.glusterd_workdir = conf->workdir; - rsp.gsync_prefix = GSYNCD_PREFIX; if (ctx) { ret = dict_get_str (ctx, "errstr", &str); if (ret == 0) @@ -282,27 +272,15 @@ glusterd_op_send_cli_response (glusterd_op_t op, int32_t op_ret, ret = dict_get_int32 (ctx, "type", &type); if (ret == 0) rsp.type = type; - ret = dict_get_str (ctx, "master", &master); - if (ret == 0) - rsp.master = master; - - ret = dict_get_str (ctx, "slave", &slave); - if (ret == 0) - rsp.slave = slave; - - if (type == GF_GSYNC_OPTION_TYPE_CONFIG) { - if (dict_get_str (ctx, "op_name", &op_name) == 0) - rsp.op_name = op_name; - if (dict_get_str (ctx, "subop", &subop) == 0) - rsp.subop = subop; - } + ret = dict_set_str (ctx, "glusterd_workdir", conf->workdir); + /* swallow error here, that will be re-triggered in cli */ ret = dict_allocate_and_serialize (ctx, - &rsp.status_dict.status_dict_val, - (size_t*)&rsp.status_dict.status_dict_len); + &rsp.dict.dict_val, + (size_t*)&rsp.dict.dict_len); if (ret == 0) - free_ptr = rsp.status_dict.status_dict_val; + free_ptr = rsp.dict.dict_val; } if (op_errstr) -- cgit