diff options
-rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-utils.c | 32 | ||||
-rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-utils.h | 4 | ||||
-rw-r--r-- | xlators/mgmt/glusterd/src/glusterd.c | 61 |
3 files changed, 66 insertions, 31 deletions
diff --git a/xlators/mgmt/glusterd/src/glusterd-utils.c b/xlators/mgmt/glusterd/src/glusterd-utils.c index cd53087e6f7..6461ffb2cdb 100644 --- a/xlators/mgmt/glusterd/src/glusterd-utils.c +++ b/xlators/mgmt/glusterd/src/glusterd-utils.c @@ -6717,40 +6717,16 @@ glusterd_recreate_volfiles (glusterd_conf_t *conf) } int32_t -glusterd_handle_upgrade_downgrade (dict_t *options, glusterd_conf_t *conf) +glusterd_handle_upgrade_downgrade (dict_t *options, glusterd_conf_t *conf, + gf_boolean_t upgrade, gf_boolean_t downgrade) { int ret = 0; char *type = NULL; - gf_boolean_t upgrade = _gf_false; - gf_boolean_t downgrade = _gf_false; gf_boolean_t regenerate_volfiles = _gf_false; gf_boolean_t terminate = _gf_false; - ret = dict_get_str (options, "upgrade", &type); - if (!ret) { - ret = gf_string2boolean (type, &upgrade); - if (ret) { - gf_msg ("glusterd", GF_LOG_ERROR, 0, - GD_MSG_STR_TO_BOOL_FAIL, "upgrade option " - "%s is not a valid boolean type", type); - ret = -1; - goto out; - } - if (_gf_true == upgrade) - regenerate_volfiles = _gf_true; - } - - ret = dict_get_str (options, "downgrade", &type); - if (!ret) { - ret = gf_string2boolean (type, &downgrade); - if (ret) { - gf_msg ("glusterd", GF_LOG_ERROR, 0, - GD_MSG_STR_TO_BOOL_FAIL, "downgrade option " - "%s is not a valid boolean type", type); - ret = -1; - goto out; - } - } + if (_gf_true == upgrade) + regenerate_volfiles = _gf_true; if (upgrade && downgrade) { gf_msg ("glusterd", GF_LOG_ERROR, 0, diff --git a/xlators/mgmt/glusterd/src/glusterd-utils.h b/xlators/mgmt/glusterd/src/glusterd-utils.h index 66db618a08d..f4c4138829f 100644 --- a/xlators/mgmt/glusterd/src/glusterd-utils.h +++ b/xlators/mgmt/glusterd/src/glusterd-utils.h @@ -320,7 +320,9 @@ glusterd_get_local_brickpaths (glusterd_volinfo_t *volinfo, int32_t glusterd_recreate_bricks (glusterd_conf_t *conf); int32_t -glusterd_handle_upgrade_downgrade (dict_t *options, glusterd_conf_t *conf); +glusterd_handle_upgrade_downgrade (dict_t *options, glusterd_conf_t *conf, + gf_boolean_t upgrade, + gf_boolean_t downgrade); int glusterd_add_brick_detail_to_dict (glusterd_volinfo_t *volinfo, diff --git a/xlators/mgmt/glusterd/src/glusterd.c b/xlators/mgmt/glusterd/src/glusterd.c index d5002dfe1f1..0f7bb05bde1 100644 --- a/xlators/mgmt/glusterd/src/glusterd.c +++ b/xlators/mgmt/glusterd/src/glusterd.c @@ -1286,8 +1286,52 @@ glusterd_svcs_build () priv->scrub_svc.build = glusterd_scrubsvc_build; priv->scrub_svc.build (&(priv->scrub_svc)); +} +static int +is_upgrade (dict_t *options, gf_boolean_t *upgrade) +{ + int ret = 0; + char *type = NULL; + + ret = dict_get_str (options, "upgrade", &type); + if (!ret) { + ret = gf_string2boolean (type, upgrade); + if (ret) { + gf_msg ("glusterd", GF_LOG_ERROR, 0, + GD_MSG_STR_TO_BOOL_FAIL, "upgrade option " + "%s is not a valid boolean type", type); + ret = -1; + goto out; + } + } + ret = 0; +out: + return ret; } + +static int +is_downgrade (dict_t *options, gf_boolean_t *downgrade) +{ + int ret = 0; + char *type = NULL; + + ret = dict_get_str (options, "downgrade", &type); + if (!ret) { + ret = gf_string2boolean (type, downgrade); + if (ret) { + gf_msg ("glusterd", GF_LOG_ERROR, 0, + GD_MSG_STR_TO_BOOL_FAIL, "downgrade option " + "%s is not a valid boolean type", type); + ret = -1; + goto out; + } + } + ret = 0; +out: + return ret; +} + /* * init - called during glusterd initialization * @@ -1314,6 +1358,8 @@ init (xlator_t *this) char *transport_type = NULL; char var_run_dir[PATH_MAX] = {0,}; int32_t workers = 0; + gf_boolean_t upgrade = _gf_false; + gf_boolean_t downgrade = _gf_false; #ifndef GF_DARWIN_HOST_OS { @@ -1718,10 +1764,20 @@ init (xlator_t *this) if (ret) goto out; - ret = configure_syncdaemon (conf); + ret = is_upgrade (this->options, &upgrade); + if (ret) + goto out; + + ret = is_downgrade (this->options, &downgrade); if (ret) goto out; + if (!upgrade && !downgrade) { + ret = configure_syncdaemon (conf); + if (ret) + goto out; + } + /* Restoring op-version needs to be done before initializing the * services as glusterd_svc_init_common () invokes * glusterd_conn_build_socket_filepath () which uses MY_UUID macro. @@ -1753,7 +1809,8 @@ init (xlator_t *this) if (ret < 0) goto out; - ret = glusterd_handle_upgrade_downgrade (this->options, conf); + ret = glusterd_handle_upgrade_downgrade (this->options, conf, upgrade, + downgrade); if (ret) goto out; |