summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--cli/src/cli-rpc-ops.c61
-rw-r--r--rpc/xdr/src/cli1-xdr.c16
-rw-r--r--rpc/xdr/src/cli1-xdr.h12
-rw-r--r--rpc/xdr/src/cli1-xdr.x8
-rw-r--r--xlators/mgmt/glusterd/src/glusterd-rpc-ops.c32
5 files changed, 46 insertions, 83 deletions
diff --git a/cli/src/cli-rpc-ops.c b/cli/src/cli-rpc-ops.c
index 794eab0178c..1a2c4ee94ed 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 e0a1e1075b1..e525bb755c5 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 5b6bfd8f1fe..42e5cbff860 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 154a2c8e3e4..4b15dcd2957 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 65ccec4d449..bee892873a2 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)