diff options
author | Atin Mukherjee <amukherj@redhat.com> | 2018-01-03 14:29:51 +0530 |
---|---|---|
committer | Atin Mukherjee <amukherj@redhat.com> | 2018-01-05 07:31:43 +0000 |
commit | 01caa839ebda29c2fe209c4767626f2f49ea3e71 (patch) | |
tree | 01f96fa7a434d83a5ae87119606e197dd42865dc /xlators/mgmt/glusterd/src/glusterd-server-quorum.c | |
parent | 60a992e69a7cf5a588f5139709d325125d6f04fb (diff) |
glusterd: connect to an existing brick process when qourum status is NOT_APPLICABLE_QUORUM
First of all, this patch reverts commit 635c1c3 as the same is causing a
regression with bricks not coming up on time when a node is rebooted.
This patch tries to fix the problem in a different way by just trying to
connect to an existing running brick when quorum status is not
applicable.
Change-Id: I0efb5901832824b1c15dcac529bffac85173e097
BUG: 1509845
Signed-off-by: Atin Mukherjee <amukherj@redhat.com>
Diffstat (limited to 'xlators/mgmt/glusterd/src/glusterd-server-quorum.c')
-rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-server-quorum.c | 21 |
1 files changed, 19 insertions, 2 deletions
diff --git a/xlators/mgmt/glusterd/src/glusterd-server-quorum.c b/xlators/mgmt/glusterd/src/glusterd-server-quorum.c index e9eea850eaa..5448e0a0aac 100644 --- a/xlators/mgmt/glusterd/src/glusterd-server-quorum.c +++ b/xlators/mgmt/glusterd/src/glusterd-server-quorum.c @@ -316,6 +316,7 @@ glusterd_do_volume_quorum_action (xlator_t *this, glusterd_volinfo_t *volinfo, glusterd_brickinfo_t *brickinfo = NULL; gd_quorum_status_t quorum_status = NOT_APPLICABLE_QUORUM; gf_boolean_t follows_quorum = _gf_false; + gf_boolean_t quorum_status_unchanged = _gf_false; if (volinfo->status != GLUSTERD_STATUS_STARTED) { volinfo->quorum_status = NOT_APPLICABLE_QUORUM; @@ -343,9 +344,10 @@ glusterd_do_volume_quorum_action (xlator_t *this, glusterd_volinfo_t *volinfo, * the bricks that are down are brought up again. In this process it * also brings up the brick that is purposefully taken down. */ - if (quorum_status != NOT_APPLICABLE_QUORUM && - volinfo->quorum_status == quorum_status) + if (volinfo->quorum_status == quorum_status) { + quorum_status_unchanged = _gf_true; goto out; + } if (quorum_status == MEETS_QUORUM) { gf_msg (this->name, GF_LOG_CRITICAL, 0, @@ -379,6 +381,7 @@ glusterd_do_volume_quorum_action (xlator_t *this, glusterd_volinfo_t *volinfo, { ret = glusterd_brick_start (volinfo, brickinfo, + _gf_false, _gf_false); } pthread_mutex_unlock (&brickinfo->restart_mutex); @@ -408,6 +411,20 @@ glusterd_do_volume_quorum_action (xlator_t *this, glusterd_volinfo_t *volinfo, } } out: + if (quorum_status_unchanged) { + list_for_each_entry (brickinfo, &volinfo->bricks, brick_list) { + if (!glusterd_is_local_brick (this, volinfo, brickinfo)) + continue; + ret = glusterd_brick_start (volinfo, brickinfo, + _gf_false, _gf_true); + if (ret) { + gf_msg (this->name, GF_LOG_ERROR, 0, + GD_MSG_BRICK_DISCONNECTED, "Failed to " + "connect to %s:%s", brickinfo->hostname, + brickinfo->path); + } + } + } return; } |