diff options
author | Atin Mukherjee <amukherj@redhat.com> | 2016-01-14 11:11:45 +0530 |
---|---|---|
committer | Atin Mukherjee <amukherj@redhat.com> | 2016-02-17 01:46:31 -0800 |
commit | d132a4704d9b1df55c4c4e56a8389078b80897bd (patch) | |
tree | f0b974eaa200b3e6179e42969fd78b137b6a82fc /xlators/mgmt/glusterd/src/glusterd-server-quorum.c | |
parent | dcd1db157479bf9f9ac3c39fd3fd8cb0359c0779 (diff) |
glusterd: check quorum on restart bricks
Backport of http://review.gluster.org/#/c/13236/
While spawning bricks on a glusterd restart the quorum should be checked and
brick shouldn't be started if the volume doesn't meet quorum.
Change-Id: I21bf9055bdf38c53c81138cc204ba05a9ff6444f
BUG: 1305256
Signed-off-by: Atin Mukherjee <amukherj@redhat.com>
Reviewed-on: http://review.gluster.org/13236
Smoke: Gluster Build System <jenkins@build.gluster.com>
NetBSD-regression: NetBSD Build System <jenkins@build.gluster.org>
CentOS-regression: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Jeff Darcy <jdarcy@redhat.com>
Reviewed-on: http://review.gluster.org/13390
Reviewed-by: Gaurav Kumar Garg <ggarg@redhat.com>
Diffstat (limited to 'xlators/mgmt/glusterd/src/glusterd-server-quorum.c')
-rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-server-quorum.c | 29 |
1 files changed, 25 insertions, 4 deletions
diff --git a/xlators/mgmt/glusterd/src/glusterd-server-quorum.c b/xlators/mgmt/glusterd/src/glusterd-server-quorum.c index 8fa68cf3434..dbe13621638 100644 --- a/xlators/mgmt/glusterd/src/glusterd-server-quorum.c +++ b/xlators/mgmt/glusterd/src/glusterd-server-quorum.c @@ -189,8 +189,8 @@ _is_contributing_to_quorum (gd_quorum_contrib_t contrib) return _gf_false; } -static gf_boolean_t -_does_quorum_meet (int active_count, int quorum_count) +gf_boolean_t +does_quorum_meet (int active_count, int quorum_count) { return (active_count >= quorum_count); } @@ -291,7 +291,7 @@ does_gd_meet_server_quorum (xlator_t *this) if (ret) goto out; - if (!_does_quorum_meet (active_count, quorum_count)) { + if (!does_quorum_meet (active_count, quorum_count)) { goto out; } @@ -389,7 +389,7 @@ glusterd_do_quorum_action () if (ret) goto unlock; - if (_does_quorum_meet (active_count, quorum_count)) + if (does_quorum_meet (active_count, quorum_count)) meets = _gf_true; list_for_each_entry (volinfo, &conf->volumes, vol_list) { glusterd_do_volume_quorum_action (this, volinfo, meets); @@ -401,3 +401,24 @@ unlock: out: return ret; } + +/* ret = 1 represents quorum is met or quorum not applicable, + ret = 0 represents quorum is not met +*/ +int +check_quorum_for_brick_start (glusterd_volinfo_t *volinfo, + gf_boolean_t node_quorum) +{ + gf_boolean_t volume_quorum = _gf_false; + int ret = 0; + + volume_quorum = glusterd_is_volume_in_server_quorum (volinfo); + if (volume_quorum) { + if (node_quorum) + ret = 1; + } else { + ret = 1; + } + return ret; +} + |