diff options
-rw-r--r-- | cli/src/cli3_1-cops.c | 34 | ||||
-rw-r--r-- | rpc/xdr/src/cli1-xdr.c | 22 | ||||
-rw-r--r-- | rpc/xdr/src/cli1-xdr.h | 5 | ||||
-rw-r--r-- | rpc/xdr/src/cli1.x | 5 | ||||
-rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-op-sm.c | 32 |
5 files changed, 91 insertions, 7 deletions
diff --git a/cli/src/cli3_1-cops.c b/cli/src/cli3_1-cops.c index 612b04724..9aa4c2fb5 100644 --- a/cli/src/cli3_1-cops.c +++ b/cli/src/cli3_1-cops.c @@ -2397,6 +2397,39 @@ out: } int +gsync_get_command (gf1_cli_gsync_set_rsp rsp) +{ + char cmd[1024] = {0,}; + + if (rsp.op_ret < 0) + return 0; + + if (!rsp.gsync_prefix || !rsp.master || !rsp.slave) + return -1; + + if (rsp.type == GF_GSYNC_OPTION_TYPE_CONFIG_GET) { + if (!rsp.op_name) + return -1; + + snprintf (cmd, 1024, "%s/gsyncd.py %s %s --config-get %s ", + rsp.gsync_prefix, rsp.master, rsp.slave, + rsp.op_name); + system (cmd); + goto out; + } + if (rsp.type == GF_GSYNC_OPTION_TYPE_CONFIG_GET_ALL) { + snprintf (cmd, 1024, "%s/gsyncd.py %s %s --config-get-all ", + rsp.gsync_prefix, rsp.master, rsp.slave); + + system (cmd); + + goto out; + } +out: + return 0; +} + +int gf_cli3_1_gsync_set_cbk (struct rpc_req *req, struct iovec *iov, int count, void *myframe) { @@ -2422,6 +2455,7 @@ gf_cli3_1_gsync_set_cbk (struct rpc_req *req, struct iovec *iov, else cli_out ("command executed successfully"); + gsync_get_command (rsp); out: ret = rsp.op_ret; diff --git a/rpc/xdr/src/cli1-xdr.c b/rpc/xdr/src/cli1-xdr.c index a8da98e97..3a2f6a421 100644 --- a/rpc/xdr/src/cli1-xdr.c +++ b/rpc/xdr/src/cli1-xdr.c @@ -661,11 +661,21 @@ xdr_gf1_cli_gsync_set_req (XDR *xdrs, gf1_cli_gsync_set_req *objp) bool_t xdr_gf1_cli_gsync_set_rsp (XDR *xdrs, gf1_cli_gsync_set_rsp *objp) { - if (!xdr_int (xdrs, &objp->op_ret)) - return FALSE; - if (!xdr_int (xdrs, &objp->op_errno)) - return FALSE; - if (!xdr_string (xdrs, &objp->op_errstr, ~0)) - return FALSE; + if (!xdr_int (xdrs, &objp->op_ret)) + return FALSE; + if (!xdr_int (xdrs, &objp->op_errno)) + return FALSE; + if (!xdr_string (xdrs, &objp->op_errstr, ~0)) + 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->master, ~0)) + return FALSE; + if (!xdr_string (xdrs, &objp->slave, ~0)) + return FALSE; + if (!xdr_string (xdrs, &objp->gsync_prefix, ~0)) + return FALSE; return TRUE; } diff --git a/rpc/xdr/src/cli1-xdr.h b/rpc/xdr/src/cli1-xdr.h index 3f77c9e9c..c47494312 100644 --- a/rpc/xdr/src/cli1-xdr.h +++ b/rpc/xdr/src/cli1-xdr.h @@ -415,6 +415,11 @@ struct gf1_cli_gsync_set_rsp { int op_ret; int op_errno; char *op_errstr; + int type; + char *op_name; + char *master; + char *slave; + char *gsync_prefix; }; typedef struct gf1_cli_gsync_set_rsp gf1_cli_gsync_set_rsp; diff --git a/rpc/xdr/src/cli1.x b/rpc/xdr/src/cli1.x index 1bc07a14e..97c50f6fd 100644 --- a/rpc/xdr/src/cli1.x +++ b/rpc/xdr/src/cli1.x @@ -300,4 +300,9 @@ struct gf1_cli_gsync_set_rsp { int op_ret; int op_errno; string op_errstr<>; + int type; + string op_name<>; + string master<>; + string slave<>; + string gsync_prefix<>; }; diff --git a/xlators/mgmt/glusterd/src/glusterd-op-sm.c b/xlators/mgmt/glusterd/src/glusterd-op-sm.c index 3a2fbd44c..5adecef83 100644 --- a/xlators/mgmt/glusterd/src/glusterd-op-sm.c +++ b/xlators/mgmt/glusterd/src/glusterd-op-sm.c @@ -5684,21 +5684,51 @@ glusterd_op_send_cli_response (int32_t op, int32_t op_ret, } case GD_MGMT_CLI_GSYNC_SET: { + int config_type; char *str = NULL; + char *master = NULL; + char *slave = NULL; + char *op_name = 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.master = ""; + rsp.slave = ""; + rsp.gsync_prefix = gf_strdup (GSYNCD_PREFIX); if (ctx) { ret = dict_get_str (ctx, "errstr", &str); if (ret == 0) rsp.op_errstr = gf_strdup (str); + ret = dict_get_int32 (ctx, "config_type", + &config_type); + if (ret == 0) + rsp.type = config_type; + ret = dict_get_str (ctx, "master", + &master); + if (ret == 0) + rsp.master = gf_strdup (master); + + ret = dict_get_str (ctx, "slave", + &slave); + if (ret == 0) + rsp.slave = gf_strdup (slave); + + if (config_type == + GF_GSYNC_OPTION_TYPE_CONFIG_GET) { + ret = dict_get_str (ctx, "op_name", + &op_name); + if (ret == 0) + rsp.op_name = + gf_strdup (op_name); + } } else if (op_errstr) rsp.op_errstr = op_errstr; cli_rsp = &rsp; - sfunc = gf_xdr_from_cli_sync_volume_rsp; + sfunc = gf_xdr_serialize_cli_gsync_set_rsp; break; } } |