summaryrefslogtreecommitdiffstats
path: root/xlators/mgmt
diff options
context:
space:
mode:
authorKotresh HR <khiremat@redhat.com>2016-07-12 00:39:31 +0530
committerAtin Mukherjee <amukherj@redhat.com>2016-07-13 08:02:54 -0700
commit1b998788ece8c8b52657e8b9aae65d3279690c5b (patch)
tree203e192120ec9f8536eaf50dd729bbc867d4f396 /xlators/mgmt
parent4768760d5eb0ee8a0251e7776ed03d130c747164 (diff)
glusterd: Fix gsyncd upgrade issue
Problem: gluster upgrade is not generating new volfiles Cause: During upgrade, "glusterd --xlator-option *.upgrade=on -N" is run to generate new volfiles. It is run post 'glusterfs' rpm installation. The above command fails during upgrade if geo-replication is installed. This is because on glusterd start 'gsyncd' binary is called to configure geo-replication related stuff. Since 'glusterfs' rpm is installed prior to 'geo-rep' rpm, the 'gsyncd' binary used to glusterd upgrade command is of old version and hence it fails before generating new volfiles. Solution: Don't call geo-replication configure during upgrade/downgrade. Geo-replication configuration happens during start of glusterd after upgrade. Change-Id: Id58ea44ead9f69982f86fb68dc5b9ee3f6cd11a1 BUG: 1355628 Signed-off-by: Kotresh HR <khiremat@redhat.com> Reviewed-on: http://review.gluster.org/14898 Reviewed-by: Atin Mukherjee <amukherj@redhat.com> Smoke: Gluster Build System <jenkins@build.gluster.org> CentOS-regression: Gluster Build System <jenkins@build.gluster.org> NetBSD-regression: NetBSD Build System <jenkins@build.gluster.org>
Diffstat (limited to 'xlators/mgmt')
-rw-r--r--xlators/mgmt/glusterd/src/glusterd-utils.c32
-rw-r--r--xlators/mgmt/glusterd/src/glusterd-utils.h4
-rw-r--r--xlators/mgmt/glusterd/src/glusterd.c61
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;