summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--cli/src/cli-rpc-ops.c5
-rw-r--r--xlators/mgmt/glusterd/src/glusterd-op-sm.c75
2 files changed, 48 insertions, 32 deletions
diff --git a/cli/src/cli-rpc-ops.c b/cli/src/cli-rpc-ops.c
index 34033b1ea93..794eab0178c 100644
--- a/cli/src/cli-rpc-ops.c
+++ b/cli/src/cli-rpc-ops.c
@@ -2603,8 +2603,9 @@ gf_cli3_1_gsync_config_command (gf1_cli_gsync_set_rsp rsp)
}
snprintf (cmd, PATH_MAX,
- GSYNCD_PREFIX"/gsyncd -c %s/"GSYNC_CONF" :%s %s --config-%s%s%s",
- rsp.glusterd_workdir, rsp.master, rsp.slave, rsp.subop,
+ 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);
/*
diff --git a/xlators/mgmt/glusterd/src/glusterd-op-sm.c b/xlators/mgmt/glusterd/src/glusterd-op-sm.c
index af0a4484c5a..b88370b2979 100644
--- a/xlators/mgmt/glusterd/src/glusterd-op-sm.c
+++ b/xlators/mgmt/glusterd/src/glusterd-op-sm.c
@@ -1875,6 +1875,7 @@ gsync_verify_config_options (dict_t *dict, char **op_errstr)
char **resopt = NULL;
int i = 0;
char *subop = NULL;
+ char *slave = NULL;
char *op_name = NULL;
char *op_value = NULL;
gf_boolean_t banned = _gf_true;
@@ -1885,6 +1886,12 @@ gsync_verify_config_options (dict_t *dict, char **op_errstr)
return -1;
}
+ if (dict_get_str (dict, "slave", &slave) != 0) {
+ gf_log ("", GF_LOG_WARNING, GEOREP" CONFIG: no slave given");
+ *op_errstr = gf_strdup ("Slave required");
+ return -1;
+ }
+
if (strcmp (subop, "get-all") == 0)
return 0;
@@ -2387,10 +2394,15 @@ glusterd_op_stage_gsync_set (dict_t *dict, char **op_errstr)
goto out;
}
- if (type == GF_GSYNC_OPTION_TYPE_STATUS) {
+ switch (type) {
+ case GF_GSYNC_OPTION_TYPE_STATUS:
ret = glusterd_verify_gsync_status_opts (dict, op_errstr);
goto out;
+ case GF_GSYNC_OPTION_TYPE_CONFIG:
+ ret = gsync_verify_config_options (dict, op_errstr);
+
+ goto out;
}
ret = glusterd_op_gsync_args_get (dict, op_errstr, &volname, &slave);
@@ -2412,22 +2424,13 @@ glusterd_op_stage_gsync_set (dict_t *dict, char **op_errstr)
case GF_GSYNC_OPTION_TYPE_START:
ret = glusterd_op_verify_gsync_start_options (volinfo, slave,
op_errstr);
- if (ret)
- goto out;
break;
case GF_GSYNC_OPTION_TYPE_STOP:
ret = glusterd_op_verify_gsync_running (volinfo, slave,
op_errstr);
- if (ret)
- goto out;
- break;
- case GF_GSYNC_OPTION_TYPE_CONFIG:
- ret = gsync_verify_config_options (dict, op_errstr);
- if (ret < 0)
- goto out;
break;
}
- ret = 0;
+
out:
return ret;
}
@@ -4093,8 +4096,9 @@ glusterd_gsync_configure (glusterd_volinfo_t *volinfo, char *slave,
char *subop = NULL;
char *q1 = NULL;
char *q2 = NULL;
+ char *cm = NULL;
+ char *master = NULL;
- GF_ASSERT (volinfo);
GF_ASSERT (slave);
GF_ASSERT (op_errstr);
@@ -4132,18 +4136,26 @@ glusterd_gsync_configure (glusterd_volinfo_t *volinfo, char *slave,
goto out;
}
- ret = snprintf (cmd, 1024, GSYNCD_PREFIX"/gsyncd -c %s/"GSYNC_CONF" :%s %s"
+ if (volinfo) {
+ cm = ":";
+ master = volinfo->volname;
+ } else {
+ cm = "";
+ master = "";
+ }
+
+ ret = snprintf (cmd, 1024, GSYNCD_PREFIX"/gsyncd -c %s/"GSYNC_CONF" %s%s %s"
" --config-%s %s" "%s%s%s", priv->workdir,
- volinfo->volname, slave, subop, op_name,
+ cm, master, slave, subop, op_name,
q1, op_value, q2);
ret = system (cmd);
if (ret) {
gf_log ("", GF_LOG_WARNING, "gsyncd failed to "
"%s %s option for %s %s peers",
- subop, op_name, volinfo->volname, slave);
+ subop, op_name, master, slave);
gf_asprintf (op_errstr, GEOREP" config-%s failed for %s %s",
- subop, volinfo->volname, slave);
+ subop, master, slave);
goto out;
}
@@ -4151,7 +4163,7 @@ glusterd_gsync_configure (glusterd_volinfo_t *volinfo, char *slave,
gf_asprintf (op_errstr, "config-%s successful", subop);
out:
- if (!ret) {
+ if (!ret && volinfo) {
ret = glusterd_check_restart_gsync_session (volinfo, slave);
if (ret)
*op_errstr = gf_strdup ("internal error");
@@ -4528,18 +4540,27 @@ glusterd_op_gsync_set (dict_t *dict, char **op_errstr, dict_t *rsp_dict)
}
- ret = dict_get_str (dict, "master", &volname);
+ ret = dict_get_str (dict, "slave", &slave);
if (ret < 0)
goto out;
- ret = dict_get_str (dict, "slave", &slave);
- if (ret < 0)
+ if (dict_get_str (dict, "master", &volname) == 0) {
+ ret = glusterd_volinfo_find (volname, &volinfo);
+ if (ret) {
+ gf_log ("", GF_LOG_WARNING, "Volinfo for %s (master) not found",
+ volname);
+ goto out;
+ }
+ }
+
+ if (type == GF_GSYNC_OPTION_TYPE_CONFIG) {
+ ret = glusterd_gsync_configure (volinfo, slave, dict,
+ op_errstr);
goto out;
+ }
- ret = glusterd_volinfo_find (volname, &volinfo);
- if (ret) {
- gf_log ("", GF_LOG_WARNING, "Volinfo for %s (master) not found",
- volname);
+ if (!volinfo) {
+ ret = -1;
goto out;
}
@@ -4586,12 +4607,6 @@ glusterd_op_gsync_set (dict_t *dict, char **op_errstr, dict_t *rsp_dict)
}
- if (type == GF_GSYNC_OPTION_TYPE_CONFIG) {
- ret = glusterd_gsync_configure (volinfo, slave, dict,
- op_errstr);
- goto out;
- }
-
out:
gf_log ("", GF_LOG_DEBUG,"Returning %d", ret);
return ret;